Как ограничить размер файла загрузки файлов в PHP?

У меня есть форма для загрузки, и я проверяю размер файла и тип файла, чтобы ограничить загруженный файл до 2 мегабайт и файлов .pdf, .jpg, .gif или .png. Моя цель – показать пользователю предупреждение, если оно нарушает одно из этих правил.

Существует четыре сценария:

  1. Правильный размер / правильный тип (рабочий)
  2. Правильный размер / НЕПРАВИЛЬНЫЙ Тип (рабочий)
  3. INCORRECT Размер / Правильный тип ( не работает )
  4. INCORRECT Размер / INCORRECT Тип ( не работает )

С моим текущим кодом всегда отображается неверное сообщение типа, когда размер файла превышает 2 мегабайта (# 4), даже если тип файла правильный (# 3).

Любые идеи почему?

if (isset ( $_FILES['uploaded_file'] ) ) { $file_size = $_FILES['uploaded_file']['size']; $file_type = $_FILES['uploaded_file']['type']; if (($file_size > 2097152)){ $message = 'File too large. File must be less than 2 megabytes.'; echo '<script type="text/javascript">alert("'.$message.'");</script>'; } elseif ( ($file_type != "application/pdf") && ($file_type != "image/jpeg") && ($file_type != "image/jpg") && ($file_type != "image/gif") && ($file_type != "image/png") ){ $message = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.'; echo '<script type="text/javascript">alert("'.$message.'");</script>'; } else { store_uploaded_file($id); } } 

Solutions Collecting From Web of "Как ограничить размер файла загрузки файлов в PHP?"

Что-то, что ваш код не учитывает, показывает несколько ошибок. Как вы уже отметили выше, пользователь может загрузить файл> 2 МБ неправильного типа, но ваш код может сообщить только об одной из проблем. Попробуйте что-нибудь вроде:

 if(isset($_FILES['uploaded_file'])) { $errors = array(); $maxsize = 2097152; $acceptable = array( 'application/pdf', 'image/jpeg', 'image/jpg', 'image/gif', 'image/png' ); if(($_FILES['uploaded_file']['size'] >= $maxsize) || ($_FILES["uploaded_file"]["size"] == 0)) { $errors[] = 'File too large. File must be less than 2 megabytes.'; } if(!in_array($_FILES['uploaded_file']['type'], $acceptable)) && (!empty($_FILES["uploaded_file"]["type"]))) { $errors[] = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.'; } if(count($errors) === 0) { move_uploaded_file($_FILES['uploaded_file']['tmpname'], '/store/to/location.file'); } else { foreach($errors as $error) { echo '<script>alert("'.$error.'");</script>'; } die(); //Ensure no more processing is done } } 

Посмотрите на документы для move_uploaded_file() (это называется move not store) для большего количества.

Надеюсь это поможет 🙂

 if(isset($_POST['submit'])){ ini_set("post_max_size", "30M"); ini_set("upload_max_filesize", "30M"); ini_set("memory_limit", "20000M"); $fileName='product_demo.png'; if($_FILES['imgproduct']['size'] > 0 && (($_FILES["imgproduct"]["type"] == "image/gif") || ($_FILES["imgproduct"]["type"] == "image/jpeg")|| ($_FILES["imgproduct"]["type"] == "image/pjpeg") || ($_FILES["imgproduct"]["type"] == "image/png") && ($_FILES["imgproduct"]["size"] < 2097152))){ if ($_FILES["imgproduct"]["error"] > 0){ echo "Return Code: " . $_FILES["imgproduct"]["error"] . "<br />"; } else { $rnd=rand(100,999); $rnd=$rnd."_"; $fileName = $rnd.trim($_FILES['imgproduct']['name']); $tmpName = $_FILES['imgproduct']['tmp_name']; $fileSize = $_FILES['imgproduct']['size']; $fileType = $_FILES['imgproduct']['type']; $target = "upload/"; echo $target = $target .$rnd. basename( $_FILES['imgproduct']['name']) ; move_uploaded_file($_FILES['imgproduct']['tmp_name'], $target); } } else { echo "Sorry, there was a problem uploading your file."; } } 

Если вы ищете жесткий лимит для всех загрузок на сайте, вы можете ограничить их в php.ini, установив следующее:

`upload_max_filesize = 2M“ post_max_size = 2M`

который установит максимальный уровень загрузки до 2 МБ

 var sizef = document.getElementById('input-file-id').files[0].size; if(sizef > 210000){ alert('sorry error'); }else { //action } 

Надеюсь, это полезно …

форма:

 <form action="check.php" method="post" enctype="multipart/form-data"> <label>Upload An Image</label> <input type="file" name="file_upload" /> <input type="submit" name="upload"/> </form> 

check.php:

 <?php if(isset($_POST['upload'])){ $maxsize=2097152; $format=array('image/jpeg'); if($_FILES['file_upload']['size']>=$maxsize){ $error_1='File Size too large'; echo '<script>alert("'.$error_1.'")</script>'; } elseif($_FILES['file_upload']['size']==0){ $error_2='Invalid File'; echo '<script>alert("'.$error_2.'")</script>'; } elseif(!in_array($_FILES['file_upload']['type'],$format)){ $error_3='Format Not Supported.Only .jpeg files are accepted'; echo '<script>alert("'.$error_3.'")</script>'; } else{ $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file_upload"]["name"]); if(move_uploaded_file($_FILES["file_upload"]["tmp_name"], $target_file)){ echo "The file ". basename($_FILES["file_upload"]["name"]). " has been uploaded."; } else{ echo "sorry"; } } } ?>