Php SimpleHTMLDom的问题
我遇到了一个使用SimpleHTMLDOM提取页面URL列表的PHP脚本问题 如果我指定了要读取链接的URL,脚本不会给我任何问题:Php SimpleHTMLDom的问题,php,Php,我遇到了一个使用SimpleHTMLDOM提取页面URL列表的PHP脚本问题 如果我指定了要读取链接的URL,脚本不会给我任何问题: $url='http://www.example.com'; $blogpost = file_get_html($url); foreach ($blogpost->find('a[href*=example1]') as $example1link) { $exam
$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变量传递到文件_get_html()中。但只有当我使用带有目标链接的txt文件进行刮取时
我对PHP(以及一般的编程)非常陌生,几乎整天都在四处搜索,找不到我做错了什么
感谢您的帮助
谢谢 好吧,它的意思就是:您正试图将字符串传递给file\u get\u contents函数,该函数可能由file\u get\u html调用。这可能是因为当您使用split()时(顺便说一句,它已弃用-请改用),您将生成一个在某些条目中包含空字符串的数组 您可以使用错误抑制(即:
$blogpost=@file\u get\u html(…)
)简单地消除错误,或者确保不向方法传递空字符串,即:
if (!empty($url))
$blogpost = file_get_html($url);
php的第39行是什么?第39行是:$dom->load(调用用户函数数组('file\u get\u contents',$args),true);在上面的file_get_html()函数中。好的,正如Aircule所讨论的,在调用file_get_html()时,您在某个时候通过$url传入一个空字符串。(删除了我关于func_get_args()的评论,因为我意识到这不是您的代码,而是您正在使用的库。)是的,问题与此相关。我认为这是某种Windows/UNIX换行符问题。关于函数调用,simple_html_dom是一个dom解析器,不是我写的。谢谢你修改和改进它的想法。作为一个库函数,它现在的样子很好。其目的是允许您传递未指定数量的参数。由于您是PHP和编程新手,我假设您是从某个地方复制了该结构。一般来说,除非绝对必要,否则您不想修改库代码。这样,如果您需要/想要升级库,您就不必将更改传播到库的新版本。我认为这就是问题所在,但为什么它可以在上面代码中的$blogpost变量赋值之前回显$url变量呢?我添加了一个“echo$url;”来测试它,变量每次都在那里。就好像$url值在传递到simple_html_dom.phpThanks Aircule时丢失了一样,你的帖子给了我一个想法。我尝试使用“|”(管道字符)而不是\n(换行符)进行分解,结果成功了。可能是Windows换行符问题?@RafaelM您可能根本没有注意到空字符串,它们也是空字符串。尝试用一些
…
标记包装回音的输出,并检查源代码。或者,更好的方法是使用var_dump($url)
它将为您提供有关变量的更多信息,比如它的类型、字符串的长度等@RafaelM它似乎每次都起作用,因为当您回显空变量时,您看不到它;)问题是它生成的条目比实际的多,而不是一些条目消失了。@RafaelM正如@George所建议的,这里有两个非常有用的函数:and。确保使用
标记。