3

MySQLデータベースをCSV形式にエクスポートするPHPスクリプトがあります。奇妙なCSV形式は、サードパーティのソフトウェアアプリケーションの要件です。最初は機能していましたが、現在743行目でメモリが不足しています。ホスティングサービスの制限は66MBです。

私の完全なコードはここにリストされています。http://pastebin.com/fi049z4n

使用する代わりの方法はありarray_spliceますか?誰かがメモリ使用量を減らすのを手伝ってくれませんか。どのような機能を変更できますか?メモリを解放するにはどうすればよいですか?

4

2 に答える 2

7

CSV作成戦略を変更する必要があります。代わりに、データベースから結果全体をメモリ内の配列に読み取る場合は、順番に作業する必要があります。

  • データベースから行を読み取ります
  • CSVその行をファイル(またはおそらくバッファ)に書き込みます
  • 行をメモリから解放します
  • これをループで実行します...

このように、スクリプトのメモリ消費量は、結果の行数に比例して増加することはありませんが、(多かれ少なかれ)一定に保たれます。

これは、アイデアをスケッチするためのテストされていない例として役立つ可能性があります。

while (FALSE!==($row=mysql_fetch_result($res))) {
  fwrite ($csv_file."\n", implode(',', $row));
}
于 2013-01-23T12:11:12.603 に答える
0

メモリ制限と最大実行時間を増やします

例えば ​​:

// Change the values to suit you
ini_set("memory_limit","15000M");
ini_set("max-execution_time", "5000");
于 2013-01-23T12:06:01.583 に答える