首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
关于分块输出,chunk无法设置Content-Length头部的问题。
### 问题描述 # 疯狂求助。我通过write分段输出数据,这样却无法设置Content-Length头,是为什么。。。。。 以下为代码: ```php <?php declare(strict_types=1); /** * 未经授权,不允许用于商业。 * Author 233cy * Mail wfuren@qq.com * DateTime 2020-09-04 09:10:32 */ $http = new Swoole\Http\Server('0.0.0.0', 9595); $http->on('request', function ($request, $response) { $file = __DIR__ . '/test.apk'; $filesize = filesize($file); $rs = $response; $rs->header('content-description', 'file transfer'); $rs->header('content-type', 'application/octet-stream'); $rs->header('content-disposition', 'attachment; filename=' . basename($file)); $rs->header('content-transfer-encoding', 'binary'); $rs->header('expires', '0'); $rs->header('Transfer-Encoding', '0'); $rs->header('cache-control', 'must-revalidate, post-check=0, pre-check=0'); $rs->header('server', 'addddd', false); $rs->header("Content-Length", "8000", false); $fp = fopen($file, 'r'); while (! feof($fp)) { $data = fread($fp, 150 * 1024); if (! $rs->write($data) || ! $data) { break; } \Swoole\Coroutine\System::sleep(1); } fclose($fp); $response->end(); }); $http->start(); ``` s 运行效果为: ![](/storage/article-column/wtwEBd64I6qCSjetfFnx4oomQiU7P1f84DEA2khr.png) 虽然这样不符合http标准,可真的没必要强制每个人来遵循把。必进会有一些特别需要。
发布于4年前 · 1 次浏览 · 来自
提问
2
233cy
### 问题描述 # 疯狂求助。我通过write分段输出数据,这样却无法设置Content-Length头,是为什么。。。。。 以下为代码: ```php <?php declare(strict_types=1); /** * 未经授权,不允许用于商业。 * Author 233cy * Mail wfuren@qq.com * DateTime 2020-09-04 09:10:32 */ $http = new Swoole\Http\Server('0.0.0.0', 9595); $http->on('request', function ($request, $response) { $file = __DIR__ . '/test.apk'; $filesize = filesize($file); $rs = $response; $rs->header('content-description', 'file transfer'); $rs->header('content-type', 'application/octet-stream'); $rs->header('content-disposition', 'attachment; filename=' . basename($file)); $rs->header('content-transfer-encoding', 'binary'); $rs->header('expires', '0'); $rs->header('Transfer-Encoding', '0'); $rs->header('cache-control', 'must-revalidate, post-check=0, pre-check=0'); $rs->header('server', 'addddd', false); $rs->header("Content-Length", "8000", false); $fp = fopen($file, 'r'); while (! feof($fp)) { $data = fread($fp, 150 * 1024); if (! $rs->write($data) || ! $data) { break; } \Swoole\Coroutine\System::sleep(1); } fclose($fp); $response->end(); }); $http->start(); ``` s 运行效果为: ![](/storage/article-column/wtwEBd64I6qCSjetfFnx4oomQiU7P1f84DEA2khr.png) 虽然这样不符合http标准,可真的没必要强制每个人来遵循把。必进会有一些特别需要。
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-09-05
鲁飞
关于 Http Chunk 可以参考 Http 协议标准文档。 你用了write就会使用`Transfer-Encoding: chunked`这样的方式来代替`Content-Length`。
赞
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一直是同一个。没用使用到多进程啊。