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

时间:2017-03-09 02:53:12

标签: php simple-html-dom

PHP的行为何时发生变化?

从哪个PHP版本开始?

  

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

     

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

company_list= [a for a in entity_list if any(company_types) in a]
TypeError: 'in <string>' requires string as left operand, not bool

8 个答案:

答案 0 :(得分:92)

当我将它从一个系统移动到另一个系统时,我在页面上遇到了同样的问题,我可以通过删除偏移参考来更改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);

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

答案 1 :(得分:17)

更改

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

function file_get_html(..., $offset = 0,...)
<_>在simple_html_dom.php中

答案 2 :(得分:12)

您不需要编辑供应商文件。只需更改您的请求即可:

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

收件人:

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

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

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

答案 3 :(得分:4)

simple_html_dom.php文件中,搜索$offset并将其删除 - 它应位于第75行和第76行。一切都会正常工作。

答案 4 :(得分:2)

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

  

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

我可以确认删除第75行file_get_contents中的偏移参数对我有用和/或在第70行的file_get_html函数中将偏移设置为0也适用。

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

  

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

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

答案 5 :(得分:1)

请参阅file_get_contents(): stream does not support seeking PHP

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

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

答案 6 :(得分:0)

首先,尝试更改simple_html_dom.php之类的

  • 从第75行的file_get_contents(...)中删除offset参数

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

如果仍然无法运行 ???像我的

这意味着您拥有最新版本的PHP,您需要从https://sourceforge.net/projects/simplehtmldom/下载最新版本的simple_html_dom.php

在那之后,它对我来说适用于每台机器和系统

答案 7 :(得分:-1)

设置$ offset = 0

这很有效!