【问题标题】:Does fopen downloads a file i open?fopen 会下载我打开的文件吗?
【发布时间】:2016-06-16 13:31:04
【问题描述】:

我使用 fopen 让用户在下面的代码中下载音频,因为 code 属性并不总是适用于所有情况和浏览器。

这会将文件临时下载到我的服务器还是让用户从外部来源下载文件

<?php
$file=fopen('link','r');
header("Content-Type:audio/mp4");
header("Content-Disposition: attachment; filename='example.m4a' ");
fpassthru($file);
?>

【问题讨论】:

  • 不,fopen() 只是在您的代码中打开它;将文件数据发送到php://output的是fpassthru();但是一个简单的readfile()效率更高,因为你不需要打开文件
  • 你确定它不会下载它吗@MarkBaker 因为如果它会给我的服务器带来压力
  • 阅读我实际写的内容:fopen() 不下载任何文件; fpassthru() 下载文件/将文件发送到 php://output....您的文件名 fopen() 是文字 'link'....这是对您的文件名为 link 的引用服务器,不是远程服务器,不是客户端浏览器

标签: php html http http-headers


【解决方案1】:

所有数据都将被您的 PHP 程序读取(从文件句柄指向的任何位置)在您的服务器上。这可能涉及将数据从远程 URL 复制到您的服务器。该数据可能完全存在于 RAM 中。它可能会触及磁盘上的交换空间。

PHP 程序然后将其输出到浏览器。

浏览器永远无法直接访问'link'

【讨论】:

  • 有什么办法可以直接访问
  • 使用an HTTP redirect(假设它首先是可供浏览器访问的URL)。
  • 但是在浏览器中打开文件并没有下载它
  • 那么您必须更改为您重定向到的 URL 发送的标头。如果这不在你的控制范围内,那么你就不能这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多