@smoln

Где здесь ошибка?

Ребята, помогите найти ошибку.
Суть в том, что на почту отправляется файл, но при попытке открыть его уже на компьютере, пишет ошибку, что windows не может открыть это изображение поскольку формат данного файла не поддерживается или отсутствует....... и тд, файл по размеру приходит такой же что отправлял, расширение присутствует такое же, название тоже, на сервер хоста все грузится, открывается. А вот с почты никак...
Вот отрывок кода
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/konkurs/fiels/';
			$filename = date("YmdHis"). basename($_FILES['photo']['name']);
			$uploadfile = $uploaddir .$filename;
			if(move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile)) echo " ";
	$filename=basename($_FILES['photo']['name']);
		$msg = "--$boundary\n"; 
		$msg .= "Content-type: text/html; charset='windows-1251'\n";
		$msg .= "Content-Transfer-Encoding: quoted-printable \n\n";
              $msg .= "Content-Disposition: attachment; filename = '".$filename."' \n\n"; 

	chmod($uploadfile, 0777);

		$fp = fopen($uploadfile,"rb"); 

		if (!$fp) { 
			print_r ($uploadfile); 
			exit(); 
		} 

		$file = fread($fp, filesize($uploadfile)); 
		fclose($fp); 

		$msg.= "Content-Type: application/octet-stream; name = ".$filename."\n\n"; 
		$msg .= "Content-Transfer-Encoding: base64\n\n"; 
		$msg .= "Content-Disposition: attachment; filename = ".$filename."\n\n"; 
		$msg .= chunk_split(base64_encode($file))."\n\n"; 
		$msg.= "--$boundary--\n\n"; 

    mail($mail,$subject, $msg, $headers);
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
1. Сравнить бинарник картинки
2. Посмотреть исходник письма, всё ли там присутствует.

К примеру у вас здесь совсем нет обработки неудачного move_uploaded_file()
И переменная $boundary не определена
И еще, у вас уязвимость - $filename никак не экранируется и не проверяется.
Ответ написан
Комментировать
@smoln Автор вопроса
переменная определена, просто в этот кусок не вставил
$boundary = "--".md5(uniqid(time())); 
 move_uploaded_file() никаких ошибок не выдает, насчет бинар. буду проверять
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Судя по коду, у вас лишние переводы строки внутри заголовков письма.
Код письма должен выглядеть так:
... Здесь основная часть заголовка...
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=abcdef
Content-Transfer-Encoding: 7bit

This is a message in multipart MIME format.
--abcdef
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Привет!
--abcdef
Content-Type: application/xlsx; name=hello.xlsx
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=hello.xlsx

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJ
...
/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJ
--abcdef--

Обратите внимание, что блок заголовков начинается с --boundary, внутри себя пустых строк не содержит, заканчивается первой же пустой строкой, после которой идут данные до следующего --boundary.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы