我的代码如下:
回复讨论(解决方案) 你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下header信息就可以了:
header(content-type: application/octet-stream);header(content-disposition: attachment; filename=download.rar );
可能我刚才写有点问题,如果不行,再试试这种写法
header ( 'content-type: application/rar' );header ( 'content-disposition: attachment; filename=downloaded.rar' );
你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下header信息就可以了:
header(content-type: application/octet-stream);header(content-disposition: attachment; filename=download.rar );
用这个能下载打开,很感谢!
但是改变了原rar的文件名称,比如原下载地址的rar名称是 电子书.rar ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下header信息就可以了:
header(content-type: application/octet-stream);header(content-disposition: attachment; filename=download.rar );
用这个能下载打开,很感谢!
但是改变了原rar的文件名称,比如原下载地址的rar名称是 电子书.rar ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
这个需要你自己分析下载地址的关系
你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下header信息就可以了:
header(content-type: application/octet-stream);header(content-disposition: attachment; filename=download.rar );
用这个能下载打开,很感谢!
但是改变了原rar的文件名称,比如原下载地址的rar名称是 电子书.rar ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
这个需要你自己分析下载地址的关系
你好,我不大懂php,或许我的这个方法不对。有什么方法伪造来路,然后直接打开原rar地址吗?
你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下header信息就可以了:
header(content-type: application/octet-stream);header(content-disposition: attachment; filename=download.rar );
用这个能下载打开,很感谢!
但是改变了原rar的文件名称,比如原下载地址的rar名称是 电子书.rar ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?
原名称你自己去相应的地方获取,然后写到这里就行了。
$url = '某个连接地址url.rar格式'
这个 url 是你自己给的,如果你都不知道他的文件名是什么,那么别人有如何能知道
如果你知道,那么就把 download.rar 换掉就是了
$url = '某个连接地址url.rar格式';
如果这里的url里有文件名称,你直接提取出来用就行了。
$url = '某个连接地址url.rar格式'
这个 url 是你自己给的,如果你都不知道他的文件名是什么,那么别人有如何能知道
如果你知道,那么就把 download.rar 换掉就是了
那个rar的下载链接是个动态地址,我用了你第一种代码,点击后,下载为download.rar,而且下载过程显示未知大小,感觉我这个思路方法不大对,有好的思路么,只是伪造个来路,然后想直接打开原下载链接
其实 $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); //执行
不就行了?
嗯,那样不行,头变成了正文。要这样
既然对方提供的是下载,那么相关信息自然已经都提供了,包括文件名和文件长度 $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);}
其实 $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 不是已经更正了吗?
比你发现的还早,显然我对自己更负责任些
对呀,我在 #11 不是已经更正了吗?
比你发现的还早,显然我对自己更负责任些
用360和谷歌浏览器正常,
ie高版本的浏览器点击下载,文件名和后缀扩展名乱码了,能下载,但是文件类型都不显示,乱码是什么原因呢 中文文件名出现乱码是正常现象
服务端可能是gbk或utf-8 编码的
客户端也可能是gbk或utf-8 编码的
你需要在收到形如 content-disposition: attachment; filename=download.rar 这样的头信息时对其中中文文件名做一下判断,必要时根据客户端的字符集进行转码处理
