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 以下のように、PHPプログラム内で設定を変更することもできる。 ただしpost_max_sizeやupload_max_filesizeは、この方法で変更することはできないので注意。 (memory_limitは変更できるので、部分的な設定は行える。)
ini_set('memory_limit', '256M');
■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の設定にも注意。 詳細は AWS.txt の「ロードバランサー」「CloudFront」にある「タイムアウト時間を調整する」を参照。 ■データベース アップロードファイルをデータベースに保存する場合、データベースの設定にも影響を受ける。 サーバのログファイルに
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