Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2011, 16:04
Аспирант
Отправить личное сообщение для shkarbatov Посмотреть профиль Найти все сообщения от shkarbatov
 
Регистрация: 25.07.2011
Сообщений: 45

Как узнать размер загружаемого файла?
Подскажите пожалуйста, как в 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
(
)
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2011, 16:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Яж писал об этом в другом твоем топике.
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2011, 16:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

<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>
Только так, по другому ты никак не отследишь этого, если считаешь что это плохой метод, тогда твой вопрос никогда не будет решен. Пока браузеры не разрешат узнавать размер файлов который планируется отправлять на сервер.
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2011, 16:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от shkarbatov
в принципе можно в таком случае сравнивать с кодом ошибки, и если код ошибки равен 1, тогда писать письмо, что не удалось загрузить файл,
Код ошибки может быть разным, если ошибки не произошло то код будет равен нулю.. В противном случае он может иметь не только значение 1.
Что означают коды ошибок, можешь посмотреть вот здесь
Ответить с цитированием
  #5 (permalink)  
Старый 14.08.2011, 16:34
Аспирант
Отправить личное сообщение для shkarbatov Посмотреть профиль Найти все сообщения от shkarbatov
 
Регистрация: 25.07.2011
Сообщений: 45

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

Всем спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2011, 17:12
Аспирант
Отправить личное сообщение для shkarbatov Посмотреть профиль Найти все сообщения от shkarbatov
 
Регистрация: 25.07.2011
Сообщений: 45

Решил проблему путем добавления 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);
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать размер и расширение файла? Shitbox2 Общие вопросы Javascript 17 23.02.2011 12:26
как зобрать контент из файла? input type="file". ntro123 AJAX и COMET 3 30.12.2010 23:01
XHR: узнать размер загружаемого файла на клиенте lurii AJAX и COMET 9 20.09.2010 09:14
Как узнать текущее значение TreePanel? astral_sight ExtJS 3 23.07.2010 13:03
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21