|
|
|
| Специалисты, подскажите пожалуйста в рещении проблемы.
Задача:
- необходимо загружать на сервер файлы только определенного типа;
- размер загружаемых файлов не должен превышать 20 Мб;
- если файл меньше 20 Мб и соответствует разрешенному типу формируется письмо с текстом и отправляется на почту
- если файл больше 20 Мб или не соответствует разрешенному типу формируется письмо с текстом об ошибке и отправляется на почту
- если файл больше 20 Мб, тогда не надо ждать пока он загрузится на сервер (этого пока нет, пробывал с полем hidden, но что-то не получается)
В принципе все реализовано, вот только есть одно НО!
Если файл больше 20 Мб, тогда сервер ждет его полной загрузки, и при формировании письма, он отправляет на почту абсолютно пустое письмо без текста и темы.
Подскажите пожалуйста, как реализовать проверку размера файла, что-бы не ждать его полной загрузки на сервер, и объяснить, или показать на мою ошибку, почему если файл больше 20 Мб такое происходит.
upload_max_filesize => 32M => 32M
Текст письма содержится в переменной $message.
Заранее благодарен!
--------------------------------------------------------
Есть 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>
|
--------------------------------------------------------
Серверная часть:
// Проверка файла на размер
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);
}
|
| |
|
|
|
|
|
|
|
для: shkarbatov
(11.08.2011 в 20:09)
| | если файл больше 20 Мб, тогда не надо ждать пока он загрузится на сервер (этого пока нет, пробывал с полем hidden, но что-то не получается)
по моему чистыми средствами php это реальзовать не возможно. На Js и As делабт подобное.
elseif ($type !== "jpg") стоит поменять на
elseif ($type != "jpg") потому что переменная может и будет содержать значение jpg, но ни когда не будет этого же типа. | |
|
|
|
|
|
|
|
для: shkarbatov
(11.08.2011 в 20:09)
| | Попробуйте добавить скрытое поле
<input type="hidden" name="MAX_FILE_SIZE" value="20971520" />
|
| |
|
|
|
|
|
|
|
для: cheops
(11.08.2011 в 20:43)
| | Подскажите, что это дает? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(11.08.2011 в 20:58)
| | Скрытое поле ставится перед полем выбора файла, и в value находится размер который рубит загрузку файлов, если размер файла больше чем указано в value, то загрузка должна прекратиться.
Я так делал, вот только оно почему-то не на что не повлияло =( | |
|
|
|
|
|
|
|
для: shkarbatov
(12.08.2011 в 00:01)
| | кто сказал что оно должно что-то рубить?
скрытое поле это просто "пассивная констана" которая отправляется из формы выбранным методом вместе с осталными данными введенными пользователем, не более того | |
|
|
|
|
|
|
|
для: Valick
(12.08.2011 в 00:07)
| | Я имел ввиду смысл, зачем она вообще используется. Сама по себе она понятное дело ничего не делает, абсолютно с вами согласен. | |
|
|
|
|
|
|
|
|
для: bab-nike
(12.08.2011 в 00:46)
| | Спасибо конечно, но это не совсем то, что мне надо. И видео файлы на сервер будет запрещено загружать =) | |
|
|
|