php Google Cloud API -调用未定义的方法GuzzleHttp\Utils::chooseHandler()

mu0hgdu0  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(154)

我刚刚安装了Google Cloud Storage for PHP(https://cloud.google.com/php/docs/reference/cloud-storage/latest),使用了他们推荐的Composer请求(Composer require google/cloud-storage)。我还设置了一个用于身份验证的服务帐户,并下载了JSON文件,就像他们的身份验证文档建议的那样(https://github.com/googleapis/google-cloud-php/blob/main/AUTHENTICATION.md)。
使用示例代码:

require 'vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;

$storage = new StorageClient([
        'keyFilePath' => '/path-to-key.json'
       ]);

$bucket = $storage->bucket('bucket_location');

print_r($bucket);
return false;

字符串
我得到错误:Copyright © 2018 - 2019 www.jsjsj.com All Rights Reserved.粤ICP备15044766号-1
看起来Guzzle没有加载。该函数位于Guzzle下的Utils.php文件中。
我尝试了composer update,composer auto-dump,在错误堆栈中,我可以看到新的StorageClient()函数加载了json身份验证文件。
有谁知道我可以尝试让Guzzle加载什么?当我运行composer show时,我可以看到Guzzle版本是7.7.0。
下面是我的composer.json文件内容:

{
        "require": {
            "google/cloud-storage": "^1.33"
        }
    }

qyuhtwio

qyuhtwio1#

把这篇文章作为一个社区wiki发布给其他人:

解决方案:

1.将PHP版本从7.4升级到8.0以获取更详细的错误信息。
1.确定了Google Cloud Storage和Xero Accounting库之间的冲突,两者都使用不同版本的Guzzle。
1.认识到为同一代码库混合不同版本的库是不可能的。
1.探讨了如何将两个库隔离在不同的目录中以避免冲突。
1.考虑将Xero Accounting库升级到与Google Cloud Storage使用的Guzzle版本兼容的版本。

附加信息:

PHP版本:7.4.30-0118(更新至8.0后)
Composer依赖项:

  • google/cloud-storage:^1.33
  • guzzlehttp/guzzle:v7.7.0(也包括guzzlehttp/promises和guzzlehttp/psr 7)

还有另一个库,Xero Accounting,它也使用Guzzle,并设置在Composer的子目录中。

备注:

  • 建议使用PHP 8.0或更高版本,以便与当前的Google Cloud SDK和库兼容。
  • 在同一个代码库中混合使用不同版本的Guzzle是不可取的,可能会导致冲突。
  • Community Wiki -引用@John汉利和@phpcoder*

相关问题