ウェブサイトを共有サーバーでホストしています。最大アップロード制限は5MBです。アップロードされたファイルが5MB未満の場合、すべての検証とファイルのアップロードは正常に機能します。しかし、5MBを超えるファイルがアップロードされると、これが表示されます 。ファイルを検証またはサーバーからのアップロード制限未満にするにはどうすればよいですか?
大きなファイルを許可するために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
を使用してファイルサイズを確認し、その後に追加のアクションを実行できます(フォームを無効にし、アップロードしたファイルを削除しますなど)
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
Php.iniで以下のパラメーターを変更します。私のために。
upload_max_filesize = 50M
memory_limit = 512M
max_input_time = -1
max_execution_time = 0
Laravel検証ルールを使用できます。
'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',
サイズ:値
検証中のフィールドのサイズは、指定された値と一致する必要があります。文字列データの場合、値は文字数に対応します。数値データの場合、値は指定された整数値に対応します。配列の場合、サイズは配列のカウントに対応します。ファイルの場合、サイズはキロバイト単位のファイルサイズに対応します。
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);
});
これがお役に立てば幸いです。
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
]);
これらはすべてテストされていませんが、動作するはずです。
5 mbの制限はWebホストによって設定されており、おそらく変更できません。
制限を超えるファイルをアップロードするには、部分的にアップロードする必要があります。
そうするlaravelパッケージ: https://github.com/jildertmiedema/laravel-plupload
max validatorでファイルのサイズを確認できます
'file' => 'required|max:5128'; // max file size: 5M