Жрать не работает на одном сервере, но на другом PHP FB SDK

У меня есть код репозитория на устройстве dev, и когда я переместил его в prod box, он не смог выполнить вызовы FB. Моя ошибка:

ErrorException в строке Client.php 126: Аргумент 3, передаваемый в GuzzleHttp\Client::request(), должен иметь тип массива, заданная строка, вызываемая в /var/www/mypopshare.com/vendor/guzzlehttp/guzzle/src/Client.php в строке 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"
},

`

Это одинаково в обеих средах, и они выполнили установку composer, чтобы убедиться, что они есть.

Звонок осуществляется из PHP SDK Facebook через пакет sammk/laravel-facebook-sdk. Мое единственное предположение - какое-то другое отличие конфигурации на серверах, но я не уверен, где проверить. Я не настраивал сервер prod. Любые предложения приветствуются.

2 ответа

Решение

У меня была такая же проблема на Ubuntu 16.04 с php7.0. если жадность не является обязательным требованием в вашем проекте, вы можете переключить опцию http_client_handler в facebook_config файла конфигурации пакета sammk/laravel-facebook-sdk на curl.

'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',
],

К вашему сведению - я нашел решение, которое похоже на текущий ответ. Я использовал Facebook SDK напрямую без обертки SammyK и не устанавливал явно 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.

Это работало на dev, у которого было установлено расширение php-curl, и не работало на prod, когда это не так. Вы можете увидеть список установленных расширений для подтверждения:

php -m
Другие вопросы по тегам