zoukankan      html  css  js  c++  java
  • apache mod_xsendfile 让php提供更快的文件下载

    服务器提供一个文件下载,一般使用一个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.c
    sudo a2enmod xsendfile
    sudo /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);
    }
    ?>

  • 相关阅读:
    jquery在表格中的全选、不选,下面全选,全选勾选中,下面一项没有选,全选勾未选中,并且带出请求值。
    比较好的插件
    js预加载loading的canvas写法
    div居中方法
    WEB14-未完
    WEB13
    WEB12
    WEB11-黑客入侵 后门问题
    WEB-10 头等舱
    WEB9-神奇的超全局变量-文件包含
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715082.html
Copyright © 2011-2022 走看看