php отбрасывает ошибку типа файла для размера файла - PullRequest
0 голосов
/ 06 сентября 2011

Fellas, Я столкнулся с интересной ошибкой в ​​своем коде и не могу выяснить причину.

У меня есть форма с 3 полями. Имя, адрес электронной почты, поля загрузки файлов. После заполнения полей он отправляет материал обратно в тот же файл.

<form enctype="multipart/form-data" method="POST" action="index.php">
    <input type="text" name="name" value="<?php if(isset($_POST['name'])&&!empty($_POST['name'])){ echo $_POST['name'];}?>" maxlength="100" />
    <input type="text" name="email" value="<?php if(isset($_POST['email'])&&!empty($_POST['email'])){ echo $_POST['email'];}?>" maxlength="50" />
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> <input type="file" name="file_upload" size="15" value="<?php if(isset($_FILES["file_upload"]["name"])&&!empty($_FILES["file_upload"]["name"])){ echo $_FILES["file_upload"]["name"];}?>"/>
    <input type="submit" name="submit" value="" id="image-button" />
</form>

Итак, форма отправлена ​​обратно на index.php. Теперь обработка ошибок: (значения полей ошибок на венгерском языке, но я перевожу необходимые поля)

$upload_errors = array(
// http://www.php.net/manual/en/features.file-upload.errors.php
  UPLOAD_ERR_OK         => "Nincsenek hibák.",
  UPLOAD_ERR_INI_SIZE   => "Nagyobb a megengedett fileméretnél.",
  UPLOAD_ERR_FORM_SIZE  => "Nagyobb a form megengedett fileméreténél.",
  UPLOAD_ERR_PARTIAL    => "Részleges feltöltés.",
  UPLOAD_ERR_NO_FILE    => "File nem található.",
  UPLOAD_ERR_NO_TMP_DIR => "Átmeneti könyvtár nem található.",
  UPLOAD_ERR_CANT_WRITE => "Nem írható cél mappa.",
  UPLOAD_ERR_EXTENSION  => "Hibás kiterjesztés."
);



if(isset($_POST['submit'])){
  $errors = array();

  $required_fields = array('name' => 'A név megadása kötelező.', 'email' => 'E-mail cím megadása kötelező.' );
  foreach($required_fields as $key => $value) {
    if (!isset($_POST[$key]) || empty($_POST[$key])) { 
        $errors[] = $value; 
    }
  }

if(!is_valid_email($_POST['email'])){
    $errors[] = 'Set a correct mail address.';
    }

if($_FILES["file_upload"]["size"]>2097152){
    $errors[] = 'Maximum 2MB file size.';
    }   

if(!isset($_FILES["file_upload"]["name"])||empty($_FILES["file_upload"]["name"])){
    $errors[] = 'You must upload a picture!';
    }   

if (($_FILES["file_upload"]["type"] !== "image/png")&& ($_FILES["file_upload"]["type"] !== "image/jpg") && ($_FILES["file_upload"]["type"] !== "image/jpeg") && ($_FILES["file_upload"]["type"] !== "image/pjpeg")){
    $errors[] = 'Only PNG or JPG/JPEG files allowed.';
    }

Когда я пытаюсь загрузить файл размером 2 МБ +, возвращается ошибка:

  • Разрешены только файлы PNG или JPG / JPEG. -

Эта ошибка относится к типу файла! Проверка формы возвращает другую ошибку!

Вопрос:

Почему это происходит? Почему не запускается максимальный размер файла 2 МБ. ошибка ???

1 Ответ

1 голос
/ 06 сентября 2011

Если размер файла превышает upload_max_filesize [документы] (обычно 2 МБ), PHP будет игнорировать файл, установите ['size'] до 0 и ['error'] до UPLOAD_ERR_INI_SIZE.

Отметьте ['error'] вместо ['size'].

См. http://docs.php.net/manual/en/features.file-upload.post-method.php

Кстати, вы не должны полагаться на ["type"], он установлен клиентом, и клиент может установить его на что угодно.

...