Apache/PHP 大文件下载(>2Gb)失败

2024-01-27

我正在使用 PHP 脚本来控制下载文件的访问。这对于 2Gb 以下的任何文件都适用,但对于较大的文件则失败。

  • Apache 和 PHP 都是 64 位
  • Apache will如果直接访问则允许下载文件(我不允许)

PHP 的核心(忽略访问控制):

if (ob_get_level())  ob_end_clean();

error_log('FILETEST: '.$path.' : '.filesize($path));
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($path));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
readfile($path);
exit;

错误日志显示文件大小正常

[Tue Apr 08 11:01:16 2014] [error] [client *.*.*.*] FILETEST: /downloads/file.name : 2251373807, referer: http://myurl/files/

但访问日志的大小为负:

 *.*.*.* - - [08/Apr/2014:11:01:16 +0100] "GET /files/file.name HTTP/1.1" 200 -2043593489 "http://myurl/files/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0"

因此浏览器拒绝下载该文件。事实上,使用 wget,它不会发送任何内容:

$ wget -S -O - http://myurl/files/file.name
--2014-04-08 11:33:38--  http://myurl/files/file.name
HTTP request sent, awaiting response... No data received.
Retrying.

尝试分块读取文件并将其暴露给浏览器,而不是用 2GB 填充本地内存并一次性刷新所有内容。

Replace readfile($path); by:

@ob_end_flush();
flush();

$fileDescriptor = fopen($file, 'rb');

while ($chunk = fread($fileDescriptor, 8192)) {
    echo $chunk;
    @ob_end_flush();
    flush();
}

fclose($fileDescriptor);
exit;

8192字节在某些情况下是一个临界点,参考php.net/fread http://php.net/fread.

添加一些微时间变量(并与文件描述符的指针位置进行比较)还可以让您控制下载的最大速度。

*(刷新输出缓冲区也稍微取决于网络服务器,使用这些命令以确保它至少尝试尽可能多地刷新。)

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

Apache/PHP 大文件下载(>2Gb)失败 的相关文章

  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 将查询字符串附加到任何形式的 URL

    我要求用户在文本框中输入 URL 并需要向其附加查询字符串 URL 的可能值如下 http www example com http www example com http www example com a http www examp
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • PHP - 警告:strpos() [function.strpos]: 空分隔符是什么意思?

    警告 strpos function strpos 空分隔符是什么意思 我有这个 if strpos 039 text false text str replace 039 text 猜测一下 我会说 text是一个空字符串 感谢马克指出细
  • Facebook iFrame 应用程序 - 摆脱垂直滚动条?

    我已经转换了一个 Facebook 应用程序 http apps facebook com video preferans 从 FBML 到 iFrame 使用 PHP SDK 现在显示的垂直滚动条与我之前显示的内容数量相同 一个徽标 一个
  • 使用代理时,React 应用程序正在不同位置查找静态文件

    我用过npx create react app my app创建一个反应应用程序 我用过的npm run build构建应用程序并使用它进行部署serve s build 我正在使用代理服务器来公开我的应用程序 我的 httpd 配置如下所
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 切换到 mysqli 是个好主意吗?

    我正在考虑为我的所有 php 项目切换到 mysqli 我的代码编写方式 我运行非常简单的网站并构建了自己的基本框架 我在所有网站上使用该框架 我在修改函数和类时不应该遇到太多问题 然而 我只听说过关于准备好的语句的积极的事情 除了一些关于
  • yii2 中的自动完成

    在 Yii2 中 我希望当用户开始输入时 我的输入字段之一能够自动完成 下面是我的代码 它使用Jui Autocomplete 这是行不通的 当我打印我的数组时 我就像 Array 1 gt abc 2 gt xyz 4 gt pqr
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 如何制作 tumblr 风格的个人资料 url

    我想知道 tumblr 是如何做到这样的个人资料网址 http www username tumblr com http username tumblr com 我知道我们可以更改个人资料网址 http www website com pr
  • 当我使用 session_start() 时,Xampp 7.0.1 Apache 崩溃

    当我在 PHP 中使用 session start 启动会话时 我的 Apache 服务器停止工作 我正在使用 Windows 版 Xampp 7 0 1 我的配置文件如下所示 即使我把它放在文件的第一行 它也不起作用 有人知道如何解决这个
  • 使用 yum 和 pear 安装 php-soap 均失败

    我正在尝试在 Centos 6 4 服务器上安装 PHP 的 SOAP 扩展 我对包管理器 从 CLI 安装包并在 PHP 中配置它们相当不熟悉 我相当有能力管理 php ini 和其他 PHP 配置文件 soap ini 等 我尝试使用以
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • PHP switch case 在 case 中存在多个值

    我有一个变量保存值 每周 每月 季度 和 年度 还有另一个变量保存值从 1 到 10 switch var2 case 1 var3 Weekly break case 2 var3 Weekly break case 3 var3 Mon
  • php date_parse("2010 年 2 月") 给出日期 == 1

    当没有日期时 我将其称为 date parse 中的错误 d date parse Feb 2010 会给 d day 1 请参阅对此的评论date parse 手册页 http php net manual en function dat
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co

随机推荐

  • 如何更改 Vaadin 中的默认 HTML 模板

    我正在使用 Vaadin 和 Maven 应用程序 我想要的是更改默认的 html 模板 当我运行该应用程序时 生成的 HTML 如下所示
  • 我需要帮助为 SpeechSynthesizer 创建词典。某种模板,这样我就可以知道如何创建一个

    或多或少就是标题所说的 我希望创建一个希腊语文本到语音的词典 这样我就可以为 SpeechSynthesizer 创建我的语言 我在哪里可以找到某种模板 或者一些指导 或者您可以提供的任何内容都是可以接受的 因为 SpeechSynthes
  • Iron Python:Iron Python 有什么好处 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 python 很感兴趣 但我在 NET 环境中工作 所以我正在研究 Iron Python 并想知道它的用途 你能在里面写一个应
  • 使用多处理模块

    我正在尝试使用 python 2 6 中的多处理模块 但显然有一些我不明白的东西 我希望下面的类将通过 add 发送给它的数字相加 并在 get result 方法中返回总和 下面的代码打印 0 我希望它打印 2 我错过了什么 import
  • 无法将非有限值(NA或inf)转换为整数[重复]

    这个问题在这里已经有答案了 我有一个数据框看起来像这样 survived pclass sex age sibsp parch fare embarked 0 1 1 female 29 0000 0 0 211 3375 S 1 1 1
  • 在android studio中导入类[重复]

    这个问题在这里已经有答案了 我是 Android Studio 的新手 我不知道如何在Android Studio中导入类 使用快捷键 I have used Ctrl 1 like Eclipse but it s not working
  • Swift - 从闭包中退出外部函数

    在 Kotlin 中 您可以从闭包的外部函数返回 fun main args Array
  • 如何使用基于 .Net 类属性的值自动更新 WPF TreeViewItems?

    早上好 我有一个类 其中包含从 InotifyPropertyChange 派生的数据 数据来自后台线程 该线程在特定位置搜索具有特定扩展名的文件 类的公共属性通过在单独的线程中更新数据来对事件 OnPropertyChange 做出反应
  • 如何使用 d3 画布渲染器添加鼠标事件以强制定向图?

    所有其他示例都有带有 svg append 的鼠标事件 我不知道在哪里 输入 以获取画布渲染器中的弧并添加 on click function v4 风格 我想点击获取值d 在此示例中 我应该在哪里添加处理程序 我理解这个例子下面的旧方法
  • stunnel https 被重定向到 http

    我有一个在端口 8081 上侦听的 Web 服务 它是在单声道上运行的 ServiceStack REST Web 服务 如果有帮助的话 我正在尝试使用 stunnel 来保护它 但问题是一旦我连接到https ip https ip 它被
  • 语言切换器,使用 symfony 重定向到当前页面

    在 symfony 中进行语言切换并重定向到所选语言的同一页面的最佳方法是什么 Jobeet 只是在主页上进行重定向 像这样的事情应该可以解决问题
  • 使用 Bash 正则表达式匹配 (=~),其中正则表达式包含引号(" 字符)

    我想使用 Bash 正则表达式匹配 使用 运算符 来匹配包含引号的字符串 举例来说 我有以下字符串 我想提取引号之间的文本 foo Hello World 我的第一次尝试是将正则表达式放在强引号中 以强制引号为常规字符 foo 这会失败 因
  • 找不到类“bolts.AppLinks”

    当我尝试在设备上启动 Android 应用程序时 崩溃并出现奇怪的错误 这个问题从前两天就出现了 这是错误 11 09 17 27 30 461 25146 25146 com ten ten E AndroidRuntime FATAL
  • 如何使用 boto 以编程方式检查 Amazon S3 权限?

    我们在 Amazon S3 的存储桶中有一棵茂密的树 其中包含大量文件 我刚刚发现 虽然有些文件有两个权限条目 如单击 AWS 管理控制台中的一个文件 然后单击属性 gt 权限 一行是 所有人 另一行是某个特定用户 其他文件只有一个该用户的
  • 将类函数转换为 lambda 函数

    我正在尝试拉出这样的东西 class helper some class variables public function somehelper somevar some action to somehelper somevar 我希望它
  • Android通知大图样式和大文本样式

    我已经使用大图片样式构建了推送通知 如图所示here http developer android com reference android app Notification BigPictureStyle html 是否可以混合大图片样
  • 何时在 MySQL 表中使用 NULL

    我很欣赏数据库表中 NULL 值的语义 它不同于 false 和空字符串 然而 我经常读到有关字段可为空时的性能问题的信息 并建议在 NULL 实际上在语义上正确的情况下使用空字符串 什么情况适合使用可为空字段和 NULL 值 有哪些权衡
  • Java Singleton 与 static - 是否有真正的性能优势?

    我正在合并一个 CVS 分支 较大的更改之一是用具有静态初始化块和所有静态方法的抽象类替换单例模式 这是值得保留的东西吗 因为它需要合并很多冲突 我会在什么样的情况下考虑这种重构是值得的 我们在 Weblogic 8 1 下运行这个应用程序
  • 查找包含给定文件的目录?

    我希望这是一个有趣的问题 我想找到一个包含所有给定文件的目录 到目前为止我所做的如下 在unix中查找多个文件 find type f name cache o name xml o name html 参考 http alvinalexa
  • Apache/PHP 大文件下载(>2Gb)失败

    我正在使用 PHP 脚本来控制下载文件的访问 这对于 2Gb 以下的任何文件都适用 但对于较大的文件则失败 Apache 和 PHP 都是 64 位 Apache will如果直接访问则允许下载文件 我不允许 PHP 的核心 忽略访问控制