小菜问个问题,描述如下:用户上传一个文件,比如叫“吃饭.doc”,上传后我改成了“4800b901c6a533c39e0ee05557a04009.doc”(md5文件名,防止中文乱码),原文件名存在数据库里,生成的记录的fid为888。然后用户来下载(请求为down.php?fid=888),我想还是给用户“吃饭.doc”这个文件,down.php怎么写?××××××××××××××××××××××××××新学习PHP不久,想写个文档管理的小东西,到这里卡住了,哪位帮忙指点下迷津吧

解决方案 »

  1.   

    表里保存fid,源文件名,加密后的文件名,下载时根据fid找到原文件名。
      

  2.   

    多谢楼上二位,文件名是存在数据库里的
    我看到列表里有个相关的帖子,是用header来转向的,不过就是要把文件拷贝一遍,有点麻烦
      

  3.   


    if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE)
    {
    header('Content-Type: "'.$mime.'"'); //$mine是文件类型
    header('Content-Disposition: attachment; filename="'.$filename.'"'); //这里的名字,你传入原文件名就行了
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".strlen($data)); //这里data是数据
    }
    else
    {
    header('Content-Type: "'.$mime.'"');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".strlen($data));
    } exit($data); //最后输出文件内容。
      

  4.   

    可以数据库里多弄个相应的md5段,然后匹配一下md5值 读出文件
      

  5.   

    正解
    最好加上
    Content-Language:gbk(根据你自己的编码)以前测试过,遇到一个很纠结的问题,不加这个的时候,有些浏览器保存后文件名是乱码,加上之后又有一部分浏览器是乱码了,然后又继续改进rawurlencode($filename),结果仍然是有些浏览器不正常……
      

  6.   

    表可以设计为三个字段第一个字段 文件ID
    第二个字段 文件原名
    第三个字段 文件名这样不就OK了。