Guzzle Error count():参数必须是数组或者实现了Countable的对象

Posted

技术标签:

【中文标题】Guzzle Error count():参数必须是数组或者实现了Countable的对象【英文标题】:Guzzle Error count(): Parameter must be an array or an object that implements Countable in 【发布时间】:2018-11-26 15:24:51 【问题描述】:

我正在关注下面的文章, https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/web-php

但最后,当我尝试使用示例代码(HelloAnalytics.php)时,它会在命令行中显示如下错误并且无法获取数据;

PHP 警告:count():参数必须是数组或对象,在 C:\xampp\htdocs\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php 第 67 行中实现 Countable

警告:count():参数必须是数组或对象,在 C:\xampp\htdocs\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php 第 67 行实现 Countable PHP 警告:count(): 参数必须是在 C:\xampp\htdocs\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php 第 67 行中实现 Countable 的数组或对象

警告:count():参数必须是数组或对象,在 C:\xampp\htdocs\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php 第 67 行实现 Countable PHP致命错误:未捕获的Google_Service_Exception:“error”:“errors”:[“domain”:“usageLimits”,“reason”:“accessNotConfigured”,“message”:“找不到项目687417168367,不能用于API 调用。如果它是最近创建的,请通过访问 https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367 启用 Google Analytics API,然后重试。如果您最近启用了此 API,请等待几分钟,以便该操作传播到我们的系统并重试。","extendedHelp":" https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367"],"code":403,"message":"项目 687417168367 未找到,无法用于 API 调用。如果是最近创建的,请访问 https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367 启用 Google Analytics API,然后重试。如果您最近启用了此 API,请等待几分钟让该操作传播到我们的系统并重试。" 在 C:\xampp\htdocs\vendor\google\apiclient\s 在 C:\xampp\htdocs\vendor\google \apiclient\src\Google\Http\REST.php 在第 118 行

致命错误:未捕获的 Google_Service_Exception: "error":"errors":["domain":"usageLimits","re​​ason":"accessNotConfigured","message":"项目 687417168367 未找到且无法用于 API 调用。如果它是最近创建的,请通过访问 https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367 启用 Google Analytics API,然后重试。如果您最近启用了此 API,请等待几分钟,以便该操作传播到我们的系统并重试。","extendedHelp" :"https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367"],"code":403,"message":"项目 687417168367 未找到,不能用于 API 调用。如果是最近创建的,请访问 https://console.developers.google.com/apis/api/analytics.googleapis.com/overview?project=687417168367 启用 Google Analytics API,然后重试. 如果您最近启用了此 API,请等待几分钟让该操作传播到我们的系统并重试。" 在 C:\xampp\htdocs\vendor\google\apiclient\s 在 C:\xampp\htdocs\vendor \google\apiclient\src\Google\Http\REST.php 在第 118 行

有人可以帮助我吗? 谢谢

【问题讨论】:

【参考方案1】:

如此处所述count(): Parameter must be an array or an object

请尝试升级您的 Guzzle 版本。

问题是在 PHP 7.2 中 count() 的参数不能为 NULL。当 $this->handles 等于 NULL 时,将显示第一篇文章中的警告。只需将 CurlFactory.php 中的第 67 行替换为以下内容:

if (($this->handles ? count($this->handles) : 0) >= $this->maxHandles)

【讨论】:

【参考方案2】:

我知道这是一篇旧帖子,但我已通过 composer 更新 Guzzle 来修复它。 首先在你的作曲家中添加这个

 "require": 
    "guzzlehttp/guzzle": "~5.3.1"

然后写

composer update

在您的命令提示符中

【讨论】:

【参考方案3】:

升级到 Mac OS Catalina 时,某些人可能会遇到此问题(在本地环境中)。这将我的 php 版本从 7.1 升级到 7.3,所以我在使用 CurlFactory 时遇到了同样的问题(使用了 Guzzle 的 6.2.1 版)。

这可以通过将您的 Guzzle 版本更新到 6.3.0(最低)来解决。 如何做到这一点

"require": 
    "guzzlehttp/guzzle": "^6.3.0"

然后在终端中(在项目的根目录中):

composer update

或者,如果您无法更改 Guzzle 版本(出于某种原因……这是我的情况)

您可以改为通过安装 7.1 更改您的 php 版本(在我的示例中使用自制软件。如果您没有,可以在此处找到/安装:https://brew.sh/index)

然后在终端类型中:

brew update
brew install php@7.1

在某些情况下,您必须使用以下命令链接到 php 7.1:

brew link php@7.1

最后,重新启动您的终端。

【讨论】:

【参考方案4】:

在我的情况下,问题并不严重,在尝试了上述解决方案后,我得出的结论是,我只需要删除错误并且一切正常。

if(version_compare(PHP_VERSION, '7.2.0', '>=')) 
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);

此代码仅在本地主机上需要,生产服务器无论如何都不会输出警告。

【讨论】:

以上是关于Guzzle Error count():参数必须是数组或者实现了Countable的对象的主要内容,如果未能解决你的问题,请参考以下文章

将查询字符串参数添加到 Guzzle GET 请求?

使用 guzzle 6 发送 (POST) xml 的正确方法

Guzzle 6下载进度

Guzzle同步发送请求

Guzzle:使用 Guzzle 的 Pool:batch() 和 `sink` 选项进行并行文件下载

PHP 7.4 - 警告:count():参数必须是数组