php 图片不让下载,php让图片可以下载的方法

php让图片可以下载的方法

发布于 2014-10-04 11:16:18 | 102 次阅读 | 评论: 0 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

本文是一个php实现的可以让图片也能像附件一样下载代码,感兴趣的同学参考下.

// 文件目录

define(‘DL_DIR', ‘temp/');

// 常见扩展名所对应的MIME类型

$MIMETypes = array(

‘ez' => ‘application/andrew-inset',

‘hqx' => ‘application/mac-binhex40′,

‘cpt' => ‘application/mac-compactpro',

‘doc' => ‘application/msword',

‘bin' => ‘application/octet-stream',

‘dms' => ‘application/octet-stream',

‘lha' => ‘application/octet-stream',

‘lzh' => ‘application/octet-stream',

‘exe' => ‘application/octet-stream',

‘class' => ‘application/octet-stream',

'so' => ‘application/octet-stream',

‘dll' => ‘application/octet-stream',

‘oda' => ‘application/oda',

‘pdf' => ‘application/pdf',

‘ai' => ‘application/postscrīpt',

‘eps' => ‘application/postscrīpt',

‘ps' => ‘application/postscrīpt',

'smi' => ‘application/smil',

'smil' => ‘application/smil',

‘mif' => ‘application/vnd.mif',

‘xls' => ‘application/vnd.ms-excel',

‘ppt' => ‘application/vnd.ms-powerpoint',

‘wbxml' => ‘application/vnd.wap.wbxml',

‘wmlc' => ‘application/vnd.wap.wmlc',

‘wmlsc' => ‘application/vnd.wap.wmlscrīptc',

‘bcpio' => ‘application/x-bcpio',

‘vcd' => ‘application/x-cdlink',

‘pgn' => ‘application/x-chess-pgn',

‘cpio' => ‘application/x-cpio',

‘csh' => ‘application/x-csh',

‘dcr' => ‘application/x-director',

‘dir' => ‘application/x-director',

‘dxr' => ‘application/x-director',

‘dvi' => ‘application/x-dvi',

'spl' => ‘application/x-futuresplash',

‘gtar' => ‘application/x-gtar',

‘hdf' => ‘application/x-hdf',

‘js' => ‘application/x-javascrīpt',

'skp' => ‘application/x-koan',

'skd' => ‘application/x-koan',

'skt' => ‘application/x-koan',

'skm' => ‘application/x-koan',

‘latex' => ‘application/x-latex',

‘nc' => ‘application/x-netcdf',

‘cdf' => ‘application/x-netcdf',

'sh' => ‘application/x-sh',

'shar' => ‘application/x-shar',

'swf' => ‘application/x-shockwave-flash',

'sit' => ‘application/x-stuffit',

'sv4cpio' => ‘application/x-sv4cpio',

'sv4crc' => ‘application/x-sv4crc',

‘tar' => ‘application/x-tar',

‘tcl' => ‘application/x-tcl',

‘tex' => ‘application/x-tex',

‘texinfo' => ‘application/x-texinfo',

‘texi' => ‘application/x-texinfo',

‘t' => ‘application/x-troff',

‘tr' => ‘application/x-troff',

‘roff' => ‘application/x-troff',

‘man' => ‘application/x-troff-man',

‘me' => ‘application/x-troff-me',

‘ms' => ‘application/x-troff-ms',

‘ustar' => ‘application/x-ustar',

'src' => ‘application/x-wais-source',

‘xhtml' => ‘application/xhtml+xml',

‘xht' => ‘application/xhtml+xml',

‘zip' => ‘application/zip',

‘au' => ‘audio/basic',

'snd' => ‘audio/basic',

‘mid' => ‘audio/midi',

‘midi' => ‘audio/midi',

‘kar' => ‘audio/midi',

‘mpga' => ‘audio/mpeg',

‘mp2′ => ‘audio/mpeg',

‘mp3′ => ‘audio/mpeg',

‘aif' => ‘audio/x-aiff',

‘aiff' => ‘audio/x-aiff',

‘aifc' => ‘audio/x-aiff',

‘m3u' => ‘audio/x-mpegurl',

‘ram' => ‘audio/x-pn-realaudio',

‘rm' => ‘audio/x-pn-realaudio',

‘rpm' => ‘audio/x-pn-realaudio-plugin',

‘ra' => ‘audio/x-realaudio',

‘wav' => ‘audio/x-wav',

‘pdb' => ‘chemical/x-pdb',

‘xyz' => ‘chemical/x-xyz',

‘bmp' => ‘image/bmp',

‘gif' => ‘image/gif',

‘ief' => ‘image/ief',

‘jpeg' => ‘image/jpeg',

‘jpg' => ‘image/jpeg',

‘jpe' => ‘image/jpeg',

‘png' => ‘image/png',

‘tiff' => ‘image/tiff',

‘tif' => ‘image/tiff',

‘djvu' => ‘image/vnd.djvu',

‘djv' => ‘image/vnd.djvu',

‘wbmp' => ‘image/vnd.wap.wbmp',

‘ras' => ‘image/x-cmu-raster',

‘pnm' => ‘image/x-portable-anymap',

‘pbm' => ‘image/x-portable-bitmap',

‘pgm' => ‘image/x-portable-graymap',

‘ppm' => ‘image/x-portable-pixmap',

‘rgb' => ‘image/x-rgb',

‘xbm' => ‘image/x-xbitmap',

‘xpm' => ‘image/x-xpixmap',

‘xwd' => ‘image/x-xwindowdump',

‘igs' => ‘model/iges',

‘iges' => ‘model/iges',

‘msh' => ‘model/mesh',

‘mesh' => ‘model/mesh',

'silo' => ‘model/mesh',

‘wrl' => ‘model/vrml',

‘vrml' => ‘model/vrml',

‘css' => ‘text/css',

‘html' => ‘text/html',

‘htm' => ‘text/html',

‘asc' => ‘text/plain',

‘txt' => ‘text/plain',

‘rtx' => ‘text/richtext',

‘rtf' => ‘text/rtf',

'sgml' => ‘text/sgml',

'sgm' => ‘text/sgml',

‘tsv' => ‘text/tab-separated-values',

‘wml' => ‘text/vnd.wap.wml',

‘wmls' => ‘text/vnd.wap.wmlscrīpt',

‘etx' => ‘text/x-setext',

‘xsl' => ‘text/xml',

‘xml' => ‘text/xml',

‘mpeg' => ‘video/mpeg',

‘mpg' => ‘video/mpeg',

‘mpe' => ‘video/mpeg',

‘qt' => ‘video/quicktime',

‘mov' => ‘video/quicktime',

‘mxu' => ‘video/vnd.mpegurl',

‘avi' => ‘video/x-msvideo',

‘movie' => ‘video/x-sgi-movie',

‘ice' => ‘x-conference/x-cooltalk',

);

?>

让图片也能像附件一样的下载,不多说了。请看下面的程序!

// 安全性过滤

$fileName = basename($_SERVER['QUERY_STRING']);

$filePath = dirname(__FILE__) . ‘/' . DL_DIR . $fileName;

/*

简述: DIRECTORY_SEPARATOR(目录界定符, 目录函数库预定义常量)

来源: Directory 目录函数(PHP手册->函数参考->Directories节点)

说明: windows系统下为反斜杠'', Linux系统下为'/',

windows下两个都正常用, linux就不知道了, 为了标准, 显得专业点, 嘿嘿.

*/

$filePath = str_replace(array(‘/', ‘\'), DIRECTORY_SEPARATOR, $filePath);

if(!is_file($filePath)) {

exit(‘File: ' . $fileName . ‘ not exists!');

} else { // 如果是一个有效的文件

// 文件扩展名

$fileExt = substr(strrchr($fileName, ‘.'), 1);

// 文件类型

$fileType = $MIMETypes[$fileExt] ? $MIMETypes[$fileExt] : ‘application/octet-stream';

// 是否是图片

$isImage = False;

/*

简述: getimagesize(), 详见手册

说明: 判定某个文件是否为图片的有效手段, 常用在文件上传验证

*/

$imgInfo = @getimagesize($filePath);

if ($imgInfo[2] && $imgInfo['bits']) {

$isImage = True;

}

// 显示方式

$attachment = $isImage ? ‘inline' : ‘attachment';

// 读取文件

if (is_readable($filePath)) {

/*

简述: ob_end_clean() 清空并关闭输出缓冲, 详见手册

说明: 关闭输出缓冲, 使文件片段内容读取至内存后即被送出, 减少资源消耗

*/

ob_end_clean();

/*

HTTP头信息: 指示客户机可以接收生存期不大于指定时间(秒)的响应

*/

header(‘Cache-control: max-age=31536000′);

/*

HTTP头信息: 缓存文件过期时间(格林威治标准时)

*/

header(‘Expires: ' . gmdate(‘D, d M Y H:i:s', time()+31536000) . ‘ GMT');

/*

HTTP头信息: 文件在服务期端最后被修改的时间

Cache-control,Expires,Last-Modified 都是控制浏览器缓存的头信息

在一些访问量巨大的门户, 合理的设置缓存能够避免过多的服务器请求, 一定程度下缓解服务器的压力

*/

header(‘Last-Modified: ' . gmdate(‘D, d M Y H:i:s' , filemtime($filePath) . ‘ GMT'));

/*

HTTP头信息: 文档的编码(Encode)方法, 因为附件请求的文件多样化, 改变编码方式有可能损坏文件, 故为none

*/

header(‘Content-Encoding: none');

/*

HTTP头信息: 告诉浏览器当前请求的文件类型.

1.始终指定为application/octet-stream, 就代表文件是二进制流, 始终提示下载.

2.指定对应的类型, 如请求的是mp3文件, 对应的MIME类型是audio/mpeg, IE就会自动启动Windows Media Player进行播放.

*/

header(‘Content-type: ' . $fileType);

/*

HTTP头信息: 如果为attachment, 则告诉浏览器, 在访问时弹出”文件下载”对话框, 并指定保存时文件的默认名称(可以与服务器的文件名不同)

如果要让浏览器直接显示内容, 则要指定为inline, 如图片, 文本

*/

header(‘Content-Disposition: ' . $attachment . ‘; filename=' . $fileName);

/*

HTTP头信息: 告诉浏览器文件长度

(IE下载文件的时候不是有文件大小信息么?)

*/

header(‘Content-Length: ' . filesize($filePath));

// 打开文件(二进制只读模式)

$fp = fopen($filePath, ‘rb');

// 输出文件

fpassthru($fp);

// 关闭文件

fclose($fp);

exit();

} else {

exit(‘Read file failed!');

}

}

?>

相关阅读:

php让图片可以下载的方法

php简单实现文件或图片强制下载的方法

php旋转图片90度的方法示例代码

PHP生成图片缩略图的方法详解

php实现文件强制下载的方法

php实现简单文件下载的方法

php生成图片缩略图的方法

php检测图片主要颜色的方法

PHP实现图片自动清理的方法

两种php实现图片上传的方法

php生成图片验证码的方法

php实现图片缩略图的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

while语法php格式,PHP While 循环

循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。PHP 循环在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。在 PHP 中,提供了下列循环语句:while–…

【转】一句话的设计模式

转自:http://www.cnblogs.com/lzhlyle/p/4696645.html 如题,实际上,我想这是很困难的。 除非——只是为了给自己做一个提醒,能够看一眼就快速回想起该设计模式的种种记忆。 下列是我之前在学习《大话设计模式》时做的笔记总结&…

php代码导入sql,php导入SQL文件(示例代码)

/*************PHP导入.sql文件运行版本:php5,php4作者:panxp邮件:coolpan123gmail.com*编辑整理:bbs.it-home.org**************/$host "localhost";$user "root";$pwd "";$file_dir dirname(__FILE__);$file_name "bar.s…

jQuery遍历Json数组

var jsonArray [{ "name": "张三", "password": "123456"},{ "name": "李四", "password": "123456"}]; $.each(obj, function (n, value) { n:数组中的位置; val…

php自动获取m3u8,PHP自动Get监控源码分享

使用方法:创建个PHP文件放到你的网站根目录里面,访问后不会出现结果,等待个20秒左右关闭页面,就会自动执行了。如果不重启php服务器 或者重启服务器,get监控一直会处于运行状态。测试了一下 秒赞网的监控,效…

Vertex and Fragment Shader

Semantics语义词:   定义:GPU工作时,数据通常暂存在寄存器,那么在Cg中,语义词就指定了输入/输出数据和图形硬件寄存器之间的映射关系。   原理:根据输入语义,图形处理器从某个寄存器取数据&…

linux php cgi.sock,nginx中unix:/tmp/php-cgi.sock错误解决解决

出现这种问题一般是因为/tmp/php-cgi.sock功能是负责流量最主要的特征就是unix socket比tcp快,下面来解决办法。首先建立/tmp/php-cgi.sock文件,然后将之改所有者改为www-data:#我直接改成nginx的用户,好像必须要属于nginx的用户组才能正常使…

erlang套接字

Erlang的套接字可以有三种打开模式:主动(active)、单次主动(active once)或被动(passive)。这是通过在gen_tcp:connect(Address, Port, Options)或gen_tcp:listen(Port, Options)的Options参数里…

php 类学习,php的类学习(一)

function __autoload($class_name){//require_once语句在脚本执行期间包含并运行指定文件。此行为和 require()语句完全相同,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含require_once $class_name . .php;}$obj new testAAA();$obj2new ty…

前端学习(1575):复习todoMVC

系统再演示一下angular的实现原理流程 分装实现 两个文件 js和html

蛋疼的中文编码及其计算机编码历史

更好的博客:http://my.oschina.net/goldenshaw/blog?catalog536953 一:编码发展: 1 ANSI编码:计算机在美国出现,使用单字节8位编码,共可以表示255个状态。(0-32(0x00-0x20&#xff…

java异常处理机简答题,【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?...

【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?更多相关问题用蒸汽进行设备管线吹扫时,应将被吹扫的设备管线,相应部位仪表引线阀关闭,防止损坏仪表。()铝壶内装有2.5kg的水,其温…

阐述linux IPC(五岁以下儿童):system V共享内存

【版权声明:尊重原创。转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章学习交流,不用于商业用途】system V共享内存和posix共享内存类似,system V共享内存是调用shmget函数和shamat函数。 shmget函数创…

php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...

准备文件:IO.py 服务端代码tcp_c.py 客户端代码IO.py 代码:from select import * #引入 select 模块from socket import * #引入 socket 模块s socket() #实例化一个socket 对象s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #设置端口可重用s.bind((0.0.0…

NDK和项目依赖

NDK使用 JDK:Java Development KitSDK:Software Development KitNDK:Native Development KitJNI: Java Nattive InterfaceNDK开发流程: 下载NDK并配置NDK路径新建项目 修改build.gradle文件 替换classpath:com.android.tools.build:gradle-experimental:0.4.0 替换a…

java创建树形子目录,Java之File类及递归树形展示目录_20150804

Java之File类及递归树形展示目录20150804下面的构造函数可以用来生成File 对象:File(String directoryPath)File(String directoryPath, String filename)File(File dirObj, String filename)这里,directoryPath是文件的路径名,filename 是文…