PHPエラー修正:Warning: POST Content-Length exceeds the limit

beginner🐘 PHP2026-04-10| Linux (Ubuntu, CentOS)、Windows (XAMPP/WAMP)、またはmacOS上のPHP 7.x、PHP 8.x

Error Message

Warning: POST Content-Length exceeds the limit. upload_max_filesize directive in php.ini
#php#アップロード#ファイルサイズ#php-ini

症状

大容量ファイルをアップロードしようとして「送信」ボタンを押した際、データがない状態でページがリロードされたり、フォームが空であるかのようにアプリケーションが動作したりすることがあります。サーバーのログを確認すると、次のような特定の警告が表示されているはずです。

Warning: POST Content-Length exceeds the limit. upload_max_filesize directive in php.ini in Unknown on line 0

このエラーが特に厄介なのは、PHPが単にファイルをブロックするだけでなく、$_POST$_FILES 配列全体を消去してしまうことが多い点です。そのため、スクリプト側では処理すべきデータを全く受け取ることができなくなります。

原因

PHPのデフォルト設定は、多くの場合かなり制限されています。通常、upload_max_filesize は2MB、post_max_size は8MBに設定されています。これらの制限は、予期しない巨大なファイルのアップロードによってサーバーのリソースが過負荷になるのを防ぐために存在します。

この警告は、送信データの合計サイズ(Content-Length)が post_max_size で定義された値を超えたときに発生します。アップロードするファイルが1つだけであっても、テキストフィールドやフォームのメタデータを含むリクエスト全体が、これらの制限内に収まっている必要があります。

解決ステップ

1. php.ini ファイルの場所を特定する

適切な設定ファイルを見つけるのが最初の難関です。多くのシステムでは複数のPHPバージョンがインストールされており、CLI(コマンドライン)とウェブサーバーで異なる php.ini を使用している場合があるからです。ウェブサーバーの設定パスを確認する最も早い方法は、ドキュメントルートに一時的な info.php ファイルを作成することです。

<?php phpinfo(); ?>

ブラウザでこのファイルにアクセスし、Loaded Configuration File という項目を探してください。一般的なパスは、/etc/php/8.2/fpm/php.ini/etc/php.ini などです。

2. 設定を更新する

nanovim などのエディタでそのファイルを開きます。以下の3つの値を探し、必要に応じて増やします。例えば、100MBのアップロードを許可する場合は次のように設定します。

; 例:制限を100メガバイトに設定
upload_max_filesize = 100M
post_max_size = 110M
memory_limit = 256M

重要なポイント: フォームデータのオーバーヘッドを考慮して、post_max_size は常に upload_max_filesize よりも少し大きく設定してください。また、リクエストを正しく処理するために、memory_limitpost_max_size よりも大きくする必要があります。

3. ウェブサーバーまたはPHPサービスを再起動する

PHPは設定を自動的にリロードしません。PHPリクエストを処理しているサービスを手動で再起動する必要があります。

Ubuntu/Debian上のApacheの場合:

sudo systemctl restart apache2

PHP-FPMを使用したNginxの場合(必要に応じてバージョンを調整してください):

sudo systemctl restart php8.2-fpm

WindowsでXAMPPやWAMPを使用している場合は、コントロールパネルからサービスを停止・開始するだけです。

代替案:.htaccessによる修正(Apacheのみ)

php.ini を編集できない共有ホスティングサービスでは、プロジェクトのルートディレクトリにある .htaccess ファイルを使用して、これらの設定を上書きできることがよくあります。

php_value upload_max_filesize 100M
php_value post_max_size 110M
php_value memory_limit 256M

注意:これは、ホスト側でそのディレクトリに対して AllowOverride Options が有効になっている場合にのみ機能します。

代替案:.user.iniによる修正(CGI/FastCGI)

PHPをFastCGIとして実行しているモダンな共有ホスティングでは、ルートフォルダに .user.ini ファイルを作成できます。.htaccess よりもシンプルです。

upload_max_filesize = 100M
post_max_size = 110M

Nginxユーザーへの重要なヒント

PHP側を修正しても、Nginxには client_max_body_size という独自の内部アップロード制限があります。ファイル送信時にまだ「413 Request Entity Too Large」エラーが発生する場合は、Nginxの設定(通常は /etc/nginx/nginx.conf またはサイト別の設定ファイル)を更新する必要があります。

http {
    ...
    client_max_body_size 100M;
}

Nginxの設定を変更した後は、nginx -t を実行して構文エラーがないか確認し、systemctl reload nginx でリロードしてください。

Related Error Notes