file_get_contents():流不支持查找/;PHP对此的行为是什么时候改变的?

file_get_contents():流不支持查找/;PHP对此的行为是什么时候改变的?,php,simple-html-dom,Php,Simple Html Dom,PHP对此的行为是什么时候改变的? 它来自哪个PHP版本 警告:文件\获取\内容():流不支持在中查找 /simple_html_dom.php 警告:文件\u get\u contents():在中的流中查找位置-1失败 /simple_html_dom.php 看 您正在使用远程文件。仅本地文件支持查找 在使用file\u get\u html之前,您可能需要将文件复制到本地文件系统。在本地主机上应该可以正常工作。当我将页面从一个系统移动到另一个系统时,我的页面上也出现了同样的问题,我可

PHP对此的行为是什么时候改变的?

它来自哪个PHP版本


警告:文件\获取\内容():流不支持在中查找 /simple_html_dom.php

警告:文件\u get\u contents():在中的流中查找位置-1失败 /simple_html_dom.php


您正在使用远程文件。仅本地文件支持查找


在使用
file\u get\u html
之前,您可能需要将文件复制到本地文件系统。在本地主机上应该可以正常工作。

当我将页面从一个系统移动到另一个系统时,我的页面上也出现了同样的问题,我可以通过删除偏移量引用来更改
simple\u html\u dom.php
文件(没有给我造成任何进一步的问题)

simple\u html\u dom.php
的第75行:

$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,...)

在simple_html_dom.php中设置$offset=0


这很有效

其他人分享了解决方案,但没有人分享原因。我不知道PHP7.0和7.1之间有什么不同,但是

远程文件不支持查找(偏移)。试图 非本地文件上的seek可能会使用较小的偏移量,但这是不正确的 不可预测,因为它在缓冲流上工作

我可以确认在第75行删除
文件获取内容
中的偏移量参数对我有效,和/或在第70行的
文件获取html
功能中将偏移量设置为0也有效

我猜offset参数从来没有打算用于非本地文件,因为:

从原始流开始读取的偏移量。消极的 从流末尾开始的偏移量计数


希望这有助于澄清任何困惑。对于外部源,从一开始就开始流媒体是有意义的。

您不需要编辑供应商文件。只需从以下位置更改您的请求:

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

问题在于,如果希望简单HTMLDOM使用的偏移量为“0”,则默认偏移量为“-1”。幸运的是,它接受它作为参数,这意味着您可以轻松地更改它,而无需更改简单的HTMLDOM源代码


注意:这一兼容性问题在v1.7+中得到了解决。

首先,尝试更改simple\u html\u dom.php,如

  • 从第75行的文件获取内容(…)中删除偏移量参数

  • 或者在第70行的file_get_html func中将偏移量设置为0

如果仍然不起作用???像我一样

这意味着您拥有最新版本的PHP,您需要从以下站点下载最新版本的simple_html_dom.PHP


之后,它在每台机器和系统上对我都有效

PHP行为没有改变吗?此规范是否与过去相同?根据changelog,关于在远程文件上查找,没有任何更改。这就是为什么我假设你以前只处理本地文件,搜索是可以的(或者你很幸运,因为根据文档,有时搜索也可能在远程文件的小范围内工作)。谢谢。>根据docthis Ocurs在PHP7.1中的介绍,有时候查找可能也适用于远程文件的小范围,但在7.0和D5.6中效果很好。这个兼容性问题在1.7以后的版本中已经解决了,很简单,但很出色!天才!拯救了这一天,天才。你绝对是最受欢迎的,这是完美的,应该是公认的答案:)你是我的英雄!如果使用编写器版本,则回答正确
function file_get_html(..., $offset = 0,...)
$html = HtmlDomParser::file_get_html( "https://www.google.com/");
$html = HtmlDomParser::file_get_html( "https://www.google.com/", false, null, 0 );