之前的开发一直使用的php7,thinkphp6,上传天翼云的oos对象存储,一直没有问题,后来项目修改了框架,使用webman微服务架构,上传对象存储一直报错。报错的内容也是很奇怪:request-id:
是的,你没看错,仅此而已,request-id后面什么都没有,于是乎,断点打印,在oos的sdk包里面断点打呀打。
发现报错的地方位于OOS/Result/Result.php的parseResponse方法中,因为我使用的是V2验签方式,顺藤摸瓜发现是$this->isOk为false才抛出的异常。
继续往上查找,发现在OOS/OosClient.php的authV2方法中,有调用send_request这个动作。这里应该就是上传的动作,继续查找!!
穿到该方法里面,发现前面的prep_request方法就是一系列的curl前置组装。略过,然后看到下面的process_response这个方法,穿进去
看到传进来的参数$curl_handle,curl的结果集有这样一个判断,如果是资源类型,继续往下走,否则直接返回false。这时候我恍然大悟,骂了一句:卧槽。
原来php8的curl返回的是对象类型,二话不说,直接将这里的is_resource改成了is_object。重新上传,very well。搞定!!!