php文件下载比较常见,网上的资料比较多,在此不再强调怎么去实现(因为也是网上看的)。下面主要说明的是下载代码的注意点。
php下载文件主要是把文件以字节流直接输出,也就是echo fread($file, filesize($file_name));,这里要注意的是如果你在代码之前(或之后)有输出,也可能被写入下载的文件中,解决的方法是使用 ob_start();和ob_end_clean();来清除前面的输出,后面的输出直接使用@fclose($file);exit(0);来解决。
代码如下:
[php] view plaincopy
- ob_start();
- $file_name = iconv("utf-8","gb2312",$file_name);
- if (!is_file($file_name)){
- echo "url error!";
- } else {
- $ua = $_SERVER["HTTP_USER_AGENT"];
- if (preg_match("/MSIE/", $ua)) {
- $encoded_filename = urlencode(basename($file_name));
- $encoded_filename = str_replace("+", "%20", $encoded_filename);
- $con_dis = ‘Content-Disposition: attachment; filename="‘ . $encoded_filename . ‘"‘;
- } else if (preg_match("/Firefox/", $ua)) {
- $con_dis = ‘Content-Disposition: attachment; filename*="utf8\‘\‘‘ . basename($file_name) . ‘"‘;
- } else {
- $con_dis = ‘Content-Disposition: attachment; filename="‘ . basename($file_name) . ‘"‘;
- }
- $file = fopen($file_name, "r");
- //输入文件标签
- ob_end_clean();Header("Content-type: application/octet-stream");Header("Accept-Ranges: bytes");Header("Accept-Length: ".filesize($file_name));Header($con_dis);
- //输出文件内容
- //读取文件内容并直接输出到浏览器
- echo fread($file, filesize($file_name));@fclose($file);
- exit(0);
- }
PHP code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|