24小时热门版块排行榜    

查看: 397  |  回复: 3
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

pigliu

捐助贵宾 (正式写手)

[交流] PHP怎么实现文件下载?

比如我给别人下载一个txt文件。

点一下按钮,就弹出下载框下载,而不是直接显示内容。。。怎么实现?

就像小木虫下载代理的那些txt文件
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pigliu

捐助贵宾 (正式写手)

其实我意思是这样,点一个按钮,
php连接数据库,把资料写入一个txt文件,然后这个文件不直接在ie显示,而是打开下载框给别人下载
3楼2006-09-23 20:09:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

cad_0

木虫 (著名写手)

玛雅城的小石头

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
pigliu(金币+5):谢谢
pigliu(金币+15):知道答案了,分都给你了,呵呵
如果只是普通的文件下载,完全没有必要用到php,用个http://xx.xx.com/xx.tar@#>就可以,但是有的时候为让文件保密,只能给一部分人下载,显然不能够把链节告诉别人,如果是这样哪就起不到保密的效果。
下面这个函数就是一个用php写的文件下载的函数,它是把文件一段一段地读出来,再传送给客户端.

function download($file_dir,$file_name)
//参数说明:
//file_dir:文件所在目录
//file_name:文件名
{
    $file_dir = chop($file_dir);//去掉路径中多余的空格
    //得出要下载的文件的路径
    if($file_dir != @#@#)
    {
        $file_path = $file_dir;
        if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != @#/@#)
            $file_path .= @#/@#;
        $file_path .= $file_name;
    }            
    else
        $file_path = $file_name;   
   
    //判断要下载的文件是否存在
    if(!file_exists($file_path))
    {
        echo @#对不起,你要下载的文件不存在。@#;
        return false;
    }

    $file_size = filesize($file_path);

    header("Content-type: application/octet-stream";
    header("Accept-Ranges: bytes";
    header("Accept-Length: $file_size";
    header("Content-Disposition: attachment; filename=".$file_name);
   
    $fp = fopen($file_path,"r";
    $buffer_size = 1024;
    $cur_pos = 0;
   
    while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
    {
        $buffer = fread($fp,$buffer_size);
        echo $buffer;
        $cur_pos += $buffer_size;
    }
   
    $buffer = fread($fp,$file_size-$cur_pos);
    echo $buffer;
    fclose($fp);
    return true;

}
2楼2006-09-23 18:07:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bathy

新虫 (初入文坛)

回楼上~~根本无此必要~~防止人家知道下载地址普通的弹出窗口就已经可以防范普通用户,不普通的用户你只要允许IE下载就没有办法不让人家知道,IE的下载窗口句柄自己就可以给出原始下载地址
要想隐藏,目前唯一的办法就是动态地址技术,举个简单的例子
程序给出IE的地址是:"http://hahaha.com/2006-09-23-03:31-onlycopy/haha.exe"
下一分钟的下载地址:"http://hahaha.com/2006-09-23-03:32-onlycopy/haha.exe"
只有这个原理行得通,也就是必须要在服务器端取得权限,若连接别人的网站~~基本上LZ就死心吧~网上现成的软件都一大堆,更不要说安装过VC++带的debugger了~
4楼2006-09-24 03:40:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见