segunda-feira, 31 de março de 2014

Os navegadores de internet atualmente estão cheios de recursos, sçao capases de executar arquivos em diversos formatos como imagens, vídeos, músicas arquivos de texto como PDF, e diversos outros arquivos, porém ocorre que por necessidade do desenvolvedor e para facilitar a vida do usuário as veses precisamos que o arquivo seja baixado para o computador do usuário e não aberto no navagador, pois muitos usuários não saberam salvar um arquivo aberto no navegador, abaixo apresentarei um método de resolver esse problema.

Em um arquivo download.php coloque o seguinte conteúdo:
<?php
   $arquivo = $_GET["arquivo"];
   if(isset($arquivo) && file_exists($arquivo)){ //testa se o arquivo e a variavel não esta vazia e se o arquivo realmente existe
      switch(strtolower(substr(strrchr(basename($arquivo),"."),1))){ // verifica a extensão do arquivo para pegar o tipo
         case "pdf": $tipo="application/pdf"; break;
         case "exe": $tipo="application/octet-stream"; break;
         case "zip": $tipo="application/zip"; break;
         case "doc": $tipo="application/msword"; break;
         case "xls": $tipo="application/vnd.ms-excel"; break;
         case "ppt": $tipo="application/vnd.ms-powerpoint"; break;
         case "gif": $tipo="image/gif"; break;
         case "png": $tipo="image/png"; break;
         case "jpg": $tipo="image/jpg"; break;
         case "mp3": $tipo="audio/mpeg"; break;
         case "php": // deixar vazio por seurança
         case "htm": // deixar vazio por seurança
         case "html": // deixar vazio por seurança
      }
      header("Content-Type: ".$tipo); // informa o tipo do arquivo ao navegador
      header("Content-Length: ".filesize($arquivo)); // informa o tamanho do arquivo ao navegador
      header("Content-Disposition: attachment; filename=".basename($arquivo)); // informa ao navegador que é tipo anexo e faz abrir a janela de download, tambem informa o nome do arquivo
      readfile($arquivo); // lê o arquivo
      exit; // aborta pós-ações
   }
?>
Como é possível ver acima um case ficar resposável por definir o tipo do arquivo à partir da extensão, caso você queira adicionar mais tipos, é só adicionar mais um case com a extensão e o tipo do arquivo.

Depois faça um arquivo com o nome index.html e coloque nele o seguinte conteúdo.
<!--
  Este será o link que apontará para o nosso script PHP.
  Use no href "baixar.php?arquivo=" + caminho de seu arquivo;
  No Exemplo abaixo utilizei uma imagem com o nome "imagem.jpg" que esta dentro da pasta "arquivos".
-->
<a href="download.php?arquivo=arquivos/imagem.jpg">Baixar Arquivo</a>
No código acima passamos como um parâmetro via GET o diretório do arquivo que se deseja baixar.
Como foi dito se você quiser adicionar mais algum case segue abaixo uma lista te extensões e tipos que são chamados de Mime types.

ai     application/postscript
aif     audio/x-aiff
aifc     audio/x-aiff
aiff     audio/x-aiff
asc     text/plain
atom     application/atom+xml
au     audio/basic
avi     video/x-msvideo
bcpio     application/x-bcpio
bin     application/octet-stream
bmp     image/bmp
cdf     application/x-netcdf
cgm     image/cgm
class     application/octet-stream
cpio     application/x-cpio
cpt     application/mac-compactpro
csh     application/x-csh
css     text/css
dcr     application/x-director
dif     video/x-dv
dir     application/x-director
djv     image/vnd.djvu
djvu     image/vnd.djvu
dll     application/octet-stream
dmg     application/octet-stream
dms     application/octet-stream
doc     application/msword
dtd     application/xml-dtd
dv     video/x-dv
dvi     application/x-dvi
dxr     application/x-director
eps     application/postscript
etx     text/x-setext
exe     application/octet-stream
ez     application/andrew-inset
gif     image/gif
gram     application/srgs
grxml     application/srgs+xml
gtar     application/x-gtar
hdf     application/x-hdf
hqx     application/mac-binhex40
htm     text/html
html     text/html
ice     x-conference/x-cooltalk
ico     image/x-icon
ics     text/calendar
ief     image/ief
ifb     text/calendar
iges     model/iges
igs     model/iges
jnlp     application/x-java-jnlp-file
jp2     image/jp2
jpe     image/jpeg
jpeg     image/jpeg
jpg     image/jpeg
js     application/x-javascript
kar     audio/midi
latex     application/x-latex
lha     application/octet-stream
lzh     application/octet-stream
m3u     audio/x-mpegurl
m4a     audio/mp4a-latm
m4b     audio/mp4a-latm
m4p     audio/mp4a-latm
m4u     video/vnd.mpegurl
m4v     video/x-m4v
mac     image/x-macpaint
man     application/x-troff-man
mathml     application/mathml+xml
me     application/x-troff-me
mesh     model/mesh
mid     audio/midi
midi     audio/midi
mif     application/vnd.mif
mov     video/quicktime
movie     video/x-sgi-movie
mp2     audio/mpeg
mp3     audio/mpeg
mp4     video/mp4
mpe     video/mpeg
mpeg     video/mpeg
mpg     video/mpeg
mpga     audio/mpeg
ms     application/x-troff-ms
msh     model/mesh
mxu     video/vnd.mpegurl
nc     application/x-netcdf
oda     application/oda
ogg     application/ogg
pbm     image/x-portable-bitmap
pct     image/pict
pdb     chemical/x-pdb
pdf     application/pdf
pgm     image/x-portable-graymap
pgn     application/x-chess-pgn
pic     image/pict
pict     image/pict
png     image/png
pnm     image/x-portable-anymap
pnt     image/x-macpaint
pntg     image/x-macpaint
ppm     image/x-portable-pixmap
ppt     application/vnd.ms-powerpoint
ps     application/postscript
qt     video/quicktime
qti     image/x-quicktime
qtif     image/x-quicktime
ra     audio/x-pn-realaudio
ram     audio/x-pn-realaudio
ras     image/x-cmu-raster
rdf     application/rdf+xml
rgb     image/x-rgb
rm     application/vnd.rn-realmedia
roff     application/x-troff
rtf     text/rtf
rtx     text/richtext
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
so     application/octet-stream
spl     application/x-futuresplash
src     application/x-wais-source
sv4cpio     application/x-sv4cpio
sv4crc     application/x-sv4crc
svg     image/svg+xml
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
tsv     text/tab-separated-values
txt     text/plain
ustar     application/x-ustar
vcd     application/x-cdlink
vrml     model/vrml
vxml     application/voicexml+xml
wav     audio/x-wav
wbmp     image/vnd.wap.wbmp
wbmxl     application/vnd.wap.wbxml
wml     text/vnd.wap.wml
wmlc     application/vnd.wap.wmlc
wmls     text/vnd.wap.wmlscript
wmlsc     application/vnd.wap.wmlscriptc
wrl     model/vrml
xbm     image/x-xbitmap
xht     application/xhtml+xml
xhtml     application/xhtml+xml
xls     application/vnd.ms-excel
xml     application/xml
xpm     image/x-xpixmap
xsl     application/xml
xslt     application/xslt+xml
xul     application/vnd.mozilla.xul+xml
xwd     image/x-xwindowdump
xyz     chemical/x-xyz
zip     application/zip

0 comentários:

Postar um comentário

Inscreva-se no Feed RSS Follow me on Twitter!