2012-02-15 30 views
5

tengo un requisito para escribir un archivo como parte de un script PHP (contenido XML con una extensión de archivo personalizado), a continuación, una vez que el archivo se ha guardado a continuación, adjuntar a un correo electrónico que estaré enviando usando PHP Mailer.escritura de archivos a ubicaciones temporales

La parte enviando un correo electrónico está muy bien, pero nunca he tenido que escribir un archivo con PHP antes. El archivo solo es necesario para la duración de la secuencia de comandos y no necesita mantenerse de forma permanente.

¿Cómo puedo escribir un archivo en una ubicación temporal?

¿Es necesario limpiar la ubicación temporal cuando se hace con el archivo? ¿Si es así, cómo?

Respuesta

4

función tmpfile - Crea un archivo temporal

crea un archivo temporal con un nombre único en modo de lectura-escritura (w +) y devuelve un identificador de archivo.

El archivo se elimina automáticamente cuando se cierra (usando fclose()), o cuando termina la secuencia de comandos.

PHP Manual: Filesystem

1

Si sólo se necesita de modo que se puede adjuntar a un correo electrónico, que en realidad no tienen que escribir el archivo. Solo:

$attachment=chunk_split(base64_encode($XML)) 
     $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 
     // put message body in mime boundries 
      $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      $message . "\n\n"; 
     // attachment with mime 
     $message .= "--{$mime_boundary}\n" . 
      "Content-Type: {$type};\n" . 
      " name=\"{$name}\"\n" .  
      "Content-Transfer-Encoding: base64\n\n" . 
      $attachment. 
      "--{$mime_boundary}--\n"; 

no probado, pero he hecho algo así antes. (Saqué eso de un script que uso para enviar copias de seguridad.)

15

Para evitar el ciclo Write-Read-Delete con un archivo real en el disco, mantendría todos sus datos "de archivo" temporales almacenados en la memoria usando el built-in de php php://temp y php://memoryIO stream wrappersdocs.

// open a temporary file handle in memory 
$tmp_handle = fopen('php://temp', 'r+'); 
fwrite($tmp_handle, 'my awesome text to be emailed'); 

// do some more stuff, then when you want the contents of your "file" 
rewind($tmp_handle); 
$file_contents = stream_get_contents($tmp_handle); 

// clean up your temporary storage handle 
fclose($tmp_handle); 

Nunca tiene que escribir o eliminar un archivo en el disco. Además, tenga en cuenta la diferencia entre el uso de php://temp y php://memory de la documentación sobre el tema:

php: // memoria y php: // temp son corrientes que permiten datos temporales que se almacenan en un archivo de lectura-escritura como envoltorio. La única diferencia entre los dos es que php: // recuerdo siempre almacenará sus datos en la memoria , mientras que php: // temp utilizará un archivo temporal una vez que la cantidad de datos almacenados realiza un límite predefinido (el valor predeterminado es 2 MEGABYTE). La ubicación de este archivo temporal se determina de la misma manera que la función sys_get_temp_dir().

+0

¿Es seguro binaria? Quiero decir, ¿es igual a abrir un archivo temporal con los modos '" w + b "'? Porque estoy trabajando con cientos de datos de múltiples bytes y ser portátil y binario seguro es el punto principal. – TechJS

Cuestiones relacionadas