태그 Archives: php_value

php-fpm 서버에서의 php_value 를 선언하는 방법.

기존에 mod_php를 사용하는 php 4.x ~ 7.2 까지의 버전에서는 .htaccess 파일에서 php_value 를 설정해서 쓰는 경우가 많았다.

다만 php-fpm의 경우 별도의 데몬으로 작동을 하기 때문에 해당 값을 입력할 경우 500 에러가 발생한다.

아울러서 Apache 의 디렉토리 보안설정의 AllowOverride 설정이 All 또는 Options 으로 설정 되어 있어야 했다.
주: AllowOverride All 은 하위에서 위험한 값들을 변조 가능성을 열어 주기 때문에 보안상 매우 좋지 않으니 되도록이면 하지 말아야 한다.

 

기술적으로 php 5.6의 경우에도 php-fpm 을 사용 할 수 있기 때문에 버전으로 나누기 보다 phpinfo() 에 선언된 값을 보고 php-fpm 인지 판단해야 한다.

20240326_140656

위 캡춰 이미지와 같이 php-fpm 으로 구성된 서버에서는 php 코드 안에서의 ini_set 을 선언하거나 .htaccess 에서 php_value 선언을 해도 무시되거나 500 에러가 발생 한다고 생각 하면 쉽다.

권고 되는 방법은 apache 웹서버내에서 선언되거나 php-fpm 에서 선언 되거나 user.ini 를 불러오도록 설정해서 하는 방법이다. 다만 이경우 서버 설정을 건들이기 때문에 직접 수정이 불가능한 경우가 많겠다.

 

먼저 php.net 에서 공개해둔 메뉴얼 https://www.php.net/manual/en/ini.core.php을 보게 되면 아래와 같이 Changeable 이 공개 되어 있다.

20240326_141221

php_value 으로 변경 할 수 있는 값은 INI_PERDIR 또는 INI_ALL 이다.

INI_SYSTEM 의 경우 PHP_ADMIN_VALUE 으로 선언이 가능하지만.. 일반 계정에서의 선언은 되지 않고 웹서버(apache conf 파일) 에서 선언해야만 인식 한다.

설정 방법은 아래와 같다.

주의 할점은 $_SERVER 으로 전달 하는 부분이기 때문에 하나의 SetEnv만 인식 한다는 부분이다. 여러 가지의 PHP_VALUE 를 선언 하기 위해서는 vi 에디터로 수정을 해야 한다.

Ctrl + v 를 누르면 ^ 부분이 vi 에디터에 입력이 되는데 이후 Enter 를 입력하면 파란색의 ^M 표시기를 입력할 수 있다.
ftp를 이용하려 전송할때 ascii 파일을 binary로 전송했을때 칸 구분에 붙은 그 표기가 맞다.

이를 아래와 같이 입력하면 여러개의 PHP_VALUE 를 사용할 수 있다.

20240326_154447

php 5.4 paser error

php 5.4 이후부터는 php.ini 에서 E_ALL 을 설정하더라도 paser fatal 오류를 표기 하지 않는다.

보안적인 측면이라고 생각된다. 다만 이부분은 php 개발자를 괴롭힐 것이다 ‘ㅅ’a

 

이때 php.ini 를 수정하거나 php 문안에 ini_set 을 넣어도 동작하지 않는다.
(php.ini 직접 설정은 기본적으로 표시하지 않도록 되었고,
php문서에서의 ini_set 설정은 fatal 에러시 입력한 ini_set역시 무시되기 때문.)

아래와 같은 내용을 .htaccess 파일에 넣으면 fatal 오류를 볼수 있다.

모든 에러표시는 위와 같이 설정한다.

E_ALL  (32767)

 

일반적인 서비스제공용 설정의 설정값은 22519이다.

E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED
E_ALL  (32767) – E_STRICT (2048) – E_NOTICE (8) – E_DEPRECATED(8120) = 22519

 

아래는 Error Level Constants 별 번호 이다.
E_WARNING(2)
E_NOTICE(8)
E_STRICT(2048)
E_DEPRECATED(8192)
E_ERROR(1)

E_PARSE(4)
E_CORE_ERROR(16)
E_CORE_WARNING(32)
E_COMPILE_ERROR(64)
E_COMPILE_WARNING(128)
E_USER_ERROR(256)
E_USER_WARNING(512)
E_USER_NOTICE(1024)
E_RECOVERABLE_ERROR(4096)
E_USER_DEPRECATED(16384)
계산기 : http://www.bx.com.au/tools/ultimate-php-error-reporting-wizard