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","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 行
有人可以帮助我吗? 谢谢
【问题讨论】:
【参考方案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 6 发送 (POST) xml 的正确方法