通过修改php.ini配置文件可以全局方式修改PHP的设定值,但若不想改此值,也可以在Web服务器的网站中进行“局部”设置。
例如,使用Apache服务器来设置Zabbix的管理网站,需要修改几项php的值,我通常是在单独网站中直接添加如下设置:
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
... <Directory "/data/www/zabbix"> <IfModule mod_php7.c> php_value post_max_size 32M php_value max_execution_time 300 php_value max_input_time 300 php_value date.timezone Asia/Shanghai </IfModule> </Directory>
也可以将php_value的项目放于/data/www/zabbix目录下的.htaccess文件中。
当这样设置后,PHP应用于此站点的值旋即更改:
为了后期操作维护方便,我决定使用Nginx。
使用Nginx访问PHP网站是使用fastcgi方式,也可以通过传递进行局部修改。
按网上大部分 fastcgi_param PHP_VALUE 的方法进行操作,设定值并未成功修改,且测试后发现,传递过去需在键值中间加不 “=” 号都没有用:
vim conf/vhosts/php-prog
# Other Config Can Include PHP-FPM. index index.html index.htm index.php; fastcgi_intercept_errors on; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /$document_root/$fastcgi_script_name; include fastcgi_params; }
vim conf/vhosts/0-default.conf
# Nginx Second Configure. server { listen 80 default_server; root "/data/www"; error_page 404 /404.html; location ~ "/zabbix/.*\.php$" { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param PHP_VALUE "post_max_size 32M \n max_execution_time 300 \n max_input_time 300 \n timezone Asia/Shanghai"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } include vhosts/php-prog; }
可以看到,修改不成功;且经过测试以下几种写法都不会成功。
# 分开写(带不带=号都一样) fastcgi_param PHP_VALUE "post_max_size 32M"; fastcgi_param PHP_VALUE "max_execution_time 300“; ... # 连一起写 (带不带=号,\n换行符也都一样) fastcgi_param PHP_VALUE "post_max_size=32M max_execution_time 300 max_input_time 300 timezone Asia/Shanghai";
最终还是在php官网上找到方法可行,通过添加http包头变量。
经过一番测试,此方法可以修改成功,但修改的是整个php-fpm中的值,故使用此php-fpm的其它点同样会受到影响,如下:
# Nginx Second Configure. server { listen 80 default_server; root "/data/www"; error_page 404 /404.html; location ~ "/zabbix/.*\.php$" { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; set $php_value "post_max_size=32M"; set $php_value "$php_value \n max_execution_time=300"; set $php_value "$php_value \n max_input_time=300"; set $php_value "$php_value \n date.timezone=Asia/Shanghai"; fastcgi_param PHP_VALUE $php_value; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } include vhosts/php-prog; } server { listen 81 default_server; root "/data/www"; error_page 404 /404.html; include vhosts/php-prog; }
可以看到,PHP_VALUE变量值是传递给了zabbix/下,但修改会作用于整个php-fpm进程。
故,若想达到上面Apache中的效果,可以启动多个php-fpm的进程池(pool),来在Nginx中进行分别转发,以达到php-fpm进程间相互独立。