Guzzle不能在一台服务器上运行,但在另一台PHP FB SDK上

时间:2016-03-12 18:23:17

标签: php facebook facebook-graph-api laravel-5.2 guzzle6

我在开发框上有我的代码仓库,当我把它移到prod框时,它无法完成FB调用。我的错误是:

  

Client.php第126行中的ErrorException:传递给的参数3   GuzzleHttp \ Client :: request()必须是数组,字符串给定,   呼唤   /var/www/mypopshare.com/vendor/guzzlehttp/guzzle/src/Client.php on   第87行和定义

此部分的代码是: 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"
},

`

两种环境都是一样的,并且已经完成了作曲家安装,以确保它们在那里。

通过sammk / laravel-facebook-sdk软件包从Facebook PHP SDK发出呼叫。我唯一的猜测是服务器上的其他一些配置差异,但不确定在哪里检查。我没有配置prod服务器。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:4)

仅供参考 - 我找到了一个类似于当前答案的解决方案。我在没有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扩展的dev,当它没有安装时就失败了。您可以看到已安装的扩展程序列表以进行确认:

php -m

答案 1 :(得分:2)

我在使用php7.0的Ubuntu 16.04上遇到了同样的问题。如果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',
],