2013-05-08 102 views
0

我有以下功能:我可以将多个链接传递给fopen,fread和feof吗?

function doParse($parser_object) { 
    $links=file("./fullsoccer.TXT", "r"); 
    $i=0; 
    while(!empty($links[$i])) 
    { 
     set_time_limit(0); 
     if (!($fp = fopen($links[$i], "r"))); 
     { 
      //loop through data 
      while ($data = fread($fp, 4096)) { 
       //parse the fragment 
       xml_parse($parser_object, $data, feof($fp)); 
      } 
     } 
     $i++; 
    } 
} 

这段代码保存从fullsocce.txt XML数据的507个链接列表到$链接然后我看到每个文件(链接:在线链接)的内容使用的fread和将$ data传递给我的主函数xml_parse来使用SAX解析器解析和保存数据。 我的问题是: 只是数组$ link的最后一个文件被传递给函数并解析数据,我想让你知道为什么它只用一个文件工作?请注意这是一个紧急情况

回答

0
!($fp = fopen($links[$i], "r") 

fopen返回错误,所以这个检查只在eof或invild行是true。也许改成

if (($fp = fopen($links[$i], "r") != FALSE) 

我也注意到一个额外的;和)if(!($ fp = fopen($ links [$ i],“r”)));也许我只是没有正确匹配。

+0

我试着做一些调试等。首先代码是打印所有链接,这意味着它打开它们,当我使用“xml_parse”时,它只是解析links数组中的最后一个文件,为什么?你有什么主意吗 ?? – 2013-05-09 06:19:17

0

你缺少fclose,但比我想你需要做一些调试,尝试注释掉“xml_parse”功能,并添加echo $links[$i]."<br />\n";

function doParse($parser_object) { 
    $links=file("./fullsoccer.TXT", "r"); 
    $i=0; 
    foreach($links as $link) 
    { 
     set_time_limit(0); 
     echo 'reading '.$link."\n"; 
     $fp = fopen($link, "r"); 
     if ($fp!==false) 
     { 
      //loop through data 
      while ($data = fread($fp, 4096)) { 
       //parse the fragment 
       //xml_parse($parser_object, $data, feof($fp)); 
       echo $data; 
      } 
      echo "\n"; 
      fclose($fp); 
     } else { 
      echo 'Cannot Open Link '.$link."\n"; 
     } 
     $i++; 
    } 
} 
+0

我试着做一些调试。首先代码是打印所有链接,这意味着它打开它们,当我使用“xml_parse”时,它只是解析links数组中的最后一个文件,为什么?你有什么主意吗 ?? – 2013-05-09 06:18:44

+0

你是否看到为每个文件返回的'$ data'?如果是这样的话,可能是你的'xml_parse'函数有问题,如果不是这样,这意味着文件可能是空的 – Fabrizio 2013-05-09 13:44:27

+0

其实,我认为问题可能出现在你的'xml_parse'中,我只假设你打开/关闭一个文件,是不是每次打开时都会擦干净,导致它只显示最后一个文件? – Fabrizio 2013-05-09 13:47:07

相关问题