| 
 Проблема с загрузкой файла на сервер Специалисты, подскажите пожалуйста в рещении проблемы. Задача: - необходимо загружать на сервер файлы только определенного типа; - размер загружаемых файлов не должен превышать 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);
}
 | 
| 
 Цитата: 
 <input type="hidden" name="MAX_FILE_SIZE" value="20971520" />в форму и тогда PHP откажется его принимать если значение MAX_FILE_SIZE будет меньше чем у загружаемого файла. Это единственный вариант предотвратить загрузку файла с большим размером на сервер. Что по поводу сервера, проверяй значение $_FILES["filename"]["error"]оно должно равняться нулю при успешном выполнении, в противном случае если оно имеет иное значение значит произошла ошибка... или файл не указали в форме. | 
| 
 Переписал код на нормальный =) Переписал код на нормальный =) 
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);
}
 | 
| 
 if (move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile)) так будет быстрее работать чем копирование | 
| 
 Честно говоря, у меня почему-то так не работает на хостинге. Возможно чудо хостер, воз можно еще невадомая фигня, кто его знает. Пришлось писать copy. | 
| 
 Цитата: 
 Цитата: 
 | 
| 
 Если файлы используются менее 20 Мб, тогда отправка на сервер идет нормально, письма формируются и отправляются на почту. Пустого письма с маленькими файлами еще не разу не приходило. | 
| 
 хрень  творится.. а эхо выводится ? Цитата: 
 | 
| 
 Нет, не выводится, отправка письма осуществляется на этапе загрузки, то есть еще до того, как он полностью загрузится. Потом просто | 
| Часовой пояс GMT +3, время: 15:04. |