程序下载问题
来源:2-11 文件下载函数封装
呼___吸
2017-10-13 19:47:09
在教程上老师用已封装好的函数获取一个文件名2.zip,然后就可以下载这个zip文件。程序根据文件名且不知道路劲就可以下载,为什么???
我点击“下载1.zip”可以运行出来,点击“下载2.zip”运行不出来???
我的1.zip 2.zip 文件在同一路劲下,下面是我的代码
downLoad.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>测试下载</title>
</head>
<body>
<a href="http://127.0.0.1:8080/web/hanshuku/hanshuku.zip">下载1.zip</a>
<br>
<a href="downLoad.php?filename=2.zip">下载2.zip</a>
</body>
</html>
downLoad.php
<?php
require_once('file_fun.php');
$filename=$_GET['filename'];
down_file1($filename);
file_fun.php
function down_file1(string $filename, array $allowDownext=array('jpg','jpeg','png','gif','txt','html','Xmind','rar','zip')){
//检测文件是否可读,是否是文件
if(!is_file($filename)||!is_readable($filename)){
return false;
}
//检测文件类型是否可以下载,获取文件扩展名来检测
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(!in_array($ext,$allowDownext)){
return false;
}
//通过header()发送头部信息
//告诉浏览器输出的是字节流
header('Content-Type:application/octet-stream');
//告诉浏览器返回的文件大小按字节进行计算
header('Accept-Ranges:bytes');
//告诉浏览器返回的文件大小
header('Accept-Length:'.filesize($filename));
//告诉浏览器作为附件处理,告诉浏览器 最终下载完的文件名称
header('Content-Disposition:attachment;filename'.basename($filename));
//规定每次读取文件的字节数为1024字节,直接读出数据
$read_buffer=1024;
$sum_buff=0;
$handle=fopen($filename,'rb');
while(!feof($handle)&&$sum_buff<filesize($filename)){
echo fread($handle,$read_buffer);
$sum_buff+=$read_buffer;
}
fclose($filename);
exit;
}
1回答
您好,老师的例子中只写了文件名称2.zip就成功下载,是因为2.zip与download.php在同一路径下,因此2.zip的路径就省略了,就老师封装的这个函数而言,传进函数的参数$filename不只是单独的一个文件名,而是文件路径,在您的代码中,如果2.zip跟1.zip是在同一路径下,那么在您的download.php文件中的第二行代码应该写成:$filename="http://127.0.0.1:8080/web/hanshuku/".$_GET['filename'];
调用down_file1这个函数时将修改过后的$filename传进去。您也可以找到2.zip相对你的download.php页面的相对路径,与获取的文件名2.zip拼接到一起试一试。
如果解决了您的问题,请采纳,祝学习愉快~
相似问题