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;
}
}
见file_get_contents(): stream does not support seeking PHP
您正在使用远程文件。寻求仅支持本地文件。
在使用file_get_html
之前,您可能需要将文件复制到本地文件系统。它应该在localhost上正常工作。
当我将它从一个系统移动到另一个系统时,我在页面上遇到了同样的问题,我能够通过删除偏移引用来更改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);
没有我的页面工作正常。不对其他任何事情承担责任! :)
更改
function file_get_html(..., $offset = -1,...)
至
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 );
问题是当您希望Simple HTML DOM为“0”时,它使用的默认偏移量为“-1”。幸运的是,它接受它作为参数,这意味着您可以轻松地更改它而无需更改Simple HTML DOM源。
注意:此兼容性问题已在v1.7 +中修复
在qazxsw poi文件中,搜索qazxsw poi并删除它 - 它应该在第75和76行。一切都会正常工作。
其他人已经分享了解决方案,但没有人分享原因。我不清楚具体为什么这在PHP 7.0和7.1之间有所不同,但是simple_html_dom.php
说:
远程文件不支持寻求(偏移)。尝试寻找非本地文件可能会使用较小的偏移量,但这是不可预测的,因为它适用于缓冲流。
我可以确认删除第75行的$offset
中的偏移参数对我有用和/或在第70行的PHP.net docs for this function函数中将偏移设置为0也可以。
我猜偏移参数从未打算用于非本地文件,因为:
读取在原始流上开始的偏移量。负数偏移从流的末尾开始计算。
希望这有助于消除任何困惑。使用外部源,从一开始就开始流式传输是有意义的。
设置$ offset = 0
那工作正常!