file get contents (): stream не поддерживает поиск / когда поведение PHP об этом изменилось?

когда поведение PHP об этом изменилось?

из какой версии PHP это?


предупреждение: функции file_get_contents(): поток не поддерживает поиск в /simple_html_dom.в PHP

предупреждение: file_get_contents (): не удалось найти позицию -1 в потоке в /simple_html_dom.в PHP


include('parser/simple_html_dom.php');
$url = "https://en.wikipedia.org/wiki/Stack_Overflow";
$html = file_get_html($url);
if ($html !== false) {
  foreach($html->find('div#mw-content-text') as $item){
    $item->plaintext;
  }
}

7 ответов


посмотреть file_get_contents (): stream не поддерживает поиск PHP

вы работаете с удаленным файлом. Поиск поддерживается только для локальных файлов.

вы, вероятно, нужно скопировать файл в локальную файловую систему перед использованием file_get_html. Он должен отлично работать на localhost.


у меня была такая же проблема на моей странице, когда я переместил ее из одной системы в другую, я смог изменить simple_html_dom.php файл, удалив ссылку смещения (не вызвало никаких дополнительных проблем для меня).

на линии 75 simple_html_dom.php:

$contents = file_get_contents($url, $use_include_path, $context, $offset);

Я удалил ссылку на $offset:

$contents = file_get_contents($url, $use_include_path, $context);

нет моя страница работает нормально. Не брать на себя ответственность за что-то еще, что он ломает! :)


изменить

function file_get_html(..., $offset = -1,...)

to

function file_get_html(..., $offset = 0,...)

в simple_html_dom.в PHP


вам не нужно редактировать файлы поставщика. Просто измените свои запросы с:

$html = HtmlDomParser::file_get_html( "https://www.google.com/");

в:

$html = HtmlDomParser::file_get_html( "https://www.google.com/", false, null, 0 );

" 0 " - это смещение, которое вызывает проблему. По умолчанию простой HTML DOM использует "-1", но он принимает его как параметр, который вы можете изменить.


на поиск $offset и удалите его-он должен быть в строках 75 и 76. Тогда все будет хорошо.


общие решения, но никто не поделился, почему. Я не знаю, почему это отличается от PHP 7.0 & 7.1, ноPHP.net документы для этой функции говорят:

Поиск (смещение) не поддерживается удаленными файлами. Попытка искать на нелокальных файлах может работать с небольшими смещениями, но это непредсказуем, потому что он работает на буферизованном потоке.

Я могу подтвердить, что удаление параметра offset в file_get_contents on line 75 работает для меня и / или установка смещения в 0 в file_get_html функция на линии 70 работает тоже.

Я думаю, что параметр offset никогда не предназначался для использования с нелокальными файлами, так как:

смещение, при котором чтение начинается в исходном потоке. Отрицательный смещения отсчитываются от конца потока.

надеюсь, это поможет прояснить любую путаницу. С внешними источниками имеет смысл начать потоковую передачу из начало.


установить $ offset = 0

это работает!