Господа, подскажите, пожалуйста, не могу понять. Есть некоторый web server, к которому можно обратиться примерно так: http://website.ru/search?par1=1234&par2=5678&xml=false Если вбить эту строку в chrome, то команда выполняется мгновенно (доли секунд) и сервер возвращает JSON очень небольшого объема (всего 6 кб). А теперь есть простейший PHP скрипт, вот его фрагмент: PHP: ini_set('default_socket_timeout', 360); $url="http://website.ru/search?par1=1234&par2=5678&xml=false"; file_put_contents($log_file, date("Y-m-d H:i:s") . ": Trying to get data from URL: ". $url ."\n", FILE_APPEND); $jsondata_string = file_get_contents($url); file_put_contents($log_file, date("Y-m-d H:i:s") . ": file_get_contents procedure finished \n", FILE_APPEND); В итоге в логе получаем: 2017-03-13 17:16:45: Trying to get data from URL: http://website.ru/search?par1=1234&par2=5678&xml=false 2017-03-13 17:22:46: file_get_contents procedure finished Как видно, время выполнения file_get_contents совпадает с default_socket_timeout, т.е. вместо сотни миллисекунд file_get_contents выполняется 360 сек. Что за проблема с file_get_contents? В этой истории есть два подозрительных момента: 1. Раньше этот же скрипт обрабатывался быстро 2. У меня есть другой скрипт, которые обращается к другому web серверу точно таким же образом и в этом случае, file_get_contents отрабатывает быстро, а объем возвращаемого JSON может составлять сотни килобайт, а вот с этим скриптом какая-то проблема. Самое интересное, что file_get_contents в итоге отрабатывает (т.е. переменная $jsondata_string содержит нужный json) Помоги те плиз.
[Editors note: As of PHP 5.2.1 you can specify `timeout` context option and pass the context to file_get_contents()] The only way I could get get_file_contents() to wait for a very slow http request was to set the socket timeout as follows. PHP: ini_set('default_socket_timeout', 120); $a = file_get_contents("http://abcxyz.com"); Other times like execution time and input time had no effect.
Спасибо за ответ. Вижу, что товарищ описывает точно такую же проблему как у меня. Это однако не дает ответа на вопрос почему это происходит при вызове file_get_contents() и не происходит, когда я забиваю запрос в браузере. Может я как-то не правильно работают с file_get_contents() ? или может это бага в какой-то из версий php?
Это я уже пробовал делать. В этом случае file_get_contents() отрабатывает 60 секунд. По всей видимости 60 секунд, это дефолт, установленный в PHP. Сегодня вечером, конечно, попробую еще раз, но скорее всего не поможет.
Проверил еще раз. Команда выполняется за 60 секунд. В хроме при этом этот же запрос выполняется мгновенно (хром показывает около 200 мс). Господа, будут ли еще идеи? Буду рад любым озвученным гипотезам
В общем, не разобрался я почему оно перестало работать. Переписал код на использование curl. Проблема решена, вопрос закрыт. Спасибо за участие!