本帖最后由 easyrecovery8 于 2014-07-25 08:17:46 编辑

解决方案 »

  1.   

    你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下Header信息就可以了:
    header("Content-type: application/octet-stream");
    Header("Content-Disposition: attachment; filename=download.rar" );
      

  2.   

    可能我刚才写有点问题,如果不行,再试试这种写法
    header ( 'Content-type: application/rar' );
    header ( 'Content-Disposition: attachment; filename="downloaded.rar"' );
      

  3.   


    用这个能下载打开,很感谢!
    但是改变了原RAR的文件名称,比如原下载地址的rar名称是  电子书.rar   ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
      

  4.   


    用这个能下载打开,很感谢!
    但是改变了原RAR的文件名称,比如原下载地址的rar名称是  电子书.rar   ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
    这个需要你自己分析下载地址的关系
      

  5.   


    用这个能下载打开,很感谢!
    但是改变了原RAR的文件名称,比如原下载地址的rar名称是  电子书.rar   ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
    这个需要你自己分析下载地址的关系
    你好,我不大懂php,或许我的这个方法不对。有什么方法伪造来路,然后直接打开原rar地址吗?
      

  6.   


    用这个能下载打开,很感谢!
    但是改变了原RAR的文件名称,比如原下载地址的rar名称是  电子书.rar   ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
    原名称你自己去相应的地方获取,然后写到这里就行了。
      

  7.   

    $url = '某个连接地址url.rar格式'
    这个 url 是你自己给的,如果你都不知道他的文件名是什么,那么别人有如何能知道
    如果你知道,那么就把 download.rar 换掉就是了
      

  8.   

    $url = '某个连接地址url.rar格式';
    如果这里的url里有文件名称,你直接提取出来用就行了。
      

  9.   


    那个rar的下载链接是个动态地址,我用了你第一种代码,点击后,下载为download.rar,而且下载过程显示未知大小,感觉我这个思路方法不大对,有好的思路么,只是伪造个来路,然后想直接打开原下载链接
      

  10.   

    其实$url = '某个连接地址url.rar格式';
    $ch = curl_init(); //初始化
    curl_setopt($ch, CURLOPT_URL, $url); //你要访问的页面
    curl_setopt($ch, CURLOPT_REFERER, '某个来路url'); //伪造来路页面
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_exec($ch); //执行
    不就行了?
      

  11.   

    嗯,那样不行,头变成了正文。要这样
    既然对方提供的是下载,那么相关信息自然已经都提供了,包括文件名和文件长度$url = '/某个连接地址url.rar格式';
    $ch = curl_init(); //初始化
    curl_setopt($ch, CURLOPT_URL, $url); //你要访问的页面
    curl_setopt($ch, CURLOPT_REFERER, '某个来路url'); //伪造来路页面
    curl_setopt($ch, CURLOPT_HEADER, 1); //要读回 http 头
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'func'); //监听返回的数据
    curl_exec($ch); //执行function func($ch, $str) {
      static $s = '@';
      if($s) {
        $s = trim($str);
        if($s) header($s); //如果是头信息,则发送相应的头
      }else echo $str; //否则发送数据
      return strlen($str);
    }
      

  12.   

    中文文件名出现乱码是正常现象
    服务端可能是gbk或utf-8 编码的
    客户端也可能是gbk或utf-8 编码的
    你需要在收到形如 Content-Disposition: attachment; filename=download.rar 这样的头信息时对其中中文文件名做一下判断,必要时根据客户端的字符集进行转码处理
      

  13.   

    其实就是要得到文件名是吧
    服务器会返回文件名,但是在header中
    具体怎么同时获得头部的文件名和内容不太清楚
    (一起取回来再截取貌似略坑)
    看看其他人有没有办法
    实在不行的话就分两次取:
    第一次curl只获得header,用字符串函数把文件名提取出来
    第二次curl获得数据,然后返回数据