我试图用PHP即时生成一个存档,并立即将其发送给用户(不保存)。我认为没有必要在磁盘上创建文件,因为无论如何我发送的数据都不是持久性的,但是,在网上搜索时,我找不到方法。我也不在乎文件格式。
因此,问题是:
是否可以在不使用tempfile的情况下在php脚本中创建和操作文件存档在内存中?
我遇到了同样的问题,但最终找到了一个不太明显的解决方案,决定在这里分享。
我遇到了很棒的zip.lib.php/ unzip.lib.php脚本,它们phpmyadmin都位于“库”目录中。
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库的一部分。
这是zip.lib.phpphpmyadmin源文件的链接: https://github.com/phpmyadmin/phpmyadmin/blob/RELEASE_4_5_5_1/libraries/zip.lib.php
更新: 确保从zip.lib.php开头删除以下检查,否则脚本将终止:
if (! defined('PHPMYADMIN')) { exit; }
更新: 此代码在CodeIgniter项目上也可用: https://github.com/patricksavalle/CodeIgniter/blob/439ac3a87a448ae6c2cbae0890c9f672efcae32d/system/helpers/zip_helper.php