###前提・実現したいこと
数万件を一度に出力しようとすると、メモリ不足になります。
解消するために、5,000件ずつ処理する方法を選択しました。
しかし、2回目のループ(5,001〜)エラーになってしまいます。
headers already sent by
で調べてみましたが、解決できず、、
助言いただけましたら、幸いです。
###発生している問題・エラーメッセージ
Cannot modify header information - headers already sent by
###該当のソースコード
PHP
1// 5000件ずつデータを取得するようにする 2 $limit = 5000; 3 $params = ['limit' => $limit, 'offset' => 0]; 4 5 while ($dataArr = $this->Hoges->find('all', $params)->hydrate(false)->toArray()) { 6 7 while(list($key,$val) = each($dataArr)){ 8 9 $data = [ 10 $val['id'], 11 ]; 12 13 fputcsv($fp, $data); 14 15 } 16 17 $params['offset'] += $limit; 18 19 }
###補足情報(言語/FW/ツール等のバージョンなど)
前回の質問
https://teratail.com/questions/78718
参考URL
http://beyondjapan.com/blog/2017/04/cakephp-findall-memoryleak-2
###追記
エラー全文
<pre class="cake-error"><a href="javascript:void(0);" onclick="document.getElementById('cakeErr5933b732a69a8-trace').style.display = (document.getElementById('cakeErr5933b732a69a8-trace').style.display == 'none' ? '' : 'none');"><b>Warning</b> (512)</a>: Unable to emit headers. Headers sent in file=/src/Controller/HogesController.php line=163 [<b>CORE/src/Http/ResponseEmitter.php</b>
回答2件
あなたの回答
tips
プレビュー