2013-05-08 110 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

相關問題