Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fopen是否下载我打开的文件?_Php_Html_Http_Http Headers - Fatal编程技术网

Php fopen是否下载我打开的文件?

Php fopen是否下载我打开的文件?,php,html,http,http-headers,Php,Html,Http,Http Headers,我使用fopen让用户下载下面代码中的音频,因为代码属性并不总是在所有情况和浏览器中都有效 这是将文件临时下载到我的服务器,还是让用户从外部服务器下载 <?php $file=fopen('link','r'); header("Content-Type:audio/mp4"); header("Content-Disposition: attachment; filename='example.m4a' "); fpassthru($file); ?> 服务器上的PHP程序将读取

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

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

<?php
$file=fopen('link','r');
header("Content-Type:audio/mp4");
header("Content-Disposition: attachment; filename='example.m4a' ");
fpassthru($file);
?>
服务器上的PHP程序将读取所有数据(无论文件句柄指向何处)。这可能涉及将数据从远程URL复制到服务器。这些数据可能完全存在于RAM中。它可能会影响磁盘上的交换空间

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


浏览器从未直接访问
'link'

否,
fopen()
仅在代码中打开它;是
fpassthru()
将文件数据发送到
php://output
;但是一个简单的是更有效的,因为你不需要打开文件你确定它不会下载它@MarkBaker cuz如果它会给我的服务器带来压力阅读我实际写的:
fopen()
不下载任何文件
fpassthru()
下载文件/将文件发送到php://output.... 您的
fopen()
文件名是一个文本
“链接”
。。。。这是对服务器上名为
link
的文件的引用,而不是远程服务器,也不是客户端浏览器。有任何方法可以直接访问(假设它是一个可供浏览器访问的URL)。但这样会在浏览器中打开文件,而不会下载该文件。此时,您必须更改为要重定向到的URL发送的标题。如果那不在你的控制之下,你就不能那样做。