0

我有一个指向 xml 文件(在线文件)的 500 个链接我想将这些文件传递给一个函数,该函数读取这些文件的内容,解析它们,然后将它们存储在我的数据库(mysql)中。我使用这个函数来获取链接:

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 个文件?是fopen问题吗??它能够读取超过 1 个文件吗?

4

1 回答 1

0

改变

$links=get_links();

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

File函数用于将文件内容读入数组,其中数组项为一行。

您可以使用 foreach 而不是 while 循环。要获取链接内容,您可以使用file_get_contents(); 但最好的方法是使用 CURL,因为当您想通过 fopen 获取数据时,服务器可能存在一些安全问题

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

我找到了如何从链接下载数据的 curl 示例

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

于 2013-05-08T08:44:58.313 回答