文件下载问题---100分咯。。 哦,程序前面还应该有"<?php",是我忘了写哈。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只能用fopen打开文件。注意必须用rb方式打开,不然就会有问题。 说具体点,让我直接搞定了就好了嘛我试了试fopen(),好像还是不行诶,而且下载下来的文件都是0kb大。。 <?//include("session.php");function download($file_dir,$file_prefix,$file_name){ $file_dir = "../attachments/$file_dir/"; $file_name = urldecode($file_name); $dl_name = $file_name; $file_name = $file_prefix."_".$file_name; if (!file_exists($file_dir . $file_name)) { //检查文件是否存在 echo "文件找不到"; exit; } else { clearstatcache(); $file = fopen($file_dir . $file_name,"rb"); // 打开文件 // 输入文件标签 header("Cache-control: private"); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".filesize($file_dir . $file_name)); Header("Content-Disposition: attachment; filename=" . $dl_name); // 输出文件内容 echo fread($file,filesize($file_dir . $file_name)); fclose($file); exit; }}$dir=$_GET['dir'];$prefix=$_GET['prefix'];$name=$_GET['name'];download($dir,$prefix,$name);?> 你自己稍微改一下吧。我这里的filename有编码,主要是因为有些文件名中有空格,而get方式传不过去。$prefix我文件前缀,我为了防止重复,每个文件在上传的时候都加个时间标签为前缀。你可以根据你需要修改。$dir是文件所在目录。直接调用download函数就可以了。 不行哦我把代码改成我需要的,下载下来的文件还是只有0kb诶,,代码如下:<?function download($file_dir,$file_name){ //$file_dir = "../attachments/$file_dir/"; $file_name = urldecode($file_name); $dl_name = $file_name; //$file_name = $file_prefix."_".$file_name; if (!file_exists($file_dir . $file_name)) { //检查文件是否存在 echo "文件找不到"; exit; } else { clearstatcache(); $file = fopen($file_dir . $file_name,"rb"); // 打开文件 // 输入文件标签 header("Cache-control: private"); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".filesize($file_dir . $file_name)); Header("Content-Disposition: attachment; filename=" . $dl_name); // 输出文件内容 fread($file,filesize($file_dir . $file_name)); fclose($file); exit; }}$dir="c:/";$name="csdn.rar";download($dir,$name);?> 用file_get_contents($file_dir . $file_name)吧---ps: 老大,要用 echo fread($file,filesize($file_dir . $file_name)); 的 只fread($file,filesize($file_dir . $file_name));有什么用啊 要echo出来还有,不知道 C:/csdn.rar 有没有权限读取。 大哥,我开始就是用了echo的,我要是下载20M的rar文件,全部echo出来,你要我死机啊?开始的时候就是用了echo的,然后我的电脑就一动不动了 不得哟我下载rar文件的时候用你的代码,要echo就会死机的 $file="c:/csdn.rar";$dest="csdn.rar";down_file($file,$dest);function down_file($file,$dest){ header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/x-zip"); header("Content-Disposition: attachment; filename=$dest" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($file)); readfile($file);}?> 不会吧,我的下载就是用的echo fread($file,filesize($file_name));方式做的这个有15M,虽然没有你说的20M大,但也足够说明问题了吧,而且还可以断点续传:http://www.mistruster.com/download.php?type=soft&id=2//... case "SOFT": $sql = "..."; //... $file = fopen($file_name,"r"); Header("Content-type: application/octet-stream"); Header("Content-Length: ".filesize($file_name)); Header("Accept-Ranges: bytes"); header('Pragma: public'); echo fread($file,filesize($file_name)); fclose($file);//...我没用'rb'方式打开文件,但下载后.exe文件一样可以执行,并没有影响什么---RedHat Linux AS PHP 4.3.8 Apache 1.3.28 也许是我自己没有搞好吧,再试试。pswdf,,,你的方法,呵呵,好像不行诶,可以下载,但是打开下载后的文件会提示错误的。 文件编码问题 zend studio for eclipse 6.1.2导入项目的问题!!!???? 哪位仁兄把下面这段php的功能用.net C#给实现,给就给分。 大家帮忙看一下哪样设计这个评论表的表结构算合理啊? php当未正常退出时,如何判断注册用户是否在线?记录最后登录时间然后定时去检查是否过期的就不用说了 如何取随机数,谢谢! 基于微软 .Net 框架的 PHP 编译器 - Phalanger 郁闷死了。。。。大虾帮个忙,应该用什么类型的呀? smartemplate怎样使用cache? 如何设置这样的一个字段 Xml问题 大家帮我看一下 好吗??
//include("session.php");
function download($file_dir,$file_prefix,$file_name){
$file_dir = "../attachments/$file_dir/";
$file_name = urldecode($file_name);
$dl_name = $file_name;
$file_name = $file_prefix."_".$file_name;
if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
echo "文件找不到";
exit;
} else {
clearstatcache();
$file = fopen($file_dir . $file_name,"rb"); // 打开文件
// 输入文件标签
header("Cache-control: private");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . $dl_name);
// 输出文件内容
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
exit;
}}
$dir=$_GET['dir'];
$prefix=$_GET['prefix'];
$name=$_GET['name'];
download($dir,$prefix,$name);
?>
$dir是文件所在目录。
直接调用download函数就可以了。
<?
function download($file_dir,$file_name){
//$file_dir = "../attachments/$file_dir/";
$file_name = urldecode($file_name);
$dl_name = $file_name;
//$file_name = $file_prefix."_".$file_name;
if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
echo "文件找不到";
exit;
} else {
clearstatcache();
$file = fopen($file_dir . $file_name,"rb"); // 打开文件
// 输入文件标签
header("Cache-control: private");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . $dl_name);
// 输出文件内容
fread($file,filesize($file_dir . $file_name));
fclose($file);
exit;
}}
$dir="c:/";
$name="csdn.rar";
download($dir,$name);
?>
ps: 老大,要用 echo fread($file,filesize($file_dir . $file_name)); 的
只fread($file,filesize($file_dir . $file_name));有什么用啊
要echo出来还有,不知道 C:/csdn.rar 有没有权限读取。
开始的时候就是用了echo的,然后我的电脑就一动不动了
$dest="csdn.rar";
down_file($file,$dest);
function down_file($file,$dest){
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/x-zip");
header("Content-Disposition: attachment; filename=$dest" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file);
}
?>
这个有15M,虽然没有你说的20M大,但也足够说明问题了吧,而且还可以断点续传:
http://www.mistruster.com/download.php?type=soft&id=2//...
case "SOFT":
$sql = "...";
//...
$file = fopen($file_name,"r");
Header("Content-type: application/octet-stream");
Header("Content-Length: ".filesize($file_name));
Header("Accept-Ranges: bytes");
header('Pragma: public');
echo fread($file,filesize($file_name));
fclose($file);
//...我没用'rb'方式打开文件,但下载后.exe文件一样可以执行,并没有影响什么---
RedHat Linux AS PHP 4.3.8 Apache 1.3.28
pswdf,,,你的方法,呵呵,好像不行诶,可以下载,但是打开下载后的文件会提示错误的。