private function convert_to_csv($input_array, $output_file_name, $delimiter) {
$temp_memory = fopen('php://memory','w');
foreach ($input_array as $line) {
fputcsv($temp_memory, $line, $delimiter);
}
fseek($temp_memory, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
fpassthru($temp_memory);
}
Io uso la funzione di cui sopra per prendere una matrice di dati, convertirli in CSV e inviarli al browser. Due domande:Crea CSV in memoria, e-mail e rimuovi dalla memoria
- Il file viene rimosso dalla memoria dopo essere stato scaricato tramite HTTP?
- Come si riscriverà questa stessa funzione in modo che il file possa essere utilizzato (ad esempio, da utilizzare come allegato di posta elettronica inviato con PHPMailer) e quindi rimosso immediatamente dalla memoria?
EDIT: Codice di lavoro - Ma scrive in un file, non la memoria
public function emailCSVTest() {
$test_array = array(array('Stuff','Yep'),array('More Stuff','Yep yep'));
$temp_file = '/tmp/temptest.csv';
$this->convertToCSV($test_array, $temp_file);
$this->sendUserEmail('Test Subject','Test Message','[email protected]',$temp_file);
unlink($temp_file);
}
private function convertToCSV($input_array, $output_file) {
$temp_file = fopen($output_file,'w');
foreach ($input_array as $line) {
fputcsv($temp_file, $line, ',');
}
fclose($temp_file);
}
ancora senza risposta: non la funzione originale rimuovere il file dalla memoria, o no?
vorrei solo memorizzare il file nel file system ('/ tmp' per esempio), inviare la posta (con allegato) e in seguito chiama 'unlink()' sul nome del file. –
Quindi modifica la prima riga in $ temp_file = fopen ('/ tmp/abc.csv', 'w'), crea il file, quindi sostituisci fseek >> fpassthru con return $ temp_file, seguito nella funzione padre con unlink ($ temp_file)? – FurryWombat
qualcosa del genere, sì. Non dimenticare di 'fclose()' prima il file. (prima di 'unlink()') –