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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考技术A

<?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);

参考技术B 先创建一个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这三个文件必须在同一个目录下
参考技术C

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文档,就会直接在浏览器中打开


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


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

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

求php 以上超大文件上传和断点续传服务器的实现

php 以上超大文件上传和断点续传服务器的实现

现在这个时代文件存储基本分离到了单独的存储服务上面,比如说阿里云的OSS,七牛云的云存储等等.考虑这些第三方服务的话,那么你的大文件上传和断点续传等功能实现只需要去对接服务商提供的API接口即可(好处就是上传服务的压力等因素服务商帮你抗,不好就是你得付钱给服务商),其中方案就是js-sdk只传OSS的方式,稳定性好,只传断点续传和实时浏览上传进度。
如果你是大神,需要自己在服务器实现上述功能,那么要考虑的不仅是实现本身的需求,还得考虑服务器是否能抗得住这样的上传压力(带宽,延时),还有存储空间是否足够等额外的问题.
参考技术A post参数里携带文件偏移量和大小即可。

以上是关于php中怎么实现文件下载功能?的主要内容,如果未能解决你的问题,请参考以下文章

php上传功能怎么实现点击浏览在打开文件之后直接上传?

怎样才能用PHP语言实现网页中的下载文件功能

php中文件断点上传怎么实现?

如何使用php实现图片批量上传功能

一个php文件怎么写上增删改查 功能?

求php 以上超大文件上传和断点续传服务器的实现