apache mod_xsendfile:让php提供更快的文件下载2015-02-28服务器提供一个文件下载,一般使用一个url指向服务器中的文件即可提供下载。但这样就不能进行统计,权限检测等操作。因此,一般使用php提供下载,代码如下:
<?php$file = "test.zip";if(file_exists($file)){header("content-type:application/octet-stream");header("content-disposition:attachment; filename=".basename($file));header("content-length:".filesize($file));readfile($file);}?>处理中文文件名:
<?php$file = "test.zip";$filename = "中文.zip";if(file_exists($file)){$user_agent = $_SERVER["Http_User_agent"];$encode_filename = rawurlencode($filename);if(preg_match("/MSIE/", $user_agent)){header("content-disposition:attachment; filename="".$encode_filename.""");}else if(preg_match("/Firefox/", $user_agent)){header("content-disposition:attachment; filename*="utf8""".$filename.""");}else{header("content-disposition:attachment; filename="".$filename.""");}readfile($file);}?>使用php readfile,需要经过php这层,如果可以直接通过apache将文件发送给用户,不经过php这层,将会提高下载速度。使用apache mod_xsendfile,下载地址:mod_xsendfile,让apache直接将文件发给用户安装:
sudo apxs2 -cia mod_xsendfile.csudo a2enmod xsendfilesudo /etc/init.d/apache2 restart
apxs2 用于编译apache module,需要安装apache2-dev设置xsendfile打开:
<Directory>XSendFile On</Directory>
代码如下:
<?php$file = "test.zip";$filename = "中文.zip";if(file_exists($file)){$user_agent = $_SERVER["Http_User_agent"];$encode_filename = rawurlencode($filename);if(preg_match("/MSIE/", $user_agent)){header("content-disposition:attachment; filename="".$encode_filename.""");}else if(preg_match("/Firefox/", $user_agent)){header("content-disposition:attachment; filename*="utf8""".$filename.""");}else{header("content-disposition:attachment; filename="".$filename.""");}header("X-Sendfile:".$file);}?>From:csdn博客 傲雪星枫