这个 php 指令在哪里被覆盖

这个 php 指令在哪里被覆盖

通常通过更改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_filesizepost_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_sizeupload_max_filesize

使用phpinfo()我查看了 和 的值Additional .ini files parsedScan 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 文件的更改生效。

相关内容