我有两台服务器,一台运行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个错误。。。。并且相同的预定任务/脚本确实在测试框上运行。
谢谢!