如何在php中传递指向fread的链接?
我有一个指向xml文件(在线文件)的500链接,我想将这些文件传递给一个函数,该函数读取这些文件的内容,解析它们,然后将它们存储在我的数据库(mysql)中。 我使用此函数获取链接:如何在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)) { $
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;
}