ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
エラーの全体像
Illuminate\Http\Exceptions\PostTooLargeException
The POST data is too large.
at vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php
HTTP Status: 413 Payload Too Large
Laravel の ValidatePostSize ミドルウェアがリクエストサイズと post_max_size を比較し、超えていれば即座にこの例外を投げます。$_POST や $_FILES が空になるのを未然に検知する仕組みです。
原因の切り分け
| 確認 | 方法 | 該当時の対処 |
|---|---|---|
| php.ini の値 | php -i | grep post_max_size | 対処1 |
| php-fpm 用の ini を編集したか | php --ini でロードされる ini を確認 | 対処1(FPM 用) |
| Nginx の上限 | nginx -T | grep client_max_body_size | 対処2 |
| Apache の上限 | httpd -M | grep limit | 対処2 |
| サービス再起動したか | systemctl status php8.3-fpm | 再起動 |
対処1: php.ini を編集
; /etc/php/8.3/fpm/php.ini (Laravel の本番では FPM 用)
; /etc/php/8.3/cli/php.ini (CLI 用、artisan 用)
; 1 ファイルあたり最大サイズ
upload_max_filesize = 50M
; POST 全体のサイズ上限(複数ファイル+他フィールド合計)
; ★ upload_max_filesize より大きく設定
post_max_size = 60M
; メモリ上限(画像処理する場合大きめに)
memory_limit = 512M
; 同時に送れるファイル数
max_file_uploads = 20
; アップロード時間
max_execution_time = 300
max_input_time = 300
編集後の反映:
# php-fpm を再起動
sudo systemctl restart php8.3-fpm
# Apache の mod_php なら Apache を再起動
sudo systemctl restart apache2
# 反映確認
php -i | grep -E "post_max_size|upload_max_filesize"
# 本番 FPM 経由なら phpinfo() を吐く一時 PHP を作って確認:
# <?php phpinfo();
対処2: Nginx の client_max_body_size
Nginx はPHP より先にリクエストサイズを判定して 413 を返します。php.ini だけ上げても Nginx で弾かれるので両方必須:
# /etc/nginx/nginx.conf (http コンテキスト)
http {
client_max_body_size 60M;
}
# または特定 server / location だけ
server {
listen 80;
server_name example.com;
client_max_body_size 60M; # ← サーバ全体
location /api/upload {
client_max_body_size 200M; # ← このパスだけ大きめ
}
}# 構文チェック → 反映
sudo nginx -t
sudo systemctl reload nginx
対処3: Apache の LimitRequestBody
# .htaccess または httpd.conf
LimitRequestBody 62914560 # 60MB (バイト単位)
# 特定パスだけ大きく
<Directory "/var/www/html/upload">
LimitRequestBody 209715200 # 200MB
</Directory>
# mod_php の場合、ini 値も .htaccess で上書き可
php_value upload_max_filesize 50M
php_value post_max_size 60M
php_value memory_limit 512M
対処4: Laravel ミドルウェアでより親切なメッセージ
標準では 413 + 例外画面ですが、ハンドラでカスタマイズできます:
// app/Exceptions/Handler.php (Laravel 10 以前)
use Illuminate\Http\Exceptions\PostTooLargeException;
public function register(): void
{
$this->renderable(function (PostTooLargeException $e, $request) {
if ($request->expectsJson()) {
return response()->json([
'message' => 'アップロードサイズが大きすぎます (上限 60MB)',
'code' => 'POST_TOO_LARGE',
], 413);
}
return response()->view('errors.413', [], 413);
});
}
// Laravel 11+ bootstrap/app.php
->withExceptions(function ($exceptions) {
$exceptions->render(function (PostTooLargeException $e, $request) {
if ($request->expectsJson()) {
return response()->json([
'message' => 'アップロードサイズが大きすぎます',
], 413);
}
return response()->view('errors.413', [], 413);
});
})
サイズ単位の注意
| 場所 | 単位 | 例 |
|---|---|---|
| php.ini | K / M / G | post_max_size = 60M |
| Nginx | k / m / g | client_max_body_size 60m; |
| Apache | バイト数(数字のみ) | LimitRequestBody 62914560 |
php-fpm の編集箇所
Laravel 本番では通常 php-fpm 経由で動きます。CLI 用 php.ini を編集しても Web 経由のアップロードには反映されません:
# CLI 用 ini の場所
php --ini
# Configuration File (php.ini) Path: /etc/php/8.3/cli
# Loaded Configuration File: /etc/php/8.3/cli/php.ini
# FPM 用は別ディレクトリ
ls /etc/php/8.3/fpm/php.ini
# FPM プール(プロセスごとの設定)も影響
ls /etc/php/8.3/fpm/pool.d/www.conf
# プールごとに ini 値を上書き可能
# /etc/php/8.3/fpm/pool.d/www.conf
# php_admin_value[post_max_size] = 100M
# php_admin_value[upload_max_filesize] = 100M
根本対策: 巨大ファイル UP の設計
| 方針 | 説明 |
|---|---|
| 画像のフロント圧縮 | browser-image-compression / Canvas で送信前にリサイズ・圧縮 |
| チャンクアップロード | tus-js-client / resumable.js で分割送信、サーバで結合 |
| S3 直 PUT | 署名付き URL を発行し、ブラウザ→S3 直接送信(API サーバを経由しない) |
| マルチパート S3 | AWS SDK の Multipart Upload で 100MB 以上を効率送信 |
| 動画は HLS / DASH 配信 | 事前にトランスコードし、HTTP で部分配信 |
S3 署名付き URL の例
use Aws\S3\S3Client;
$s3 = new S3Client(['version' => 'latest', 'region' => 'ap-northeast-1']);
$cmd = $s3->getCommand('PutObject', [
'Bucket' => 'my-bucket',
'Key' => 'uploads/' . uniqid() . '.jpg',
'ContentType' => 'image/jpeg',
]);
$presigned = (string) $s3->createPresignedRequest($cmd, '+15 minutes')->getUri();
// → このURLを返し、ブラウザから PUT すれば S3 直アップロード
// Laravel サーバを経由しないので PostTooLargeException 自体起きない
FAQ
Q: php.ini を変更したのに反映されない
A: php-fpm の再起動を忘れているケースが大半。sudo systemctl restart php8.3-fpm 必須。CLI ではなく FPM 用 ini を編集しているかも確認。
Q: 413 が出るが Laravel のスタックトレースが出ない
A: Nginx が 413 を返している(PHP まで届いていない)。Nginx の client_max_body_size を確認。
Q: アップロード途中で接続が切れる
A: Nginx の client_body_timeout / Cloudflare の 100MB 上限 / php-fpm の request_terminate_timeout を確認。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost'
- Add [~] to fillable property to allow mass assignment on [App\~].
- PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in ~
- Changing columns for table "~" requires Doctrine DBAL; install "doctrine/dbal"
- MethodNotAllowedHttpException No message
- Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found
- production.ERROR: No application encryption key has been specified.
- Dotenv values containing spaces must be surrounded by quotes.
- Laravel \ Socialite \ Two \ InvalidStateException
- The page has expired due to inactivity. Please refresh and try again.
- Failed to clone https://github.com/symfony/thanks.git via https, ssh protocol
- Illegal offset type
- Cannot access protected property Illuminate\Http\Request::$...
- Emitted value instead of an instance of Error
- 画像保存時にInternal Server Error
- Failed to authenticate on SMTP server with username ...
- PostTooLargeException
- Database hosts array is empty.
- Invalid request (Unsupported SSL request)
- does not comply with psr-4 autoloading standard. Skipping.
- MySQLのSTR_TO_DATE関数を使用するとnullが返却される問題
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?