我无法让我的服务器遵循php.ini
(我正在尝试更改memory_limit
和 upload_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 守护进程。