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);
}
Używam powyższej funkcji do pobierania danych, konwersji do pliku CSV i wysyłania danych do przeglądarki. Dwa pytania:Tworzenie pliku CSV w pamięci, wiadomości e-mail i usuwanie z pamięci
- Czy plik został usunięty z pamięci po pobraniu przez HTTP?
- W jaki sposób można tę samą funkcję przepisać tak, aby plik mógł zostać użyty (na przykład, aby użyć jako załącznika wiadomości e-mail wysłanego za pomocą PHPMailera), a następnie natychmiast usunięty z pamięci?
EDIT: Kodeks Pracy - Ale zapisuje do pliku, a nie pamięć
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);
}
Wciąż bez odpowiedzi: czy pierwotna funkcja usunąć plik z pamięci, czy nie?
ja po prostu zapisać plik w systemie plików ('/ tmp' na przykład), wysyłać pocztę (z załącznikiem) , a następnie wywołaj 'unlink()' na nazwie pliku. –
Więc zmień pierwszą linię na $ temp_file = fopen ('/ tmp/abc.csv', 'w'), utwórz plik, a następnie zamień fseek >> fpassthru na return $ temp_file, kontynuując w funkcji nadrzędnej za pomocą unlink ($ temp_file)? – FurryWombat
coś w tym stylu, tak. Nie zapomnij najpierw "fclose()" pliku. (przed 'unlink()') –