ファイルのアップロード 2 | ストックオーディオコンバーター

エラーチェック

PHP公式のユーザーノートや、qiitaの記事を参考に、

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

コメントを残す

メールアドレスが公開されることはありません。