下载 .zip 文件会运行损坏的文件 php

2024-02-21

我试图强制下载受保护的 zip 文件(我不希望人们在没有先登录的情况下访问它。

我为以下创建了函数login等等,但我遇到了下载的文件损坏的问题。

这是我的代码:

$file='../downloads/'.$filename;
header("Content-type: application/zip;\n");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file).";\n");
header("Content-disposition: attachment; filename=\"".basename($file)."\"");
readfile("$file");
exit();

这是错误:Cannot open file: It does not appear to be a valid archive.

否则文件下载得很好,所以这一定是我对标头做错了。

有任何想法吗?


此问题可能有多种原因。也许你的文件没有找到或者无法读取,因此文件的内容只是 PHP 错误消息。或者 HTTP 标头已经发送。或者您有一些额外的输出,然后会损坏文件的内容。

尝试在脚本中添加一些错误处理,如下所示:

$file='../downloads/'.$filename;
if (headers_sent()) {
    echo 'HTTP header already sent';
} else {
    if (!is_file($file)) {
        header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
        echo 'File not found';
    } else if (!is_readable($file)) {
        header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
        echo 'File not readable';
    } else {
        header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: Binary");
        header("Content-Length: ".filesize($file));
        header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
        readfile($file);
        exit;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下载 .zip 文件会运行损坏的文件 php 的相关文章

  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • 当数据验证失败时保留表单字段中的值

    我在弄清楚验证失败时如何保留用户数据时遇到问题 我对 PHP 有点陌生 所以我的逻辑可能会犯一些巨大的错误 目前 如果验证失败 所有字段都会被清除 并且 Post 数据也会消失 这是一些代码 假设用户输入无效电子邮件 我希望保留 名称 字段
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 以其他用户身份运行时无法捕获输出

    我正在制作一个应用程序 允许客户端在对话框中列出所有正在运行的进程 我目前有以下代码 但我无法弄清楚为什么它不起作用 我没有看到任何输出 无论是 stderr 还是 stdout 有人可以指出我正确的方向吗 private void but
  • PHPMailer 附件,无需物理文件即可完成

    So Setup mail class recipients and body mailer gt AddAttachment home mywebsite public html file zip file zip The AddAtta
  • 如何在没有外部定时器的情况下设置QNetworkReply超时?

    是否可以设置超时时间QNetworkReply 所以很长一段时间没有来自服务器的回复 它可能会发出finished signal 不使用计时器是不可能的 但您不必显式编写计时器代码 该功能可以巧妙地打包到静态函数中 就像超时是回复的可设置属
  • 将 Rscript 中的布尔值输出到 Bash 变量中

    我有一个输出 TRUE 或 FALSE 的 R 脚本 在 R 中 它使用真正的 T F 数据类型 但是当我将其返回值回显给 bash 时 它似乎是一个字符串 表示 1 TRUE or 1 FALSE 它们的前面都有 1 0 也不是 这不是拼
  • 结合 CSS 的方法

    我有多个CSS文件 设计师制作了几个 bad迭代 我需要将其合并到一个文件中 然而 我不想把它们放在一起 我想合并类似选择器的属性 即 file 1 mainmenu width 100 background 01568b text dec
  • Oracle 相当于 Postgres 的 DISTINCT ON?

    在 postgres 中 您可以使用以下命令查询组中的第一个值DISTINCT ON 在Oracle中如何实现这一点 来自 postgres 手册 SELECT DISTINCT ON 表达式 仅保留第一行 给定表达式计算结果相等的每组行
  • Gson 在转换时忽略我的字段

    我创建了一个模型 public class UserRequest extends DefaultRequest public String username public String password public String id
  • 翻译 Angular-UI 分页

    如何翻译 Bootstrap UI 分页指令中的文本 我已经为法语翻译覆盖了这样的常量 angular module myapp ui bootstrap constant paginationConfig itemsPerPage 10
  • 我怎样才能完成“组”活动?

    我的 Android 应用程序中有一个操作 其中包括几个活动 在此操作结束时 我需要关闭所有这些活动并返回到启动此操作的屏幕 下图解释了它是如何工作的 有什么选择可以做到这一点吗 P S 片段在我的情况下不是一个选项 有很多方法可以做到这一
  • Django 1.4 用户管理 list_filter 使用 UserProfile 字段

    编辑 我更新了代码以反映查询集过滤器中的一个错误 其中我的 user user type 已被正确的 userprofile user type 替换 我正在使用 Django 1 4 并且我知道有一个新功能可以为管理员创建自定义 list
  • R - 使用字体(extrafont)时不打印空格

    我想使用特殊字体生成 R 图 即 Cormorant Garamond Light Cormorant Light 也是可能的 问题是它适用于所有其他字体 但对于这种字体 所有空格都被忽略 library ggplot2 library e
  • 我如何知道证书的 storeName 是什么?

    我在 Windows Server 2003 中安装了证书 我从MMC看到的路径是 证书 本地计算机 个人 证书 我想在我的 wcf 配置中配置它 我如何知道 storeName 是什么 这是我到目前为止在 wcf 配置中得到的
  • 命令行开关阻止 Inno Setup 安装程序创建桌面图标

    我正在尝试为 Balsamiq Mockups 创建静默安装 该安装似乎是使用 Inno Setup 编译器创建的 作为标准静默安装的一部分 它会创建一个我希望阻止的桌面快捷方式 有谁知道相关的命令行开关来防止创建桌面图标 我尝试过使用 M
  • 如何在sql server中进行交易技术分析计算?

    我如何像在 Excel 中一样使用 T SQL 在 SQL SERVER 数据库中进行技术分析指标计算 例如平均方向指数 随机振荡指标等 如果可以的话 是否可以像在excel中做宏一样制作程序呢 提前致谢 程序代码是在 MS SQL Ser
  • 将没有“timevar”的数据帧从长格式转置/重塑为宽格式

    我有一个遵循以下长模式的数据框 Name MedName Name1 atenolol 25mg Name1 aspirin 81mg Name1 sildenafil 100mg Name2 atenolol 50mg Name2 ena
  • 使用 clojure-csv.core 解析巨大的 csv 文件

    到目前为止我有 require clojure csv core as csv require clojure java io as io def csv file getFile clojure java io resource verb
  • 从电子邮件中删除不需要的标头(出于安全风险)

    我刚刚注意到 使用 mail 函数从我的主机发送的电子邮件也会发送标头中的内部数据 例如 这是我在 Gmail 中找到的内容 通过单击显示原件 X AntiAbuse This header was added to track abuse
  • 可以在生产 Laravel 网站上运行 php artisan :clear 命令吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个托管在 DigitalOcean NGINX 服务器上的生产 Laravel 网站 每次 git 推送新更新时 我总是运行以下命令 ph
  • MySQL 左连接多对一行

    为了简化我的问题 假设我有 3 个表 Rooms People Things id name id name fk rooms id name fk rooms 1 kitchen 1 John 1 1 TV 2 2 bedroom 2 M
  • 下载 .zip 文件会运行损坏的文件 php

    我试图强制下载受保护的 zip 文件 我不希望人们在没有先登录的情况下访问它 我为以下创建了函数login等等 但我遇到了下载的文件损坏的问题 这是我的代码 file downloads filename header Content ty