通过修改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进程间相互独立。



