stream_get_contents()
действительно бесит меня. Это были 24 часа непрерывной отладки и тестирования решений со всего Интернета, чтобы заставить его работать.
Это в основном просто перестает читать случайно.
То, что я делаю, загружает веб-страницу с PhantomJs через proc_open()
затем загрузите результат, читая каналы, заданные процессом. Проблема в том, что всякий раз, когда я пытаюсь прочитать либо каналы, stdout и stderr, stream_get_contents()
блоки:
Я знаю, что он блокируется в произвольной точке, потому что я пытался отладить его с помощью этого кода:
while(! feof($pipes[2])) {
echo stream_get_contents($pipes[2], 50);
}
echo "Finished!";
Странице никогда не удается отразить «Законченный!».
Библиотека, которую я использую, PHP-phantomjs.
Я абсолютно уверен, что это не проблема с моей стороны, потому что, если я пытаюсь выполнить phantomjs самостоятельно с временным файлом, сгенерированным из библиотеки, phantomjs выполняется правильно, и это дает мне правильный результат.
Я протестировал код как на Windows, так и на Linux (с помощью nginx).
Дело в том, что библиотека доставляет мне неприятности примерно Вот.
Тем не менее, это код PHP (упрощенный), который я использую для веб-очистки страницы:
$client = Client::getInstance();
$client->setBinDir(Config::get('phantomjs.bin'));
$client->setPhantomJs(Config::get('phantomjs.path'));
$client->setPhantomLoader(Config::get('phantomjs.loader'));
$client->debug(true);
$request = $client->getMessageFactory()->createRequest();
$request->setMethod('GET');
$request->setUrl('http://google.com');
$request->setTimeout("120000");
$response = $client->getMessageFactory()->createResponse();
$client->send($request, $response);
stream_get_contents()
не читать совсем или же останавливается случайно во время чтения?**Интересный факт
Библиотека, которую я построил, чтобы очистить веб-сайт и вернуть его результат.
используемый работать месяц назад. Тот же самый код больше не работает сейчас, ничего не меняя.
Проблема была решена путем использования временных файлов вместо потоковых каналов в proc_open()
,
Кроме того, PhantomJs 1.9.8 с PHP-phantomjs НЕ СЛЕДУЕТ быть установленным, поскольку это дает проблемы с анализом данных из файлов. Это известная проблема.
Я выпустил репозиторий, который решает проблему для тех, кто хочет его использовать.
Добавьте эти строки кода в ваше приложение composer.json.
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/GiampaoloFalqui/php-phantomjs"}
],
"require": {
"jonnyw/php-phantomjs": "3.*"}
},
Других решений пока нет …