私はこの問題に数回遭遇しました。
データを CSV にエクスポートするコードがあります。私が使用している方法は、結果セットをテンプレートに渡します。テンプレートは結果を循環し、フィールドをエコーします。
アクションで:
$this->result = ObjectPeer::doSelect($criteria);
テンプレートでは:
foreach ($result as $row)
{
echo $row->getValue1().','.$row->getValue2().','.$row->getValue3()...
}
ただし、結果セットが大きい場合は、メモリが不足します。
[error] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1556481 bytes) in exportSuccess.php on line 13, referer: https://mysite.com/module
プロセスは 250 MB 以上を使用していますが、作成されるファイルはわずか 2 MB です。php.ini がプロセスに与えるメモリの量を増やすことはできますが、むしろしたくありません。エクスポートが十分に大きい場合、十分なメモリを確保できるとは思えません。
これに似た他のいくつかのケースを読みましたが、各エコーの後に $row の設定を解除することを提案しました。私の場合はうまくいきませんでした。
このクエリをチャンクしてファイル全体を構築する方法があると思います-誰かが明確なチュートリアルを推奨または指摘できますか?