お疲れ様です。
したいことは、CAKEPHP4のコントローラーから生成した、ログ内容が入っている連想配列をAjaxを通じて画面に表示したいです。
配列は正常に作られて、一応オブジェクトとしてAjaxから受け取ることができ、画面にも出力できました。
PHP
1//ロジックの中 2 $ret = array(); 3 foreach ($rc as $rec) { 4 $item = [ 5 "userid" => $rec->userid, 6 "username" => $rec->username, 7 "ope_date" => $rec->ope_date->i18nFormat('yyyy-MM-dd HH:mm:ss') 8 ]; 9 array_push($ret, $item); 10 } 11 $this->_returnSuccess($ret); 12 return ; 13 14// Ajaxから呼ばれて正常値としての結果の返却、json_encodeする 15 function _returnSuccess($data) { 16 $resp = array("success"=>true, "body"=>$data, "error"=>null); 17 echo json_encode($resp); 18 return true; 19 }
問題は、レコードの件数がある程度以上(決まっていて、18件以上になると必ずエラー)になると、trigger_error ($message : E_USER_WARNING)が出ます。
さらに、結果値が途中で切れているというか、ある長さまではオブジェクトとして扱われている(色付いている部分)のに、そのあとは普通の黒いテキストになってしまい、それがエラーの原因になっているかな、と思います。(id:1055までは正常に認識、id:1051からエラーになる)
この現象について、何か解決策がありましたら、教えてください。
参考まで、検索した結果、php.iniの設定にも影響されるということで、以下の設定値を変えてみましたが、結果は代わりなかったです。
max_input_vars = 10000
memory_limit=512M
post_max_size=40M
追加>ブラウザーの検証ツールから、Response header にある Content-Lengthの値が 3880 まで増え、 4000 からはエラーになることを確認しました。
追加2>Response Headers の Content-typeが、エラー前にはtext\htmlになり、Content-Lengthが4000を超えると Content-Type: application/json; になることを確認しました。まだ未解決のままです。
一応、各コントローラーのBeforeFilterに、以下のようにヘッダー設定はしましたが、効かないです。CAKEPHP4ではこの書き方ダメなのかな?
PHP
1function beforeFilter(EventInterface $event) { 2 Header("Content-Type: application/json; charset=utf-8"); 3 $this->autoRender = false; 4 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。