php用什么文件服务器,php简单文件服务器

php 使用 apache 模块 mod-xsendfile 实现文件下载

编写apache 的重写文件 .htaccess, 重写的目的是为了和项目的区分开, 下载文件做单独的服务器, 这样就不会拖垮项目配置规则如下:

RewriteEngine on

RewriteRule index.html index.php

RewriteRule (.*.(rar|zip|chm))$ http://download.test/down.php?file=$1 [NC] // 将下载文件重定向到 http://download.test/download/ 的域名下面

获取请求的文件名称, 并判断是否有权限// 请求的文件名称为 localhost/abc.zip, .htaccess文件需要放置在 localhost 的域名下面, 才能实现重定向

$filename = basename($_GET['file']);

if (!is_file($filename) || !is_readable($filename)) {

exit("

没有找到文件

");

}

如果为中文, 设置中文的文件名称, 并获取浏览器的类型(不同的浏览器输出文件的格式不一致)header("content-type:applicaton/octet-stream");

$ua = $_SERVER['HTTP_USER_AGENT'];

$encodeName = urlencode($filename);

$encodeName = str_replace('+', '%20', $encodeName);

判断浏览器的类型, 并设置输出的 header头信息// 判断浏览器类型

if (preg_match('/MSIE/i', $ua)) {

// 微软的浏览器

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

} else if (preg_match("/firefox/i", $ua)) {

/*火狐浏览器*/

header("Content-Disposition:attachment; filename*='utf8' '".$encodeName."'");

} else {

/*其他浏览器*/

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

}

使用apache的mod-xsendfile模块加速下载文件// 如果服务器支持x-sendfilemodule 则使用x-sendfile加速下载

$xsendfilemodule = in_array('mod-xsendfile', apache_get_modules());

// headers_send() 检测header报头是否已经发送, 发送返回 true, 否则false

if (!headers_send() && $xsendfilemodule) {

header('x-Sendfile:'.$filename);

} else {

@readfile($filename);

}

最后贴上所有代码<?php

$filename = basename($_GET['file']);

if (!is_file($filename) || !is_readable($filename)) {

exit("

没有找到文件

");

}

header("content-type:applicaton/octet-stream");

$ua = $_SERVER['HTTP_USER_AGENT'];

$encodeName = urlencode($filename);

$encodeName = str_replace('+', '%20', $encodeName);

// 判断浏览器类型

if (preg_match('/MSIE/i', $ua)) {

// 微软的浏览器

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

} else if (preg_match("/firefox/i", $ua)) {

/*火狐浏览器*/

header("Content-Disposition:attachment; filename*='utf8' '".$encodeName."'");

} else {

/*其他浏览器*/

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

}

// 如果服务器支持x-sendfilemodule 则使用x-sendfile加速下载

$xsendfilemodule = in_array('mod-xsendfile', apache_get_modules());

// headers_send() 检测header报头是否已经发送, 发送返回 true, 否则false

if (!headers_send() && $xsendfilemodule) {

header('x-Sendfile:'.$filename);

} else {

@readfile($filename);

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值