使用 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 操作内存中的存档(无需在磁盘上创建临时文件) 的相关文章

  • ZipArchive 提取 - 单个文件

    我有以下代码 ipaFile path file ipa iconFilePath Payload myapp app email protected cdn cgi l email protection the pathway to my
  • 知道何时调用 persist

    我正在使用 Doctrine 2 作为我的 ORM 一切进展顺利 但我一直想知道EntityManager persist 方法 这 持久实体 https www doctrine project org projects doctrine
  • 从目录中读取所有文件内容 - php

    这实际上是一个简单的任务 我想显示指定文件夹中所有文件的内容 我正在传递目录名称 echo a href row qname a 在第二页上 我正在迭代目录内容 while entryname readdir myDirectory if
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何在 Laravel 5 中的视图模板上显示会话数据

    我正在尝试在 Laravel 5 中的视图模板上显示会话数据 但是它似乎没有显示任何内容 这是我用来设置会话的代码 Session set bookingConfirmed BookingDates where id Session get
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • 如何缓存 twitter api 结果?

    我想缓存 twitter api 结果的结果并将其显示给用户 缓存结果的最佳方法是什么 我正在考虑根据时间限制将结果写入文件 可以吗 还是应该使用任何其他方法 最重要的是 理想的缓存时间是多少 我想显示来自 twitter 的最新内容 但
  • 使用 IntlDateFormatter 转换非公历日期

    我应该如何使用将非公历日期转换为其他日历类型IntlDateFormatter 我要转换 1392 01 02 from persian to islamic日历 我尝试了以下代码 但它没有转换日历 formatter IntlDateFo
  • 在 PHP 中使用数组来比较用户名/密码

    我有以下 php 脚本 其中有一个用户名和密码 Username user1 Password pass1 if isset POST submitform Clean up the input values foreach POST as
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1
  • PHP 中的简单 JSON 请求

    我有以下 json country code latitude 45 9390 longitude 24 9811 zoom 6 address city country Romania country code RO region 我只想

随机推荐

  • 消除自动增量中的间隙

    假设我有一个带有自动递增 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 脚本中创建