【Laravel】PostTooLargeExceptionがでた場合の対策

えび

大きい画像をアップロードするとき、
Illuminate\Http\Exceptions\PostTooLargeException
が出たのでそれの対策メモ

発生したエラー

アップロードされるコンテンツ (=$request->server('CONTENT_LENGTH'))が、
phpのpost_max_sizeを超えたときに発生するException

なので、phpの設定を変更する

sudo vi /etc/php.in
# 下記パラメータの値を変更
post_max_size = 80M
upload_max_filesize = 80M
memory_limit = -1
# 再起動
sudo service httpd restart
# 上記でも反映されない場合はこちらも実行
sudo service php-fpm restart

Packets out of order. が出た場合

続いて、元のエラーは解消されたけど、
Packets out of order. Expected 2 received 1. Packet size=60
が出るようになった・・

調べてみると、config/databases.phpoptions
PDO::ATTR_EMULATE_PREPARES => trueを足すといいよとあったので足してみた

  • config/databases.php
      'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            // ⭐️ ここを更新
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
                    PDO::ATTR_EMULATE_PREPARES => true,
                ]) : [PDO::ATTR_EMULATE_PREPARES => true],
        ],

しかし結果は変わらず・・

mysqlパケット容量を上げることで対応した

  • my.cnf
max_allowed_packet = 16M