'php'에 해당되는 글 13건

  1. 2018.04.25 mysql dbdriver call store procedure in codeigniter(ci)
  2. 2016.05.31 json 동적 사용하기
  3. 2016.05.31 curl 없이 post 데이터 주고 받기
  4. 2013.10.22 php 에서 _POST 대신 바로 변수명으로 데이터 전송 EGPCS (Environment, Get, Post, Cookie, and Server)
  5. 2013.09.23 13 permission denied access
  6. 2013.08.16 PHP 및 httpd.conf 내용중 기본적인 체크
  7. 2013.08.14 php 에서 exec 호출 시 아무 에러 없이 실행 안되는 문제
  8. 2013.04.27 php 원단위 절삭 하기
  9. 2013.04.27 InnerHTML and Select option in IE
  10. 2013.04.27 무조건 알아야 할 PHP 속도 테스트 14 가지

mysql dbdriver call store procedure in codeigniter(ci)

php 2018.04.25 18:01

mysql dbdriver call store procedure in codeigniter(ci)


<!-- php -->

$sql = "CALL .sp(@out1);";

$this->db->query($sql);            

$query = $this->db->query("SELECT @out1");


$result_temp = array();


if($query->num_rows() > 0)

$result_temp = $query->result_array();




<!-- mysql -->

CREATE DEFINER=`directsend`@`223.130.121.254` PROCEDURE `sp`( 

OUT `last_id` INT

)

BEGIN


SET last_id = "test";


END$$


DELIMITER ;



<!-- codeigniter system/database/DB_active_rec.php -->


/**

* "Count All Results" query

*

* Generates a platform-specific query string that counts all records

* returned by an Active Record query.

*

* @param string

* @return string

*/

public function count_all_results($table = '')

{

if ($table != '')

{

$this->_track_aliases($table);

$this->from($table);

}


$sql = $this->_compile_select($this->_count_string . $this->_protect_identifiers('numrows'));


$query = $this->query($sql);

 

$result_temp = $query->result();


$array_temp = json_decode(json_encode($result_temp[0]), True);


$this->_reset_select();


if ($array_temp["numrows"] == 0)

{

return 0;

}


return (int) $array_temp["numrows"];

}





Trackbacks 0 : Comments 0

json 동적 사용하기

php 2016.05.31 12:31

[원문] http://fosun.tistory.com/entry/php4-php51X%EB%8C%80%EC%97%90%EC%84%9C-json-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0


if (!function_exists('json_decode')) {

    function json_decode($content, $assoc=false) {
        require_once 'classes/JSON.php';
        if ($assoc) {
            $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
        }
        else {
            $json = new Services_JSON;
        }
        return $json->decode($content);
    }
}

if (!function_exists('json_encode')) {
    function json_encode($content) {
        require_once 'classes/JSON.php';
        $json = new Services_JSON;
        return $json->encode($content);
    }
}


JSON.tar.gz


Trackbacks 0 : Comments 0

curl 없이 post 데이터 주고 받기

php 2016.05.31 12:27

[원문] http://stackoverflow.com/questions/8596311/how-to-make-a-post-request-without-curl


$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
$context  = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);


Trackbacks 0 : Comments 0

php 에서 _POST 대신 바로 변수명으로 데이터 전송 EGPCS (Environment, Get, Post, Cookie, and Server)

php 2013.10.22 16:23


php 에서 데이터 전송 시 $_POST['name'] 형태가 아닌 $name 형태로 바로 받기 위한 php.ini 설정


: php.ini 의 register_globals = on 으로 설정 후 아파치를 재시작 합니다. 




Trackbacks 0 : Comments 0

13 permission denied access

php 2013.09.23 16:02

[출처] http://prettymonkey02.tistory.com/1108

[출처] https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1731


SELinux관련 트러블슈팅

      이부분은 실제 트러블 슈팅이라 하기에는 애매한 부분이 있다
      정확하게 알고사용하면 문제된 부분이 없는데 모르기때문에 설정을 안하고 넘어가고
      잘못하고 넘어가기에 발생하는 분제들이다 .

      1) 심볼릭 링크상 관련 문제
  dereference가 되면서 보안상의 문제가 발생하기에 읽어들 일 수 없는 경우가 발생한다 .
  # chcon -h [filename]

      2) 아파치의 403에러
보통 홈디렉토리를 옮기거나 기본경로가 아닐때
                그리고 백업대이터를 이용하여 복구하였을때 많이 나타나는현상입니다
이경우 보안태그 또는 라벨링이 정상적으로 붙지않아 발생하는 경우이다

Context 설정을 설정파일상에 적용되어 있는 보안태그 또는 라벨링을 복원해주는 방법이다
# restorecon -rv /home

단 이경우에는 기존의 템플릿이나 설정파일에 설정이 되어있어야 가능하다 .

템플릿이나 설정파일을 직접 수정하기에 문제 있는 경우
# chcon -R -t httpd_sys_content_t /home/locli/public_html 


Trackbacks 0 : Comments 0

PHP 및 httpd.conf 내용중 기본적인 체크

php 2013.08.16 13:40


[출처] http://l2j.co.kr/2433


참고 : http://www.ibm.com/developerworks/kr/library/l-tune-lamp-2.html

max_execution_time얼마나 많은 CPU-초를 스크립트가 소비하는지를 지정30
max_input_time얼마나 오랫동안(초) 스크립트가 입력 자료를 기다릴지를 지정60
memory_limit얼마나 많은 메모리를(바이트) 죽기 전에 스크립트가 소비할지를 지정32M
output_buffering얼마나 많은 자료를(바이트) 클라이언트에게 전달하기 전에 버퍼에 저장할지를 지정4096


Listing 1. prefork MPM을 위한 환경 설정

                
StartServers       50
MinSpareServers   15
MaxSpareServers   30
MaxClients       225
MaxRequestsPerChild  4000


Listing 2. 루트 디렉터리에 적용한 디렉터리 컨테이너

                
<Directory />
    AllowOverride None
    Options FollowSymLinks
</Directory>


Listing 3. 사용자 디렉터리로 FollowSymLinks를 제한하기

                
<Directory />
   Options FollowSymLinks
</Directory>

<Directory /home/*/public_html>
   Options -FollowSymLinks
</Directory>


Listing 4. .htaccess 환경 설정을 httpd.conf로 옮기기

                
<Directory /home/user/public_html/project/>
  AuthUserFile /home/user/.htpasswd
  AuthName "uber secret project"
  AuthType basic
  Require valid-user
</Directory>


Listing 5. .htaccess 점검 범위를 줄이기

                
<Directory />
  AllowOverrides None
</Directory>

<Directory /home/*/public_html>
  AllowOverrides AuthConfig
</Directory>


php.ini

# vi /usr/local/php/lib/php.ini

expose_php = Off
post_max_size = 200M
allow_url_fopen = Off
date.timezone = "Asia/Seoul"
open_basedir = "/tmp:/home/"
disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
memory_limit=64M ; 32M 일 경우 XE Core 쉬운설치시 문제가 발생할 수 있습니다

Apache 연동

# vi /usr/locala/apache/conf/httpd.conf

&lt;ifmodule mime_module&gt; ... AddType application/x-httpd-php .php # 알아보기 쉬운데 아무데나 (html 파일도 적용하려면 문장끝에 '. html' 추가) ... &lt;/ifmodule&gt;


설정 인자권장값요약 설명
register_globalsOff이 값을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)을 무조건 전역(Global)변수로 다루게 됩니다. 전역 변수가 고전적인 C 프로그램에서 얼마나 많은 버그를 발생시켰는지 상기한다면, 이 값을 Off로 설정하는 것이 왜 바람직한지 짐작할 수 있을 것입니다. 전역 변수는 프로그램의 동작 중 어디서나 변수값이 바뀔 수 있기 때문에, 웹 프로그램의 인자 조작, 예기치 못한 오동작 등 다양한 보안 문제가 발생할 수 있습니다. PHP 4.2.0 이후로는 보안상의 문제를 고려해 디폴트로 Off로 설정되어 나오지만, 아직 많은 프로그램이 On 상태에서만 작동하도록 개발되어 있어 서버 관리자들이 On으로 변경하는 경우가 많습니다. On 값에 의존하는 프로그램이 있으면 개발자에게 해당 문제를 알리고 수정을 요구하시는 것이 바람직합니다.
safe_modeOn이 값을 On으로 설정하면 PHP에 의한 파일 액세스 시 권한을 점검합니다. 웹 프로그램이 /etc/passwd 등 주요 시스템 파일을 액세스 하지 못하도록 제한할 수 있으나, 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.
safe_mode_gidOff위의 설정과 함께 파일 액세스 시 권한을 점검합니다. 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.
expose_phpOff웹 브라우저의 요청에 대해 PHP 정보를 보내지 않습니다. 그러나 PHP 확장자 설정을 변경하는 등 추가적인 조치를 취하지 않는다면, 여러분이 PHP를 사용 중이라는 사실이 손쉽게 노출될 수 있으므로 보안상 큰 도움이 되지 않습니다.
file_uploadsOff해당 사이트의 PHP 프로그램들이 파일 업로드를 필요로 하지 않는다면 이 값을 Off로 설정하여, 파일 업로드 공격의 발생 가능성을 낮출 필요가 있습니다. 파일 업로드를 통한 사이트 장악은 매우 빈번하게 발생합니다.
allow_url_fopenOff이 옵션을 On으로 설정하면 파일 액세스 시 외부 사이트의 파일을 불러올 수 있습니다. 이 기능은 분산 컴퓨팅과 개발, 관리 측면에서 매우 편리하지만, 외부 공격자에 의해 서버를 침탈당하게 되는 주요 원인이 되어 왔습니다. 특히 include(), require() 계열의 함수 사용시 심각한 보안 상의 문제를 유발하게 됩니다. 특수한 경우를 제외하고는 이 기능이 필요치 않으므로 이 옵션을 반드시 Off로 설정하시기 바랍니다.
magic_quotes_gpcOn이 옵션을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)에 단일 인용 부호('), 이중 인용 부호(&quot;), 백슬래쉬(\), 널문자(NUL)가 포함된 경우 자동으로 해당 문자 앞에 백슬래쉬를 추가하여 특수 문자 처리를 합니다. 이로 인해 웹 프로그램의 인자를 변경하는 SQL 구문 삽입(injection) 공격의 성공률을 낮춰줍니다. 이 값을 Off로 설정하면 /etc/passwd%00 과 같이 널 문자를 사용해 시스템 상의 임의의 파일을 열람할 수 있으니 반드시 On으로 설정하여야 합니다.
magic_quotes_sybaseOffSybase 사용자의 정상적인 DB 접속을 위해 만들어진 기능이지만, 이 기능은 magic_quotes_gpc 설정을 무력화합니다. 여러분이 Sybase 사용자가 아니라면 반드시 이 값을 Off로 설정하여야 합니다.
Sybase 사용자는 PHP가 입력으로 받아들이는 모든 변수에 대해 addslashes() 함수를 사용하여 명시적으로 특수 문자 처리를 하여야 합니다.
open_basedir디렉터리이 옵션에 적절한 디렉터리를 설정하면, PHP의 파일 액세스 시 지정된 디렉터리(및 하위 디렉터리)를 벗어난 파일은 액세스 할 수 없게 됩니다.
safe_mode_exec_dir디렉터리이 옵션을 지정하면 system(), exec(), passthru() 등 외부 명령어 실행 시 지정된 디렉터리에 존재하지 않는 프로그램은 실행할 수 없게 됩니다. 공격자가 임의로 업로드한 공격 도구나 wget, xterm 등 공격에 사용될 만한 명령어를 실행할 수 없도록 막을 수 있습니다.
display_errorsOff이 옵션을 On으로 설정하는 경우 PHP 실행 중 발생하는 에러 정보가 사용자 브라우저에 반환됩니다. 이 정보에는 웹 서버 상의 절대 경로, SQL 쿼리 등 공격자에게 유용한 정보가 포함되어 있으므로, 반드시 이 값을 Off로 설정하여야 합니다.
log_errorsOn이 옵션을 On으로 설정하는 경우 PHP 실행 중 발생하는 경고나 에러 정보를 error_log 에서 지정한 파일에 기록하게 됩니다. 해당 파일에 기록할 수 없는 경우 아파치 웹 서버의 에러 로그 파일에 기록하게 됩니다. 프로그램의 동작 상태 및 공격자의 공격 동향을 파악하기 위해서 반드시 On으로 설정하여야 합니다.
error_log파일명PHP 실행 중 발생하는 경고나 에러 정보를 기록할 파일을 지정하는 옵








## 일반적인 구성


PHP 의 일부 일반 기능 및 내장된 기능들에 영향을 미치는 몇 가지 구성 매게변수들에 대하여 알아보기로 하겠습니다.


■ auto_append_file String


메인 파일 다음에 자동으로 분석되는 파일 이름을 String 에 지정한다.
이렇게 지정된 파일은 include() 함수로 호출된 것 처럼 포함된다.
특수값인 none 은 자동 추가 기능을 중지 시킨다.
만약 스크립트가 exit() 로 종료된다면 auto-append 작업이 수행되지 않는다.
이 명령어는 특정 웹 사이트에 정형화된 모습과 느낌을 주고자 PHP가 페이지를 생성할 때 유용하다.
이 스크립트는 각 페이지마다 꼬리말을 포함할 때 사용할 수 있다.


 


auto_append_file = "/path/to/script/footer.php"



■ auto_prepend_file String


메인 파일보다 먼저 자동으로 분석되는 파일 이름을 String 에 지정한다.
이렇게 지정된 파일은 include() 함수로 호출된 것 처럼 포함된다.
특수값인 none 은 auto-prepend 기능을 중지 시킨다.


이 명령어는 앞서의 스크립트에서처럼 동일한 종류의 시나리오에서 유용하다.
단지, 차이점이라면 모든 페이지에 표준 머리말을 생성하는 데 사용할 수있다는 점이다.


■ doc_root String


가상 파일 트리의 루트를 정의하며,
그 루트의 하위에 있는 파일들은 안전 모드에서 실행될때 PHP에 의해서만 서비스된다.
이 매개변수는 빈 값이 아닌 값을 가져야 하며, 그렇지 않은 경우에는 무시된다.


웹 서버의 실제 파일 시스템 트리의 특정한 하위 트리로 PHP를 제한하는 것은
보안상의 관점에서 본다면 매우 차이점이 많다.


■ engine Boolean


PHP가 아파치 모듈 버전인 경우에만 실제로 유용한 명령어이다.


디렉토리 단위로 또는 가상 서버 기반 단위로 PHP Paser 기능을 켜고 끄는 사이트에서 사용된다.
httpd.conf 파일의 적당한 위치에서 engine 를 On, Off 로 설정하면 PHP는 가능하게 되거나
불가능 하게 된다.


httpd.conf


 


<VirtualHost sample.com>
 ServerName www.sample.com
 DocumentRoot /home/sample/public_html


 php_value engine Off
</VirtualHost>



위와 같은 형식으로 사용할 수 있다.


■ open_basedir String


PHP 스크립트들이 특정한 디렉토리 트리나 디렉토리 트리 세트에 있는 파일들로만
엑세스 하도록 제한하기를 원하는 경우가 있을 것이다.
인수 String 은 엑세스를 허용하는 디렉토리나 디렉토리들의 리스트를 지정한다.
모든 상징적인 링크들이 사라지므로 이러한 제한 사항을 피하기 위해 symlink를 사용하는 것이 불가능하다.


특수값 '.' 은 스크립트가 저장되어 있는 디렉토리가 기본 디렉토리로 사용될 것이라는 의미한다.
Windows 의 경우에 String 에 여러개의 디렉토리들을 입력할때에는
각각의 디렉토리들을 콜론(:)으로 구분한다.
아파치 모듈인 경우, 상위 디렉토리들로부터의 open_basedir 경로는 이제 자동적으로 상속된다.
기본은 모든 파일들이 열리는 것을 허용하는 것이다.


■ gpc_order String


HTML 서식을 처리하는 PHP 스크립트들은 이러한 서식으로부터 변수들을 엑세스할 수 있다.
서식들은 GET, POST 메소드에 의해 제출될 것이다.
또한, 쿠키들도 변수들을 스크립트로 전달한다.
GET, POST 그리고 쿠키들로부터변수들이 분석되는 순서는 hpc_order 명령에 의해 주어진다.
인수 String 은 G, P 그리고 C 중에서 하나나 둘, 또는 셋 모두의 조합으로 이루어진다.


예를 들어, 만약 gpc_order = GCP 라면 COOKIE 변수와 동일한 이름의 POST 변수는 COOKIE 변수로서
더높은 우선순위를 가지게 되며, POST 변수는 무시된다.
이러한 순서는 GET,POST,COOKIE 변수 분석의 순서를 결정한다.


이 명령의 기본 설정값은 "GPC" 이다.


예를 들어, "GP" 로 설정되는 경우에 PHP는 쿠키들을 완전히 무시하고
어떤 GET 메소드 변수들을 동일한 이름의 POST 메소드 변수들을
동일한 이름의 POST 메소드 변수들로 겹쳐쓰기할 것 이다.


■ include_path String


require(), include(), fopen_with_path() 함수들이 파일들을 찾는 디렉토리들의 리스트를 지정한다.
대부분의 시스템에서 String 의 형식은 PATH 환경 변수와 유사하다.


즉, UNIX에서는 콜론(:)으로, Windows 에서는 세미콜론(;)으로 디렉토리들을 구분한다.


기본값은 현재 디렉토리를 의미하는 '.' 이다.


 


UNIX: "/path1:/path2"


include_path = ".:/php/includes"


Windows: "path1;path2"


include_path = ".;c:phpincludes"



■ max_execution_time Integer


파서에 의해 종료되기 전, 스크립트의 작업 허용 최대 시간을 초 단위로 설정한다.
이것은 무한 루프를 돌고 있는 스크립트들에 의해 서버가 다운되는 것을 방지한다.


■ memory_limit Integer


Integer 인수는 스크립트가 할당할 수 있는 메모리의 최대 용량을 바이트 단위로 설정한다.
이것은 잘못 작성된 스키립트가 서버의 메모리를 모두 잠식하는 것을 방지한다.


■ short_open_tag Boolean


PHP 스크립트들은 원래 <?php 와 ?> 태그 사이에 들어가지만,
단축 형식인 <? 와 ?> 태그 사이에 입력할 수도 있다.


만약 XML 지원기능을 사용한다면 이 옵션을 Off 로 설정해야 한다.
단축 태그가 XML 파서를 혼동하게 만드므로 XML 지원 기능을 사용하려면
원래의 형식으로만 스크립트를 사용해야 한다.


■ upload_tmp_dir String


인수 String 은 파일 업로드가 수행될 때 파일들을 저장하는 데 사용되는 임시디렉토리를 지정한다.
이 디렉토리는 사용자 PHP가 어떤 형식으로 수행되든지 간에 기록 가능해야 한다.
PHP 가 아파치 모듈인경우 아파치의 사용자 권한을 상속하며, 일반적으로 nobody 이다.


■ user_dir String


웹 서버는 일반적으로 각 사용자들이 자신의 홈 디렉토리들 아래에 자신의 웹 페이지들을
유지하는 것을 허용한다. (UNIX인 경우)
인수 String 은 PHP파일들을 위한 사용자의 홈 디렉토리에서 사용되는 디렉토리의 기본이름을 나타낸다.


예를 들어, 홈 디렉토리가 /home/okstart 인 사용자 okstart 가 있다고 가정하자.
만약 String 이 public_html 로 설정되었다면 그 사용자는 개인적인 스크립트들이나 페이지들을
/home/okstart/public_html 아래에 저장할 수있다.


## 전자메일 관련 구성


PHP 는 수많은 메일 엑세스 지원 기능들을 가지고 있다.
약간의 노력만 하면 IMAP(Interactive Mail Access Protocol)과 POP3(Post Office Protocol) 서버에 있는 전자메일을
엑세스하는 프로그램들을 작성할 수 있다.
그 기능들을 API 들을 통해 사용할 수 있지만, 행동을 설정하는 몇 가지 구성 파일 명령어들을 사용할 수도 있다.


■ SMTP String


이 명령어는 Windows 플랫폼상에 PHP를 설치한 경우에만 적용된다.


여기서 String 은 mail() 함수를 사용하여 메일을 전달하기 위해서 PHP 가 사용하는
SMTP 서버의 DNS 이름이나 IP 주소이다.


사용하는 서버(자신의 컴퓨터)에 SMTP 서버를 설치하였을 경우에는 localhost 를 입력하시고
그렇지 않을 경우에는 각각 사용하는 인터넷 라인의 ISP 업체의 SMTP 서버 주소를 입력합니다.


ISP별 SMTP서버는 다음과 같습니다.


 하이텔(Hitel): 
  smtp.hitel.net


 코넷(Kornet): 
  soback.kornet.net 
  mail.kornet.net 
  ppp.kornet.net


 천리안(Chollian): 
  mail.chollian.net 


 유니텔(Unitel): 
  203.241.132.90 


 나우누리(Nownuri): 
  mail.nownuri.net 


 아이프리(IFree): 
  mail.ifree.net 


 아이넷(I-net): 
  mail.nuri.net 


 두루넷(Thrunet): 
  smtp.korea.com 


 넷츠고(Netsgo): 
  netsgo.com 


 채널아이(Channel-i): 
  mail.channeli.net 


 신비로(Shinbiro): 
  mail.shinbiro.com 


 엘림넷(Elimnet): 
  elim.net 


 인터피아(Interpia): 
  pop3.interpia.net 


 키스코(Kisco): 
  203.233.144.1 


 미래텔(Miraetel): 
  miraetel.kornet.nm.kr 


 경기넷: 
  mail.kg21.net 


 하나로통신: 
  mail.hananet.net 


 에듀넷(Edunet): 
  edunet4u.net 


 보라넷: 
  mail.bora.net 


 드림라인: 
  mail.dreamx.net 


해당 되는 ISP 업체가 없거나 해당되지 않을 경우에는 공개 SMTP 서버를 사용하셔도 됩니다.


 공개 SMTP 서버: 
  203.252.32.3 
  211.40.177.184 
  211.45.135.11 
  210.182.173.132 
  211.32.116.33 
  210.119.132.13 
  163.152.3.17 
  sun.ms98.net 


메일 동작 확인 방법은 간단한 mail() 함수를 사용하는 프로그램을 이용해서 할 수 있습니다.


 


<?
 $to_mail = "메일주소";
 $to_title = "제목";
 $to_message = "메세지";
 
 $ret = mail($to_mail, $to_title, $to_message);


 if( $ret )
 {
  echo "메일 전송 성공";
 }
 else
 {
  echo "메일 전송 실패";
 }
?>



■ sendmail_from String


이 명령어는 Windows 플랫폼 상에서 PHP 를 설치한 경우에만 적용된다.


String 은 PHP 스크립트로부터 전달되는 메일에 사용되어야 하는 "From:" 메일 주소를 결정한다.


■ sendmail_path String


이 명령어는 UNIX 플랫폼 상에서 PHP 를 설치한 경우에만 적용된다.


String 은 시스템상에서 실행할 수 있는 sendmail 의 경로를 결정한다.
일반적으로, sendmail의 위치는 /usr/sbin/sendmail 이나 /usr/lib/sendmail (UNIX 상에서)이지만,
그 밖의 다른 위치에 설치한 경우에는 sendmail의 경로를 지정해야 한다.
sendmail과 유사한 qmail 도 이 명령어로 경로를 지정할 수 있다.


 


sendmail_path = "/usr/sbin/sendmail -t -i"


 


 



## 에러 메세지 관련


■ error_log String


String 은 스크립트에 의해(PHP 자체가 아닌) 생성된 오류들을 기록하는 파일을 지정한다.
만약 특정값 syslog 가 사용되었다면 오류들은 대신 시스템의 로거(logger)로 보내진다.


■ error_reporting Integer




AddType application/x-httpd-php .php : .php 확장자를 php 타입으로 실행

 

AddType application/x-httpd-php .html : .html 확장자를 php 타입으로 실행

 

AddType application/x-httpd-php .inc : .inc 확장자를 php 타입으로 실행

 

AddType application/x-httpd-php-source .phps : .phps 확장자들은 php 소스를 보게 한다.

 

AddHandler : 특정 파일 확장자는 처리기에 연결하거나 특정 파일 타입에 특정 동작 연결을 설정한다. 서버 안에 있거나 또는 action 명령을 사용해서 추가 가능한다.

 

Action : 매칭되는 파일이 불려질 때마다 해당 미디어 타입에 맞는 스크립트를 실행할 수 있다. 이 설정은 자주 사용되는 CGI 파일 프로세스에 대해 반복적으로 URL을 사용하지 않아도 된다.

 

MetaDir, MetaSuffix : MetaDir는 아파치 메타 정보 파일을 찾을 디렉토리 이름이다. 이 파일에는 문서를 보낼 때 추가할 추가 HTTP 헤더 정보가 있다. MetaSuffix는 메타 정보를 가지고 있는 파일의 접미어를 설정한다.

 

Customizable error response : 존재하지 않는 페이지를 요청 받을 경우 또는 해당 디렉토리의 퍼미션이 없을 경우 보여주는 에러 메시지 설정이다.

 

BrowserMatch : HTTP 응답 방식을 수정한다. 첫 번째 지시자는 넷스케이프 2.x와 유사한 브라우저에 대해 KeepAlive 기능을 사용하지 못하게 하는 설정이다. 두 번째 지시자는 HTTP/1.1을 잘못 구현하며 301, 302 응답에 대해 KeepAlive을 제대로 지원 못하는 MS익스플로러4.0ㅠ2를 위한 설정이다.

 

BrowserMatch : HTTP/1.1 응답도 제대로 처리하지 못해 HTTP/1.1 스팩을 위반하는 브라우저에 대해 HTTP/1.1 응답을 하지 않게 하는 설정이다.

 

erver-status, server info reports : 서버 상태 정보를 허용할 servername을 적어준다. server status 방법은 http://servername/server-status이다. 여기서 servername을 적절히 바꾸어 사용하면 된다. server info 방법은 http://servername/server-info이다.

 

버그 이용 방지 : 이전 1.1 버전에서 있던 버그를 악용하려는 사람이 있는데 #을 제거하면 버그를 이용한 공격이 있을 때 phf.apache.org상의 기록 스크립터로 방향 전환을 시키게 한다. 또 다른 방법은 직접 support/php_abuse_log.cgi 스크립트를 이용해 자신이 저장하는 것이다.

 

Proxy Server : 프록시 서버 사용을 설정하는 부분이다. 프록시 서버 모듈을 포함했을 경우 #을 제거하면 프록시 서버 사용이 가능하다.

 

ProxyVia : HTTP/1.1 <Via:> 헤더를 처리할지 여부를 설정하는 부분이다.

 

cache : 캐시 기능을 enable하기 위해서는 #을 제거한다

Trackbacks 0 : Comments 0

php 에서 exec 호출 시 아무 에러 없이 실행 안되는 문제

php 2013.08.14 14:36


[출처] http://findstar.tistory.com/76


php에서 exec를 통해서 외부 프로그램을 실행시

출력 메세지를 도통 확인할 수가 없었다.

권한 문제나, nobody의 실행 권한 문제, php.ini 의 safe_mode_exec_dir 설정도 모두 살펴보았지만

특별한 문제가 없었다.

이유는 해당 외부 프로그램이 stdout stderr을 사용하지 않는다는데 있었다.

php_ini  error_message 를 E_ALL 로 해두었으나, 나타나지 않음

httpd error_log 를 살펴보고서야 거기서 나타난 메세지들을 확인할 수 있었다.

출력되는 out 이 error_log로 연결되어 있었다는 소리.

ls 나 다른 기본적인 프로그램을 실행되는데 내가 수행하려는 curl은 안되었다.

마지막 exec($command) 에서 $command 에 .= "  2>&1 "; 를 추가해주니 되었음.

Trackbacks 0 : Comments 0

php 원단위 절삭 하기

php 2013.04.27 13:09

16335 -> 16330 으로 절삭

 

-> floor( 값 / 10 ) * 10; 

Trackbacks 0 : Comments 0

InnerHTML and Select option in IE

php 2013.04.27 13:09

InnerHTML and Select option in IE 3가지 방법

 

1. jQuery 를 사용 : 제일 심플 함

 

document.getElementById('id').innerHTML = '<option>1</option>';
-> $('#id').html('<option>1</option>');
 
2. MS 제안 방법
 
Div 개체를 사용하여 SELECT 요소의 래핑하고 Div 개체에 대해 innerHTML 속성을 설정
 
3. select_innerHTML 함수 정의하여 사용
var inner = "<option value='1'>Now</option> <option value='2'>work</option>"; 
select_innerHTML(document.getElementById("my_select"),inner);
->

function select_innerHTML(objeto,innerHTML){
    objeto.innerHTML = "";
    var selTemp = document.createElement("micoxselect");
    var opt;
    selTemp.id="micoxselect1";
    document.body.appendChild(selTemp);
    selTemp = document.getElementById("micoxselect1");
    selTemp.style.display="none";
    if(innerHTML.toLowerCase().indexOf("<option")<0){ 
        innerHTML = "<option>" + innerHTML + "</option>";
    }
    innerHTML = innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span");
    selTemp.innerHTML = innerHTML;
         
    for(var i=0;i<selTemp.childNodes.length;i++){
      var spantemp = selTemp.childNodes[i];
 
      if(spantemp.tagName){    
           opt = document.createElement("OPTION");
   
           if(document.all){ //IE
            objeto.add(opt);
           }else{
            objeto.appendChild(opt);
           }       
   
       //getting attributes
       for(var j=0; j<spantemp.attributes.length ; j++){
        var attrName = spantemp.attributes[j].nodeName;
        var attrVal = spantemp.attributes[j].nodeValue;
        if(attrVal){
         try{
          opt.setAttribute(attrName,attrVal);
          opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
         }catch(e){}
        }
       }
       //getting styles
       if(spantemp.style){
        for(var y in spantemp.style){
         try{opt.style[y] = spantemp.style[y];}catch(e){};
        }
       }
       //value and text
       opt.value = spantemp.getAttribute("value");
       opt.text = spantemp.innerHTML;
       //IE
       opt.selected = spantemp.getAttribute('selected');
       opt.className = spantemp.className;
      }
     
    }   
     document.body.removeChild(selTemp);
     selTemp = null;
}
Trackbacks 0 : Comments 0

무조건 알아야 할 PHP 속도 테스트 14 가지

php 2013.04.27 13:08

★ 무조건 알아야 할 PHP 속도 테스트 14 가지 ◆◇◆◇◆◇     


PHP로 코딩 함에 있어서 알아야 할 속도 테스트 입니다.
조금더 빠른 PHP 속도를 유지 하기 위한 것이죠 ^^

작은 것이 모여서, 대따 오랜 시간이 걸릴 수 가 있는 것 입니다. !!
되도록이면 속도가 빠른 것을 사용하시는 것이 좋습니다.

물론 함수 마다 기능 마다 장단이 있지만요....^^


다른 비교가 있으면 알려주셍 ^^ 답변 달아 주세용 ^^

계속 적으로 업글 됩니다. 현재 14가지 !!!!


==========================================================================
★ mysql 총 게시물 수 세기

$numresults=mysql_query("select code from $board");
$numrows=mysql_num_rows($numresults);
2초 이상 ...게시물 10만개

VS

$numresults=mysql_query("select count(code) as code from $board");
$row_num=mysql_fetch_array($numresults);
$numrows=$row_num[code];
0.2  ...게시물 10만개

아래것이 훠얼씬 빠름다..
도대체 mysql_num_row() 는 왜 만들어 놓은 것일까용???


==========================================================================
★ mysql_fetch_row  > mysql_fetch_array >>> mysql_result


입니다.

row 가 array 보다 약간 빠르고, result 보다는 훠얼씬 빠름당 ^^

row 는 불편한게 숫자로 칼럼을 불러와서 불편합니다.
array 가 약간 느리지만, 문자 칼럼을 불러 올 수 있으니 array 쓰는 것도 양호 ^^

아직도 mysql_result() 를 사용하시나요?

==========================================================================
★print , echo ,printf 함수 속도 비교
HTML 출력 >> echo > print >> printf


print 와 printf 함수는 복잡한곳에 적격이고, 약간 느리다.

echo 는 단순한곳에 적격이고...빠르다.
printf 는 형식화된 출력을 해주므로 그래도 좋죠 ^^

==========================================================================
★  인라인

 a.php
<?
$aa="sdsdsdsd";
echo ("<table>
 <td> $aa </td>
</table>");
?>

 위 랑..

 b.php
<? $aa="sdsdsdsd"; ?>
<table>
<td><? echo $aa; ?></td>
</table>

 랑 도대체 어케 코딩 하느냐죠 ?

솔직히 코딩은 a.php 가 편합니다.
<? ?> 를 한번 만 쓰니까 효율적일 수 있습니당..

그러나 아무리 아무리 PHP가 빠르다고 해도 HTML 이 더 빠릅니당.. !!!

쿠쿠쿠

b.php 처럼 코딩 하는 습관을 가지세용 ^^

==========================================================================
★ zend cache , APC ,Bware 캐쉬 비교
Zend cache > APC > Bware

zend cache 는 캐쉬 입니다. 울나라에서 포탈에서도 몇군데 사용하죠.
PHP 프로그램 변환 없이 속도를 빠르게 해 줍니다. ^^

zend cache 를 살 돈이 없으시다구용?
그러면 APC 나 zend optimizer 를 반드쉬 설치 하세용 !!

■ 그런디 Zend Cache 만한 무료 캐쉬가 나왔다고 합니당...^^
http://www.php -accelerator.co.uk/index.php ;


==========================================================================
★ ereg_replace , preg_replace 정규표현식
ereg_replace () 가 장난 아니게 느림다.
40개 정도 변환 하는데 1초나 걸려요.preg_replace 는 0.3초 정도요.

되도록이면 preg_replace() 를 사용하세요 !!!

www.php.net/preg_replace


==========================================================================
★ foreach , list 함수 속도 차이 35%

foreach($string as $a);  >>>  while(list(,$a) = each($string));

foreach() 를 사용하는 것이 35% 정도 빠릅니다...!!


==========================================================================
★mysql_connect Vs mysql_pconnect

서로 장단이 있다 합니다.

mysql_pconnect 가 더 빠르다고 합니다.
persistant

메뉴얼에 영구적인 이렇게 되어 있으니까요..
일정시간 동안 mysql 을 열어 놓기 때문에, 다시 열 필요가 없어서 빠르다고 합니다.

단점은 계속 열기 때문에 메모리를 많이 잡아 먹슴당...^^
mysql_pconnect 경우는 최소 메모리가 1G 이상 되어야 사용하시는 것이 좋습니다.

==========================================================================
★ 큰따옴표(") , 작은 따옴표(')

큰따옴표는 PHP가 파싱을 합니다. 그러나 작은 따옴표는 파싱을 하지 않습니다.
작은 따옴표를 사용하시는 것이 빠릅니다.

코딩시 echo ' test '.$aaa.' tood ';
요런식으로 하시는 게 가장 빠름당 !!

==========================================================================
★ mysql 데이터 저장 공간 크기 ?


id int(11) unsigned NOT NULL auto_increment,
   bbs smallint(5) unsigned NOT NULL,
   lens mediumint(8) unsigned NOT NULL,
 

int 도 무자게 많슴당..
각각의 크기에 맞게 하는 것이 속도가 빨라 집니당 ^^

not null 를 주는 것도 속도가 빨라 집니당..

작은 사이트 조회수 경우 1만을 넘기도 힘듭니다. 그럴 경우 smallint 를 사용하시면 됩니다.

==========================================================================
★ where 절에 모든 것은 인덱스를 걸어라 !!!
mysql 에서 쿼리시에 where 절에 사용되는 비교의 칼럼은 반드쉬 인덱스를 거세용 !!!

mysql 인덱스 가 여러 분들의 게시판 속도를 업 시켜 줍니당 !!


==========================================================================
★메인페이지에서 속도를 빠르게 하려면, .htm 으로 만드는 것이 좋습니다.

그러니까..제 사이트 페이지 오른쪽 에는 모두 최신 게시물로 디비를 불러오는 부분
입니다.

디비 연결은 부하를 줄 수 있습니다.

그러니까..이예는 사이트가 상당히 활성화된 사이트일 경우 입니다.

하루에 2번 정도 .htm 으로 만들어 페이지를 업시키는 것이 좋습니다.
아무리 PHP가 빨라도 HTML 보다는 빠르지 않습니다.. !!!

그러기 위해서는 ★cron 를 알아야 합니다 PHP강좌 게시판에서 cron 으로 검색하세용 !!
윈도우 사용자는 멀 쓰는지 잘 모르겠슴당...아시면 답글 부탁  ^^


==========================================================================
★ 초보자 Vs 전문가

www.zend.com 에서 제가 2000년 5월에 퍼온건데용 ^^ 
함 주석을 붙일까 해서용^^


Beginner vs Experienced  
Author:  Boaz Yahav  
Date  23/05/2000  

Beginner : echo "$var"; 
Experienced : echo $var; 


Beginner:echo "<a href=\" http://www.php.net\">PHP</a>";  ;
Experienced : ?><a href=" http://www.php.net">PHP</a><?  ... ?>  ;

◆ "(따옴표) 가 굉장히 중요한것이라는 한 대목이죵 ^^
전 보통의 경우 php 변수 값이 들어갈 경우는 초보자 처럼 쓰구요 ^^ 안들어 갈 경우 는 전문가 처럼 씀다.

Beginner : $a[0]=1; $a[1]=2; $a[2]=3; 
Experienced : $a = array(1,2,3, 1); 
둘다 사용하는 데요. 전문가 쪽이 편함다. ^^

Beginner : if($a>1) { $b=2; } else { $b=3; } 
Experienced : $b = ($a>1) ? 2:3; 
요건 완존히 소스 어렵게 짜는 넘이 최고 라는 소리 같네용 ^^
전문가 쪽것은 C 언어 에서 배웠는데도 역시 전 if 씀다. ^^

Beginner : $result=mysql_query(...); 
Experienced: $result=mysql_query(...) OR die  
        (mysql_error()); 

요즘 들어 새삼 전문가 쪽으로 씀다.^^
보통의 경우

$result=mysql_query(...) 
if (!$result)
{
 echo error()."<P>";
 echo errno();
}
이렇게 사용함다. ^^

or 이 설명이고 no 가 에러 번호 일 검다. ^^

==========================================================================
★MySQL,ADODB,PHPLib,PEAR 벤치마킹  

ADODB > PHPlib > PEAR
 
MySQL     1.14      -
ADODB     1.45     27%
PHPLib    1.60     40%
PEAR     2.87     152% (fetchInto)

MySQL,ADODB,PHPLib,PEAR  는 모두 데이터베이스 인가요? 당근 아닙니다.
MySQL만 데이터베이스 구요.
ADODB,PHPLib,PEAR 는 PHP 프로그램 입니다.

3개 다 MySQL연결을 편하게 하는 클래스 프로그램 입니다.
그런디 벤치 마킹 결과 MySQL 에서 직접 쿼리하는 것 다음으로 ADODB 가 뽑혔슴당 ^^

PEAR 가 굉장히 늦군요. PEAR DB 나 ADODB 를 사용해 보았는데, 움..역시나 ADODB 가 좋군요.
오라클, mysql , ms sql 연결시 1개의 API 만 사용할 수 있는 프로그램 들 이 PEAR 과 ADODB 입니당 ^^
==========================================================================
★ 속도 테스트는 어케 하는가 ? microtime() 사용하면 됩니다.


<?

function pageTime($page) {
 $mstart = explode(" ", $m);
 $mend = explode(" ", microtime());
 $mtime = ($mend[1] - $mstart[1]) + ($mend[0] - $mstart[0]);

 echo " $m[1]  $mend[1]<P>";
 echo " $m[0]  $mend[0]<P>";

 print("tood.net 페이지 로딩 시간 : " . $mtime . " microseconds");
}
pageTime(basename($PHP_SELF));
?>
 


==========================================================================

==========================================================================

참고 사이트
http://www.tood.net
http://www.zend.com
http://www.php.net
http://www.php.lt/benchmark/phpbench.php
http://www.phpbuilder.com
http://www.phpbuilder.com/columns/piergiorgio20010321.php3?print_mode=1


출처: http://blog.naver.com/xinfra/80007959672

Trackbacks 0 : Comments 0