WorkerMan升级到4.0后curl上传文件出现异常CURLE_ABORTED_BY_CALLBACK。

qt510

WorkerMan升级到4.0后curl上传文件出现异常CURLE_ABORTED_BY_CALLBACK。
Swoole的HTTP服务和FPM下正常。
请教如何解决?

2552 4 0
4个回答

walkor 打赏

发下测试代码

  • 暂无评论
qt510
<?php

use Workerman\Worker;

require_once __DIR__ . '/Workerman/Autoloader.php';

$http_worker = new Worker("http://0.0.0.0:2345");

$http_worker->count = 1;

$http_worker->onMessage = function ($connection, $reqest) {
    $file = $reqest->file('file');
    $path = __DIR__ . '/1.png';
    copy($file['tmp_name'], $path);
    $body = [
        'file' => curl_file_create($path)
    ];
    $content = curl_post('http://127.0.0.1:8080/api/api/imgupload', $body);
    $connection->send($content);
};

function curl_post($url, $body)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    $content = curl_exec($curl);
    curl_close($curl);
    return $content;
}

Worker::runAll();

这么写的话没测出问题,但我用的TP(5.1)框架,workerman的$request->file()赋值给了tp的$request->withFiles(),并在控制层调用Filesystem->writeStream写文件到新目录下,且调试发现文件已经写入成功,然后curl在提交直接CURLE_ABORTED_BY_CALLBACK了,不知道如何排查。

百度和google也没搜到相关解决方案,CURLE_ABORTED_BY_CALLBACK这个异常一般是什么导致的?

  • 暂无评论
qt510

在不更改任何代码的情况下,只是换一下环境,切换为fpm或者swoole就一切正常。

  • 暂无评论
qt510

不用TP的request直接用workerman的request->file取到的文件信息直接写文件在curl也同样不行。

  • keytehu 2021-03-06

    tp5好像不支持workerman4吧,支持workerman3

  • qt510 2021-03-08

    @1469:我自己写了一个think-worker支持4.0,还有think-swoole支持4.5.11 现在封装的都差不多了,目前只剩下这一个问题没解决。

年代过于久远,无法发表回答
×
🔝