file_get_contents():stream不支持搜索/什么时候PHP行为有关此更改?

问题描述 投票:16回答:7

PHP的行为何时发生变化?

从哪个PHP版本?


警告:file_get_contents():stream不支持在/simple_html_dom.php中搜索

警告:file_get_contents():无法在/simple_html_dom.php的流中寻找-1位置


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;
  }
}
php simple-html-dom
7个回答
2
投票

file_get_contents(): stream does not support seeking PHP

您正在使用远程文件。寻求仅支持本地文件。

在使用file_get_html之前,您可能需要将文件复制到本地文件系统。它应该在localhost上正常工作。


95
投票

当我将它从一个系统移动到另一个系统时,我在页面上遇到了同样的问题,我能够通过删除偏移引用来更改simple_html_dom.php文件(不会给我带来任何进一步的问题)。

simple_html_dom.php的第75行:

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

我删除了对$offset的引用:

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

没有我的页面工作正常。不对其他任何事情承担责任! :)


18
投票

更改

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

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

在simple_html_dom.php中


13
投票

您无需编辑供应商文件。只需更改您的请求:

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

至:

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

问题是当您希望Simple HTML DOM为“0”时,它使用的默认偏移量为“-1”。幸运的是,它接受它作为参数,这意味着您可以轻松地更改它而无需更改Simple HTML DOM源。

注意:此兼容性问题已在v1.7 +中修复


4
投票

在qazxsw poi文件中,搜索qazxsw poi并删除它 - 它应该在第75和76行。一切都会正常工作。


2
投票

其他人已经分享了解决方案,但没有人分享原因。我不清楚具体为什么这在PHP 7.0和7.1之间有所不同,但是simple_html_dom.php说:

远程文件不支持寻求(偏移)。尝试寻找非本地文件可能会使用较小的偏移量,但这是不可预测的,因为它适用于缓冲流。

我可以确认删除第75行的$offset中的偏移参数对我有用和/或在第70行的PHP.net docs for this function函数中将偏移设置为0也可以。

我猜偏移参数从未打算用于非本地文件,因为:

读取在原始流上开始的偏移量。负数偏移从流的末尾开始计算。

希望这有助于消除任何困惑。使用外部源,从一开始就开始流式传输是有意义的。


-1
投票

设置$ offset = 0

那工作正常!

© www.soinside.com 2019 - 2024. All rights reserved.