Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中传递指向fread的链接?_Php_Xml_Fread - Fatal编程技术网

如何在php中传递指向fread的链接?

如何在php中传递指向fread的链接?,php,xml,fread,Php,Xml,Fread,我有一个指向xml文件(在线文件)的500链接,我想将这些文件传递给一个函数,该函数读取这些文件的内容,解析它们,然后将它们存储在我的数据库(mysql)中。 我使用此函数获取链接: function get_links() { $user_file = @fopen("./fullsoccer.TXT", "r"); if ($user_file) { while (!feof($user_file)) { $

我有一个指向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问题吗??它可以读取多个文件吗?

更改

$links=get_links();

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

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

我找到了如何从link下载数据的示例

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;
}

为什么不使用$links=file(“./fullsoccer.TXT”);此外,使用file\u get\u contents代替while use foreach也可以简化代码。如果你使用网络打开文件,也许你应该考虑CURL?CURL如何将文件内容作为XMLI使用的文件而不是获取Link()和FROACH而不是,但我想知道我是否使用CURL如何将文件数据作为XML来获取。
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;
}