× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Http\Response->sendfile

发送文件到浏览器。

function Http\Response->sendfile(string $filename, int $offset = 0, int $length = 0);
  • $filename 要发送的文件名称,文件不存在或没有访问权限sendfile会失败
  • 底层无法推断要发送文件的MIME格式因此需要应用代码指定Content-Type
  • 调用sendfile前不得使用write方法发送Http-Chunk
  • 调用sendfile后底层会自动执行end
  • sendfile不支持gzip压缩
  • $offset 上传文件的偏移量,可以指定从文件的中间部分开始传输数据。此特性可用于支持断点续传。
  • $length 发送数据的尺寸,默认为整个文件的尺寸

$length$offset参数在1.9.11或更高版本可用

使用示例

$response->header('Content-Type', 'image/jpeg');
$response->sendfile(__DIR__.$request->server['request_uri']);

  • StartMenu

    [2018-01-03 14:57:28 #5747.0] ERROR swSSL_sendfile(:479): write() failed. Error: Resource temporarily unavailable[11].

    怎么解决?需要修改源码吗?

  • 邱儿

    我也遇到了这个问题,怎么解决?

  • 邱儿

    Resource temporarily unavailable [11] 客户端swoole_client在recv时报

    swoole_client::recv(): recv() failed. Error: Resource temporarily unavailable [11] 这个错误表示,服务器端在规定的时间内没有返回数据,接收超时了。

    可以通过tcpdump查看网络通信过程,检查服务器是否发送了数据 服务器的$serv->send函数需要检测是否返回了true 外网通信时,耗时较多需要调大swoole_client的超时时间 参考文档:https://www.kancloud.cn/oydm360782/swoole/44460