【发布时间】:2010-07-19 00:48:36
【问题描述】:
我遇到了一个使用 SimpleHTMLDOM 提取页面 URL 列表的 PHP 脚本的问题。
如果我指定要读取链接的 URL,脚本不会给我任何问题:
$url='http://www.example.com';
$blogpost = file_get_html($url);
foreach ($blogpost->find('a[href*=example1]') as $example1link) {
$example1link = $example1link->href;
echo $example1link;
}
所有这一切都是从 www.example.com 拉出所有指向 www.example1.com 的链接并将其回显给我。
但是当我尝试向脚本提供带有 URL 的文本文件时:
$urlarray = split("\n", file_get_contents('urls.txt'));
foreach ($urlarray as $url) {
$blogpost = file_get_html($url);
foreach ($blogpost->find('a[href*=example1]') as $example1link) {
$example1link = $example1link->href;
echo $example1link;
}
}
它给了我以下错误:
Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty
in simple_html_dom.php on line 39
对于那些没有 simple_html_dom.php 的人,这是错误所指的函数:
function file_get_html() {
$dom = new simple_html_dom;
$args = func_get_args();
$dom->load(call_user_func_array('file_get_contents', $args), true);
return $dom;
}
我什至可以在将值分配给 $blogpost 之前回显 $url。问题似乎在于将 $url 变量传递给 file_get_html()。但只有当我使用带有目标链接的txt文件来抓取时。
我对 PHP(和一般编程)非常陌生,我几乎整天都在搜索,但找不到我做错了什么。
感谢任何帮助。
谢谢!
【问题讨论】:
-
simple_html_dom.php 的第 39 行是什么?
-
第 39 行是这样的: $dom->load(call_user_func_array('file_get_contents', $args), true);在上面的 file_get_html() 函数中。
-
好的,正如 Aircule 所讨论的,在调用 file_get_html() 时,您在某个时刻通过 $url 传入了一个空字符串。 (删除了我对 func_get_args() 的评论,因为我意识到这不是您的代码,而是您正在使用的库。)
-
是的,问题与此有关。我认为这是某种 Windows/UNIX 换行符问题。关于函数调用,simple_html_dom 是一个 DOM 解析器,不是我写的。感谢您修改和改进它的想法。
-
作为一个库函数,它的方式很好。它旨在允许您传递未指定数量的参数。由于您是 PHP 和编程的新手,我假设您从某个地方复制了该构造。一般来说,您不想修改库代码,除非绝对必要。这样,如果您需要/想要升级库,您就不必将更改传播到库的新版本。
标签: php