WorkerMan升级到4.0后curl上传文件出现异常CURLE_ABORTED_BY_CALLBACK。 Swoole的HTTP服务和FPM下正常。 请教如何解决?
发下测试代码
<?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这个异常一般是什么导致的?
在不更改任何代码的情况下,只是换一下环境,切换为fpm或者swoole就一切正常。
不用TP的request直接用workerman的request->file取到的文件信息直接写文件在curl也同样不行。
tp5好像不支持workerman4吧,支持workerman3
@1469:我自己写了一个think-worker支持4.0,还有think-swoole支持4.5.11 现在封装的都差不多了,目前只剩下这一个问题没解决。
发下测试代码
这么写的话没测出问题,但我用的TP(5.1)框架,workerman的$request->file()赋值给了tp的$request->withFiles(),并在控制层调用Filesystem->writeStream写文件到新目录下,且调试发现文件已经写入成功,然后curl在提交直接CURLE_ABORTED_BY_CALLBACK了,不知道如何排查。
百度和google也没搜到相关解决方案,CURLE_ABORTED_BY_CALLBACK这个异常一般是什么导致的?
在不更改任何代码的情况下,只是换一下环境,切换为fpm或者swoole就一切正常。
不用TP的request直接用workerman的request->file取到的文件信息直接写文件在curl也同样不行。
tp5好像不支持workerman4吧,支持workerman3
@1469:我自己写了一个think-worker支持4.0,还有think-swoole支持4.5.11 现在封装的都差不多了,目前只剩下这一个问题没解决。