2012-02-01 2 views
0

У меня есть страница отправки, на которой сканирование клиента отправляет заполняемую форму PDF вместе с фотографией, используя прилагаемый сценарий почтовой программы. Форма загружается на сервер правильно, однако при отправке клиенту PDF-код пуст.Ошибка сценария почтовой программы PHP

<?php 
// did files get sent 
if(isset($_FILES) && (bool) $_FILES) { 

    // define allowed extensions 
    $allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt"); 
    $files = array(); 

    // loop through all the files 
    foreach($_FILES as $name=>$file) { 

    // define some variables 
    $file_name = $file['name']; 
    $temp_name = $file['tmp_name']; 

    // check if this file type is allowed 
    $path_parts = pathinfo($file_name); 
    $ext = $path_parts['extension']; 
    if(!in_array($ext,$allowedExtensions)) { 
     die("extension not allowed"); 
    } 

    // move this file to the server YOU HAVE TO DO THIS 
    $server_file = "/home/castmeb1/public_html/uploads/$path_parts[basename]"; 
    move_uploaded_file($temp_name,$server_file); 

    // add this file to the array of files 
    array_push($files,$server_file); 
    } 

    // define some mail variables 
    $to = "[email protected]"; 
    $from = "[email protected]"; 
    $subject ="test attachment"; 
    $msg = "Please see attached"; 
    $headers = "From: $from"; 

    // define our boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    // tell the header about the boundary 
    $headers .= "\nMIME-Version: 1.0\n"; 
    $headers .= "Content-Type: multipart/mixed;\n"; 
    $headers .= " boundary=\"{$mime_boundary}\""; 

    // part 1: define the plain text email 
    $message ="\n\n--{$mime_boundary}\n"; 
    $message .="Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
    $message .="Content-Transfer-Encoding: 7bit\n\n" . $msg . "\n\n"; 
    $message .= "--{$mime_boundary}\n"; 

    // part 2: loop and define mail attachments 
    foreach($files as $file) { 
    $aFile = fopen($file,"rb"); 
    $data = fread($aFile,filesize($file)); 
    fclose($aFile); 
    $data = chunk_split(base64_encode($data)); 
    $message .= "Content-Type: {\"application/octet-stream\"};\n"; 
    $message .= " name=\"$file\"\n"; 
    $message .= "Content-Disposition: attachment;\n"; 
    $message .= " filename=\"$file\"\n"; 
    $message .= "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
    $message .= "--{$mime_boundary}\n"; 
    } 

    // send the email 
    $ok = mail($to, $subject, $message, $headers); 
    if ($ok) { 
    echo "<p>mail sent to $to!</p>"; 
    } else { 
    echo "<p>mail could not be sent!</p>"; 
    } 
    die(); 
} 
?> 

Спасибо,

JB

+0

ли файл находится в '$ файла [«tmp_name»] 'сохраняются корректно до подачи ? Если он никогда не будет сохранен, вы перемещаете пустой файл. –

+0

'// переместите этот файл на сервер. У ВАС ЕСТЬ СДЕЛАТЬ ЭТО. Вы сделали это? –

+0

Файл сохраняется как JBform.pdf, однако, когда он отправляется с сервера, он переименовывается как «_home_castmeb1_public_html_uploads_JBform.pdf» –

ответ

0
if(isset($_FILES) && (bool) $_FILES) { 

является недействительным тест для успешной загрузки. Массив $ _FILES всегда задан, и если предполагается, что загружен файл ATTEMPT, массив НИКОГДА не будет пустым.

Вы должны проверить на наличие ошибок, как это:

if ($_FILES['name_of_file_field']['error'] === UPLOAD_ERR_OK) { 
    ... file was successfully uploaded ... 
} 

Ошибка коды определяются здесь: http://php.net/manual/en/features.file-upload.errors.php

+0

Спасибо. В соответствии с моей записью выше файл загружается правильно, так как в сообщении говорится: «почта отправлена ​​на« [email protected] », однако файл переименован в префикс _home_castmeb1_public_html_uploads_JBform.pdf. Я искал базовое руководство по внедрению PHP-скрипт для загрузки и отправки нескольких вложений без особого успеха. Любые предложения будут очень благодарны. –

+0

Для этого вам действительно нужно использовать PHPMailer или Swiftmailer. Генерация ваших собственных сообщений mime болезненна. –

+0

Я загрузил PHP-почерк, и я все еще пытаясь пробраться через документацию, чтобы увидеть, какой правильный скрипт использовать. Оттуда вопрос о том, куда вставлять переменные на моем сайте. –

Смежные вопросы