기존에 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 인지 판단해야 한다.
위 캡춰 이미지와 같이 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 이 공개 되어 있다.
php_value 으로 변경 할 수 있는 값은 INI_PERDIR 또는 INI_ALL 이다.
INI_SYSTEM 의 경우 PHP_ADMIN_VALUE 으로 선언이 가능하지만.. 일반 계정에서의 선언은 되지 않고 웹서버(apache conf 파일) 에서 선언해야만 인식 한다.
설정 방법은 아래와 같다.
1 |
SetEnv PHP_VALUE "max_input_vars = 3000" |
주의 할점은 $_SERVER 으로 전달 하는 부분이기 때문에 하나의 SetEnv만 인식 한다는 부분이다. 여러 가지의 PHP_VALUE 를 선언 하기 위해서는 vi 에디터로 수정을 해야 한다.
Ctrl + v 를 누르면 ^ 부분이 vi 에디터에 입력이 되는데 이후 Enter 를 입력하면 파란색의 ^M 표시기를 입력할 수 있다.
ftp를 이용하려 전송할때 ascii 파일을 binary로 전송했을때 칸 구분에 붙은 그 표기가 맞다.
이를 아래와 같이 입력하면 여러개의 PHP_VALUE 를 사용할 수 있다.