[php] Прикрепление файла к письму - теряется часть информации

Статус
В этой теме нельзя размещать новые ответы.

cocacola

Постоялец
Регистрация
4 Апр 2006
Сообщения
137
Реакции
48
Имеется форма обратной связи, одной из функцией которой является прикрепление файлов к письму.
Столкнулся с такой проблемой что из прикрепляемого файла удаляется информация, после чего файл невозможно использовать!
Пример: через форму был отправлен текстовый файл со следующей информацией
Возможность создания файловых вложений определяется для каждого из форумов в отдельности, и возможно вы сможете это делать в одном форуме, но не...
на почту пришел файл уже с такой информацией
аждого из форумов в отдельности, и возможно вы сможете это делать в одном форуме, но не...
файл отвечающий за сборку письма имеет следующий код
PHP:
<?php	
//часть кода отсутствует
//=======Прикрепление файла======//
if(!empty($fid))
{
	for($i = 0; $i < sizeof($fid); $i++)
	{
		$key = 'file-id-' . $fid[$i];
		//dump($key);
		if(is_uploaded_file($_FILES[$key]['tmp_name'])) 
		{
			$uploaddir=ROOT_DIR."/img/";
			$file_name=$_FILES[$key]["name"];
			$uploadfile=$uploaddir.$file_name;
			$size=$_POST['size']*1024;
			if($_FILES[$key]['size'] > $size) 
			{
				$file_st="error"; msgbox($form_lang['USER_TEXT_3'],"<center><font color='red' size=2>{$form_lang['USER_TEXT_4']} {$_POST['size']} Kb.</font></center>");
			} 
			else
			{
				if(move_uploaded_file($_FILES[$key]['tmp_name'], $uploadfile))
				{
					echo $uploadfile;
					$file[$i]=$uploadfile;
					$file_type[$i]=$_FILES[$key]["type"]; 
				} 
			}
		}
	}
}
//=============================//
if($_POST['email']) { $from_email=$_POST['email']; } else { $from_email=$config['admin_mail']; }
if($row2['code']==1) { 
$code.=<<<HTML
<script language='JavaScript' type="text/javascript">
function reload () {
	var rndval = new Date().getTime(); 
	document.getElementById('dle-captcha').innerHTML = '<a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a><br><img src="{$path['path']}engine/modules/antibot.php?rndval=' + rndval + '" border="0" width="120" height="50">';
};
</script>
HTML;
$code.="<p><font color='red' size=2>*</font> <b>{$form_lang['USER_TEXT_5']}</b><br>
<span id='dle-captcha'><a onclick='reload(); return false;' href='#'>{$lang['reload_code']}</a><br><img src='{$path['path']}engine/modules/antibot.php' alt='{$lang['sec_image']}' border='0'></span>
<br><input type='text'  name='passe' style='width:113px;'></p>";
}
$code.="<p><input type='submit' name='ok' value='{$form_lang['USER_TEXT_6']}'></form></p>";
$code.="{$form_lang['USER_TEXT_7']} <font color='red' size=2>*</font> {$form_lang['USER_TEXT_8']}";
}
#####
if($row2['code']==1) {
if($_POST['passe']==$_SESSION['sec_code_session']) { $stop_code="ok"; } else { $stop_code="err"; }
} else { $stop_code="ok"; }
if($_POST['ok']) {
// инициализация переменной, сообщающей об ошибке. 
$obz = '';
$res=$db->query("SELECT * FROM `$db_items` WHERE id_project='{$_GET['id']}'"); $row=$db->get_row($res);
	do
	{
		if($row['objaz']==1) 
		{
			$name="pole_".$row['id'];
			// Если поле обязательное, то проверяем его на корректность //
			switch( $row['type'] )
			{
				case 'text':
				case 'textarea':
				{
					if($_POST[$name]=="") 
					{
						//print 'te';
						$obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>";
					}
					break;
				}
				case 'radio':
				{
					if (!(isset($_POST[ $name ]) && $_POST[ $name ] !== ''))
					{
						//print 'ra: '.$_POST[$name];
						$obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>";
					}
					break;
				}
				case 'checkbox':
				{
					$values = explode(',', $row['value']);
					$count_sel = 0;
					for($i=0; $i<count($values); $i++) {
						if (isset($_POST[$name.'_'.$i])) {
							$count_sel++;
						}
					}
					if ($count_sel == 0) {
						$obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>";
					}
					/*
					if (!isset($_POST[$name])) 
					{
						//print 'chk: '.$_POST[$name];
						$obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>";
					}
					*/
					break;
				}
				case 'select':
				{
					/*if (!isset($_POST[$name]) || 
						 empty($_POST[$name]) || 
						 (is_array($_POST[$name]) && count($_POST[$name])==0) || 
						 (!is_array($_POST[$name]) && ($_POST[$name] == '-1'))) */
					if (@$_POST[ $name ] === '')
					{
						//print 'sel';
						$obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>";
					}
					break;
				}
			}
			//$name="pole_".$row['id'];
			//if($_POST[$name]=="") { $obz="<center><font color='red' size=2>{$form_lang['USER_TEXT_9']}</font>"; }
		}
	} while($row=$db->get_row($res));
if($file_st!="error") {
if(!$obz) {
 if ($stop_code=="ok") { 
$subject=$_POST['subject'];
$msg=msg();
$row2=$db->super_query("SELECT * FROM `$db_project` WHERE id={$_GET['id']}");
if($row2['email']!="") {
print 'before send';
XMail($from_email, $row2['email'], $subject, $msg);
} else { 
$val=explode(",",$row2['email2']); foreach($val as $v) { XMail($from_email, $v, $subject, $msg);}
}
} else { msgbox($form_lang['USER_TEXT_3'],"<center><font color='red' size=2>{$form_lang['USER_TEXT_10']}</font></center>"); }
 } else { msgbox($form_lang['USER_TEXT_3'],$obz."<br>{$form_lang['USER_TEXT_7']} <font color='red' size=2>*</font> {$form_lang['USER_TEXT_8']}</center>"); }
     } 
}
} else { $code.="<center><h1>{$row2['text_not_prav']}</h1></center>"; }
//-------Функции-------//
### Функция Отправки на email
function XMail($from, $to, $subject, $msg) {
global $form_lang,$config,$file;
if(isset($file))
{		
	$un        = strtoupper(uniqid(time()));
	$head      = "From: $from\n";
	$head     .= "To: $to\n";
	$head     .= "Subject: $subject\n";
	$head     .= "X-Mailer: PHPMail Tool\n";
	$head     .= "Reply-To: $from\n";
	$head     .= "Mime-Version: 1.0\n";
	$head     .= "Content-Type:multipart/mixed;";
	$head     .= "boundary=\"----------".$un."\"\n";
	$zag = "";
	$zag      .= "------------".$un."\nContent-Type:text/html; charset=\"windows-1251\"\n";
	$zag      .= "Content-Transfer-Encoding: 8bit\n\n$msg\n";
	$zag      .= "------------".$un."\n";
	for($i = 0; $i < sizeof($file); $i++)
	{
		$f         = @fopen($file[$i],"rb");	
		$zag      .= "Content-Type: ".$file_type[$i].";";
		$zag      .= "name=\"".basename($file[$i])."\"\n";
		$zag      .= "Content-Transfer-Encoding:base64\n";
		$zag      .= "Content-Disposition:attachment;";
		$zag      .= "filename=\"".basename($file[$i])."\"\n";
		$zag      .= chunk_split(base64_encode(fread($f,filesize($file[$i]))))."\n";
		$zag      .= "------------".$un."\n";
		fclose($f); unlink($file[$i]);
	}
} 
else 
{
    $un        = strtoupper(uniqid(time()));
    $head      = "From: $from\n";
    $head     .= "To: $to\n";
    $head     .= "Subject: $subject\n";
    $head     .= "X-Mailer: PHPMail Tool\n";
    $head     .= "Reply-To: $from\n";
    $head     .= "Mime-Version: 1.0\n";
	$head .= "Content-Type: text/html; charset=windows-1251\n";
	//$head .= "Content-Length: ".strlen($msg)."\n";
	$zag = $msg;
}
$result=mail("$to", $subject, $zag, $head);
if ($result!=TRUE) { msgbox($form_lang['USER_TEXT_13']," {$form_lang['USER_TEXT_11']} <a href='{$config['http_home_url']}'>{$form_lang['USER_TEXT_12']}</a>");
 	 } else  { msgbox($form_lang['USER_TEXT_13']," {$form_lang['USER_TEXT_14']} <a href='{$config['http_home_url']}'>{$form_lang['USER_TEXT_12']}</a>"); }
} 
### Функция Сборки текста сообщения
function msg()
{
	global $db_items,$db_project,$db,$form_lang;
	$date=date("d/m/Y - H:i:s");
	$proj_id = intval(@$_GET['id']);
	$res=$db->query("SELECT * FROM `$db_items` WHERE id_project='{$proj_id}'"); 
	$row=$db->get_row($res);
	do
	{
		$id=$row['id'];
		$name="pole_".$id; 
		unset($tex);
		if($row['type']=="radio" or $row['type']=="select") 
		{ 
			$n=$_POST[$name]; 
			$array = $row['value']; 
			$val = explode(",",$array); 
			$tex="{$val[$n]}"; 
		}
		if($row['type']=="checkbox") 
		{ 
			$array = $row['value']; 
			$val=explode(",",$array); 
			foreach($val as $k=>$v) 
			{ 
				$name2="pole_".$id."_".$k;
				//$name2 = 'pole_'.$id;
				if ( isset($_POST[$name2]) ) 
				{ 
					$tex.="{$val[$k]}<br>"; 
				} 
			} 
		}
		if($row['type']=="text" || $row['type'] == 'textarea') 
		{ 
			$tex=$_POST[$name]; 
		}
		$msg.="<dl><dt><font size=4>{$row['title']}</font></dt>";
		$msg.="<dd><font size=3>{$tex}</font></dd></dl>";
	} while( $row = $db->get_row($res) );
	$msg.="<br><b>{$form_lang['USER_TEXT_15']}</b> $date";
	return $msg;
}
### Функция Сборка полей типа: (radio,checkbox,select)
function radio($id)
{
global $db_items,$db;
$val=array();
$ro=$db->super_query("SELECT * FROM `$db_items` WHERE id='$id'"); $array=$ro['value'];
$val=explode(",",$array);
$pol="";
foreach($val as $n=>$v)
 {
 $name="pole_".$ro['id'];  $name2="pole_".$ro['id']."_".$n; 
if($ro['type']=="checkbox") { $pol.="<input name='$name2' value=$n type='{$ro['type']}'>{$val[$n]}&nbsp;"; }
elseif($ro['type']=="radio") { $pol.="<input name='$name' value=$n type='{$ro['type']}'>{$val[$n]}&nbsp;"; } 
elseif($ro['type']=="select") { $sel1="<select name='$name'><option value=''></option>"; $pol.="<option value=$n>{$val[$n]}</option>"; $sel2="</select>"; }
 }
return $sel1.$pol.$sel2;
}
// часть кода отсутствует
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху