web-dev-qa-db-ja.com

Laravel最大アップロードサイズの制限

ウェブサイトを共有サーバーでホストしています。最大アップロード制限は5MBです。アップロードされたファイルが5MB未満の場合、すべての検証とファイルのアップロードは正常に機能します。しかし、5MBを超えるファイルがアップロードされると、これが表示されます enter image description here 。ファイルを検証またはサーバーからのアップロード制限未満にするにはどうすればよいですか?

11
baig772

大きなファイルを許可するためにPHP制限を変更することに興味がないようです。最大アップロードを5MBにしたいようで、それ以上の場合は適切な応答を返します。

app/Exceptions/Handler.phpの例外ハンドラー内でFileException例外を処理できます。 renderメソッドを更新して、必要なコードを追加します。たとえば、検証例外を返す場合は、FileException例外の例外ハンドラー内で検証を処理する必要があります。

public function render($request, Exception $exception)
{
    if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) {
        // create a validator and validate to throw a new ValidationException
        return Validator::make($request->all(), [
            'your_file_input' => 'required|file|size:5000',
        ])->validate();
    }

    return parent::render($request, $exception);
}

これはテストされていませんが、一般的なアイデアを提供するはずです。

JavaScriptを介してクライアント側の検証を行うこともできます。これにより、大きすぎるファイルが実際にサーバーに送信されることはありませんが、クライアントによってjavascriptを無効にしたり削除したりできます。 。

クライアント側の検証では、ファイル入力の「変更」イベントにイベントハンドラーをアタッチすると、this.files[0].sizeを使用してファイルサイズを確認し、その後に追加のアクションを実行できます(フォームを無効にし、アップロードしたファイルを削除しますなど)

8
patricus

post_max_sizeおよびpload_max_filesizeは、php.iniファイルを設定するために設定できるディレクティブですOR .htaccessファイルOR httpd.confファイル。

php.iniの例:

post_max_size=15M
upload_max_filesize=15M

。htaccessの例:

php_value post_max_size=15M
php_value upload_max_filesize=15M

httpd.confの例:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html/example/
    ErrorLog /var/log/httpd/error.log
    <Directory /var/www/html/example/>
      AllowOverride None
      <IfModule mod_php5.c>
        php_value post_max_size=15M
        php_value upload_max_filesize=15M
      </IfModule>
    </Directory>
</VirtualHost>
$validator = Validator::make($request->all(), [
    'file' => 'max:5120', //5MB 
]);

あなたのコントローラーで

php.iniで

upload_max_filesize = 10MB
6
Exprator

Php.iniで以下のパラメーターを変更します。私のために。

upload_max_filesize = 50M
memory_limit = 512M
max_input_time = -1
max_execution_time = 0
2
vivek s vamja

Laravel検証ルールを使用できます。

 'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',

サイズ:値

検証中のフィールドのサイズは、指定された値と一致する必要があります。文字列データの場合、値は文字数に対応します。数値データの場合、値は指定された整数値に対応します。配列の場合、サイズは配列のカウントに対応します。ファイルの場合、サイズはキロバイト単位のファイルサイズに対応します。

検証とその使用法について詳しく読むことができます。

2
Alankar More

laravelでは、次のように検証できます-

$validator = Validator::make($request->all(), [
    'file' => 'max:5120',
]);

値はキロバイト単位です。つまり、最大:10240 =最大10 MB。そしてjqueryで-

入力フィールドのonchangeイベントにバインドします

$('#upFile').bind('change', function() {

  //this.files[0].size         gets the size of your file and then you can validate accourdingly...
  alert(this.files[0].size);

});

これがお役に立てば幸いです。

0
Suniti Yadav

JQuery/javascriptを使用してこれを行うことができます(つまり、ファイルはアップロードされませんが、PHPスクリプトに送信される前にファイルを確認できます)

$('#myFile').bind('change', function() {
  let filesize = this.files[0].size // On older browsers this can return NULL.
  let filesizeMB = (filesize / (1024*1024)).toFixed(2);

  if(filesizeMB <= 5) {
      // Allow the form to be submitted here.
  } else {
      // Don't allow submission of the form here.
  }

});

しかし、とにかく常にサーバー側の検証を行います。より強力なWebサイトに移動しても、癖のないWebサイトを機能させたい場合。

$validator = Validator::make($request->all(), [
    'file' => 'max:5120', //5MB
]);

これらはすべてテストされていませんが、動作するはずです。

0
Classified

5 mbの制限はWebホストによって設定されており、おそらく変更できません。

制限を超えるファイルをアップロードするには、部分的にアップロードする必要があります。

そうするlaravelパッケージ: https://github.com/jildertmiedema/laravel-plupload

0
Quezler

max validatorでファイルのサイズを確認できます

'file' => 'required|max:5128'; // max file size: 5M
0
Farshad