当前位置: 首页 > 面试题库 >

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

扈瑞
2023-03-14
问题内容

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

因此,问题是:

是否可以在不使用tempfile的情况下在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库的一部分。

这是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



 类似资料:
  • 我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null

  • 细节 Linux 中,设备用/dev/目录下的文件表示。例如 /dev/hda1 第一块硬盘的第一主分区 /dev/hdb5 第二块硬盘的第一逻辑分区 /dev/sda4 第一块 SATA 硬盘的第四主分区,或者扩展分区 /dev/null 黑洞设备 关于磁盘设备,详见“分区概念”一节 mount 设备文件 [挂载路径] 挂载文件系统 -t 指定文件系统的类型 通常不必指定,mount 自

  • 正如 Heroku Dyno 临时文件系统文档所解释的那样,当 dyno 停止或重新启动时,文件系统将被丢弃。这意味着它不能用作永久(磁盘)存储。 我的用例是我想使用Ehcache缓存一些参考数据。我在考虑使用一些(有限的)堆内存以获得最佳性能,如果它不足以回退到磁盘存储。使用Ehcache,这可以在每个缓存的基础上进行很好的配置,例如在堆内存中存储最多1000个条目,例如在磁盘上存储25MB。

  • 你需要至少 32MB 的内存和 110MB 硬盘空间。 对最小的基于控制台的系统(全为标准包)需要250MB。如果你要安装适当的软件,包括 X Window 系统,以及一些开发工具和库,需要至少400MB。对于一个基本的桌面系统, 需要几个 G 的空间。

  • 你需要至少 32MB 的内存和 110MB 硬盘空间。 对最小的基于控制台的系统(包括所有标准软件包)需要250MB。如果你要安装适当的软件,包括 X Window 系统,以及一些开发工具和库,需要至少400MB。对于一个基本的桌面系统, 需要几个 G 的空间。

  • 你需要至少 32MB 的内存和 110MB 硬盘空间。 对最小的基于控制台的系统(包括所有标准软件包)需要250MB。如果你要安装适当的软件,包括 X Window 系统,以及一些开发工具和库,需要至少400MB。对于一个基本的桌面系统, 需要几个 G 的空间。