Некоторое время назад я заметил некоторые ошибки 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
, поэтому переключение на полностью скручиваемое решение на самом деле не вариант.
- Это не проблема DNS, так как я могу хорошо разрешать внешние имена (а моим целевым ресурсом является IP)
allow_url_fopen
включено.
Есть идеи?