如何在强制浏览器下载PHP时显示文件大小

时间:2014-07-20 20:58:46

标签: php download

我用php从我的服务器下载mp4,mp3等文件。但是浏览器没有显示文件的大小。 我到处搜索,但我找不到任何有效的答案。希望您能够帮助我。提前谢谢。

以下是代码

  function force_download($file)
 {
 $ext = explode(".", $file);
 switch($ext[sizeof($ext)-1])
{
  case 'jar': $mime = "application/java-archive"; break;
  case 'zip': $mime = "application/zip"; break;
  case 'jpeg': $mime = "image/jpeg"; break;
  case 'jpg': $mime = "image/jpg"; break;
  case 'jad': $mime = "text/vnd.sun.j2me.app-descriptor"; break;
  case "gif": $mime = "image/gif"; break;
  case "png": $mime = "image/png"; break;
  case "pdf": $mime = "application/pdf"; break;
  case "txt": $mime = "text/plain"; break;
  case "doc": $mime = "application/msword"; break;
  case "ppt": $mime = "application/vnd.ms-powerpoint"; break;
  case "wbmp": $mime = "image/vnd.wap.wbmp"; break;
  case "wmlc": $mime = "application/vnd.wap.wmlc"; break;
  case "mp4s": $mime = "application/mp4"; break;
  case "ogg": $mime = "application/ogg"; break;
  case "pls": $mime = "application/pls+xml"; break;
  case "asf": $mime = "application/vnd.ms-asf"; break;
  case "swf": $mime = "application/x-shockwave-flash"; break;
  case "mp4": $mime = "video/mp4"; break;
  case "m4a": $mime = "audio/mp4"; break;
  case "m4p": $mime = "audio/mp4"; break;
  case "mp4a": $mime = "audio/mp4"; break;
  case "mp3": $mime = "audio/mpeg"; break;
  case "m3a": $mime = "audio/mpeg"; break;
  case "m2a": $mime = "audio/mpeg"; break;
  case "mp2a": $mime = "audio/mpeg"; break;
  case "mp2": $mime = "audio/mpeg"; break;
  case "mpga": $mime = "audio/mpeg"; break;
  case "wav": $mime = "audio/wav"; break;
  case "m3u": $mime = "audio/x-mpegurl"; break;
  case "bmp": $mime = "image/bmp"; break;
  case "ico": $mime = "image/x-icon"; break;
  case "3gp": $mime = "video/3gpp"; break;
  case "3g2": $mime = "video/3gpp2"; break;
  case "mp4v": $mime = "video/mp4"; break;
  case "mpg4": $mime = "video/mp4"; break;
  case "m2v": $mime = "video/mpeg"; break;
  case "m1v": $mime = "video/mpeg"; break;
  case "mpe": $mime = "video/mpeg"; break;
  case "mpeg": $mime = "video/mpeg"; break;
  case "mpg": $mime = "video/mpeg"; break;
  case "mov": $mime = "video/quicktime"; break;
  case "qt": $mime = "video/quicktime"; break;
  case "avi": $mime = "video/x-msvideo"; break;
  case "midi": $mime = "audio/midi"; break;
  case "mid": $mime = "audio/mid"; break;
  case "amr": $mime = "audio/amr"; break;
  default: $mime = "application/force-download";
 }
header('Content-Description: File Transfer');
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: '. filesize($file));
ob_clean();
flush();

 readfile($file);
}   

if (isset($_POST['downl'])){
$file = "http://localhost/project1/downloads/gmf.mp4";
force_download($file); 

}
<form  method="POST" action=''>
    <?php echo'<input type="submit" name="downl"  value="Download Baby" >' ;    ?>
</form>

如果我尝试使用 echo filesize($file) 显示文件大小,则会出现此错误:

 Warning: filesize(): stat failed for http://localhost/project1/downloads...

1 个答案:

答案 0 :(得分:2)

从php 5.0.0开始,file命令支持http wrappers,但http包装器不支持像size这样的stat命令。所以你无法在大小写的情况下获得文件大小。