您当前的位置: 首页 > 网站编程 > PHP教程 > 采用header定义为文件然后readfile下载

采用header定义为文件然后readfile下载

作者:不详 来源:网络 发布时间: 2014-08-07 21:02 点击:
有时候我们为了隐藏真实的下载地址,我们通过采用header定义为文件然后readfile下载,但这样会加大服务器的负担,一般不建议下载量比较大的文件 代码如下: ?php function sendFile($fileName, $fancyName = '', $forceDownload = true, $speedLimit = 0, $contentType

采用header定义为文件然后readfile下载

  有时候我们为了隐藏真实的下载地址,我们通过采用header定义为文件然后readfile下载,但这样会加大服务器的负担,一般不建议下载量比较大的文件

  代码如下:

  <?php

  function sendFile($fileName, $fancyName = '', $forceDownload = true, $speedLimit = 0, $contentType = '')

  {

  if (!is_readable($fileName))

  {

  header("HTTP/1.1 404 Not Found");

  return false;

  }

  $fileStat = stat($fileName);

  $lastModified = $fileStat['mtime'];

  $md5 = md5($fileStat['mtime'] .'='. $fileStat['ino'] .'='. $fileStat['size']);

  $etag = '"' . $md5 . '-' . crc32($md5) . '"';

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

  header("ETag: $etag");

  if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified)

  {

  header("HTTP/1.1 304 Not Modified");

  return true;

  }

  if (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $lastModified)

  {

  header("HTTP/1.1 304 Not Modified");

  return true;

  }

  if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)

  {

  header("HTTP/1.1 304 Not Modified");

  return true;

  }

  if ($fancyName == '')

  {

  $fancyName = basename($fileName);

  }

  if ($contentType == '')

  {

  $contentType = 'application/octet-stream';

  }

  $fileSize = $fileStat['size'];

  $contentLength = $fileSize;

  $isPartial = false;

  if (isset($_SERVER['HTTP_RANGE']))

  {

  if (preg_match('/^bytes=(d*)-(d*)$/', $_SERVER['HTTP_RANGE'], $matches))

  {  

  $startPos = $matches[1];

  $endPos = $matches[2];

  if ($startPos == '' && $endPos == '')

  {

  return false;

  }

  if ($startPos == '')

  {

  $startPos = $fileSize - $endPos;

  $endPos = $fileSize - 1;

  }

  else if ($endPos == '')

  {

  $endPos = $fileSize - 1;

  }

  $startPos = $startPos < 0 ? 0 : $startPos;

  $endPos = $endPos > $fileSize - 1 ? $fileSize - 1 : $endPos;

  $length = $endPos - $startPos + 1;

  if ($length < 0)

  {

  return false;

  }

  $contentLength = $length;

  $isPartial = true;

  }

  }

  // send headers

  if ($isPartial)

  {

  header('HTTP/1.1 206 Partial Content');

  header("Content-Range: bytes $startPos-$endPos/$fileSize");

  }

  else

  {

  header("HTTP/1.1 200 OK");

  $startPos = 0;

  $endPos = $contentLength - 1;

  }

  header('Pragma: cache');

  header('Cache-Control: public, must-revalidate, max-age=0');

  header('Accept-Ranges: bytes');

  header('Content-type: ' . $contentType);

  header('Content-Length: ' . $contentLength);

  if ($forceDownload)

  {

  header('Content-Disposition: attachment; filename="' . rawurlencode($fancyName). '"');//汉字自动转为URL编码

  header('Content-Disposition: attachment; filename="' . $fancyName. '"');

  }

  header("Content-Transfer-Encoding: binary");

  $bufferSize = 2048;

  if ($speedLimit != 0)

  {

  $packetTime = floor($bufferSize * 1000000 / $speedLimit);

  }

  $bytesSent = 0;

  $fp = fopen($fileName, "rb");

  fseek($fp, $startPos);

  //fpassthru($fp);

  while ($bytesSent < $contentLength && !feof($fp) && connection_status() == 0 )

  {

  if ($speedLimit != 0)

  {

  list($usec, $sec) = explode(" ", microtime());

  $outputTimeStart = ((float)$usec + (float)$sec);

  }

  $readBufferSize = $contentLength - $bytesSent < $bufferSize ? $contentLength - $bytesSent : $bufferSize;

  $buffer = fread($fp, $readBufferSize);

  echo $buffer;

  ob_flush();

  flush();

  $bytesSent += $readBufferSize;

  if ($speedLimit != 0)

  {

  list($usec, $sec) = explode(" ", microtime());

  $outputTimeEnd = ((float)$usec + (float)$sec);

  $useTime = ((float) $outputTimeEnd - (float) $outputTimeStart) * 1000000;

  $sleepTime = round($packetTime - $useTime);

  if ($sleepTime > 0)

  {

  usleep($sleepTime);

  }

  }

  }

  return true;

  }

  ?>

  附服务器响应HTTP的类型ContentType大全:

  ".*"="application/octet-stream"

  ".001"="application/x-001"

  ".301"="application/x-301"

  ".323"="text/h323"

  ".906"="application/x-906"

  ".907"="drawing/907"

  ".a11"="application/x-a11"

  ".acp"="audio/x-mei-aac"

  ".ai"="application/postscript"

  ".aif"="audio/aiff"

  ".aifc"="audio/aiff"

  ".aiff"="audio/aiff"

  ".anv"="application/x-anv"

  ".asa"="text/asa"

  ".asf"="video/x-ms-asf"

  ".asp"="text/asp"

  ".asx"="video/x-ms-asf"

  ".au"="audio/basic"

  ".avi"="video/avi"

  ".awf"="application/vnd.adobe.workflow"

  ".biz"="text/xml"

  ".bmp"="application/x-bmp"

  ".bot"="application/x-bot"

  ".c4t"="application/x-c4t"

  ".c90"="application/x-c90"

  ".cal"="application/x-cals"

  ".cat"="application/vnd.ms-pki.seccat"

  ".cdf"="application/x-netcdf"

  ".cdr"="application/x-cdr"

  ".cel"="application/x-cel"

  ".cer"="application/x-x509-ca-cert"

  ".cg4"="application/x-g4"

  ".cgm"="application/x-cgm"

  ".cit"="application/x-cit"

  ".class"="java/*"

  ".cml"="text/xml"

  ".cmp"="application/x-cmp"

  ".cmx"="application/x-cmx"

  ".cot"="application/x-cot"

  ".crl"="application/pkix-crl"

  ".crt"="application/x-x509-ca-cert"

  ".csi"="application/x-csi"

  ".css"="text/css"

  ".cut"="application/x-cut"

  ".dbf"="application/x-dbf"

  ".dbm"="application/x-dbm"

  ".dbx"="application/x-dbx"

  ".dcd"="text/xml"

  ".dcx"="application/x-dcx"

  ".der"="application/x-x509-ca-cert"

  ".dgn"="application/x-dgn"

  ".dib"="application/x-dib"

  ".dll"="application/x-msdownload"

  ".doc"="application/msword"

  ".dot"="application/msword"

  ".drw"="application/x-drw"

  ".dtd"="text/xml"

  ".dwf"="Model/vnd.dwf"

  ".dwf"="application/x-dwf"

  ".dwg"="application/x-dwg"

  ".dxb"="application/x-dxb"

  ".dxf"="application/x-dxf"

  ".edn"="application/vnd.adobe.edn"

  ".emf"="application/x-emf"

  ".eml"="message/rfc822"

  ".ent"="text/xml"

  ".epi"="application/x-epi"

  ".eps"="application/x-ps"

  ".eps"="application/postscript"

  ".etd"="application/x-ebx"

  ".exe"="application/x-msdownload"

  ".fax"="image/fax"

  ".fdf"="application/vnd.fdf"

  ".fif"="application/fractals"

  ".fo"="text/xml"

  ".frm"="application/x-frm"

  ".g4"="application/x-g4"

  ".gbr"="application/x-gbr"

  ".gcd"="application/x-gcd"

  ".gif"="image/gif"

  ".gl2"="application/x-gl2"

  ".gp4"="application/x-gp4"

  ".hgl"="application/x-hgl"

  ".hmr"="application/x-hmr"

  ".hpg"="application/x-hpgl"

  ".hpl"="application/x-hpl"

  ".hqx"="application/mac-binhex40"

  ".hrf"="application/x-hrf"

  ".hta"="application/hta"

  ".htc"="text/x-component"

  ".htm"="text/html"

  ".html"="text/html"

  ".htt"="text/webviewhtml"

  ".htx"="text/html"

  ".icb"="application/x-icb"

  ".ico"="image/x-icon"

  ".ico"="application/x-ico"

  ".iff"="application/x-iff"

  ".ig4"="application/x-g4"

  ".igs"="application/x-igs"

  ".iii"="application/x-iphone"

  ".img"="application/x-img"

  ".ins"="application/x-internet-signup"

  ".isp"="application/x-internet-signup"

  ".IVF"="video/x-ivf"

  ".java"="java/*"

  ".jfif"="image/jpeg"

  ".jpe"="image/jpeg"

  ".jpe"="application/x-jpe"

  ".jpeg"="image/jpeg"

  ".jpg"="image/jpeg"

  ".jpg"="application/x-jpg"

  ".js"="application/x-javascript"

  ".jsp"="text/html"

  ".la1"="audio/x-liquid-file"

  ".lar"="application/x-laplayer-reg"

  ".latex"="application/x-latex"

  ".lavs"="audio/x-liquid-secure"

  ".lbm"="application/x-lbm"

  ".lmsff"="audio/x-la-lms"

  ".ls"="application/x-javascript"

  ".ltr"="application/x-ltr"

  ".m1v"="video/x-mpeg"

  ".m2v"="video/x-mpeg"

  ".m3u"="audio/mpegurl"

  ".m4e"="video/mpeg4"

  ".mac"="application/x-mac"

  ".man"="application/x-troff-man"

  ".math"="text/xml"

  ".mdb"="application/msaccess"

  ".mdb"="application/x-mdb"

  ".mfp"="application/x-shockwave-flash"

  ".mht"="message/rfc822"

  ".mhtml"="message/rfc822"

  ".mi"="application/x-mi"

  ".mid"="audio/mid"

  ".midi"="audio/mid"

  ".mil"="application/x-mil"

  ".mml"="text/xml"

  ".mnd"="audio/x-musicnet-download"

  ".mns"="audio/x-musicnet-stream"

  ".mocha"="application/x-javascript"

  ".movie"="video/x-sgi-movie"

  ".mp1"="audio/mp1"

  ".mp2"="audio/mp2"

  ".mp2v"="video/mpeg"

  ".mp3"="audio/mp3"

  ".mp4"="video/mpeg4"

  ".mpa"="video/x-mpg"

  ".mpd"="application/vnd.ms-project"

  ".mpe"="video/x-mpeg"

  ".mpeg"="video/mpg"

  ".mpg"="video/mpg"

  ".mpga"="audio/rn-mpeg"

  ".mpp"="application/vnd.ms-project"

  ".mps"="video/x-mpeg"

  ".mpt"="application/vnd.ms-project"

  ".mpv"="video/mpg"

  ".mpv2"="video/mpeg"

  ".mpw"="application/vnd.ms-project"

  ".mpx"="application/vnd.ms-project"

  ".mtx"="text/xml"

  ".mxp"="application/x-mmxp"

  ".net"="image/pnetvue"

  ".nrf"="application/x-nrf"

  ".nws"="message/rfc822"

  ".odc"="text/x-ms-odc"

  ".out"="application/x-out"

  ".p10"="application/pkcs10"

  ".p12"="application/x-pkcs12"

  ".p7b"="application/x-pkcs7-certificates"

  ".p7c"="application/pkcs7-mime"

  ".p7m"="application/pkcs7-mime"

  ".p7r"="application/x-pkcs7-certreqresp"

  ".p7s"="application/pkcs7-signature"

  ".pc5"="application/x-pc5"

  ".pci"="application/x-pci"

  ".pcl"="application/x-pcl"

  ".pcx"="application/x-pcx"

  ".pdf"="application/pdf"

  ".pdf"="application/pdf"

  ".pdx"="application/vnd.adobe.pdx"

  ".pfx"="application/x-pkcs12"

  ".pgl"="application/x-pgl"

  ".pic"="application/x-pic"

  ".pko"="application/vnd.ms-pki.pko"

  ".pl"="application/x-perl"

  ".plg"="text/html"

  ".pls"="audio/scpls"

  ".plt"="application/x-plt"

  ".png"="image/png"

  ".png"="application/x-png"

  ".pot"="application/vnd.ms-powerpoint"

  ".ppa"="application/vnd.ms-powerpoint"

  ".ppm"="application/x-ppm"

  ".pps"="application/vnd.ms-powerpoint"

  ".ppt"="application/vnd.ms-powerpoint"

  ".ppt"="application/x-ppt"

  ".pr"="application/x-pr"

  ".prf"="application/pics-rules"

  ".prn"="application/x-prn"

  ".prt"="application/x-prt"

  ".ps"="application/x-ps"

  ".ps"="application/postscript"

  ".ptn"="application/x-ptn"

  ".pwz"="application/vnd.ms-powerpoint"

  ".r3t"="text/vnd.rn-realtext3d"

  ".ra"="audio/vnd.rn-realaudio"

  ".ram"="audio/x-pn-realaudio"

  ".ras"="application/x-ras"

  ".rat"="application/rat-file"

  ".rdf"="text/xml"

  ".rec"="application/vnd.rn-recording"

  ".red"="application/x-red"

  ".rgb"="application/x-rgb"

  ".rjs"="application/vnd.rn-realsystem-rjs"

  ".rjt"="application/vnd.rn-realsystem-rjt"

  ".rlc"="application/x-rlc"

  ".rle"="application/x-rle"

  ".rm"="application/vnd.rn-realmedia"

  ".rmf"="application/vnd.adobe.rmf"

  ".rmi"="audio/mid"

  ".rmj"="application/vnd.rn-realsystem-rmj"

  ".rmm"="audio/x-pn-realaudio"

  ".rmp"="application/vnd.rn-rn_music_package"

  ".rms"="application/vnd.rn-realmedia-secure"

  ".rmvb"="application/vnd.rn-realmedia-vbr"

  ".rmx"="application/vnd.rn-realsystem-rmx"

  ".rnx"="application/vnd.rn-realplayer"

  ".rp"="image/vnd.rn-realpix"

  ".rpm"="audio/x-pn-realaudio-plugin"

  ".rsml"="application/vnd.rn-rsml"

  ".rt"="text/vnd.rn-realtext"

  ".rtf"="application/msword"

  ".rtf"="application/x-rtf"

  ".rv"="video/vnd.rn-realvideo"

  ".sam"="application/x-sam"

  ".sat"="application/x-sat"

  ".sdp"="application/sdp"

  ".sdw"="application/x-sdw"

  ".sit"="application/x-stuffit"

  ".slb"="application/x-slb"

  ".sld"="application/x-sld"

  ".slk"="drawing/x-slk"

  ".smi"="application/smil"

  ".smil"="application/smil"

  ".smk"="application/x-smk"

  ".snd"="audio/basic"

  ".sol"="text/plain"

  ".sor"="text/plain"

  ".spc"="application/x-pkcs7-certificates"

  ".spl"="application/futuresplash"

  ".spp"="text/xml"

  ".ssm"="application/streamingmedia"

  ".sst"="application/vnd.ms-pki.certstore"

  ".stl"="application/vnd.ms-pki.stl"

  ".stm"="text/html"

  ".sty"="application/x-sty"

  ".svg"="text/xml"

  ".swf"="application/x-shockwave-flash"

  ".tdf"="application/x-tdf"

  ".tg4"="application/x-tg4"

  ".tga"="application/x-tga"

  ".tif"="image/tiff"

  ".tif"="application/x-tif"

  ".tiff"="image/tiff"

  ".tld"="text/xml"

  ".top"="drawing/x-top"

  ".torrent"="application/x-bittorrent"

  ".tsd"="text/xml"

  ".txt"="text/plain"

  ".uin"="application/x-icq"

  ".uls"="text/iuls"

  ".vcf"="text/x-vcard"

  ".vda"="application/x-vda"

  ".vdx"="application/vnd.visio"

  ".vml"="text/xml"

  ".vpg"="application/x-vpeg005"

  ".vsd"="application/vnd.visio"

  ".vsd"="application/x-vsd"

  ".vss"="application/vnd.visio"

  ".vst"="application/vnd.visio"

  ".vst"="application/x-vst"

  ".vsw"="application/vnd.visio"

  ".vsx"="application/vnd.visio"

  ".vtx"="application/vnd.visio"

  ".vxml"="text/xml"

  ".wav"="audio/wav"

  ".wax"="audio/x-ms-wax"

  ".wb1"="application/x-wb1"

  ".wb2"="application/x-wb2"

  ".wb3"="application/x-wb3"

  ".wbmp"="image/vnd.wap.wbmp"

  ".wiz"="application/msword"

  ".wk3"="application/x-wk3"

  ".wk4"="application/x-wk4"

  ".wkq"="application/x-wkq"

  ".wks"="application/x-wks"

  ".wm"="video/x-ms-wm"

  ".wma"="audio/x-ms-wma"

  ".wmd"="application/x-ms-wmd"

  ".wmf"="application/x-wmf"

  ".wml"="text/vnd.wap.wml"

  ".wmv"="video/x-ms-wmv"

  ".wmx"="video/x-ms-wmx"

  ".wmz"="application/x-ms-wmz"

  ".wp6"="application/x-wp6"

  ".wpd"="application/x-wpd"

  ".wpg"="application/x-wpg"

  ".wpl"="application/vnd.ms-wpl"

  ".wq1"="application/x-wq1"

  ".wr1"="application/x-wr1"

  ".wri"="application/x-wri"

  ".wrk"="application/x-wrk"

  ".ws"="application/x-ws"

  ".ws2"="application/x-ws"

  ".wsc"="text/scriptlet"

  ".wsdl"="text/xml"

  ".wvx"="video/x-ms-wvx"

  ".xdp"="application/vnd.adobe.xdp"

  ".xdr"="text/xml"

  ".xfd"="application/vnd.adobe.xfd"

  ".xfdf"="application/vnd.adobe.xfdf"

  ".xhtml"="text/html"

  ".xls"="application/vnd.ms-excel"

  ".xls"="application/x-xls"

  ".xlw"="application/x-xlw"

  ".xml"="text/xml"

  ".xpl"="audio/scpls"

  ".xq"="text/xml"

  ".xql"="text/xml"

  ".xquery"="text/xml"

  ".xsd"="text/xml"

  ".xsl"="text/xml"

  ".xslt"="text/xml"

  ".xwd"="application/x-xwd"

  ".x_b"="application/x-x_b"

  ".x_t"="application/x-x_t"
分享到:
本文"采用header定义为文件然后readfile下载"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4