|
|
|
| Подскажите пожалуйста, как в 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
(
) | |
|
|
|
|
|
|
|
для: shkarbatov
(14.08.2011 в 15:58)
| | Максимальный размер загружаемого файла задается в директиве upload_max_filesize файла php.ini
В массиве $_FILE значение переменной error может быть следующим:
upload_err_ok: нет ошибки, файл закачался;
upload_err_no_file: пользователь не выбрал файл в браузере;
uploaderrinisize: превышен максимальный размер файла, задаваемый в
директиве upioad_max_fiiesize файла php.ini;
upload_err_form_size: превышен размер, задаваемый в необязательном поле
формы с именем upload_err_form_size;
upload_err_partial: в результате обрыва соединения файл не был докачан до
конца.
|
| |
|
|
|
|
|
|
|
для: shkarbatov
(14.08.2011 в 15:58)
| | Решил проблему путем добавления 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);
}
|
| |
|
|
|
|
|
|
|
для: shkarbatov
(14.08.2011 в 15:58)
| | . | |
|
|
|
|