php中怎么实现文件下载功能?

第一个页:
<?php
header("content-type:text/html;charset=utf-8");
$arr=scandir("./up");
echo "<table border='1' cellpadding='0' cellspacing='0' align='center'><tr bgcolor='#33ff33'><td>序号</td><td>文件名</td></tr>";
$i=0;
foreach ($arr as $temp){
echo "<tr>";
echo "<td>".$i."</td><td><a href='dowlong.php?temp=/up/$temp'>".$temp."</a></td>";
echo "</tr>";
$i=$i+1;
}
echo "<table>";
?>
第二个页:
<?php
header("content-type:text/html;charset=utf-8");
$fil_name=$_GET["temp"];
$file_dir="/up/";
if(!file_exists($file_dir.$file_name)){
echo "<script>alert('NOT FOND');</script>";

}else{
$file=fopen($file_dir.$file_name,"r");
Header("Content-type:application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".filesize($file_dir.$file_name));
Header("Content-Disposition:attachment;filename=".$file_name);
echo fread($file,filesize($file_dir.$fil_name));
fclose($file);
echo "<script>alert('下载完成');window.location.href='text.php';</script>";
exit();
}
?>
请问我哪个写错了吗?怎么实现不了下载功能呢?那个只支持.rar格式的文件下载吗?我想要一个通用班的下载方法。谢谢!

两种方法:

1.直接做个超链接,地址为文件的地址

<a href="文件地址">下载</a>

2.流输出

<?php

$file=fopen('文件地址',"r");

header("Content-Type: application/octet-stream");

header("Accept-Ranges: bytes");

header("Accept-Length: ".filesize('文件地址'));

header("Content-Disposition: attachment; filename=文件名称");

echo fread($file,filesize('文件地址'));

fclose($file);

?>

推荐第二种

因为第一种方法只能下载浏览器不能解析的文件,比如rar啊,脚本文件之类。如果文件是图片或者txt文档,就会直接在浏览器中打开。

而第二种方法是直接输出的文件流,不存在上述问题。

你可以检查一下你传值过来的路径是否正确,还有,流输出后面不要再进行任何操作了。

拓展资料:

集成开发环境是一种集成了软件开发过程中所需主要工具的集成开发环境,其功能包括但不仅限于代码高亮、代码补全、调试、构建、版本控制等。一些常见的PHP IDEs如下:

    Zend Studio:商业版,Zend官方出品,基于eclipse

    Eclipse with PDT:免费

    Coda:商业版,针对Mac用户

    NetBeans:免费,功能强大

    PHP Storm:商业版

    Aptana Studio:免费

    PhpEd:商业版

    Komodo IDE/Edit:IDE为商业版,Edit可免费使用

    Adobe Dreamweaver:商业版

    除去集成开发环境,具备代码高亮功能的常见文本编辑器因其轻巧灵活也常被选作开发工具,例如:Notepad++、Editplus、SublimeText、Everedit(国人开发)等等。

PHP的特性包括:

1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。

2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,

PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;

PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。

3. PHP支持几乎所有流行的数据库以及操作系统。

4. 最重要的是PHP可以用C、C++进行程序的扩展!

参考资料:百度百科:PHP

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2019-10-20

<?php  if ($_GET[xfer]) {  if ($_POST[from] == "") {  print "You forgot to enter a url.";  } else {  copy("$_POST[from]", "$_POST[to]"); 

$size = round((filesize($_POST[to])/1000000), 3);

print "transfer complete.<br>  <a><a href=\"$_POST[from]\">$_POST[from]</a><br>  <a><a href=\"$_POST[to]\">$_POST[to]</a> : $size MB"; 

}  } else {  print "<form action=\"$PHP_SELF?xfer=true\" method=post>  from(http://): <input name=from><br>  to(filename): <input name=to><br>  <input type=submit value=\"transload\">";  }  ?>  

echo httpcopy(http://www.baidu.com/img/baidu_sylogo1.gif);

function httpcopy($url, $file=, $timeout=60) {             $file = empty($file) ?

pathinfo($url,PATHINFO_BASENAME)。

拓展资料:


ob_end_clean();    

//r: 以只读方式打开,b: 强制使用二进制模式
$fileHandle=fopen($filePath,"rb");
if($fileHandle===false){        echo "Can not find file: $filePath\n";        exit;
}

Header("Content-type: application/octet-stream")
Header("Content-Transfer-Encoding: binary")
Header("Accept-Ranges: bytes");


Header("Content-Length: ".filesize($filePath))
Header("Content-Disposition: attachment; filename=\"$saveAsFileName\"")
while(!feof($fileHandle)) {


//从文件指针 handle 读取最多 length 个字节
echo fread($fileHandle, 32768);
}
fclose($fileHandle);
}

$file = fopen($url,"r"); // 打开文件
// 输入文件标签
header('Content-Encoding: utf-8')
header("Content-type: application/octet-stream")
header("Accept-Ranges: bytes");


header("Accept-Length: ".filesize($url));
header('Content-Transfer-Encoding: binary' );
header("Content-Disposition: attachment; filename=" .$fname); //以真实文件名提供给浏览器下载


header('Pragma: no-cache')
header('Expires: 0')
//输出文件内容
echo fread($file,filesize($url));
fclose($file);
}。

本回答被网友采纳
第2个回答  2020-04-15
先创建一个index.html文件,输入以下内容:
<input type="button" onclick="window.location.href='download.php'" value="点击下载">
他的功能是显示一个按钮,点他后他就打开服务器的的download.php文件
再创建一个download.php文件,内容如下:
<?php
$file_name = "download";
$file_name = "download.zip"; //下载文件名
$file_dir = "./download/"; //下载文件存放目录
//检查文件是否存在
if (! file_exists ( $file_dir . $file_name )) {
header('HTTP/1.1 404 NOT FOUND');
} else {
//以只读和二进制模式打开文件
$file = fopen ( $file_dir . $file_name, "rb" );
//告诉浏览器这是一个文件流格式的文件
Header ( "Content-type: application/octet-stream" );
//请求范围的度量单位
Header ( "Accept-Ranges: bytes" );
//Content-Length是指定包含于请求或响应中数据的字节长度
Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header ( "Content-Disposition: attachment; filename=" . $file_name );
//读取文件内容并直接输出到浏览器
echo fread ( $file, filesize ( $file_dir . $file_name ) );
fclose ( $file );
exit ();
}
他的功能是寻找服务器内的download文件夹,并下载内部的download.zip文件
最后再创建一个名叫download的文件夹,把名叫download.zip压缩包文件放进download文件夹内,就可以了(也可以是别的名,别的文件后缀,但是要修改download.php文件代码)
注意:index.html,download.php,download这三个文件必须在同一个目录下
第3个回答  2015-05-14

2种方法

1直接做个超链接,地址为文件的地址

<a href="文件地址">下载</a>

    

2流输出

<?php
$file=fopen('文件地址',"r");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize('文件地址'));
header("Content-Disposition: attachment; filename=文件名称");
echo fread($file,filesize('文件地址'));
fclose($file);
?>

   


推荐第二种


因为第一种方法只能下载浏览器不能解析的文件,比如rar啊,脚本文件之类。如果文件是图片或者txt文档,就会直接在浏览器中打开


而第二种方法是直接输出的文件流,不存在上述问题


你可以检查一下你传值过来的路径是否正确,还有,流输出后面不要再进行任何操作了

本回答被提问者和网友采纳