`
swengineer
  • 浏览: 42457 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

X-Accel-Redirect 下载应用

    博客分类:
  • PHP
 
阅读更多
<?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");
	}
}

 

0
1
分享到:
评论

相关推荐

    在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)

    header('X-Accel-Redirect: /protected/' . basename($filePath)); // 用户认证和其他逻辑处理 ``` 这样,Nginx接收到`X-Accel-Redirect`头后,会查找对应的内部路径并直接发送文件,而无需PHP进一步参与。 然而,...

    在PHP中使用X-SendFile头让文件下载更快

    总结起来,X-SendFile是优化PHP应用中文件下载性能的有效策略。通过将文件传输的工作交给Web服务器,可以减少PHP的内存消耗和CPU利用率,提高整体系统性能。不过,使用前请确保你的服务器环境支持相应的技术,并正确...

    Java及nginx实现文件权限控制代码实例

    其中,X-Accel-Redirect头用于指定文件的实际存在地址,nginx服务器将根据这个头信息将请求redirect到实际文件存在的地址。 这个实例的优点是轻量级、灵活性强、降低了对后端Java服务器的负载冲击同时也提高了文件...

    headers-more-nginx-module-0.34

    1. 添加头部:除了Nginx原生支持的头部设置外,headers_more_nginx_module允许我们在响应中添加自定义的HTTP头部,例如X-Accel-Redirect、X-Frame-Options等,以实现更多安全和性能优化策略。 2. 修改头部:对于...

    Nginx文件上传模块配置

    proxy_hide_header X-Accel-Redirect; proxy_hide_header Content-Length; proxy_intercept_errors off; } ``` `upload_progress`指令会使用$request_id变量(即X-Progress-ID)来跟踪上传进度,并将其传递给...

    wordpress nginx多站点rewrite(重写)规则

    Nginx提供了两种特殊的指令:”x-accel-redirect”和”map”,使用这两个指令可以使得wordpress多站点的网络服务实现伪静态功能。 wordpress多站点使用子目录重写规则 配置中shouce.ren修改为自己的站点域名。 map $...

    iis防盗链

    4. **自定义HTTP响应头**:设置自定义的HTTP响应头,如`X-Accel-Redirect`或`X-Frame-Options`,以防止内容被嵌入到其他网站。 5. **IIS扩展性**:IIS支持ISAPI扩展和FastCGI,可以开发自定义的过滤器或模块来处理...

    网站防盗链(IIS7.0与IIS7.5配置防盗链)

    除了上述方法,还可以通过设置自定义HTTP响应标头(如`X-Accel-Redirect`)或使用其他第三方模块如mod_security(Apache服务器上的扩展)来实现防盗链。然而,这些方法超出了IIS7.0和7.5的基本配置范围,需要更深入...

    易语言IIS反盗链源码-易语言

    4. **HTTP响应头控制**:设置特定的HTTP响应头,如`X-Accel-Redirect`或`Content-Disposition`,来限制资源的访问方式,防止被其他站点嵌入。 5. **缓存策略**:通过设置缓存策略,如禁止或限制缓存,可以减少盗链...

Global site tag (gtag.js) - Google Analytics