Как узнать размер загружаемого файла?
Подскажите пожалуйста, как в 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 ( ) |
Яж писал об этом в другом твоем топике.
|
<form id="form1" action="send_email.php" method="post" enctype="multipart/form-data"> <input type="file" name="filename"> <input type="hidden" name="MAX_FILE_SIZE" value="20971520" /> <input type="button" value="Загрузить" onClick="tr();"> </form>Только так, по другому ты никак не отследишь этого, если считаешь что это плохой метод, тогда твой вопрос никогда не будет решен. Пока браузеры не разрешат узнавать размер файлов который планируется отправлять на сервер. |
Цитата:
Что означают коды ошибок, можешь посмотреть вот здесь |
Да, спасибо, уже с этим разобрался. А именно анализирую по коду ошибок 1 и 2.
Всем спасибо! |
Решил проблему путем добавления hidden поля в html форму, а далее анализирую $_FILES["filename"]["error"]
<input type="hidden" name="MAX_FILE_SIZE" value="15728640" /> <input type="file" name="filename"> <input type="button" value="Загрузить"> if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"])) { if ($_FILES["filename"]["error"] == 0) { if($type == "jpg") { if (copy($_FILES['filename']['tmp_name'], $uploadfile)) { echo "<p>Файл успешно загружен на сервер</p>"; $message .= "Файл успешно загружен на сервер."; $asd = mail($to, $subject, $message, $headers); } else { echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>"); $message .= "Файл загрузить на сервер не удалось."; mail($to, $subject, $message, $headers); } } else { echo ("Файл не соответствует разрешенному формату"); $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату."; mail($to, $subject, $message, $headers); } } elseif ($_FILES["filename"]["error"] == 1 || 2) { echo ("Размер файла превышает 15 мегабайт"); $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 15 МБ."; mail($to, $subject, $message, $headers); } elseif ($_FILES["filename"]["error"] == 3) { $message .= "\r\n\r\n\r\nФайл загружен на сервер частично."; mail($to, $subject, $message, $headers); } else { $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось."; mail($to, $subject, $message, $headers); } } else { mail($to, $subject, $message, $headers); } |
Часовой пояс GMT +3, время: 12:10. |