SimpleHTMLDom的问题

时间:2010-07-19 00:48:36

标签: php

我使用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(以及一般的编程)非常陌生,我几乎整天都在搜索,无法找到我做错的事。

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,这意味着它所说的内容:你正在尝试传递并清空字符串到file_get_contents函数,这可能是由file_get_html调用的。这可能是因为当你使用split()时(顺便说一句,弃用 - 改为使用explode),你将生成一个在某些条目中有空字符串的数组。

您可以使用错误抑制(例如:$blogpost = @file_get_html(...))简单地吞下错误,或者确保不将空字符串传递给您的方法,即:

if (!empty($url))
   $blogpost = file_get_html($url);