文档服务器php,php简单文件服务器

本文介绍了如何使用PHP配合Apache的mod-xsendfile模块优化文件下载过程,通过.htaccess文件重定向,针对不同浏览器设置合适的文件名和Content-Disposition头,提升下载速度和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

RewriteEngine on

RewriteRule index.html index.php

RewriteRule (.

获取请求的文件名称, 并判断是否有权限// 请求的文件名称为 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);

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值