エラーチェック
try {
if(!isset($file['error'][0])||!is_int($file['error'][0])){
throw new RuntimeException('入力パラメーターが不正です。');
}
switch($file['error'][0]){
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new RuntimeException('ファイルが選択されていません。');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('ファイルサイズが制限を超えています。');
default:
throw new RuntimeException('ファイルの取得に失敗しました。');
}
//エラーがなければ処理を続ける
・・・
} catch (RuntimeException $e) {
$data['errorMsg'] = $e->getMessage();
}
$_FILES
に格納されているエラーコード(前記事参考)を判定します。まず、isset()
で値が格納されているかどうかと、エラーコードは整数なのでis_int()
を使って確認します。その後の条件分岐も含めて、もしエラーがあれば、後の処理を省略し、AJAXでクライアントに送信する配列$data
に、指定したエラーメッセージを格納します。
ファイルサイズ
PHPとNginxでそれぞれ設定項目があります。PHP側の/etc/php.ini
で、ファイルのPOST送信に関連する項目は2つあり、ファイルサイズを20MB以下にする場合、
post_max_size = 20M
upload_max_filesize = 20M
名前のとおり、前者はPOST送信に、後者はファイル送信に関する設定項目です。
Nginx側の/etc/nginx/nginx.conf
では、
server {
・・・
client_max_body_size 20M;
・・・
}
デフォルトでのサイズ制限は1Mなので、音声ファイルなどを扱う場合には、このように記述する必要があります。
これらの設定を反映させるために、PHP-FPMとNginxをそれぞれ再起動します。
sudo systemctl restart php-fpm.service
sudo systemctl restart nginx.service
URL: sac.ringil-music.com
環境: さくらのVPS・Centos7・Nginx・PHP-FPM