Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как узнать размер загружаемого файла? (https://javascript.ru/forum/server/20706-kak-uznat-razmer-zagruzhaemogo-fajjla.html)

shkarbatov 14.08.2011 16:04

Как узнать размер загружаемого файла?
 
Подскажите пожалуйста, как в 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
(
)

devote 14.08.2011 16:06

Яж писал об этом в другом твоем топике.

devote 14.08.2011 16:09

<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>
Только так, по другому ты никак не отследишь этого, если считаешь что это плохой метод, тогда твой вопрос никогда не будет решен. Пока браузеры не разрешат узнавать размер файлов который планируется отправлять на сервер.

devote 14.08.2011 16:13

Цитата:

Сообщение от shkarbatov
в принципе можно в таком случае сравнивать с кодом ошибки, и если код ошибки равен 1, тогда писать письмо, что не удалось загрузить файл,

Код ошибки может быть разным, если ошибки не произошло то код будет равен нулю.. В противном случае он может иметь не только значение 1.
Что означают коды ошибок, можешь посмотреть вот здесь

shkarbatov 14.08.2011 16:34

Да, спасибо, уже с этим разобрался. А именно анализирую по коду ошибок 1 и 2.

Всем спасибо!

shkarbatov 14.08.2011 17:12

Решил проблему путем добавления 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, время: 10:42.