Intereting Posts
Изменить строку внутри PHP-кода Проверка номеров телефонов Великобритании в PHP Возвращает форму PHP. Примечание. Преобразование массива в строку. замените mysql_query на mysqli_query и получите ошибку «команды из синхронизации» Действия контроллера вызываются дважды – приложение Php интернационализация веб-сайта php Как я могу прочитать содержимое каталога на удаленном сервере с помощью PHP? Вставка значений массива вставляет один идентификатор в базу данных mysql с использованием php и PDO PHP Захватить последние 15 строк в txt-файле Выбор и проверка наличия пользователя в таблице без foreach в ларавельном лезвии Почему функция call_user_func () PHP не поддерживает передачу по ссылке? Отличается сложным sql-запросом WordPress: как установить тему по умолчанию (активная) через скрипт Что это за синтаксис в PHP? Исходный код PHP в файлах UTF-8; как правильно интерпретировать?

PHP Создайте несколько CSV-файлов в памяти, затем сжимайте

У меня есть требование создать 3 CSV-файла (в памяти) во время одного HTTP-запроса, ZIP-файлы в один сжатый файл и вернуть сжатый файл в качестве ответа HTTP.

У меня есть следующий код для создания zip-файла …

$files = array($file1, $file2); $zipname = 'file.zip'; $zip = new ZipArchive; $zip->open($zipname, ZipArchive::CREATE); foreach ($files as $file) { $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename='.$zipname); header('Content-Length: ' . filesize($zipname)); readfile($zipname); 

Однако я не знаю, как создавать файлы CSV в памяти.

Как я могу это достичь?

Попробуй это…

 // some data to be used in the csv files $headers = array('id', 'name', 'age', 'species'); $records = array( array('1', 'gise', '4', 'cat'), array('2', 'hek2mgl', '36', 'human') ); // create your zip file $zipname = 'file.zip'; $zip = new ZipArchive; $zip->open($zipname, ZipArchive::CREATE); // loop to create 3 csv files for ($i = 0; $i < 3; $i++) { // create a temporary file $fd = fopen('php://temp/maxmemory:1048576', 'w'); if (false === $fd) { die('Failed to create temporary file'); } // write the data to csv fputcsv($fd, $headers); foreach($records as $record) { fputcsv($fd, $record); } // return to the start of the stream rewind($fd); // add the in-memory file to the archive, giving a name $zip->addFromString('file-'.$i.'.csv', stream_get_contents($fd) ); //close the file fclose($fd); } // close the archive $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename='.$zipname); header('Content-Length: ' . filesize($zipname)); readfile($zipname); // remove the zip archive // you could also use the temp file method above for this. unlink($zipname); 

Я только что проверил это на своей машине, и все работает отлично.

Я использовал эту ссылку в качестве ссылки, она может быть полезна.

Ссылка MetaShock

Вы можете использовать флеш- память :

 $zipname = 'php://memory'; 

В системах с файловой системой /dev/shm вы можете создавать там файлы, они будут храниться только в памяти и доступны только для текущего процесса. Не забудьте удалить их после отправки, процесс веб-сервера будет продолжать работать.