<?php

ob_start();  

// $file_name="cookie.jpg";
$file_name="abc.jpg"; //用以解决中文不能显示出来的问题
$file_name=iconv("utf-8","gb2312",$file_name);
//$file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/";
$file_sub_path=$_SERVER['DOCUMENT_ROOT'];
$file_path=$file_sub_path.$file_name;
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
echo "没有该文件文件";
return ;
}
$fp=fopen($file_path,"r");
$file_size=filesize($file_path);
//下载文件需要用到的头
ob_end_clean(); Header("Content-type: application/octet-stream");
//Header("Content-type: image/jpeg");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
//Header("Content-Disposition: attachment; filename=".basename($file_name));
Header("Content-Disposition: attachment; filename=".$file_name);
$buffer=1024;
$file_count=0;
//向浏览器返回数据
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
@fclose($fp); exit(0); /*
第二种方法
*/
/*
ob_start();
$file_name="123.jpg";
$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);
}
*/
/*
echo $_SERVER["HTTP_USER_AGENT"];
echo "<br/>";
echo $_SERVER['DOCUMENT_ROOT'];
*/
?>

php下载文件的一种方式的更多相关文章

  1. 从后端接口下载文件的2种方式:get方式、post方式

    从后端接口下载文件的2种方式 一.get方式 直接使用: location.href='http://www.xxx.com/getFile?params1=xxx&params2=xxxx' ...

  2. 【文件下载】Java下载文件的几种方式

    [文件下载]Java下载文件的几种方式  摘自:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServl ...

  3. Asp.Net 下载文件的几种方式

    asp.net下载文件几种方式 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法 ...

  4. Java下载文件的几种方式

    转发自博客园Sunny的文章 1.以流的方式下载 public HttpServletResponse download(String path, HttpServletResponse respon ...

  5. java 下载文件的两种方式和java文件的上传

    一:以网络的方式下载文件 try { // path是指欲下载的文件的路径. File file = new File(path); // 以流的形式下载文件. InputStream fis = n ...

  6. asp.net 浏览器下载文件的四种方式

    // 方法一:TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { Response.ContentT ...

  7. java 从网上下载文件的几种方式

    package com.github.pandafang.tool; import java.io.BufferedOutputStream; import java.io.File; import ...

  8. C#从服务器下载文件的四种方式

    //方法一:TransmitFile实现下载 string fileName = "ss.docx"; //客户端预设的文件名,导出时可修改  string filePath = ...

  9. asp.net mvc 上传下载文件的几种方式

    view: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...

随机推荐

  1. NSConditionLock

    一.NSConditionLock定义了一个可以指定条件的互斥锁,用于线程之间的互斥与同步. 这里的条件并不是bool表达式中的条件,而是一个特定的int值. 二.NSConditionLock的AP ...

  2. openwrt的uboot环境变量分析

    目前烧写完CC(chaos calmer 15.05)版本,查看其uboot变量如下: ath> printenvbootargs=console=ttyS0,115200 root=31:02 ...

  3. CentOS正确关机方法

    1关机前准备 1.1观察系统使用状态 ·         谁在线:who ·         联网状态:netstat -a ·         后台执行的程序:ps -aux 1.2通知在线使用者关 ...

  4. hadoop---wordcount命令

    [zznu@master file]$ hadoop jar ~/hadoop-2.5.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2 ...

  5. C -小晴天老师系列——竖式乘法

    C - 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others ...

  6. APP生产流程图片解说

    尽我所能总结下一个app的生产过程,未必完整,也未必是所有的app产生的一个过程,不同公司会有很大的不同,我只是想总结下一般的大众的,做个参考. 需求策划: 设计: 开发: 测试: 发布没什么可画的了 ...

  7. cocos2d-x 获得系统语言繁体

    IosLocalUtil.h #ifndef __IOS_LOCALUTIL_H__ #define __IOS_LOCALUTIL_H__ class IosLocalUtil{ public: s ...

  8. ios用xib实现三等分以及多等分思路

    Auto Layout 的本质原理 Auto Layout 的本质是用一些约束条件对元素进行约束,从而让他们显示在我们想让他们显示的地方. 约束主要分为以下几种(欢迎补充): 相对于父 view 的约 ...

  9. 几个可用于数据挖掘和统计分析的java库

    http://itindex.net/blog/2015/01/09/1420751820000.html WEKA:WEKA是一个可用于数据挖掘任务的机器学习算法集合.该算法可以直接应用到数据集或从 ...

  10. LeetCode OJ 109. Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...