javascript - PHP,X-SendFile : Sending file together with outputting text to the browser (via echo)

标签 javascript php html x-sendfile

我使用X-SendFile Apache Module从服务器下载大文件。下载效果很好。但是,当下载开始时,我需要向浏览器输出一些文本,例如:“感谢下载文件......”

我的问题是,我无法在一个脚本中同时完成这两件事。我可以下载该文件,然后屏幕上不会输出任何文本。或者,我可以将文本输出到屏幕,但下载脚本将无法启动。

如何在一个 PHP 脚本中完成这两项任务 - 下载文件并将文本内容发送到浏览器/网页?问题可能源于 HTTP 输出 header ,但我不知道如何解决它。

这是我用来通过 X-SendFile 下载文件的示例代码(可以单独正常工作):

header('Content-Description: File Transfer');
header("Content-Disposition: attachment; filename=\"". basename($filePath) . "\"");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
header('Content-Length: ' . filesize($filePath));
header("X-Sendfile: $filePath");

为了完成,这是我的测试 echo"" 字符串。如果将其放置在 X-Sendfile 代码上方,则会获得输出,但不会开始下载。如果将其放在 X-Sendfile 代码下方,则会下载文件,但不会向浏览器回显:

echo "SUCCESS!!!";
ob_flush();

约束:

我需要能够通过 URL 轻松下载该文件。例如,www.mydomain.com/?fileID=asl523n53twteHLfga。换句话说,PHP 下载脚本位于 index.php 内。当用户输入 www.mydomain.com 时,将显示域登录页面。但是,当传递附加的 $_GET 变量时,PHP 脚本会识别该变量,并应显示 感谢您下载... 而不是登陆页面。

欢迎提供解决方法。重要的是在保持上述约束的同时达到期望的结果。非常感谢你。

最佳答案

如何添加一个单独的下载页面来下载文件(即 download.php?fileID=XYZ)并让索引页面显示如下消息:

<?php

function homeScreen() {
  // your home content
}

function downloadFileScreen ($id) {
?>
<h2>Thank you for your download!</h2>
Your download should start automatically, if it does not, click 
<a href="download.php?fileID=<?php print $id; ?>">here</a>
<script type="text/javascript">
window.setTimeout('location.href="download.php?fileID=<?php print $id; ?>"',3000);
</script>
<?php
}

if (isset($_GET['fileID'])) {
  $id= $_GET['fileID'];
  downloadFileScreen ($id);
?>
} else {
  // no ID passed, show home screen
  homeScreen();
}
?>

我还没有听说过任何浏览器支持在单个请求中混合下载和 HTTP 内容显示,但我会看看是否可以使用 ob_start() 来实现这一点>ob_flush().

关于javascript - PHP,X-SendFile : Sending file together with outputting text to the browser (via echo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247293/

相关文章:

javascript - "float"到父 DIV 底部的 DIV 不起作用。 (使用 Pos : rel, Bottom 0 等)

javascript - Kendo UI Scheduler - 如何刷新/显示隐藏/过滤资源列表

php - 如何为 PHP 安装 OpenCV?

php - 如何将更改应用到动态表单

php - CakePHP 中的 MySQL 表字段注释而不是名称

javascript - Chrome 扩展 : Cant appendchild in my popup file

javascript - 收集html文件中使用的所有js、css和img资源

javascript - 无法使用括号中的变量从 JavaScript 数组获取值

javascript - 使用 jQuery 模板渲染 JSON

javascript - mongod 进程运行时 Gulp watch 任务抛出 EBUSY 错误