Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SimpleHTMLDom的问题_Php - Fatal编程技术网

Php SimpleHTMLDom的问题

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

我遇到了一个使用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变量传递到文件_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。确保使用
标记。