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

2023-12-14

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

所以,问题是:

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


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

我遇到了伟大的zip.lib.php/unzip.lib.php附带的脚本phpmyadmin并位于“libraries”目录中。

Using 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.php来自 phpmyadmin 源的文件:https://github.com/phpmyadmin/phpmyadmin/blob/RELEASE_4_5_5_1/libraries/zip.lib.php

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • zip 文件的校验和

    我目前正在开发一个工具 它上传一组文件 然后使用 md5 校验和将文件与上一批上传的文件进行比较 并告诉您哪些文件已更改 对于常规文件 这工作正常 但某些上传的文件是 zip 存档 即使其中的文件相同 它们几乎总是会发生变化 有没有一种方法
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 为什么验证不起作用并跳转到另一个页面?

    我写了一个customer display php来验证数据 到目前为止只有名字 但无论名字字段是否为空 网页都会跳转到customer search php并且没有更改数据库中的信息 为什么
  • 如何解码 eval( gzinflate( base64_decode(

    我已将此代码注入到我的网站中 如何解码尾随字符串 我需要知道发生了什么以及其背后的代码是什么 这应该输出将被执行的代码eval 我希望这就是您正在寻找的
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐

  • 消除自动增量中的间隙

    假设我有一个带有自动递增 id 字段的 MySQL 表 然后我插入 3 行 然后 我删除第二行 现在表的 id 变为 1 3 我可以让 MySQL 纠正这个问题并将其设为 1 2 而无需编写程序吗 一旦创建了自动索引列 MySQL 就不允许
  • 将 MFMailComposeViewController 推送到导航堆栈上?不以模态方式呈现

    我有一个表格视图 在其中一个单元格中 它显示 联系人 选择此单元格后 我想推入 MFMailComposeViewController 我似乎只能以模态方式呈现这个 MFMailComposeViewController 这里有什么问题 T
  • 当视图大小依赖于多个子视图时指定的约束

    我正在使用自定义单元格UITableView 单元格中有 4 个视图 3UILabels and 1 UIImageView 灰色的 如下图所示 标签的文本是动态的 因此宽度和高度也是动态的 这里的宽度为UIImageView取决于2个标签
  • 如何使用控制台开发工具更新 Angular 4+ 表单值?

    我正在尝试使用控制台 开发工具 填写 Angular 4 表单 这就是我现在正在做的事情 function fillForm let el document querySelector input ng reflect name my in
  • 多个异步/等待链

    如何在 C 中进行多个 async await 链接 例如 启动几个 HTTP 请求 然后不等待所有请求 而是在每个请求完成后启动新请求 最简单的方法是编写一个async method async Task DownloadAndFollo
  • Pytorch几何稀疏邻接矩阵到边缘索引张量

    我的数据对象有data adj t参数 给我稀疏邻接矩阵 我怎样才能得到edge index大小张量 2 num edges 由此 正如你在docs 由于此功能仍处于实验阶段 一些操作 e g 图池方法 可能仍然需要您输入edge inde
  • 对动态数据透视列进行排序

    我有以下 SQL 查询 其中创建的列是无序的 我不太确定如何修复它 SELECT rhead rhcust AS Cust ID rdetl rdextp AS Inv Amt rhead rhivdt AS Inv Date INTO T
  • 测试java HBase连接

    我正在尝试使用 HBase Java API 将数据写入 HBase 我通过 Ambari 安装了 Hadoop HBase 以下是当前设置配置的方式 final Configuration CONFIGURATION HBaseConfi
  • 如何以编程方式安装 Android 应用程序而不提示,

    我正在尝试在没有提示的情况下以编程方式安装该应用程序 意味着安装应用程序时不会显示用户必须按下的弹出窗口install选项 我跟着THIS回答 但每当我运行代码时 它都会抛出错误 java io IOException 运行 exec 时出
  • 如何使用 Cloudformation 在 AWS WAF 中启用 WebACL 日志记录?

    我正在经历AWS WAF 云信息文档 我找不到启用日志记录的方法 我可以通过控制台启用日志记录 但我想通过 Cloudformation 来执行此操作 以便在新堆栈中默认启用它 如何通过 Cloudformation 在 AWS WAF W
  • MS Office 2007 文件的 PHP 5.3.5 fileinfo() MIME 类型 - magic.mime 更新?

    在 PHP 上传中 我尝试验证正在上传的文件的 MIME 类型 以匹配应用程序的一组有效的 MIME 类型 当尝试使用 fileinfo 确定 Office 2007 文件的 MIME 类型时 它没有检测到相应的 MIME 类型 相反 MI
  • 带 React Hooks 的可重用下拉菜单

    正如我从 React 文档中得到的那样 使用钩子不需要大量代码重构 并且可以轻松包含在现有代码中 我想制作可重用的下拉菜单 从反应组件渲染方法调用 这是我的代码 navigation js import DropdownToggler fr
  • Regex.Replace 拒绝用换行符替换

    您好 我编写了一个非常简单的 C 程序 从命令行使用 C Regex 而不是依赖于 MS Word 搜索和替换 问题是 即使正则表达式可以很好地识别 r 和 n 当我尝试用其中任何一个替换字符串时 它似乎用转义字符而不是字符本身替换它 ST
  • 如何为 System.out.println 输出着色? [复制]

    这个问题在这里已经有答案了 如何为 Java 输出着色 例如 在 C 和其他语言中 我可以使用 ANSI escape 例如 033 0m去做这个 但在Java中它不起作用 public static void main String x
  • Git checkout:更新路径与切换分支不兼容

    我的问题与切换分支时发生致命 Git 错误 我尝试使用命令获取远程分支 git checkout b local name origin remote name 但我收到此错误消息 致命 git checkout 更新路径与切换分支不兼容
  • 使用 jQuery 更改背景颜色

    我正在尝试使用 jQuery 更改背景颜色 我究竟做错了什么 我知道使用 CSS 可以更轻松地完成此操作 但我正在尝试使用 jQuery 来完成此操作 Link to jsfiddle 我正在尝试将 Hi 的背景更改为黄色 window o
  • 在绑定中使用 StringFormat 显示带空格的十六进制值

    我一直无法弄清楚如何使用 StringFormat 将十六进制显示为 08 A4 23 F5 具体来说 我想要每 2 个字符后面有一个空格 当我这样做时 Text Binding MyIntValue StringFormat 0 x 它看
  • 正则表达式使电子邮件域因两个连续点而失败

    我正在尝试验证电子邮件的域部分 并且我想检查域中是否没有两个连续的点 即以下内容无效 电子邮件受保护 电子邮件受保护 电子邮件受保护 电子邮件受保护 我有正则表达式来找到它 2 2 但我在 NET 中使用正则表达式属性 并且想要构建有效的正
  • 单击哪个按钮打开表单

    我有一个表单 可以通过单击三个按钮 添加 修改或删除 中的任何一个来加载 当表单加载时 有一个 确认 按钮 该按钮将根据最初用于显示表单的按钮来执行任务 有没有一种简单的方法来确定最初单击的是哪个按钮 以便执行正确的代码 Thanks 好吧
  • 使用 PHP 操作内存中的存档(无需在磁盘上创建临时文件)

    我正在尝试用 PHP 即时生成存档并立即将其发送给用户 不保存 我认为不需要在磁盘上创建文件 因为我发送的数据无论如何都不是持久的 但是 在搜索网络时 我无法找到如何创建文件 我也不关心文件格式 所以 问题是 是否可以在 php 脚本中创建