Когда я использую file_get_content
для загрузки результата выполнения PHP скрипта:Функция file_get_content не работает иногда
//mainfile.php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => $this->cfg['gp_timeout']/2
)
)
);
$url_xml='http://test.server.eu/webgatescript.php?getphoto¶m1=1&test=1¶m2=2¶m3=3';
$webgateResponse=file_get_contents($url_xml,false,$ctx);
Как я знаю, функция возвращает file_get_content
string
- содержимое файла, если файл не существует возвращается FALSE
.
Время от времени функция file_get_content
возвращает FALSE
, несмотря на то, что я на 100% уверен, что удаленный файл возвратил содержимое (файл xml в моем случае, у меня есть доступ и журналы). Кроме того, file_get_content
возвращает FALSE
несколько микросекунд после завершения удаленного сценария выполнения, но требуется меньше времени, чем был установлен тайм-аут.
Часть журналов:
10:22:04<?xml version="1.0" encoding="UTF-8"?>
10:22:16<response><htlName/><lang/><texts/></response>
10:22:46<?xml version="1.0" encoding="UTF-8"?>
10:22:58<response><htlName/><lang/><texts/></response>
10:23:28<?xml version="1.0" encoding="UTF-8"?>
10:23:29<response><htlName/><lang/><texts/></response>
10:23:59<?xml version="1.0" encoding="UTF-8"?>
10:23:59<response><htlName/><lang/><texts/></response>
10:24:29<?xml version="1.0" encoding="UTF-8"?>
10:24:29<response><htlName/><lang/><texts/></response>
Warning: file_get_contents(http://test.server.eu/webgatescript.php?getphoto¶m1=1&test=1¶m2=2¶m3=3): failed to open stream: HTTP request failed! in /home/www/mainfile.php on line 22
Call Stack:
0.0002 93616 1. {main}() /home/www/mainfile.php:0
175.5346 109072 2. file_get_contents(string(172), bool, resource(14) of type (stream-context)) /home/www/mainfile.php:22
10:24:5910:25:46<?xml version="1.0" encoding="UTF-8"?>
10:25:47<response><htlName/><lang/><texts/></response>
Я сделал несколько тестов, один из них был запущен файл mainfile.php
в exec
(у меня есть оба файла на этом же тестовом сервере, но и на производственном сервере, на котором будут две отдельные системы)
exec("php webgatescript.php >> tom2.log");
и каждый случай запуска webgatescript.php
регистрирует.
Вы пробовали без тайм-аута? '$ webgateResponse = file_get_contents ($ url_xml);' – HamZa
Вы показываете все предупреждения? При возврате FALSE, file_get_contents могут также запускать предупреждения, которые рассказывают вам больше о том, что произошло. – gd1
Все тезисы проводились с использованием этого же URL-адреса во время (TRUE) цикла, поэтому каждый URL-адрес запроса точно такой же, и answear olso (если возвращается file_get_content). – Skamielina