我有一个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个文件吗?
答案 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;
}