我使用SimpleHTMLDOM来解决PHP脚本的问题,以提取页面的URL列表。
如果我指定了我想要读取链接的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(以及一般的编程)非常陌生,我几乎整天都在搜索,无法找到我做错的事。
感谢任何帮助。
谢谢!
答案 0 :(得分:1)
嗯,这意味着它所说的内容:你正在尝试传递并清空字符串到file_get_contents函数,这可能是由file_get_html调用的。这可能是因为当你使用split()时(顺便说一句,弃用 - 改为使用explode),你将生成一个在某些条目中有空字符串的数组。
您可以使用错误抑制(例如:$blogpost = @file_get_html(...)
)简单地吞下错误,或者确保不将空字符串传递给您的方法,即:
if (!empty($url))
$blogpost = file_get_html($url);