カテゴリー別アーカイブ: File API

PHPでupload_max_filesizeを超えている場合のファイルアップロード

PHPでアップロードされたファイルにアクセスするときは, スーパーグローバル変数の$_FILESにアクセスしますが, このときupload_max_filesizeを超えていると, ファイル名やMIMEタイプなど$_FILESに格納されている情報にアクセスできないので, 事前にそれをはじいておく必要があるでしょう. といっても…

$maxSize = ini_get('upload_max_filesize');

 if (preg_match('/(\d+)M/', $maxSize, $matches)) {
    if ($_FILES[$name]['size'] > ((int)$matches[1] * 1000 * 1000)) {
        exit('Exceeds file size that can be uploaded !!');
    }
 }

これではうまくはじけない可能性があります. upload_max_filesizeを超えていると, $_FILESの情報自体がきちんと格納されていない可能性が高いからです.

より柔軟な対応方法としては, JavaScriptのFile APIを使って, クライアントサイド側ではじいておく方法です.

document.querySelector('[type="file"]').addEventListener('change', function(event) {
    //php.iniのupload_max_filesizeにあわせて設定
   var UPLOAD_MAX_FILESIZE = 2 * 1000 * 1000;
   var file = event.target.files[0];

    if (!(file instanceof File)) {
    } else if (file.size > UPLOAD_MAX_FILESIZE) {
         //ファイルサイズを超えているのでアップロードしない
    }
}, false);

もしかしたら, ぼくの知識不足かもしれないので, もっといい方法があれば教えていただきたいです.