AWS sdk在TP6中用的好好的,在webman中报错。

supdger

问题描述

Thinkphp6一直用的一个项目,使用MINIO用的AWS SDK一直正常。
因为需要用webman复写了项目,当在webman中即便require也不行。
对比过composer.json的require版本都是2.8,SDK也是相同的SDK。
想不出是我少了什么,还是webman比tp6少了啥?

程序代码

<?php
namespace app\common;
use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client;

class Minio
{
    private function client()
    {
        //
        $config = config('sign.minio');
        $client = new S3Client([
            'version'   =>  'latest',
            's3ForcePathStyle' => true,
            'region'    =>  'cn-north-1',
            'endpoint'  =>  $config['endpoint'],
            'credentials'   =>  [
                'key'   =>  $config['credentials.key'],
                'secret'=>  $config['credentials.secret']
            ],
        ]);
        return $client;
    }
}

报错信息

Error: Class "Aws\S3\S3Client" not found in D:\htdocs\sh_bim\app\common\Minio.php:13<br />
Stack trace:<br />
#0 D:\htdocs\sh_bim\app\common\Minio.php(29): app\common\Minio->client()<br />
#1 D:\htdocs\sh_bim\app\controller\MinioossController.php(56): app\common\Minio->upload(Object(Webman\Http\UploadFile), 'build/2023/08/8...')<br />
#2 D:\htdocs\sh_bim\vendor\workerman\webman-framework\src\App.php(319): app\controller\MinioossController->save(Object(support\Request))<br />
#3 D:\htdocs\sh_bim\vendor\workerman\webman-framework\src\App.php(560): Webman\App::Webman\{closure}(Object(support\Request))<br />
#4 D:\htdocs\sh_bim\vendor\workerman\webman-framework\src\App.php(148): Webman\App::findRoute(Object(Workerman\Connection\TcpConnection), '/miniooss', 'POST/miniooss', Object(support\Request))<br />
#5 D:\htdocs\sh_bim\vendor\workerman\workerman\Connection\TcpConnection.php(646): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))<br />
#6 D:\htdocs\sh_bim\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead(Resource id #263)<br />
#7 D:\htdocs\sh_bim\vendor\workerman\workerman\Worker.php(1479): Workerman\Events\Select->loop()<br />
#8 D:\htdocs\sh_bim\vendor\workerman\workerman\Worker.php(1399): Workerman\Worker::forkWorkersForWindows()<br />
#9 D:\htdocs\sh_bim\vendor\workerman\workerman\Worker.php(560): Workerman\Worker::forkWorkers()<br />
#10 D:\htdocs\sh_bim\vendor\workerman\webman-framework\src\support\App.php(131): Workerman\Worker::runAll()<br />
#11 D:\htdocs\sh_bim\start.php(4): support\App::run()<br />
#12 {main}
496 5 0
5个回答

yongdao35

composer 安装完东西后要restart彻底重启才能生效

  • 暂无评论
tanhongbin

fpm 和 cli 是两种运行模式 ,他不是 之前那种 改完代码啥也不用管的 fpm模式了

  • supdger 2023-08-04

    能理解,但是这种情况需要从何入手去解决。毕竟大多数都正常,是需要cli的哪个没启动?还是少了什么库?有没大佬提供一下解决思路?

luohonen

composer安装的不用手动require,先卸载,再clearcache清楚缓存,再composer安装,再重启webman

  • supdger 2023-08-04

    我在家建了一个空项目,也装了了AWS的SDK,发现和公司的依赖包不一样。
    正在想,如果清除不了缓存,就把现有项目转到空项目上。

  • supdger 2023-08-04

    试了好几次,remove、update、cc,在require还是旧版本,旧sdk

supdger

问题出在哪基本找到了,只是解决不了
.json和.lock都是2.8的版本。但是在公司的composer的sdk包是不一样的。
在家里试验了sdk和老项目是一样的。
刚刚也尝试了卸载依赖,然后清除缓存,也确认了。但再composer还是那个不一样的包,很离奇。
缓存也没了为什么下的包和家里不一样。
现在可以替代的方法就是把家里下的sdk的空项目来替换。

  • supdger 2023-08-04

    公司环境又创建了个空项目,composer了sdk,是个正常的sdk。
    出问题的这个项目各种方法都不能下正常的sdk。除了composer.json和composer.lock两个文件还有哪能影响?

  • 小W 2023-08-04

    镜像源地址是不是一样

  • 小W 2023-08-04

    再不行就手动

  • supdger 2023-08-04

    公司自己笔记本,同一个环境,出问题的项目和新的空项目同一个包名,下的版本和内容就不同...

supdger

很离奇,查遍了,找不到问题出在哪。
直接索性把正常的sdk目录复制了一遍,把正常的composer.json和composer.lock的依赖复制了一遍,然后一切就正常用了。

  • supdger 2023-08-04

    特意还update一下,看到:

    • Upgrading aws/aws-sdk-php (2.8.31 => 3.277.8): Extracting archive
      这一行之后我就彻底放心了。
  • supdger 2023-08-04

    有没有大佬知道,这个

    support\Plugin::uninstall
    support\Plugin::install
    这个support\Plugin是哪个文件

  • supdger 2023-08-04

    就是这个support\plugin应该记录了2.8的sdk,不论我怎么搞,都是下2.8的sdk。但着实找不到这个文件在哪

  • tanhongbin 2023-08-04

    把vendor 删除 和 composer.lock 也删除 然后composer install 在清理一下composer的缓存 你会有惊喜 发现就能安装了

  • supdger 2023-08-04

    下次试试

🔝