【发布时间】:2012-01-10 23:04:13
【问题描述】:
不久前,我注意到我的应用程序发出了一些 Soap 错误,我开始对其进行调查。像这样的东西:
SoapClient::SoapClient(http://###.###.###.###:8080/path/to/some.wsdl): failed to open stream: HTTP request failed!SoapClient::SoapClient(): I/O warning : failed to load external entity "http://###.###.###.###:8080/path/to/some.wsdl"SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://###.###.###.###:8080/path/to/some.wsdl' : failed to load external entity "http://###.###.###.###:8080/path/to/some.wsdl"
看起来远程服务器上的超时(WSDL 缓存已关闭)。在退回该服务器并且没有运气之后,我尝试只 file_get-contents() WSDL 看看会发生什么......
没有骰子:大约 20 秒左右后,我得到了相同的流错误:
file_get_contents(http://###.###.###.###:8080/path/to/some.wsdl) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed!
在最后的努力中,我尝试通过 curl_* 函数读取内容,我确实得到了我正在寻找的内容。
... tl;博士?
- SoapClient 和 file_get_contents 似乎超时(尽管不是明确的“无法打开流,连接超时”)
- 它似乎与流相关,因为 curl 为我提供了我正在寻找的东西。
- 我有很多代码依赖于
SoapClient和file_get_contents,因此切换到全 curl 解决方案并不是一个真正的选择。 - 这不是 DNS 问题,因为我可以很好地解析外部名称(并且我的目标资源是 IP)
-
allow_url_fopen已启用。
有什么想法吗?
【问题讨论】:
-
出于好奇,您是否在 cURL 工作后使用 SoapClient 尝试了服务器?即服务器宕机了吗?
-
我做到了,在将涉及的两台服务器弹回后,问题仍然存在。
标签: php curl timeout file-get-contents