workerman无法下载

现在workerman1.0.9无法下载附件。

Error: Parse Error: Duplicate Content-Length
Request Headers
User-Agent: PostmanRuntime/7.37.3
Accept: /
Postman-Token: 8cb3bf5b-2085-46af-891b-be46c161ebc9
Host: localhost:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive


向后台输出了。

1.0.8在nginx下也报错
但改一下还是能用。
responseClass = get_class(response);
logFile = 'D:/Dev/PHP/logfile.log'; file_put_contents(logFile, 'responseClass: ' . responseClass . PHP_EOL, FILE_APPEND); file_put_contents(logFile, 'getHeader: ' . json_encode(response->getHeader()) . PHP_EOL, FILE_APPEND); file_put_contents(logFile, 'content: ' . json_encode($content) . PHP_EOL, FILE_APPEND);
$headers = response->getHeader(); if (isset(headers['Content-Length'])) {
unset(headers['Content-Length']); } if (responseClass !== 'think\response\File') {
connection->send(new Response(response->getCode(), $response->getHeader(), $content));
}
else {
connection->send(new Response(response->getCode(), $headers, $content));
}

3个回答默认排序 投票数排序
javaya
javaya
这家伙很懒,什么也没写~
2周前

vendor\topthink\framework\src\think\response
下File.php 注释一下部分内容可以下载,比对了版本也没有发现异常。ob相关函数不太熟悉

protected function output($data)
{
    if (!$this->isContent && !is_file($data)) {
        throw new Exception('file not exists:' . $data);
    }

    //while (ob_get_level() > 0) {
    //    ob_end_clean();
    //}
YANG001
YANG001
这家伙很懒,什么也没写~
2周前

直接return download()就行了

javaya
javaya
这家伙很懒,什么也没写~
2周前

我就是return download 后台出现乱码就是缓冲器写到控制台了。比较奇怪的是两个版本没什么大差异,目前先把thinkphp里源码改一改可以了。

protected function output($data)
{
    if (!$this->isContent && !is_file($data)) {
        throw new Exception('file not exists:' . $data);
    }

    //while (ob_get_level() > 0) {
    //    ob_end_clean();
    //}
请先登录
0
1
0
3