2012-02-15 13 views
5

Ho il requisito di scrivere un file come parte di uno script PHP (contenuto XML con un'estensione di file personalizzata), quindi una volta che il file è stato salvato per poi allegarlo ad una email, sarò invio tramite PHP Mailer.Scrittura di file in posizioni temporanee

La parte email è soddisfacente, ma non ho mai dovuto scrivere prima un file con PHP. Il file è richiesto solo per la durata dello script e non deve essere mantenuto in modo permanente.

Come posso scrivere un file in una posizione temporanea?

È necessario pulire la posizione temporanea quando si esegue il file? Se é cosi, come?

risposta

4

funzione tmpfile - Crea un file temporaneo

crea un file temporaneo con un nome univoco in lettura-scrittura (w +) Modalità e restituisce un handle di file.

Il file viene rimosso automaticamente quando viene chiuso (utilizzando fclose()) o quando lo script termina.

PHP Manual: Filesystem

1

Se avete solo bisogno in modo che è possibile allegare a una e-mail, non si hanno veramente a scrivere il file. Proprio:

$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"; 

non testati, ma ho già fatto qualcosa di simile. (L'ho tirato fuori da uno script che uso per inviarmi i backup.)

15

Per evitare il ciclo Write-Read-Delete con un file reale su disco, terrei tutti i tuoi dati temporanei "file" memorizzati utilizzando php integrato php://temp e 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); 

Non è mai necessario scrivere o eliminare un file sul disco. Inoltre, notare la differenza tra l'utilizzo php://temp e php://memory dalla documentazione sul tema:

php: // memoria e php: // temperatura sono flussi che permettono dati temporanei per essere memorizzati in un file di lettura e scrittura -come involucro. L'unica differenza tra i due è che php: // memoria memorizzerà sempre i suoi dati in memoria, mentre php: // temp utilizzerà un file temporaneo una volta che la quantità di dati memorizzata memorizza un limite predefinito (il valore predefinito è 2 MB). La posizione di questo file temporaneo è determinata allo stesso modo di della funzione sys_get_temp_dir().

+0

È un file binario sicuro? Voglio dire è uguale all'apertura di un file temporaneo con le modalità '" w + b "'? Perché il lavoro con centinaia di dati multi-byte e la sicurezza portatile e binaria è il punto principale. – TechJS