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