php - 收集另一个 PHP 脚本发送的文件附件,并将它们输出为 ZIP 文件夹
问题描述
我目前有一个 PHP 脚本,它根据发票的 ID 号将有关发票的数据导出到 CSV 文件中。该文件是动态生成的,不会保存在服务器上。更具体地说,我正在回显行,并设置以下标题,以便回显出现在文件附件中:
header('Content-type: text/plain');
header("Content-Disposition: attachment; filename=INV${id}.csv");
我可以调用脚本的方式是使用:
my_script.php?id=123
但是现在,我需要编写一个脚本来获取给定日期的所有发票,获取它们相应的 CSV 文件,并将它们作为 ZIP 文件下载到客户端。我可以使用我现有的输出一个文件的脚本来做到这一点吗?
我正在考虑的是从数据库中获取所有相关发票 ID 的列表(比如 123、456 和 789),然后循环遍历它们并为每个 ID 调用我的脚本,例如:
my_script.php?id=123 //then 456, then 789
然后将文件结果保存到数组中。
到目前为止我的尝试:
到目前为止,我尝试根据此答案将一个结果文件保存为变量,但该变量仍然为空(而已经存在的脚本确实返回了一个非空文件):
$file = getScriptOutput("my_script.php?id=123");
echo $file;
function getScriptOutput($path, $print = FALSE)
{
ob_start();
if( is_readable($path) && $path )
{
include $path;
}
else
{
return FALSE;
}
if( $print == FALSE )
return ob_get_clean();
else
echo ob_get_clean();
}
所以,这里有两个问题:
1 - 如何制作一组文件,其中每个文件都是 PHP 脚本的文件结果(附件)?
2 - 如何在 PHP 中将所有这些动态文件合并到一个 ZIP 文件中?
编辑:建议的副本确实有助于压缩部分,但我需要知道如何获取 PHP 脚本的文件附件(有没有办法不将文件保存在服务器上,因为存储和安全问题?)。
解决方案
您可以将所有文件保存在某个位置,然后访问它们并将它们放入一个 zip 文件中,如下所示:
$zip = new ZipArchive;
if ($zip->open('test_new.zip', ZipArchive::CREATE) === TRUE)
{
// Add files to the zip file
$zip->addFile('test.txt');
$zip->addFile('test.pdf');
// All files are added, so close the zip file.
$zip->close();
}
推荐阅读
- laravel - Laravel 5.5 如何在视图页面中读取闪存数据
- apache-nifi - Nifi流中如何调用处理器的线程?
- python - 由于拼写错误,交换选定的单元格值
- html - 从 API 获取“查询”中的“匹配”数组数据并显示信息
- prolog - SWI-Prolog:如何在 when/2 中使用我自己的谓词作为条件
- javascript - 在 JavaScript 中嵌套数组函数时需要帮助
- javascript - “While”阻塞异步操作
- c++ - 如何将文本文件中的数据列表与数组进行比较?
- mysql - 如何选择空格之前的字符串值的一部分
- javascript - 使用方法“POST”的 JavaScript Fetch 被调用两次