Специалисты, подскажите пожалуйста в рещении проблемы. Задача: - необходимо загружать на сервер файлы только определенного типа; - размер загружаемых файлов не должен превышать 20 Мб; - если файл меньше 20 Мб и соответствует разрешенному типу формируется письмо с текстом и отправляется на почту - если файл больше 20 Мб или не соответствует разрешенному типу формируется письмо с текстом об ошибке и отправляется на почту - если файл больше 20 Мб, тогда не надо ждать пока он загрузится на сервер (этого пока нет, пробывал с полем hidden, но что-то не получается) В принципе все реализовано, вот только есть одно НО! Если файл больше 20 Мб, тогда сервер ждет его полной загрузки, и при формировании письма, он отправляет на почту абсолютно пустое письмо без текста и темы. Подскажите пожалуйста, как реализовать проверку размера файла, что-бы не ждать его полной загрузки на сервер, и объяснить, или показать на мою ошибку, почему если файл больше 20 Мб такое происходит. upload_max_filesize => 32M => 32M Текст письма содержится в переменной $message. Заранее благодарен! -------------------------------------------------------- Есть html-форма: HTML: <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> -------------------------------------------------------- Серверная часть: PHP: // Проверка файла на размер if($_FILES["filename"]["size"] > 1024*20*1024) { echo ("Размер файла превышает 20 мегабайт"); $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ."; mail($to, $subject, $message, $headers); echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>"; // Проверяем загружен ли файл if(is_uploaded_file($_FILES["filename"]["tmp_name"])) { // Если файл загружен успешно, перемещаем его из временной директории в конечную if (copy($_FILES['filename']['tmp_name'], $uploadfile)) { echo "<p>Файл успешно загружен на сервер</p>"; $message .= "\r\n\r\n\r\nФайл успешно загружен на сервер."; mail($to, $subject, $message, $headers); echo "<meta http-equiv='refresh'; content='5; url=/index.php'> "; } else { echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>"); $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось."; mail($to, $subject, $message, $headers); echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>"; } } // Проверка на несоответсвие типа elseif ($type !== "jpg") { echo ("Файл не соответствует разрешенному формату"); $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату."; mail($to, $subject, $message, $headers); echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'> "; } } else { $asd = mail($to, $subject, $message, $headers); }
Переписал код на нормальный =) А чего будет сложно? Переписал код на нормальный =) PHP: 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); }