Guzzle 在一台服务器上不工作,但在另一台服务器上工作 PHP FB SDK
Guzzle not working on one server but is on the other PHP FB SDK
我在开发箱上有我的代码库,当我将它移到产品箱时,它无法完成 FB 调用。我的错误是:
ErrorException in Client.php line 126: Argument 3 passed to
GuzzleHttp\Client::request() must be of the type array, string given,
called in
/var/www/mypopshare.com/vendor/guzzlehttp/guzzle/src/Client.php on
line 87 and defined
我这部分的代码是:
return substr($method, -5) === 'Async'
? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
: $this->request($method, $uri, $opts);
两台服务器上的库都是通过composer安装的:
`
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*",
"illuminate/html": "^5.0",
"laravelcollective/html": "^5.2",
"league/flysystem-aws-s3-v3": "~1.0",
"webpatser/laravel-uuid": "^2.0",
"intervention/image": "^2.3",
"doctrine/dbal": "^2.5",
"guzzlehttp/guzzle": "^6.1",
"sammyk/laravel-facebook-sdk": "^3.3"
},
`
这在两个环境中都是一样的,并且已经完成了 composer install 以确保它们在那里。
调用是通过 sammk/laravel-facebook-sdk 包从 Facebook PHP SDK 进行的。我唯一的猜测是服务器上的一些其他配置差异,但不确定在哪里检查。我没有配置产品服务器。任何建议表示赞赏。
我在 Ubuntu 16.04 和 php7.0 上遇到了同样的问题。如果你的项目不需要 guzzle,你可以考虑切换
facebook_config 的 http_client_handler 选项
sammk/laravel-facebook-sdk package config file 卷曲。
'facebook_config' => [
'app_id' => env('FACEBOOK_APP_ID'),
'app_secret' => env('FACEBOOK_APP_SECRET'),
'default_graph_version' => 'v2.6',
//'enable_beta_mode' => true,
'http_client_handler' => 'curl',
],
仅供参考 - 我找到了一个类似于当前答案的解决方案。我在没有 SammyK 包装器的情况下直接使用 Facebook SDK,并且没有明确设置 http_client_handler.
事实证明,如果未安装 curl 扩展,Facebook SDK 会回退到 Guzzle 但使用 Guzzle 5 语法。我安装了 Guzzle 6,因此出现此错误,因为参数已更改。
我的解决方法是安装 php7.0-curl。在 Ubuntu 14.04 LTS 上,这是:
sudo apt-get install php7.0-curl
然后 Facebook SDK 使用 curl 没有得到这个错误,我也不需要更新任何现有代码来显式设置 http_client_handler。
这适用于安装了 php-curl 扩展的开发人员,但在未安装的情况下在产品上失败。您可以查看已安装的扩展列表以确认:
php -m
我在开发箱上有我的代码库,当我将它移到产品箱时,它无法完成 FB 调用。我的错误是:
ErrorException in Client.php line 126: Argument 3 passed to GuzzleHttp\Client::request() must be of the type array, string given, called in /var/www/mypopshare.com/vendor/guzzlehttp/guzzle/src/Client.php on line 87 and defined
我这部分的代码是:
return substr($method, -5) === 'Async'
? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
: $this->request($method, $uri, $opts);
两台服务器上的库都是通过composer安装的: `
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*",
"illuminate/html": "^5.0",
"laravelcollective/html": "^5.2",
"league/flysystem-aws-s3-v3": "~1.0",
"webpatser/laravel-uuid": "^2.0",
"intervention/image": "^2.3",
"doctrine/dbal": "^2.5",
"guzzlehttp/guzzle": "^6.1",
"sammyk/laravel-facebook-sdk": "^3.3"
},
`
这在两个环境中都是一样的,并且已经完成了 composer install 以确保它们在那里。
调用是通过 sammk/laravel-facebook-sdk 包从 Facebook PHP SDK 进行的。我唯一的猜测是服务器上的一些其他配置差异,但不确定在哪里检查。我没有配置产品服务器。任何建议表示赞赏。
我在 Ubuntu 16.04 和 php7.0 上遇到了同样的问题。如果你的项目不需要 guzzle,你可以考虑切换 facebook_config 的 http_client_handler 选项 sammk/laravel-facebook-sdk package config file 卷曲。
'facebook_config' => [
'app_id' => env('FACEBOOK_APP_ID'),
'app_secret' => env('FACEBOOK_APP_SECRET'),
'default_graph_version' => 'v2.6',
//'enable_beta_mode' => true,
'http_client_handler' => 'curl',
],
仅供参考 - 我找到了一个类似于当前答案的解决方案。我在没有 SammyK 包装器的情况下直接使用 Facebook SDK,并且没有明确设置 http_client_handler.
事实证明,如果未安装 curl 扩展,Facebook SDK 会回退到 Guzzle 但使用 Guzzle 5 语法。我安装了 Guzzle 6,因此出现此错误,因为参数已更改。
我的解决方法是安装 php7.0-curl。在 Ubuntu 14.04 LTS 上,这是:
sudo apt-get install php7.0-curl
然后 Facebook SDK 使用 curl 没有得到这个错误,我也不需要更新任何现有代码来显式设置 http_client_handler。
这适用于安装了 php-curl 扩展的开发人员,但在未安装的情况下在产品上失败。您可以查看已安装的扩展列表以确认:
php -m