ブログ:PHPでPOSTが空!?原因はまさかのファイルサイズ超過だった件(´;ω;`)|中村裕史税理士事務所

ブログ  -BLOG- 

ブログ

2025-05-07 15:34:41

PHPでPOSTが空!?原因はまさかのファイルサイズ超過だった件(´;ω;`)

 今回は、見落としがちな「PHPフォーム送信トラブル」について書きます✍️

◆ 現象:フォーム送信しても $_POST が空っぽ⁉
ある日、ブログ投稿画面から送信したはずのフォームデータが全く受け取れない事態が発生(゜o゜;)
 $_POST や $_FILES が空っぽのまま…フォームの
<input type="hidden" name="blog_send" value="送信">
も確かにあるのに……。

◆ 原因調査スタート(泥沼)
まず疑ったのは以下のポイント:
HTMLフォーム構文ミス?
PHPの記述間違い?
クォート漏れ?(value="送信")
…どれも問題なし。
というか最近まで正常にできていたのに( ノД`)シクシク…

にもかかわらず、PHPではこう出力されました:

Array()
完全に空っぽです……。

◆ まさかの真犯人:post_max_size 超過だった(゚Д゚;)
試しに、以下のコードを 冒頭に入れてみたところ…

function convertToBytes($val) { //バイト数に変換する関数
$val = trim($val); //余計なスペースや改行を排除。
$last = strtolower($val[strlen($val) - 1]); //文字列の最後の1文字を取得して、小文字に変換。 たとえば "8M" の場合 → ´m´
$num = (int) $val; //数字部分だけを整数として取得。たとえば "8M" の場合 → 8

switch ($last) {
case ´g´: $num *= 1024;
case ´m´: $num *= 1024;
case ´k´: $num *= 1024;
}
//➡ 単位に応じて数値をバイト換算 。
k → キロバイト:×1024
m → メガバイト:×1024×1024
g → ギガバイト:×1024×1024×1024
⚠ 注意点:break 文がないため、下に落ちていってすべて掛けられます(意図的な書き方)

return $num;
}

// 🔻 2. POSTサイズチェック
if ($_SERVER[´REQUEST_METHOD´] === ´POST´) { //現在のリクエストが POST送信かどうか を判定していますつまり、フォームから送信されたときだけ処理を行うという条件文。
$contentLength = (int) $_SERVER[´CONTENT_LENGTH´]; //ブラウザから送られてきたリクエストボディ(フォーム全体)のバイト数を取得。たとえば、画像3枚+テキストで 9,934,759バイト(約9.9MB)など
$maxPost = convertToBytes(ini_get(´post_max_size´)); //PHPの設定ファイル(php.ini)に書かれている post_max_size を取得し、convertToBytes() 関数で、"8M" → 8388608 のようにバイト単位に変換。

if ($contentLength > $maxPost) {
echo "⚠ POSTデータが大きすぎます(post_max_size超過)<br>";
echo "送信データ: {$contentLength} バイト<br>";
echo "上限: {$maxPost} バイト(".ini_get(´post_max_size´).")<br>";
exit;
}
}

結果…
⚠ POSTデータが大きすぎます(post_max_size超過)
送信データ: 9934759 バイト
上限: 8388608 バイト(8M)
はい、完全に容量オーバーでした……orz

◆ 対策:.htaccess でファイルサイズ上限を引き上げ!

php_value upload_max_filesize 50M
php_value post_max_size 60M
.htaccess にこれを追加して、ようやく $_POST が復活!(T_T)✨
(ちなみに .htaccess は拡張子なし、「.」から始まる特別なファイルです)
また、該当ファイルと同階層のディレクトリに置きます(´ω´)ノ

◆ 学び:ファイル送信時は必ず容量制限をチェックすべし!
フォームが送信されないとき、ついHTMLやJSに目が行きがちですが、PHPのファイル容量制限(upload_max_filesize, post_max_size)は超・重要な盲点です。

同じような現象で悩んでいる方の参考になれば幸いです😊
ではまた👋

ちなみにこの現象で2時間ほど時間ロス…( ノД`)シクシク…




MF_logo

お気軽にお問い合わせください。
営業目的の電話はご遠慮願います。

:043-497-2461

メールでの問い合わせはこちら
お気軽にお問い合わせください