Была такая же проблема.
<?php
error_reporting(E_ALL);
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp');
$response = curl_exec($curl);
var_dump($response);
exit;
отклик:
bool(false)
и никаких журналов ошибок!
Итак, я сделал небольшой скрипт:
<?php
error_reporting(E_ALL);
var_dump(file_get_contents('https://api-3t.sandbox.paypal.com/nvp'));
и вот что у меня в логах:
[12-Feb-2016 15:56:19] PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure in /xxx/yyy.php on line 3
[12-Feb-2016 15:56:19] PHP Warning: file_get_contents(): Failed to enable crypto in /xxx/yyy.php on line 3
[12-Feb-2016 15:56:19] PHP Warning: file_get_contents(https://api-3t.sandbox.paypal.com/nvp): failed to open stream: operation failed in /xxx/yyy.php on line 3
Мое решение было:
- Обновить (1.0+) версию OpenSSL.
- Перекомпилировать Curl
- Перекомпилируйте PHP с новым CURL
- Убедитесь, что версия Curl SSL — OpenSSL/(1.0+)
Версия SSL OpenSSL/1.0.1e — Хорошо
Версия SSL NSS/3.13.6.0 — Плохая
Я работаю на CentOS. Вот что я сделал для обновления:
Обновите OpenSSL:
версия openssl
если ниже 1.0 запустите: yum update openssl убедитесь, что он действительно обновлен
- Переустановите PHP. Так что сохраните файл php.ini
Сохраните список всех модулей PHP, установленных через:
установлен список ням | grep php
сохранить вывод!
- ням стереть php
- ням стереть php-curl
- ням установить php
ням установить php-curl
перезапустите apache или fpm, и если вам повезет, все заработает.
- восстановить конфиги php.ini и модули PHP: yum install php-pgsql; ням установить php-gd; и т.д
Однако, если ваши репозитории пакетов устарели или у вас установлена библиотека curl с привязками NSS SSL, вы можете загрузить и скомпилировать библиотеку curl вручную. Я использовал инструмент phpize в комплекте с пакетом php-devel. Итак, моя проблема у меня была:
cURL Information 7.19.7
SSL Version NSS/3.13.6.0
и вот как я изменил его на:
cURL Information 7.22.0
SSL Version OpenSSL/1.0.1e
Обновите OpenSSL:
версия openssl
если ниже 1.0 запустите: yum update openssl убедитесь, что он действительно обновлен
- Переустановите PHP. Так что сохраните файл php.ini
Сохраните список всех модулей PHP, установленных через:
установлен список ням | grep php
сохранить вывод!
- ням стереть php
- ням стереть php-curl
- ням установить php-devel
- распечатайте версию PHP с помощью rpm -qa --queryformat '%{version}' php и найдите, где вы можете скачать точно такие же исходники PHP
- Следующий скрипт bash установит определенную библиотеку curl:
<pre>
#!/bin/bash
PHP_VERSION=$(rpm -qa --queryformat '%{version}' php)
CURL_VERSION=7.22.0
#echo $CURL_VERSION
#exit
#wget --no-check-certificate http://mirror.cogentco.com/pub/php/php-${PHP_VERSION}.tar.gz -O /tmp/php-${PHP_VERSION}.tar.gz
wget --no-check-certificate http://museum.php.net/php5/php-${PHP_VERSION}.tar.gz -O /tmp/php-${PHP_VERSION}.tar.gz
wget --no-check-certificate http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.gz -O /tmp/curl-${CURL_VERSION}.tar.gz
cd /tmp; tar xzf php-${PHP_VERSION}.tar.gz
cd /tmp; tar xzf curl-${CURL_VERSION}.tar.gz
cd curl-${CURL_VERSION}
./configure
make
make install
cd /tmp; rm -rf curl-${CURL_VERSION}*
sleep 2
cd /tmp/php-${PHP_VERSION}/ext/curl/
phpize
./configure
make
make install
cd /tmp; rm -rf php-${PHP_VERSION}*
</pre>
- перезапустите apache или fpm, и если вам повезет, все заработает.
- восстановить конфиги php.ini и модули PHP: yum install php-pgsql; ням установить php-gd; и т.д
person
Alex Shulak
schedule
25.02.2016