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);
    }
    ?>

  • 相关阅读:
    mysql常见的优化方法
    Mac 怎么通过自带终端连接linux服务器
    基于 appium 的 UI 自动化测试
    sourcetree在mac上的使用
    mac下git安装和使用
    mac 上更改环境变量
    Mac环境下svn的使用
    jira常用配置
    influxDB基本操作
    Collectd 和 InfluxDB 的部署和使用
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715082.html
Copyright © 2011-2022 走看看