为了控制静态文件下载,一般方法需要PHP用file_get_contents读取文件,再传给客户端。节省资源的方法是利用nginx的x-sendfile模块,原理是 nginx 上设置一个特殊资源目录,客户端无法直接读取,需要经过php许可后才能下载。
1、设置nginx
location /request/uri/ { internal; alias /real/path/; }
目录 /request/uri/ 被设置为 internal, 所以客户端无法直接访问。
alias 对应的文件所在真实目录,一般这个目录不在公开目录下,也无法访问。
注意要设置生效。
nginx -s reload
2、访问php
// 验证是否有权限: 费这么大劲就是为了这个 // 获取要下载的文件名称: $p_file = '/request/uri/filename.ext'; // 告诉nginx放行: header('Content-type: application/octet-stream'); // 这里的$fileName = basename($p_file) 也就是 filename.ext header('Content-Disposition: attachment; filename="' . $fileName . '"'); // nginx sendfile header('X-Accel-Redirect: '.$p_file);
还有一些控制选项,需要提前 X-Accel-Redirect 发送
X-Accel-Limit-Rate: 1024 X-Accel-Buffering: yes|no X-Accel-Charset: utf-8
帝国CMS教程
织梦cms教程
discuz教程
ecshop教程
phpcms教程
wordpress教程
苹果cms教程
php教程
数据库教程
微信小程序教程
python教程
css教程
js教程
视频教程
电子书
热门推荐- 01 分享几个随机美女图api接口 4123热度
- 02 优学院自动刷课PHP代码 744热度
- 03 php文件限速下载示例代码 635热度
- 04 随机二次元图片API接口源码 584热度
- 05 最新蓝奏云直连解析API接口php代码 533热度