【发布时间】:2016-10-18 17:16:52
【问题描述】:
我有两台服务器,一台运行 Windows 7 的测试服务器...和一台运行 Windows Server 2008 的产品服务器。(是的,很遗憾它们是不同的操作系统。)
几个月来,它们一直在 PHP 5.4.1.4 上运行。
我决定将它们升级到 PHP 7。测试盒一切正常。但当然,它并没有获得多少流量。
在 prod / Windows Server 2008 机器上,Web 应用程序似乎会运行一两分钟,然后显示“500 错误”。我可以刷新,有时它们会再次工作,有时需要几分钟。
没有/正在写入新的 PHP 错误日志(即使 IIS 的 PHP 管理器部分显示我们已指向正确的 INI 和正确的日志文件)。
网络服务器失败的请求日志只是表明 FastCGI 因 500 错误太多而失败。
我检查了事件查看器,我会看到指向 php_soap.dll 的应用程序崩溃。
现在,那个文件就在那里,它和我在非生产环境中的那个大小一样。
不过,我认为这可能是因为我的脚本出现 500 个错误是有正当理由的。所以我调查了其中之一。确认它与测试盒上的工作完全匹配。刷新它......它工作正常。刷新了更多,500 个错误。
所以,最后,我进入 IIS 管理器 -> PHP 管理器并禁用了 SOAP 扩展。
然后我停止看到大量失败的请求,并且我不再看到 500 个错误......除了我拥有的一个用于进行 SOAP 调用的脚本之外的所有内容。
我尝试将 dll 从测试盒复制到产品盒。在 PHP 中再次启用扩展。问题又回来了。所以,我现在让我们回到 5.4.1.4 配置。
关于我如何弄清楚为什么这个 dll 会导致问题和/或如何解决它的任何想法?
谢谢!
-= 戴夫 =-
【问题讨论】:
-
从不同的环境复制一个 DLL 可能不是最好的主意,因为它可能为一个系统编译但在另一个系统上失败。此外,您需要为 PHP 7 重新编译它,并且不要使用与 PHP 5 相同的版本(如果您还没有)。如果这不是问题,那么我想您可以将其作为可能的兼容性问题向 PHP 人员提出。
-
测试和生产服务器...当我进行 php 升级安装时...使用了 Web 平台安装程序并且都使用了 x64 PHP 7 安装。所以,当我说我正在复制 DLL 时,我认为它应该是完全相同的文件。
-
通常它可以工作,但是如果您想完全消除特定系统的不良 DLL 的可能性,您需要从针对特定 PHP 发行版和架构的源代码进行编译。
-
好吧,我想出了如何仅将某些目录/应用程序指向 PHP7,而将其他所有内容保留在 5.4.14 上。因此,运行一个发出 SOAP 请求的简单脚本……如果我从命令行运行它,它就可以工作。如果我通过网络浏览器运行它,它会出错。事件查看器记录应用程序崩溃并再次指向该 php_soap.dll。失败的请求日志显示 FastCgiModule 通知 128,注意到 500 错误......并显示“扩展属性不一致。(0xff)”。