使用 PHP 在内存中操作存档(无需在磁盘上创建临时文件)

2022-08-30 14:17:43

我正在尝试在PHP中即时生成存档并立即将其发送给用户(不保存它)。我认为没有必要在磁盘上创建文件,因为我发送的数据无论如何都不是持久的,但是,在搜索网络时,我无法找到方法。我也不在乎文件格式。

所以,问题是:

是否可以在php脚本中创建和操作内存中的文件存档,而无需在此过程中创建临时文件?


答案 1

我遇到了同样的问题,但最终找到了一个有点晦涩难懂的解决方案,并决定在这里分享。

我遇到了伟大的/脚本,这些脚本自带并位于“库”目录中。zip.lib.phpunzip.lib.phpphpmyadmin

使用工作作为我的魅力:zip.lib.php

require_once(LIBS_DIR . 'zip.lib.php');

... 

//create the zip
$zip = new zipfile();

//add files to the zip, passing file contents, not actual files
$zip->addFile($file_content, $file_name);

...

//prepare the proper content type
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=my_archive.zip");
header("Content-Description: Files of an applicant");

//get the zip content and send it back to the browser
echo $zip->file();

此脚本允许下载 zip,而无需将文件作为真实文件或将 zip 本身另存为文件。

遗憾的是,此功能不是更通用的PHP库的一部分。

以下是来自phpmyadmin源代码的文件链接:https://github.com/phpmyadmin/phpmyadmin/blob/RELEASE_4_5_5_1/libraries/zip.lib.phpzip.lib.php

更新:请确保从 zip.lib 的开头删除以下检查.php否则脚本将终止:

if (! defined('PHPMYADMIN')) {
    exit;
}

更新:此代码在 CodeIgniter 项目中也可用:https://github.com/patricksavalle/CodeIgniter/blob/439ac3a87a448ae6c2cbae0890c9f672efcae32d/system/helpers/zip_helper.php


答案 2

您使用什么来生成存档?您可以使用流 php://temp 或 php://memory 来读取和写入存档。

查看 http://php.net/manual/en/wrappers.php.php


推荐