PHP下载文件的代码和常见文件的http中content-type头的值(MIME类型)

Posted qikexun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP下载文件的代码和常见文件的http中content-type头的值(MIME类型)相关的知识,希望对你有一定的参考价值。

 php 中如何下载文件。简单的文件下载只需要使用 html 的链接标记<a>,并将 href 属性的值指定为要下载的文件路径即可,如下所示:

<a href="http://c.biancheng.net/php/logo.zip">下载文件<a>

通过上面的方法实现文件下载的话,只能处理一些浏览器不能识别的类型文件,例如上面示例中用到的 zip 压缩文件,浏览器不能直接打开,所以会弹出一个下载提示,但如果将链接后面的文件改成后缀名为.html的网页文件、图片文件或者 PHP 程序脚本文件的话,使用这种链接形式,则会将文件内容直接输出到浏览器中,并不会提示用户下载。

为了避免要下载的文件直接在浏览器中输出,我们可以向浏览器发送一个头信息,用来通知浏览器进行下载文件的处理。在 PHP 中可以使用 header() 函数发送网页的头部信息给浏览器,该函数接受一个头信息的字符串作为参数,其语法格式如下:

header(string $string[, bool $replace = true[, int $http_response_code]])

其中,$string 就是头信息的字符串;$replace 为可选参数,用来设置是否使用后面的头信息替换前面相同类型的头信息,默认为 true;$http_response_code 为可选参数,用来强制指定 HTTP 响应的值。

要实现文件下载需要调用三次 header() 函数,下面是以下载图片 logo.jpg 为例,需要发送的头信息的代码如下所示:

header('Content-type:image/jpg');   // 发送指定文件 MIME 类型的头信息
header('Content-Disposition:attachment;filename="logo.jpg"');   // 发送描述文件的头信息,附件和文件名
header('Content-Length:3390');      // 发送指定文件大小的信息,单位是字节

在使用了 header() 函数向浏览器发送了这三行头信息之后,图片 logo.jpg 就不会直接在浏览器中输出了,而是在浏览器以文件的形式将其下载到本地。

头部信息中需要一些文件的属性信息,可以使用 PHP 中提供的函数来获取。设置完头部信息以后,需要将文件的内容输出到浏览器,以便进行下载。可以使用 PHP 中的文件系统函数将文件内容读取出来后,直接输出给浏览器。最方便的是使用 readfile() 函数,将文件内容读取出来并直接输出。

【示例】以下载图片 logo.jpg 为例,实现代码如下所示:

<?php
    $file = 'logo.jpg';
    header('Content-type:image/jpg');   // 发送指定文件 MIME 类型的头信息
    header('Content-Disposition:attachment;filename="'.$file.'"');   // 发送描述文件的头信息,附件和文件名
    header('Content-Length:'.filesize($file));      // 发送指定文件大小的信息,单位是字节

    readfile($file);
?>

运行上面的代码即可将 logo.jpg 下载到本地。

 

常见文件的http中content-type头的值(MIME类型)
An official listing of defined MIME types:

.ai - application/postscript
.aif - audio/x-aiff
.aifc - audio/x-aiff
.aiff - audio/x-aiff
.asc - text/plain
.au - audio/basic
.avi - video/x-msvideo
.bcpio - application/x-bcpio
.bin - application/octet-stream
.c - text/plain
.cc - text/plain
.ccad - application/clariscad
.cdf - application/x-netcdf
.class - application/octet-stream
.cpio - application/x-cpio
.cpt - application/mac-compactpro
.csh - application/x-csh
.css - text/css
.dcr - application/x-director
.dir - application/x-director
.dms - application/octet-stream
.doc - application/msword
.drw - application/drafting
.dvi - application/x-dvi
.dwg - application/acad
.dxf - application/dxf
.dxr - application/x-director
.eps - application/postscript
.etx - text/x-setext
.exe - application/octet-stream
.ez - application/andrew-inset
.f - text/plain
.f90 - text/plain
.fli - video/x-fli
.gif - image/gif
.gtar - application/x-gtar
.gz - application/x-gzip
.h - text/plain
.hdf - application/x-hdf
.hh - text/plain
.hqx - application/mac-binhex40
.htm - text/html
.html - text/html
.ice - x-conference/x-cooltalk
.ief - image/ief
.iges - model/iges
.igs - model/iges
.ips - application/x-ipscript
.ipx - application/x-ipix
.jpe - image/jpeg
.jpeg - image/jpeg
.jpg - image/jpeg
.js - application/x-javascript
.kar - audio/midi
.latex - application/x-latex
.lha - application/octet-stream
.lsp - application/x-lisp
.lzh - application/octet-stream
.m - text/plain
.man - application/x-troff-man
.me - application/x-troff-me
.mesh - model/mesh
.mid - audio/midi
.midi - audio/midi
.mif - application/vnd.mif
.mime - www/mime
.mov - video/quicktime
.movie - video/x-sgi-movie
.mp2 - audio/mpeg
.mp3 - audio/mpeg
.mpe - video/mpeg
.mpeg - video/mpeg
.mpg - video/mpeg
.mpga - audio/mpeg
.ms - application/x-troff-ms
.msh - model/mesh
.nc - application/x-netcdf
.oda - application/oda
.pbm - image/x-portable-bitmap
.pdb - chemical/x-pdb
.pdf - application/pdf
.pgm - image/x-portable-graymap
.pgn - application/x-chess-pgn
.png - image/png
.pnm - image/x-portable-anymap
.pot - application/mspowerpoint
.ppm - image/x-portable-pixmap
.pps - application/mspowerpoint
.ppt - application/mspowerpoint
.ppz - application/mspowerpoint
.pre - application/x-freelance
.prt - application/pro_eng
.ps - application/postscript
.qt - video/quicktime
.ra - audio/x-realaudio
.ram - audio/x-pn-realaudio
.ras - image/cmu-raster
.rgb - image/x-rgb
.rm - audio/x-pn-realaudio
.roff - application/x-troff
.rpm - audio/x-pn-realaudio-plugin
.rtf - text/rtf
.rtx - text/richtext
.scm - application/x-lotusscreencam
.set - application/set
.sgm - text/sgml
.sgml - text/sgml
.sh - application/x-sh
.shar - application/x-shar
.silo - model/mesh
.sit - application/x-stuffit
.skd - application/x-koan
.skm - application/x-koan
.skp - application/x-koan
.skt - application/x-koan
.smi - application/smil
.smil - application/smil
.snd - audio/basic
.sol - application/solids
.spl - application/x-futuresplash
.src - application/x-wais-source
.step - application/STEP
.stl - application/SLA
.stp - application/STEP
.sv4cpio - application/x-sv4cpio
.sv4crc - application/x-sv4crc
.swf - application/x-shockwave-flash
.t - application/x-troff
.tar - application/x-tar
.tcl - application/x-tcl
.tex - application/x-tex
.texi - application/x-texinfo
.texinfo - application/x-texinfo
.tif - image/tiff
.tiff - image/tiff
.tr - application/x-troff
.tsi - audio/TSP-audio
.tsp - application/dsptype
.tsv - text/tab-separated-values
.txt - text/plain
.unv - application/i-deas
.ustar - application/x-ustar
.vcd - application/x-cdlink
.vda - application/vda
.viv - video/vnd.vivo
.vivo - video/vnd.vivo
.vrml - model/vrml
.wav - audio/x-wav
.wrl - model/vrml
.xbm - image/x-xbitmap
.xlc - application/vnd.ms-excel
.xll - application/vnd.ms-excel
.xlm - application/vnd.ms-excel
.xls - application/vnd.ms-excel
.xlw - application/vnd.ms-excel
.xml - text/xml
.xpm - image/x-xpixmap
.xwd - image/x-xwindowdump
.xyz - chemical/x-pdb
.zip - application/zip

以上是关于PHP下载文件的代码和常见文件的http中content-type头的值(MIME类型)的主要内容,如果未能解决你的问题,请参考以下文章

PHP强制下载.xlsx文件损坏

PHP强制下载.xlsx文件损坏

PHP中WEB典型应用技术

php实现文件下载代码

php实现文件上传,下载的常见文件配置

(原创)浅谈任意文件下载漏洞的利用