我們編寫了以下PHP腳本將CSV文件轉換爲XML文件。但它卡住了,並沒有從while循環中保存XML。PHP腳本將csv轉換爲XML不適用於大文件(大約1GB)
CSV文件的大小約爲1GB,CSV文件中的行數約爲1,00,000。
由於行數很多,所以不起作用。
我的問題是:我們如何修改下面的代碼,使其適用於大文件?
<?php
$delimit = "," ;
$row_count = 0 ;
$inputFilename = "feed.csv" ;
$outputFilename = 'output.xml';
$inputFile = fopen($inputFilename, 'rt');
$headers = fgetcsv($inputFile);
$doc = new DomDocument();
$doc->formatOutput = true;
$root = $doc->createElement('rows');
$root = $doc->appendChild($root);
while (($row = fgetcsv($inputFile)) !== FALSE)
{
$container = $doc->createElement('row');
foreach ($headers as $i => $header)
{
$arr = explode($delimit, $header);
foreach ($arr as $j => $ar)
{
$child = $doc->createElement(preg_replace("/[^A-Za-z0-9]/","",$ar));
$child = $container->appendChild($child);
$whole = explode($delimit, $row[$i]);
$value = $doc->createTextNode(ltrim(rtrim($whole[$j], '"') ,'"'));
$value = $child->appendChild($value);
}
}
$root->appendChild($container);
echo "." ;
}
echo "Saving the XML now" ;
$result = $doc->saveXML();
echo "Writing to XML file now" ;
$handle = fopen($outputFilename, "w");
fwrite($handle, $result);
fclose($handle);
return $outputFilename;
>
被修改:
在php.ini memory_limit的和執行時間被設定爲無限&最大。我正在執行使用命令行。
你有PHP顯示錯誤嗎?總是在開發代碼時,'error_reporting(E_ALL); ini_set('display_errors',1);'在腳本的頂部。你很可能正在耗盡你的記憶力。如果這是一次性的,你可以暫時增加它。 –
將內存限制增加到3GB並非真正的選擇。改用http://php.net/manual/en/book.xmlwriter.php。我相信如果你按照這個教程http://codeinthehole.com/writing/creating-large-xml-files-with-php/你可以自己回答這個問題。 –
@Alex Blex,我認爲,您的第二個鏈接可能會解決問題。讓我現在檢查它。 – Mani