Показать сообщение отдельно
  #1 (permalink)  
Старый 14.08.2011, 16:04
Аспирант
Отправить личное сообщение для shkarbatov Посмотреть профиль Найти все сообщения от shkarbatov
 
Регистрация: 25.07.2011
Сообщений: 45

Как узнать размер загружаемого файла?
Подскажите пожалуйста, как в 3 случае, узнать размер файла, или хотя бы то, что файл больше upload_max_filesize, если загружаемый файл превышает upload_max_filesize?

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

<form id="form1" action="send_email.php" method="post" enctype="multipart/form-data">
     <input type="file" name="filename">
     <input type="button" value="Загрузить" onClick="tr();">
 </form>


if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
 {
     if ($_FILES["filename"]["size"] < 1024*20*1024)
     {
         if($type == "jpg")
         {
             if (copy($_FILES['filename']['tmp_name'], $uploadfile))
             {
                 echo "<p>Файл успешно загружен на сервер</p>";
                 $message .= "Файл успешно загружен на сервер.";
                 mail($to, $subject, $message, $headers);
             }
             else 
             {
                 echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
                 $message .= "Файл загрузить на сервер не удалось.";                       
                 mail($to, $subject, $message, $headers);
             }
         }
         else
         {
             echo ("Файл не соответствует разрешенному формату");
             $message .= "Файл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
             mail($to, $subject, $message, $headers);
         }
     }
     else
     {
         echo ("Размер файла превышает 20 мегабайт");
         $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";   
         mail($to, $subject, $message, $headers);
     }
 }
 else
 {
     $message .= "Файл не был выбран.";
     mail($to, $subject, $message, $headers);
 }


-----------------------------------------------

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
(
)
Ответить с цитированием