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の問題ですか?? 複数のファイルを読み取ることができますか?

4

1 に答える 1

0

変化する

$links=get_links();

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

ファイル関数は、配列項目が行である配列にファイルの内容を読み込むために使用されます。

while ループの代わりに foreach を使用できます。リンクのコンテンツを取得するには、file_get_contents();を使用できます。ただし、fopen だけでデータを取得したい場合、サーバーにセキュリティ上の問題がある可能性があるため、CURL を使用するのが最善の方法です。

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 に答える