PHP忽略了生产服务器上无效的PHP . INI,但是PHP拒绝在流浪机器上完全使用相同的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.43,而生产服务器运行的是PHP 5.4.16),并且使用了与在线服务器相同的PHP .ini。

两个服务器运行Apache 2.4和PHP通过FastCGI使用PHP- fpm。

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

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

所以我认为这个特定的ini文件是从我们的生产服务器的古代遗留下来的,它在生产服务器上和在我的Vagrant机器上一样无效-错误处理只是不同!生产服务器优雅地处理这个错误,静默地忽略无效的ini文件,但是我的Vagrant机器拒绝工作。

忽略无效的ini文件显然不是解决问题的根本办法,但是好奇心引起了我的注意。我以为这应该很容易,但在谷歌搜索了一段时间后,我仍然卡住了。如何以及在哪里可以配置PHP-FPM忽略无效的ini文件,而不是退出一个致命的错误?

所以,在过去的几天里,我一直在和我们主机的支持团队交谈,我得到了他们是如何实现这种行为的答案。

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

因此,这不是标准的PHP行为,并且自己实现将非常耗时。