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

Тема в разделе "PHP Pro", создана пользователем cocacola, 2 июн 2009.

Статус темы:
Закрыта.
  1. cocacola

    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;
    }
    // часть кода отсутствует
    ?>
     
Статус темы:
Закрыта.