忽略 php.ini 上的设置

忽略 php.ini 上的设置

我无法让我的服务器遵循php.ini(我正在尝试更改memory_limitupload_max_filesize)的设置。据我所知,我正在编辑正确的文件。phpinfo()给出:

Loaded Configuration File   /etc/php.ini

文件权限为644。 上还有一些额外的.ini文件/etc/php.d,但没有一个包含我试图更改的任何密钥。无论我做什么,phpinfo都会在“本地”和“主”列上报告默认值。

我还扫描了我的 Apache 配置文件,但没有发现与 PHP 相关的任何内容(除了加载 PHP 模块)。我能够更改这些设置的唯一方法是php_value在我的.htaccess.

我是否遗漏了一些明显的东西?

这是一个虚拟服务器,我可以使用 执行 root 命令sudo。我正在运行 Apache 2.1.3 和 PHP 5.3.3。系统信息(来自uname -a)是:

 Linux sesctbapp01 2.6.18-308.1.1.el5 #1 SMP Wed Mar 7 04:16:51 EST 2012 x86_64

答案1

在您的网络服务器中写入一个名为 test.php 的文件:

<? phpinfo(); ?>

然后在浏览器中打开它

有一个部分

Directive   Local Value Master Value

您可以在其中看到所有变量的值以及它们的设置位置:本地值表示在 .htaccess 中或在 php 脚本中使用 ini_set() 进行设置

也尝试http://php.net/manual/de/function.ini-get-all.php找出变量内容的来源。

我曾经犯过一个愚蠢的错误,当时我试图将 upload_max_filesize 设置为 200M:我在 php.ini 中写入了“200MB”,但它必须是“200M”,php 将错误的值“200MB”解释为 0。也许这些能有所帮助

答案2

如果使用 php-fpm(不知道您的情况是否如此)则重新启动 apache 是不够的,您必须重新启动 php-fpm。

例如,在 Ubuntu 20.04 服务器和 php 7.4 fpm 上,我必须

/etc/init.d/php7.4-fpm restart

以便我的 php.ini 得到遵守。

答案3

在终端中运行php -i,它会标记出您的 php.ini 中是否存在任何语法错误。此类错误会导致 Apache 无法悄悄解析(忽略)指令。

答案4

我昨天也遇到了同样的问题。我确定系统上只有一个 php.ini,phpinfo() 报告确实使用了正确的 php.ini 进行配置,我停止了 httpd 检查所有实例都已被终止,然后重新启动它,但 php 仍在使用相同的值。这意味着另一个进程正在读取和存储 php.ini 中的原始值。在进程列表中搜索 php 会显示多个 php-fpm 实例。尝试终止它然后重新启动 apache。这解决了问题。尝试在 php.ini 中进行更多更改,并尝试使用 systemctl reload php-fpm,当然它有效。我不知道何时从 mod_php 切换,显然是几年前的事了,但不知何故我错过了,我管理的 90% 以上的服务器仍在使用 mod_php。我读过的有关 Moodle 等应用程序的指南都没有提到 ifpm。所有指南都说进行更改并重新启动 apache,但没有一个提到重新启动 fpm,但就是这样。我猜想在 serverfault 等网站上提出的许多查询都与这个问题有关。systemctl start httpd 除了启动 httpd 之外还启动 fpm 守护进程,但 systemctl stop httpd 不会停止 php-fpm,sytemctl restart httpd 也不会重新启动它,而新的 systemctl start httpd 不出所料地只会让旧版本继续运行。

因此,进行更改的快捷方法是修改 php.ini,然后运行 ​​systemctl reload php-fpm,无需触及 httpd 守护进程。

相关内容