<?php /** * 通过Nginx X-Accel-Redirect 进行文件下载 * X-Accel-Redirect模式下载,会将文件直接推送客户端,不占用服务器物理内存 * * @author Robot * @version 1.0 * @example * $f = new Utils_Download(); * $f->getFile('测试下载文件.zip','xx.zip'); * */ class Utils_Download { private $userAgent; //HTTP_USER_AGENT private $filename; //下载文件名 private $alias; //Nginx目录映射别名 private $limitRate = 1048576; //限速下载 /** * 构造方法 */ public function Utils_Download() { $this->userAgent = $_SERVER ["HTTP_USER_AGENT"]; } /** * 设置Nginx路径映射别名 * * @param string $alias 别名 */ public function setAlias($alias) { $this->alias = $alias; } /** * 下载限速 * * @param int $limitRate 限速字节数Byte/s */ public function setLimitRate($limitRate) { $this->limitRate = $limitRate; } /** * 下载文件 * * @param string $aliasname 下载文件名别名自定义 * @param string $realname 服务器文件真实名称 */ function getFile($aliasname,$realname) { $encoded_filename = urlencode ( $aliasname ); $encoded_filename = str_replace ( "+", "%20", $encoded_filename ); header('Content-Type: application/octet-stream'); header('X-Accel-Buffering: yes'); header('X-Accel-Limit-Rate :'.$this->limitRate); //速度限制 Byte/s header ( 'Content-Type: application/octet-stream' ); if (preg_match ( "/MSIE/", $this->userAgent )) { header ( 'Content-Disposition: attachment; filename="' . $encoded_filename . '"' ); } else if (preg_match ( "/Firefox/", $this->userAgent )) { header ( 'Content-Disposition: attachment; filename*="utf8\'\'' . $aliasname . '"' ); } else { header ( 'Content-Disposition: attachment; filename="' . $aliasname . '"' ); } header('X-Accel-Redirect: /'.$this->alias."/$realname"); } }
相关推荐
header('X-Accel-Redirect: /protected/' . basename($filePath)); // 用户认证和其他逻辑处理 ``` 这样,Nginx接收到`X-Accel-Redirect`头后,会查找对应的内部路径并直接发送文件,而无需PHP进一步参与。 然而,...
总结起来,X-SendFile是优化PHP应用中文件下载性能的有效策略。通过将文件传输的工作交给Web服务器,可以减少PHP的内存消耗和CPU利用率,提高整体系统性能。不过,使用前请确保你的服务器环境支持相应的技术,并正确...
其中,X-Accel-Redirect头用于指定文件的实际存在地址,nginx服务器将根据这个头信息将请求redirect到实际文件存在的地址。 这个实例的优点是轻量级、灵活性强、降低了对后端Java服务器的负载冲击同时也提高了文件...
1. 添加头部:除了Nginx原生支持的头部设置外,headers_more_nginx_module允许我们在响应中添加自定义的HTTP头部,例如X-Accel-Redirect、X-Frame-Options等,以实现更多安全和性能优化策略。 2. 修改头部:对于...
proxy_hide_header X-Accel-Redirect; proxy_hide_header Content-Length; proxy_intercept_errors off; } ``` `upload_progress`指令会使用$request_id变量(即X-Progress-ID)来跟踪上传进度,并将其传递给...
Nginx提供了两种特殊的指令:”x-accel-redirect”和”map”,使用这两个指令可以使得wordpress多站点的网络服务实现伪静态功能。 wordpress多站点使用子目录重写规则 配置中shouce.ren修改为自己的站点域名。 map $...
4. **自定义HTTP响应头**:设置自定义的HTTP响应头,如`X-Accel-Redirect`或`X-Frame-Options`,以防止内容被嵌入到其他网站。 5. **IIS扩展性**:IIS支持ISAPI扩展和FastCGI,可以开发自定义的过滤器或模块来处理...
除了上述方法,还可以通过设置自定义HTTP响应标头(如`X-Accel-Redirect`)或使用其他第三方模块如mod_security(Apache服务器上的扩展)来实现防盗链。然而,这些方法超出了IIS7.0和7.5的基本配置范围,需要更深入...
4. **HTTP响应头控制**:设置特定的HTTP响应头,如`X-Accel-Redirect`或`Content-Disposition`,来限制资源的访问方式,防止被其他站点嵌入。 5. **缓存策略**:通过设置缓存策略,如禁止或限制缓存,可以减少盗链...