背景: nginx开启零拷贝之后,可以跳过(内核缓冲区->用户态->socket缓冲区)这一个过程,减少用户态到内核态的切换。
配置:nginx
sendfile:on;
问题:在开启了nginx零拷贝后,php生成一个压缩文件后怎么返回给浏览器?告知nginx要下载的是哪个文件,需要配置head信息?
传统下载方式:
static function flushFile($filePath, $type, $fileSize, $name)
{
$localFile = fopen($filePath, 'r');
header("Content-Type: " . $type);
header("Accept-Range: bytes");
header("Content-Length: " . $fileSize);
header('Content-Disposition: attachment; filename="'. $name.'"');
$buffer = 1024;
while (!feof($localFile)) {
echo fread($localFile, $buffer);
}
fclose($localFile);
}
网上有看到一个用例是配置X-Accel-Redirect属性如:
static function flushFile($filePath, $type, $fileSize, $name)
{
header("Content-Type: " . $type);
header("Accept-Range: bytes");
header("Content-Length: " . $fileSize);
header('Content-Disposition: attachment; filename="'. $name.'"');
header('X-Accel-Redirect: '. $filePath);
}
但是这样浏览器会报错,响应无效,官方文档也找不到X-Accel-Redirect的相关信息
已解决
官方文档地址 https://www.nginx.com/resourc...