Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Отправка файла на емайл


Автор: SergV 18.12.2008, 17:03
Привет. Опять я со старым замыленым вопросом по отправке файлов на емайл. Сразу говорю, просмотрел вроде всё что нашёл по теме, но проблему не решил.

Проблема вот в чем, сделал очень большой форм ;) , и в ней надо было прикручивать файлы, что и сделал по одной найденной гдето тут форм. Всё хорошо, и на денвере файлы уходят, но при переносе на сервер, возникла проблема, файл прикрепляется но не отправляется. Пытался разобраться, и понял что файл вовсе копируется не в ту папку темп, которая зачемто автором скрипта создана рядом с файлом скрипта.

Короче тот путь к тэмп папке, что получает скрипт, не может быть использован, сервер не даёт, а перенаправление на свою папку, не приводит к результату. Вроде как и принимает файл, но на отправке выдаёт пустую страницу, и не чего не отправляется.

Вот код отправки
Код

if($_FILES['FILE']['name']!==''){ 
    if($_FILES['FILE']['size']!==0 and $_FILES['FILE']['size']<=($maxsize*1024)) {        
        if(is_uploaded_file($_FILES['FILE']['tmp_name'])) {
            // Это путь который в $_FILES['FILE']['tmp_name']) => /var/www/web33/phptmp/
            $_FILES['FILE']['tmp_name']='/var/www/web33/html/forms/'; // переадресовываю на свою папку тмп. 
            if(move_uploaded_file($_FILES['FILE']['tmp_name'], $url."/".basename($_FILES['FILE']['name']))) {  // $url это сама папка tmp
                            
                if(xmail($from,$mailto,'Bewerbung',$mail_text,$url."/".basename($_FILES['FILE']['name']))!== FALSE) {

                    echo '<table id="table" align=center border=0 cellpadding=4 cellspacing=0 width=400><tr><td align=center valign=middle>Сообщение было успешно отправленно!<br/></td></tr><td align=center valign=middle><br></td></tr>';
                    echo '<tr><td align=center><a href="/forms/index.php">Назад к форме</a> / <a href="/index.php">На главную</a><br /><br /></td></tr></table>';
                    @unlink($url."/".basename($_FILES['FILE']['name']));
                    session_unset($b);
                }                        
            } else { 
                echo '<tr><td align=center>Не удалось загрузить файл в папку '.$url.'. <a href="/forms/index.php">Назад</a></td></tr>';
            }
        } else { 
            echo'<tr><td align=center>Сообщение не удалось отправить. <a href="/forms/index.php">Назад</a></td></tr>';
        }
    } else {
        echo 'Файл превышает допустимый размер.<br/><a href="/forms/index.php">Назад</a>';
    }
} else {
    // код отправки без файла
}


А это функция
Код

function XMail( $from, $to, $subj='Bewerbung', $text, $filename) {
    $f         = fopen($filename,"rb");
    $un        = strtoupper(uniqid(time()));
    $head      = "From: $from\n";
    $head     .= "To: $to\n";
    $head     .= "Subject: $subj\n";
    $head     .= "X-Mailer: Freshcoder.ru\n";
    $head     .= "Reply-To: $from\n";
    $head     .= "Mime-Version: 1.0\n";
    $head     .= "Content-Type:multipart/mixed;";
    $head     .= "boundary=\"----------".$un."\"\n\n";
    $zag       = "------------".$un."\nContent-Type:text/html;\n";
    $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
    $zag      .= "------------".$un."\n";
    $zag      .= "Content-Type: application/octet-stream;";
    $zag      .= "name=\"".basename($filename)."\"\n";
    $zag      .= "Content-Transfer-Encoding:base64\n";
    $zag      .= "Content-Disposition:attachment;";
    $zag      .= "filename=\"".basename($filename)."\"\n\n";
    $zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

    return @mail("$to", "$subj", $zag, $head);
}


Что не так, на локалке всё работает, файл прикрепляется, а на хосте не хочет? :(

Автор: bars80080 18.12.2008, 18:49
а что у нас в $filename ? именно из xmail выведи, посмотри

Автор: SergV 19.12.2008, 13:40
Цитата

а что у нас в $filename ? именно из xmail выведи, посмотри


Посмотреть не получилось, так как гсловие не выполняется, а я понять сразу не мог, так как для условия не сделал сообщение на ошибку.
В саму функции передаётся правильно а именно tmp/text.txt, но условие не выполняется, хотя файл загружается в папку темп.
Когда писал, думал что файл не грузится в темп папку, потому что этот мой FireFTP менеджер в лисе встроенный, не хочет показывать что добавилось не им, во время сессии.

В общем файлы грузятся, но вот ошибка думаю лежит в этом, у меня на локалке в серверной папке темп, создаётся файлс с разрешением tmp, тоесть так: E:\tmp\ххххх.tmp
так по крайней мере выводит $_FILES['FILE']['tmp_name']

А вот на сервере выводит так - /var/www/web33/phptmp/ххххх , без расширения, но тут я думаю это связано что это линукс система а не винда, но фиг его знает как должно на самом деле.

И ещё, когда пробовал получит из функции $filename, я просто закомментировал "return @mail("$to", "$subj", $zag, $head);" и ввёл "return $filename;", и мне сразу выдало что письмо отправленно, тоесть условие сработало.


Да вот, ещё, тут в функции не пойму, это ошибка или так и должно быть:
chunk_split(base64_encode(fread($f,filesize($filename))))
Может так должно быть chunk_split(base64_encode(fread($filesize($filename))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)