如何在php中传递链接到fread?

时间:2013-05-08 07:49:11

标签: php xml fread

我有一个500链接到xml文件(在线文件)我想将这些文件传递给读取这些文件内容的函数,解析它们然后将它们存储在我的数据库(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个文件?这是问题吗?它能读取多于1个文件吗?

1 个答案:

答案 0 :(得分: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