За последние 24 часа нас посетили 55702 программиста и 1792 робота. Сейчас ищут 914 программистов ...

Как узнать размер загружаемого файла?

Тема в разделе "JavaScript и AJAX", создана пользователем Shkarbatov, 14 авг 2011.

  1. Shkarbatov

    Shkarbatov Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    19
    Симпатии:
    0
    Подскажите пожалуйста, как в 3 случае, узнать размер файла, или хотя бы то, что файл больше upload_max_filesize, если загружаемый файл превышает upload_max_filesize?

    Заранее благодарен!

    HTML:
    1. <form id="form1" action="send_email.php" method="post" enctype="multipart/form-data">
    2.      <input type="file" name="filename">
    3.      <input type="button" value="Загрузить" onClick="tr();">
    4.  </form>
    PHP:
    1.  if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
    2.  {
    3.      if ($_FILES["filename"]["size"] < 1024*20*1024)
    4.      {
    5.          if($type == "jpg")
    6.          {
    7.              if (copy($_FILES['filename']['tmp_name'], $uploadfile))
    8.              {
    9.                  echo "<p>Файл успешно загружен на сервер</p>";
    10.                  $message .= "Файл успешно загружен на сервер.";
    11.                  mail($to, $subject, $message, $headers);
    12.              }
    13.              else
    14.              {
    15.                  echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
    16.                  $message .= "Файл загрузить на сервер не удалось.";                      
    17.                  mail($to, $subject, $message, $headers);
    18.              }
    19.          }
    20.          else
    21.          {
    22.              echo ("Файл не соответствует разрешенному формату");
    23.              $message .= "Файл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
    24.              mail($to, $subject, $message, $headers);
    25.          }
    26.      }
    27.      else
    28.      {
    29.          echo ("Размер файла превышает 20 мегабайт");
    30.          $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";  
    31.          mail($to, $subject, $message, $headers);
    32.      }
    33.  }
    34.  else
    35.  {
    36.      $message .= "Файл не был выбран.";
    37.      mail($to, $subject, $message, $headers);
    38.  }

    1) до 2 Мб - работает правильно
    post_max_size = 2M

    2) до 8 Мб - загружает файлы, но работает не правильно
    upload_max_filesize = 8M

    3) больше 8 Мб - не работает вообще

    ------------------------------------------------
    1) Если я пробую загрузить файлы < 2 Мб, тогда все работает корректно (печатаю содержимое массива $_FILES):

    Array
    (
    [filename] => Array
    (
    [name] => AIPort.dll
    [type] => application/x-msdownload
    [tmp_name] => Z:\tmp\php17C.tmp
    [error] => 0
    [size] => 258048
    )
    )
    ------------------------------------------------
    2) Если я пробую загрузить файлы от 2 Мб до 8 Мб, тогда я получаю вот такое вот (печатаю содержимое массива $_FILES), понятно что появляются ошибка из-за того, что post_max_size = 2M, в принципе можно в таком случае сравнивать с кодом ошибки, и если код ошибки равен 1, тогда писать письмо, что не удалось загрузить файл, так как он слишком большой, с этим понятно, но вот с 3 пунктом:

    Array
    (
    [filename] => Array
    (
    [name] => EAGLES - hotel california.mp3
    [type] =>
    [tmp_name] =>
    [error] => 1
    [size] => 0
    )
    )
    ------------------------------------------------
    3) Если же я пробую загружать файлы больше 8 Мб, тогда я получаю следующее (печатаю содержимое массива $_FILES), из-за того, что upload_max_filesize = 8M, это тоже понятно, но как в таком случае мне узнать размер файла, ведь даже кода ошибки не выводится, и письмо с текстом, мол файл сшиком большой тоже не сформировать:

    Array
    (
    )
    ------------------------------------------------
    Подскажите пожалуйста, как в третьем случае, узнать, что файл слишком большой, если загружаемый файл превышает upload_max_filesize?

    Заранее благодарен!
     
  2. Shkarbatov

    Shkarbatov Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    19
    Симпатии:
    0
    Решил проблему путем добавления hidden поля в html форму, а далее анализирую $_FILES["filename"]["error"]
    Может пригодиться кому-то еще.

    Спасибо всем за помощь и консультирование!

    HTML:
    1. <input type="hidden" name="MAX_FILE_SIZE" value="15728640" />
    2. <input type="file" name="filename">
    3. <input type="button" value="Загрузить">
    PHP:
    1. if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
    2. {
    3.     if ($_FILES["filename"]["error"] == 0)
    4.     {
    5.         if($type == "jpg")
    6.         {
    7.             if (copy($_FILES['filename']['tmp_name'], $uploadfile))
    8.             {
    9.                 echo "<p>Файл успешно загружен на сервер</p>";
    10.                 $message .= "Файл успешно загружен на сервер.";
    11.                 $asd = mail($to, $subject, $message, $headers);
    12.             }
    13.             else  
    14.             {
    15.                 echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
    16.                 $message .= "Файл загрузить на сервер не удалось.";                      
    17.                 mail($to, $subject, $message, $headers);
    18.             }
    19.         }
    20.         else
    21.         {
    22.             echo ("Файл не соответствует разрешенному формату");
    23.             $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
    24.             mail($to, $subject, $message, $headers);
    25.         }
    26.     }
    27.     elseif ($_FILES["filename"]["error"] == 1 || 2)
    28.     {
    29.         echo ("Размер файла превышает 15 мегабайт");
    30.         $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 15 МБ.";   
    31.         mail($to, $subject, $message, $headers);
    32.     }
    33.     elseif ($_FILES["filename"]["error"] == 3)
    34.     {
    35.         $message .= "\r\n\r\n\r\nФайл загружен на сервер частично.";   
    36.         mail($to, $subject, $message, $headers);
    37.     }  
    38.     else
    39.     {
    40.         $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось.";      
    41.         mail($to, $subject, $message, $headers);
    42.     }
    43. }
    44. else
    45. {
    46.     mail($to, $subject, $message, $headers);
    47. }