Memo

メモ > サーバ > 各論: トラブル対応例 > PHPでファイルをアップロードできない / タイムアウトする

■PHPでファイルをアップロードできない / タイムアウトする
PHPの初期設定では2MBまでしか受け付けない。それ以上のサイズだと、ファイルを選択しなかったときと同じ扱いになる php.iniや.htaccessで、upload_max_filesizeとそれに関連する設定を変更する必要がある。 以下は php.ini での、10MBまでのアップロードを受け付けるための設定例
max_execution_time = 120 memory_limit = 256M post_max_size = 16M upload_max_filesize = 10M
以下は .htaccess での、10MBまでのアップロードを受け付けるための設定例
php_value max_execution_time 120 php_value memory_limit 256M php_value post_max_size 16M php_value upload_max_filesize 10M
PHPでファイルアップロードサイズの上限を変更 http://refirio.org/view/347 ■nginx Webサーバにnginxを使用している場合、「413 Request Entity Too Large」というエラーになる client_max_body_sizeの設定が必要
# vi /etc/nginx/nginx.conf
server { client_max_body_size 256M;
# service nginx reload
Nginx での 413 Request Entity Too Large エラーの対処法 - Qiita https://qiita.com/takecian/items/639deeae094466de6546 また先の手順で php.ini を編集した後、以下のように php-fpm を再起動する必要がある
# service php-fpm restart
■タイムアウト PHPのタイムアウト設定は、主に以下を確認する
# vi /etc/php.ini
max_input_time = 60 … ユーザからのアップロードを受け付ける秒数 max_execution_time = 600 … スクリプト実行時間
Apacheの場合は以下も設定する
# vi /etc/httpd/conf/httpd.conf
Timeout 60 … リクエストを受け取ってから処理完了までの待機時間
PHPでファイルをアップロードするときの設定 http://www.maidsphere.jp/archive/PHP%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A2%... nginxの場合は以下も設定する
# vi /etc/nginx/nginx.conf
fastcgi_connect_timeout 60; fastcgi_read_timeout 60; fastcgi_send_timeout 60;
具体例としてphp-fpm+nginxの場合、以下のように設定すればタイムアウトが5分になるはず(要検証)
# vi /etc/nginx/nginx.conf
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; keepalive_timeout 315;
# vi /etc/php-fpm.d/www.conf
request_terminate_timeout 300
設定したら、php-fpmとnginxを再起動する
# systemctl restart php-fpm # systemctl restart nginx
Nginx+PHP-FPMでタイムアウトを伸ばす - WP Advisor https://hacknote.jp/archives/2594/ nginx でupstream timed outエラーが発生した時の対処 | レンタルサーバー・自宅サーバー設定・構築のヒント https://server-setting.info/centos/nginx-upstream-timed-out.html AWSを使用している場合、ロードバランサーやCloudFrontの設定も必要 504 Gateway Time-out が出た際は Elastic Load Balancing の設定にも注意しよう - Qiita https://qiita.com/kotarella1110/items/169ddcef03983f5d64b2 ただしCloudFrontは、タイムアウトを60秒以上にする場合は申請が必要なので注意 いますぐ使う CloudFront - Qiita https://qiita.com/sasasin/items/0f0ec1a90af6295589f9 ディストリビューションを作成または更新する場合に指定する値 - Amazon CloudFront https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-spe... ■データベース アップロードファイルをデータベースに保存する場合、データベースの設定にも影響を受ける サーバのログファイルに
PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 7680 bytes)
というエラーがあったり、アップロード時に画面に
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
と表示されたりする場合、データベースの設定が原因の可能性がある。 MySQLの場合、max_allowed_packetの上限を上げればいい。 通常のMySQLならmy.cnfで設定、RDSならパラメータグループの編集で対応できる。 (パラメータグループの反映にはRDSの再起動が必要と紹介されているが、再起動しなくても反映された。) インポート時に「MySQL server has gone away」が発生したときの対処 http://company.nankikumano.jp/contents/tech_info/104/ Amazon RDS編〜大きなデータのインポート(MySQL server has gone awayが発生した時)編〜 http://recipe.kc-cloud.jp/archives/3963

Advertisement