![这个 php 指令在哪里被覆盖](https://linux22.com/image/218597/%E8%BF%99%E4%B8%AA%20php%20%E6%8C%87%E4%BB%A4%E5%9C%A8%E5%93%AA%E9%87%8C%E8%A2%AB%E8%A6%86%E7%9B%96.png)
通常通过更改php.ini 中和AH01071: Got error 'PHP message: PHP Warning: POST Content-Length of 17826104 bytes exceeds the limit of 8388608 bytes in Unknown
的一对相关设置来修复错误消息。upload_max_filesize
post_max_size
我遇到的问题是它似乎忽略了 php.ini 中设置的设置。
在 php.ini 中配置如下:
root@server8:/etc/php$ grep -e post_max -e upload_max /etc/php/8.2/fpm/php.ini
post_max_size = 16M
upload_max_filesize = 16M
使用我可以看到和asphpinfo()
的值分别为 8M 和 2M。我试图找出这些设置被覆盖的地方。post_max_size
upload_max_filesize
使用phpinfo()
我查看了 和 的值Additional .ini files parsed
,Scan this dir for additional .ini files
看看是否有任何文件设置了这些指令。他们不。
root@server8:/# directive_list=$(echo /etc/php/8.2/fpm/conf.d/10-mysqlnd.ini, /etc/php/8.2/fpm/conf.d/10-opcache.ini, /etc/php/8.2/fpm/conf.d/10-pdo.ini, /etc/php/8.2/fpm/conf.d/15-xml.ini, /etc/php/8.2/fpm/conf.d/20-bcmath.ini, /etc/php/8.2/fpm/conf.d/20-calendar.ini, /etc/php/8.2/fpm/conf.d/20-ctype.ini, /etc/php/8.2/fpm/conf.d/20-curl.ini, /etc/php/8.2/fpm/conf.d/20-dom.ini, /etc/php/8.2/fpm/conf.d/20-exif.ini, /etc/php/8.2/fpm/conf.d/20-ffi.ini, /etc/php/8.2/fpm/conf.d/20-fileinfo.ini, /etc/php/8.2/fpm/conf.d/20-ftp.ini, /etc/php/8.2/fpm/conf.d/20-gd.ini, /etc/php/8.2/fpm/conf.d/20-gettext.ini, /etc/php/8.2/fpm/conf.d/20-iconv.ini, /etc/php/8.2/fpm/conf.d/20-igbinary.ini, /etc/php/8.2/fpm/conf.d/20-mbstring.ini, /etc/php/8.2/fpm/conf.d/20-memcache.ini, /etc/php/8.2/fpm/conf.d/20-mysqli.ini, /etc/php/8.2/fpm/conf.d/20-pdo_mysql.ini, /etc/php/8.2/fpm/conf.d/20-phar.ini, /etc/php/8.2/fpm/conf.d/20-posix.ini, /etc/php/8.2/fpm/conf.d/20-readline.ini, /etc/php/8.2/fpm/conf.d/20-redis.ini, /etc/php/8.2/fpm/conf.d/20-shmop.ini, /etc/php/8.2/fpm/conf.d/20-simplexml.ini, /etc/php/8.2/fpm/conf.d/20-sockets.ini, /etc/php/8.2/fpm/conf.d/20-sysvmsg.ini, /etc/php/8.2/fpm/conf.d/20-sysvsem.ini, /etc/php/8.2/fpm/conf.d/20-sysvshm.ini, /etc/php/8.2/fpm/conf.d/20-tokenizer.ini, /etc/php/8.2/fpm/conf.d/20-xmlreader.ini, /etc/php/8.2/fpm/conf.d/20-xmlwriter.ini, /etc/php/8.2/fpm/conf.d/20-xsl.ini, /etc/php/8.2/fpm/conf.d/20-zip.ini | tr -d ',')
root@server8:/# echo $directive_list | xargs grep max_
/etc/php/8.2/fpm/conf.d/20-memcache.ini:; memcache.max_failover_attempts="20"
root@server8:/#
我检查了是否有任何 Apache 配置文件覆盖了设置,它们没有:
root@server8:/etc/php$ find /etc/apache2 -name "*conf" | xargs grep max_
root@server8:/etc/php$ find /etc/apache2 -name "*conf" | xargs grep filesize
root@server8:/etc/php$ find /etc/apache2 -name "*conf" | xargs grep post_
root@server8:/etc/php$
我检查了 .htaccess 中是否有任何设置可能会覆盖这些设置:
root@server8:/$ find $vhostdir/../ -name .htaccess
root@server8:/$
(我还进一步检查了路径)
出于绝望,我还检查了安装的所有其他 PHP 版本的 php.ini 文件,看看是否使用了其中的任何一个,尽管有报道称phpinfo()
root@server8:/etc/php$ find . -type f |xargs grep upload_max
./8.2/apache2/php.ini:upload_max_filesize = 16M
./8.2/fpm/php.ini:upload_max_filesize = 16M
./8.2/cli/php.ini:upload_max_filesize = 16M
./7.4/apache2/php.ini:upload_max_filesize = 16M
./7.4/fpm/php.ini:upload_max_filesize = 16M
./7.4/cli/php.ini:upload_max_filesize = 16M
./8.1/apache2/php.ini:upload_max_filesize = 16M
./8.1/fpm/php.ini:upload_max_filesize = 16M
./8.1/cli/php.ini:upload_max_filesize = 16M
root@server8:/etc/php$ find . -type f |xargs grep post_max
./8.2/apache2/php.ini:post_max_size = 16M
./8.2/fpm/php.ini:post_max_size = 16M
./8.2/cli/php.ini:post_max_size = 16M
./7.4/apache2/php.ini:post_max_size = 16M
./7.4/fpm/php.ini:post_max_size = 16M
./7.4/cli/php.ini:post_max_size = 16M
./8.1/apache2/php.ini:post_max_size = 16M
./8.1/fpm/php.ini:post_max_size = 16M
./8.1/cli/php.ini:post_max_size = 16M
root@server8:/etc/php$
那么这些还可以从哪里衍生出来呢?phpinfo()
实际使用中提到的 php.ini 文件吗?
答案1
phpinfo() 提到的 php.ini 文件是否实际被使用?
是的 - 这是一个很好的起点(而不是查看您认为 php.ini 文件可能在的位置)。
他们可以被覆盖在网络服务器配置中,以及(至少在 Apache 的情况下).htaccess 文件以及其他 .ini 文件中。请记住,映射到特定路径的网络服务器覆盖、.htaccess 和 PHP_INI_PERDIR 覆盖仅适用于特定目录树(即确保您在报告错误的脚本所在的同一目录中检查 phpinfo() )。创建测试脚本print ini_get("upload_max_filesize") . " / " ini_get("post_max_size");
可能会有所帮助。
您可能还想扫描您的代码以查找init_set
.
答案2
虽然 @symcbean 的答案对于确认流程和我对此的疑问很有价值,但答案是我需要重新启动 php-fpm。
systemct restart php8.2-fpm
问题是 php-fpm 已加载配置,这就是所使用的配置,并且未拾取对相应 php ini 文件的更改,因为正在运行的服务具有驻留配置。
服务重新启动后,一切都按预期进行。
值得注意的是,还需要重新启动 apache2 才能使 php.ini 文件的更改生效。