Home
Download
Document
Forum
Video
Donate
Source Code
AI 助理
Sponsors
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
Products
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
Login
Register
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
http服务中,使用write分段输出文件。设置header总文件长度无用
```php <?php declare(strict_types=1); $http = new Swoole\Http\Server('0.0.0.0', 9595); $http->on('request', function ($request, $response) { $file = __DIR__ . '/test.apk'; $filesize = filesize($file); $response->header('content-description', 'file transfer'); $response->header('content-type', 'application/octet-stream'); $response->header('content-disposition', 'attachment; filename=' . basename($file)); $response->header('content-transfer-encoding', 'binary'); $response->header('expires', '0'); $response->header('cache-control', 'must-revalidate, post-check=0, pre-check=0'); $response->header('pragma', 'public'); $response->header('content-length', (string) $filesize); $response->header('accept-length', (string) $filesize); print_r($request); $fp = fopen($file, 'r'); while (! feof($fp)) { $data = fread($fp, 150 * 1024); if (! $response->write($data) || ! $data) { break; } } fclose($fp); $response->end(); }); $http->start(); ``` 在下载文件的时候,不显示文件总长度为什么@
发布于2年前 · 19 次浏览 · 来自
提问
mxwei
```php <?php declare(strict_types=1); $http = new Swoole\Http\Server('0.0.0.0', 9595); $http->on('request', function ($request, $response) { $file = __DIR__ . '/test.apk'; $filesize = filesize($file); $response->header('content-description', 'file transfer'); $response->header('content-type', 'application/octet-stream'); $response->header('content-disposition', 'attachment; filename=' . basename($file)); $response->header('content-transfer-encoding', 'binary'); $response->header('expires', '0'); $response->header('cache-control', 'must-revalidate, post-check=0, pre-check=0'); $response->header('pragma', 'public'); $response->header('content-length', (string) $filesize); $response->header('accept-length', (string) $filesize); print_r($request); $fp = fopen($file, 'r'); while (! feof($fp)) { $data = fread($fp, 150 * 1024); if (! $response->write($data) || ! $data) { break; } } fclose($fp); $response->end(); }); $http->start(); ``` 在下载文件的时候,不显示文件总长度为什么@
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2022-07-29
Rango
`Http-Chunk`模式是没有长度的,它是一种流式传输的方式。
赞
1
回复
2022-08-02
mxwei
谢谢, 不过文件好像没有立即下载。有没有什么办法让文件立即下载,像 sendfile() ?
赞
0
回复
2022-08-02
mxwei
![](https://wenda-1252906962.file.myqcloud.com/uploads/202208/30906_62e8d0d4361b3.png)
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。