【问题标题】:Gather files attachments sent by another PHP script, and output them as a ZIP folder收集另一个 PHP 脚本发送的文件附件,并将它们输出为 ZIP 文件夹
【发布时间】:2019-05-18 20:10:23
【问题描述】:

我目前有一个 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

然后将文件结果保存到数组中。

我目前的尝试:

到目前为止,我尝试按照this answer 将一个结果文件保存为一个变量,但该变量仍然为空(而已经存在的脚本确实返回了一个非空文件):

$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 脚本的文件附件(有没有办法不将文件保存在服务器上,因为存储和安全问题?)。

【问题讨论】:

标签: php


【解决方案1】:

您可以将所有文件保存在某个位置,然后访问它们并将它们放入一个 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();
}

【讨论】:

    【解决方案2】:

    好吧,我重新考虑了我的计划,最后我选择了以下:

    对于每个 ID:

    • 读取来自my_script.php?id=123 的http 响应的附件,并按照this answer 将其保存到变量中(使用cURL 并设置CURLOPT_BINARYTRANSFER => TRUE
    • 创建一个临时文件并将变量的数据写入其中(典型的 fopenfwrite 完成了这项工作)
    • 根据@DigitalJedi 的回答将文件添加到 ZIP 存档中
    • 发送 ZIP 后,使用unlink("filename.csv") 删除临时文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多