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 行为,自行实施将非常耗时。为了我的目的,这绝对不值得。
我现在有一个愚蠢的问题让我抓狂。
我们的 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 行为,自行实施将非常耗时。为了我的目的,这绝对不值得。