2011-06-28 201 views
0

對不起,我之前並不清楚。這次我會盡量提供儘可能多的信息。從幾個文件中提取數據

我有一個文件夾中的8000 XML文件,我從php中提取數據並在MySQL中填充我的數據庫。問題是我一次不能插入超過4000條記錄。

一些成員建議我在幾個文件夾之間拆分文件。用這種方法,我應該能夠毫無問題地從所有8000個文件中插入數據。

由於我使用opendirreaddir打開,並從該特殊文件夾,讀文件8000,如果我分裂兩個文件夾之間的文件,我應該仍然堅持opendirreaddir

如果是的話,我應該怎麼寫這個在PHP中,當我必須做多於一個文件夾?有沒有更好的方法可以一次讀取並提取8,000個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您是否必須使用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