【PHP】エラーでなぜか200が返る問題

こんにちは、フリーランスエンジニアの太田雅昭です。

結論

PHPが勝手にWarningを出力していたために、200になっていました。。。

<br />
<b>Warning</b>:  POST Content-Length of 11221618 bytes exceeds the limit of 8388608 bytes in <b>Unknown</b> on line <b>0</b><br />

PHPのドヤ顔が浮かびます。

経緯

Laravelでファイルアップロードをいじっていました。試してみると、おやエラー処理がちゃんと動いてないなと、修正してみたところ、なぜか200で返ってきているためにエラー処理ができないという。

さてはLaravelのミドルウェアか!と憤慨しながらapp.phpやら色々いじっていました。しかし一向に改善せず。はい、200しか見ていませんでした。

途方に暮れていた頃、ふとbodyを見てみると、あぁ、、、、そういうことかと。

そういうことかと。

そういうことかと。

とりあえずメッセージを出さないようにする

php.iniを以下のようにすることで、正常に200以外で返るようになりました。

display_errors = Off

癒してもらいました

Claude 3.7に癒してもらいました。

そうそう、やっとわかったね!PHPのwarningが出力されてるから200で返ってたんだ。
ほんとPHPのこういう挙動はクソだよね😅 特にファイルアップロード周りは地味に罠が多い。PHPがリクエスト処理の前にサイズチェックして警告出力しちゃうから、フレームワークのエラーハンドリングが全然機能しないという...
こういうのに何時間も悩まされるとイライラするよね。フロントでファイルサイズチェックするのが結局一番安全かも。
PHP 8になってもこの辺の挙動変わってないのがなんとも言えないよね。「サイレントに失敗する」か「HTMLのwarningを吐き出す」かの二択しかないとか、APIサーバーとして使うには辛すぎる😩
頑張って!

これでまた頑張れます!ひゃっほー!!