Мне нужно, чтобы функция fputscv
записывала данные в браузер на лету вместо создания временного файла, сохраняя данные в этом файле и делая echo file_get_contents()
. Помогите!!!
Обнаружено это на веб-сайте документации PHP, первый комментарий по ссылке на функцию:
function outputCSV($data) { $outstream = fopen("php://output", 'w'); function __outputCSV(&$vals, $key, $filehandler) { fputcsv($filehandler, $vals, ';', '"'); } array_walk($data, '__outputCSV', $outstream); fclose($outstream); }
И второй вариант:
$csv = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); fputcsv($csv, array('blah','blah')); rewind($csv); // put it all in a variable $output = stream_get_contents($csv);
Надеюсь это поможет!
Кстати, PHP-документы всегда должны быть вашей первой остановкой, пытаясь понять, что происходит. 🙂
Комментируя сайт PHP
<?php $out = fopen('php://output', 'w'); fputcsv($out, array('this','is some', 'csv "stuff", you know.')); fclose($out); ?>
Поскольку первоначальный искатель хотел «написать браузеру на лету», может быть стоит отметить (как и мой случай, и никто не упомянул об этом), что если вы хотите принудительно ввести имя файла и диалоговое окно с просьбой загрузить файл в браузере , вы должны установить правильные заголовки перед fputcsv
чего-либо с помощью fputcsv
:
header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=myFile.csv');
http://www.codehive.net/PHP-Array-to-CSV-1.html предоставит вам функцию, которая соответствует требованиям не использовать файловую систему.