2011-06-28 8 views
0

申し訳ありませんが、以前は十分にはっきりしていませんでした。今回は可能な限り多くの情報を提供しようとします。いくつかのファイルからデータを抽出する

私は8000 XMLのファイルをフォルダに格納しており、そこからデータを抽出し、PHPを使用してMySQLにデータベースを移入しています。問題は、一度に4,000を超えるレコードを挿入できないことです。

いくつかのメンバーは、ファイルを複数のフォルダに分割するように勧めました。この方法では、問題なく8,000個のファイルすべてからデータを挿入できるはずです。

私が開いて、私は2つのフォルダ間でファイルを分割する場合は、そのユニークなフォルダから8000個のファイルを読むためにopendirreaddirを使用しているので、私はまだopendirreaddirに固執する必要がありますか?

もしそうなら、私は複数のフォルダに対してこれを行う必要がありますが、これをPHPでどのように書きますか? 8000 XMLのファイルを一度に複数のフォルダに分割せずに読み込んで抽出する方がいいですか?制限は、レコードの量である場合はお時間を再び

おかげ

答えて

1

は、どのようにフォルダごとのファイル数は、それを行うには何がありますか?あなたはフォルダを読んだり、挿入するレコードを集めたり、レコードを収集したり、その後、4000に達した場合は、文を挿入し、残りのファイルで新しい文を開始して続行します。

+0

私は一度に4000個の以上のファイルを読み取ることができない理由を私は知りません。しかし、私がプログラムを実行するたびに、私は自分のデータベースに4000レコードしか挿入していません。私はとても多くの時間をかけました。いくつかの提案に続いて、max_execution_time = 30からmax_execution_time = 60をmax_input_time = 600に変更し、memory_limit = 128Mからmemory_limit = 512Mに変更しました。これらの変更は私が約10レコードを得るのを助けますが、それ以上のものはありません。私はまだ何が問題なのか分かりません。 – T3000

+0

@ T3000 DBにHTTPリクエストを入力する必要がありますか? – dave

0

1)すべてのファイルのリストを取得します。 2)ファイル 3を開き、リストを反復処理)XMLノードを抽出し、SQL文 4を実行)ファイル 5を閉じて)あなたが別の方法で変換することです

0
//Parse XML for each file here 
function parseXML($file) { 

} 

//Loops through each file in directory 
if ($handle = opendir('directoryWithXMLFiles')) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != "..") { 
      parseXML($file); 
     } 
    } 
    closedir($handle); 
} 

を完了するまで継続しますデータをCSV形式に変換します。次に、MySQLのデータロード構文を使用します。別の言語に慣れている場合は、PHPの使用を避けることができます。

すなわち

LOAD DATA LOCAL INFILE '/importfile.csv' 
INTO TABLE test_table 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(field1, filed2, field3); 

http://support.modwest.com/content/6/253/en/how-do-i-import-delimited-data-into-mysql.html

関連する問題