2013-05-08 20 views
0

我有一個500鏈接到XML文件(在線文件)我想將這些文件傳遞給一個函數,讀取這些文件的內容,解析它們,然後將它們存儲在我的數據庫(MySQL)中。 我用這個函數來獲取鏈接:如何在PHP中將鏈接傳遞給fread?

function get_links() 
{ 
    $user_file = @fopen("./fullsoccer.TXT", "r"); 
    if ($user_file) 
    { 
     while (!feof($user_file)) 
     { 
      $lines[] = fgets($user_file, 4096); 
     } 
     fclose($user_file); 
    } 
    return $lines; 
} 

然後我用這個功能來讀取每一個環節的內容,並對其進行分析:

function doParse($parser_object) { 
    $links=get_links(); 
    $i=0; 
    while(!empty($links[$i])) 
    { 
     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++; 
    } 
} 

這些鏈接成功返回(我打印出來的「 doParse「函數),但問題是: 」doParse「函數只是解析最後一個鏈接的文件。 我想知道爲什麼該功能解析只是最後一個鏈接的文件,並保留整個以前的499文件?是否打開問題?它能夠讀取多個文件嗎?

+0

爲什麼不使用使用$鏈接=文件( 「./ fullsoccer.TXT」);而不是fopen使用file_get_contents而不是在使用foreach時可以簡化這段代碼。如果你通過網絡使用打開文件,也許你應該考慮CURL? – Robert 2013-05-08 08:40:47

+0

curl如何獲取文件內容爲xml – 2013-05-08 09:09:28

回答

0

變化

$links=get_links(); 

$links=file("./fullsoccer.TXT"); 

File功能是用來讀取文件的內容到陣列,其中陣列產品的線。

你可以使用foreach而不是while循環。要獲得鏈接的內容,您可以使用file_get_contents();但最好的方法是使用捲曲,因爲服務器可能有一些安全問題,當你只想和fopen

http://php.net/manual/en/book.curl.php

獲取數據我已經找到了如何捲曲例子從鏈接下載數據

function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

http://davidwalsh.name/curl-download

+0

我使用文件而不是獲取鏈接()和foreach而不是while但我想知道如果我使用curl如何獲取文件數據爲xml – 2013-05-08 09:08:54