2012-08-03 79 views
6

Estoy creando un formulario simple que permite al usuario "cargar" un archivo y un cuadro de comentarios. después de que el usuario elija el archivo (puede ser una imagen o pdf) y haga clic en enviar, no voy a almacenar el archivo en mi servidor web, el archivo se insertará en un correo electrónico y me lo enviará.enviar correo electrónico con archivo adjunto en php sin guardar el archivo en el servidor web

mi pregunta es: ¿cómo puedo adjuntar el archivo sin almacenarlo en cualquier lugar.

No quiero utilizar un módulo de terceros.

Actualización:

$attachment = $_FILES["OrderList"]["tmp_name"]; 
$content = file_get_contents($attachment); 
$content = chunk_split(base64_encode($content)); 

que tiene un error:

Filename cannot be empty in C:\dir\orders\upload.php on line 24

la línea 24 es $content = file_get_contents($attachment);

+1

subirlo, adjuntar, enviarlo, eliminarlo. – Matt

+0

qué tal, guárdelo temporalmente y luego elimínelo – amitchhajer

+0

PHP almacena el archivo cargado en un directorio tmp antes de que comience siquiera el guión, por lo que no podrá evitar guardar el archivo en el sistema de archivos. –

Respuesta

3

Usted ya ha almacenado cuando se acepta la carga de archivos de PHP.

Simplemente utilícelo cuando esté almacenado en la carpeta tmp.

PHP lo eliminará automágicamente cuando finalice su script.

+0

pero cuando uso '$ attachment = $ _FILES [" OrderList "] [" tmp_name "]; $ content = file_get_contents ($ attachment); $ content = chunk_split (base64_encode ($ content)); ' Recibí un error: El nombre de archivo no puede estar vacío en file_get_contents – triston

+0

¿Hiciste eco de $ attachment? ¿Qué decía? ¿Está ejecutando el fragmento de código del script que se publica cuando carga? –

+0

lo solucioné agregando el tmp_dir en php.ini, el último php (más nuevo que 5.3) no establece el tmp_dir predeterminado. muchas gracias. – triston

0

Al cargar un archivo, se guarda en su servidor en el directorio temporal. La excepción es el método PUT, en cuyo caso el archivo se envía directamente en php: // input. Después de eso, puedes usar cualquier lib de correo PHP que prefieras.

PHP manual for PUT'ing files

3

Hoy me encontré con situación similar y se encontró una solución, así que aquí está

if ($_FILES["file"]["error"] > 0) { 
echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
} else { 


$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
$newname= $_FILES["file"]["tmp_name"].".".$extension; 
rename($_FILES["file"]["tmp_name"],$newname); 
$attachments = array($newname); 

    wp_mail('emailto send', 'title', 'message','',$attachments); 
} 
+0

Sí, tienes razón ...! Esta es la forma más fácil. Si desea conservar el nombre del archivo original, deberá cambiar el nombre de la siguiente manera: cambiar el nombre ($ _ FILES ["file"] ["name"], $ newname); – Invincible

Cuestiones relacionadas