PHP 忽略生产服务器上的无效 php.ini,但 PHP 拒绝在 Vagrant 机器上完全使用相同的 INI

PHP ignores an invalid php.ini on the production server, but PHP refuses to work completely with the same INI on a Vagrant machine

我现在有一个愚蠢的问题让我抓狂。

我们的 Web 应用程序非常小,因此我们 运行 它们位于共享托管环境中。因此,我没有太多的可能性来更改服务器配置。我唯一能做的就是编辑用于我们域的 php.ini。我无法配置其他所有内容。

这就是为什么我想通过安装相同的 PHP 版本(几乎!在 Vagrant 中是 PHP 5.4 来设置尽可能接近生产服务器的本地 Vagrant 服务器。 43,生产服务器然而 运行s PHP 5.4.16) 和使用相同的 php.ini 也是在线使用的

两台服务器都是 运行ning Apache 2.4 和 PHP 通过 FastCGI 使用 PHP-FPM。

但是,当我尝试在 Vagrant 机器上启动 PHP-FPM 时,我从托管服务提供商的管理面板下载了 php.ini,它退出并出现一些致命错误因为给定 php.ini 中的一些指令已被弃用并已被删除。这让我想知道为什么同样的 php.ini 拒绝在 Vagrant 中工作,但在线工作却没有问题。

正如生产服务器上的 phpinfo() 告诉我的那样,下载的 ini 文件是唯一正在加载的 php.ini。但是,该文件似乎被忽略了,而是应用了默认值。

所以我认为那个特定的 ini 文件是我们生产服务器远古时代的后遗症,它在生产服务器上和在我的 Vagrant 机器上一样无效——错误处理只是不同!生产服务器优雅地处理了错误,默默地忽略了无效的ini文件,但是我的Vagrant机器拒绝工作。

忽略无效的ini文件显然不能解决问题的根源,但我的好奇心来了。我认为这应该很容易,但在谷歌搜索了一段时间后,我仍然卡住了。我如何以及在何处配置 PHP-FPM 以忽略无效的 ini 文件,而不是以致命错误退出?

因此,过去几天我一直在与我们的托管方支持团队交谈,我得到了他们如何实现此行为的答案。

答案很简单,同时也令人沮丧:它们是 运行 PHP 的定制版本。他们修补了 PHP 的错误处理以忽略 ini 错误而不是抛出致命错误,然后自己编译了 PHP。

因此,这不是标准的 PHP 行为,自行实施将非常耗时。为了我的目的,这绝对不值得。