0

PHPExcel を使用して 38MB の .csv ファイルをロードしているときに、 を 1024Mhuge text node: out of memoryに設定していてもエラーが発生php memory_limitします。

大きな .csv ファイルをロードする方法を知っていますか?

エラー

Error loading file "data.csv": Warning: DOMDocument::loadHTMLFile(): xmlSAX2Characters: huge text node: out of memory in /var/www/site/data.csv, line: 264094 in /var/www/site/vendor/CodePlex/PHPExcel/PHPExcel/Reader/HTML.php line 458

PHPコード

ini_set('memory_limit', '1024M');

$inputFileName = '/var/www/site/data.csv';
$phpExcel = new PHPExcel;

//  Read your Excel workbook
try 
{
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName); 
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} 
catch(Exception $e) 
{
     die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

php.ini

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
4

2 に答える 2

1

fgetcsvを使用して csv を 1 行ずつ読み込むことができます。

$file = '/path/filename.csv';

$f = fopen($file, 'rb');

while( $cols = fgetcsv($f) ) 
{
  // $cols[0]; // first column of the current row
}

fclose($f);
于 2013-04-14T16:32:07.913 に答える
0

PHPExcel を使用した大量の Excel ファイルの読み取りの問題に関する可能な解決策

PHPExcel で大きな Excel ファイル (27MB+) から大きなワークシートを読み取る方法は?

答えの1つは、巨大なファイルをチャンクで読み取ることを提案しています。

于 2013-04-14T16:30:40.333 に答える