使用 PHP 在内存中操作存档(无需在磁盘上创建临时文件)
我正在尝试在PHP中即时生成存档并立即将其发送给用户(不保存它)。我认为没有必要在磁盘上创建文件,因为我发送的数据无论如何都不是持久的,但是,在搜索网络时,我无法找到方法。我也不在乎文件格式。
所以,问题是:
是否可以在php脚本中创建和操作内存中的文件存档,而无需在此过程中创建临时文件?
我正在尝试在PHP中即时生成存档并立即将其发送给用户(不保存它)。我认为没有必要在磁盘上创建文件,因为我发送的数据无论如何都不是持久的,但是,在搜索网络时,我无法找到方法。我也不在乎文件格式。
所以,问题是:
是否可以在php脚本中创建和操作内存中的文件存档,而无需在此过程中创建临时文件?
我遇到了同样的问题,但最终找到了一个有点晦涩难懂的解决方案,并决定在这里分享。
我遇到了伟大的/脚本,这些脚本自带并位于“库”目录中。zip.lib.php
unzip.lib.php
phpmyadmin
使用工作作为我的魅力: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
您使用什么来生成存档?您可以使用流 php://temp 或 php://memory 来读取和写入存档。