質問: phpの `post_max_size`を超えるファイルを適切に処理する方法は? メールにファイルを添付するphpフォームで作業しており、アップロードされたファイルが大きすぎる場合を適切に処理しようとしています。ファイルアップロードの最大サイズに影響するphp.iniには、upload_max_filesizeとpost_max_sizeの2つの設定があることを学びました。ファイルのサイズがupload_max-filesizeを超える場合、phpはファイルのサイズを0として返します。それで問題ありません。確認できます。しかし、post_max_sizeを超えると、スクリプトは警告なしに失敗し、空白のフォームに戻ります。このエラーをキャッチする方法はありますか?
回答: それはこの問題を修正する簡単な方法です:コードの開始時に「checkpostsizeexceeded」を呼び出すだけですfunction checkpostsizeexceeded() { if (isset($_server['request_method']) and $_server['request_method'] == 'post' and isset($_server['content_length']) and empty($_post)//if is a post request and $_post variable is empty(a symptom of "post max size error") ) { $max = get_ini_bytes('post_max_size');//get the limit of post size $send = $_server['content_length'];//get the sent post size if($max < $_server['content_length'])//compare throw new exception( 'max size exceeded! were sent ' . number_format($send/(1024*1024), 2) . 'mb, but ' . number_format($max/(1024*1024), 2) . 'mb is the application limit.' ); } } この補助関数をコピーしてください:function get_ini_bytes($attr){ $attr_value = trim(ini_get($attr)); if ($attr_value != '') { $type_byte = strtolower( $attr_value{strlen($attr_value) - 1} ); } else return $attr_value; switch ($type_byte) { case 'g': $attr_value *= 1024*1024*1024; break; case 'm': $attr_value *= 1024*1024; break; case 'k': $attr_value *= 1024; break; } return $attr_value; }