我有两台服务器,一台运行Windows 7的测试服务器......以及一台运行Windows Server 2008的prod服务器。(是的,不幸的是它们是不同的操作系统。)
几个月来,他们一直在PHP 5.4.1.4上运行。
我决定将它们升级到PHP 7.测试盒的一切都完全没问题。但当然,它没有太大的流量。
在prod / Windows Server 2008框中,似乎网络应用程序将运行一两分钟,然后显示“500错误”。我可以刷新,有时他们会再次工作,有时需要几分钟。
没有/正在写入新的PHP错误日志(即使IIS的PHP管理器部分显示我们指向了正确的INI和正确的日志文件)。
网络服务器失败的请求日志只是表明FastCGI由于500多个错误而失败。
我检查了事件查看器,我会看到指向php_soap.dll的应用程序崩溃。
现在,该文件是THERE,它的大小与我在非prod中的大小相同。
尽管如此,我想也许是因为我的脚本因有正当理由而得到500个错误。所以我调查了其中一个。确认它与测试盒上的工作完全匹配。刷新它......它工作得很好。刷新了一些,500个错误。
所以,最后,我进入了IIS管理器 - > PHP管理器并禁用了SOAP扩展。
然后我停止看到大量失败的请求,我停止看到500个错误......除了我所做的SOAP调用之外的所有内容。
我尝试将dll从测试框复制到prod框。在PHP中再次启用扩展。问题又回来了。所以,我现在已经回到了5.4.1.4配置。
关于我如何弄清楚为什么这个dll会导致问题和/或如何修复它的任何想法?
谢谢!
- = Dave = -
答案 0 :(得分:1)
我知道现在已经老了,但我遇到了类似的问题,结果发现缓存的WDSL文件在PHP版本之间不是二进制兼容的。
默认情况下,php.ini中的SOAP模块启用了缓存。为了避免崩溃,您需要清除当前的WDSL缓存或更改新PHP安装的缓存位置。
希望有帮助...
答案 1 :(得分:0)
我想我找到了解决办法。我不确定为什么我只需要在prod服务器上执行此操作:我的脚本进行SOAP调用的目录设置为允许匿名身份验证和Windows身份验证。当我在浏览器中手动测试内容时,它会接受我并以匿名方式运行脚本。
我突然意识到一个理论:我的错误脚本被远程桌面小工具调用了......所以它也可能默认执行匿名。但是我有另一个带有SOAP的脚本,它由Scheduled Task(作为特定用户)运行。我没见过那个错误!
所以,我关闭了我正在测试的目录上的匿名身份验证,并从我的浏览器中重新编写了我的脚本。当然,我必须登录,但它工作了!我检查了我在同一目录中调用SOAP脚本的桌面小工具版本......现在它也正在工作!
我认为我在测试机器上没有看到这个的关键原因是我们实际上没有任何桌面小工具指向那些代理SOAP脚本。那个,再加上我曾经想过我的计划任务运行的脚本在prod机器上运行失败了,因为我知道我在第一次激活PHP7后的前几分钟内发现了500个错误....同样的预定任务/脚本在测试框上运行。
谢谢!