2011-06-28 182 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