在Windows上升级到PHP7:php_soap.dll导致崩溃/频繁出现500个错误


upgraded to PHP7 on Windows: php_soap.dll causing crashes / frequent 500 errors

我有两台服务器,一台运行Windows7的测试服务器…和一台运行WindowsServer2008的生产服务器。(是的,很不幸它们是不同的操作系统。)

几个月以来,它们一直在PHP5.4.1.4上运行。

我决定将它们升级到PHP7。测试箱一切都很顺利。但当然,它不会有太多的流量。

在prod/Windows Server 2008框中,web应用程序似乎会运行一两分钟,然后显示"500错误"。我可以恢复精神,有时他们会再次工作,有时需要几分钟。

新的PHP错误日志中没有任何内容被写入(尽管IIS的PHP管理器部分显示我们指向了正确的INI和正确的日志文件)。

Web服务器失败的请求日志只是表明FastCGI由于500个错误太多而失败。

我检查了事件查看器,我会看到指向php_soap.dll的应用程序崩溃。

现在,那个文件在那里,它和我在非prod中看到的文件大小相同。

尽管如此,我还是认为这可能是因为我的脚本出现了500个错误,这是有正当理由的。所以我调查了其中一个。确认它与测试箱上的一个正在工作的完全匹配。刷新了它…而且效果很好。刷新了500个错误。

因此,最后,我进入IIS管理器->PHP管理器并禁用了SOAP扩展。

然后我不再看到大量失败的请求,也不再看到500个错误。。。除了我拥有的一个进行SOAP调用的脚本之外的所有内容。

我试着将dll从测试框复制到戳框中。在PHP中再次启用了扩展。问题再次出现。因此,我现在将我们带回5.4.1.4配置。

关于我如何弄清楚这个dll为什么会引起问题和/或如何修复它,有什么想法吗?

谢谢!

-=Dave=-

我知道这已经很旧了,但我也遇到了类似的问题,结果发现缓存的WDSL文件在不同版本的PHP之间不兼容。

默认情况下,在php.ini中,SOAP模块已启用缓存。为了避免崩溃,您需要清除当前的WDSL缓存,或者为新的PHP安装更改缓存位置。

希望能有所帮助。。。

我想我找到了一个修复方法。不过,我不知道为什么我只需要在prod服务器上这样做:我的脚本中进行SOAP调用的目录被设置为允许匿名身份验证和Windows身份验证。当我在浏览器中手动测试东西时,它会接受我并以匿名者的身份运行脚本。

我突然意识到一个理论:我的错误脚本被远程桌面小工具调用了。。。因此,它可能也默认匿名执行。但我有另一个包含SOAP的脚本,它由Scheduled Task(作为特定用户)运行。我没有看到那个错误!

因此,我关闭了正在测试的目录上的匿名身份验证,并从浏览器中重新运行了我的脚本。当然,我必须登录,但后来就成功了!我检查了桌面小工具的版本,它在同一目录中调用SOAP脚本。。。它现在也在工作!

我认为我在测试机器上没有看到这一点的关键原因是,我们真的没有任何桌面小工具指向那里的代理SOAP脚本。此外,我还认为我的脚本在生产机器上运行时出现了故障,因为我知道我看到它在我第一次激活PHP7后的最初几分钟内抛出了500个错误。。。。并且相同的预定任务/脚本确实在测试框上运行。

谢谢!