Мой процесс Apache перестает работать всякий раз, когда я звоню curl_exec()
из PHP с URL-адресом "https: //".
Если я использую http
вместо того https
в качестве транспорта URL-адресов он работает отлично, поэтому я знаю, что curl и другие параметры curl верны.
я могу использовать curl
из командной строки на этом сервере, используя https
версия URL-адреса, и она работает отлично, поэтому я знаю, что удаленный сервер отвечает правильно, срок действия сертификата не истек и т. д.
Мой сервер:
Linux 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux
Моя версия Apache:
Server version: Apache/2.2.14 (Ubuntu)
Server built: Apr 13 2010 20:21:26
Моя версия PHP:
PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:03:45)
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Информация о моем модуле PHP curl:
cURL support => enabled
cURL Information => 7.19.7
Age => 3
Features
AsynchDNS => No
Debug => No
GSS-Negotiate => Yes
IDN => Yes
IPv6 => Yes
Largefile => Yes
NTLM => Yes
SPNEGO => No
SSL => Yes
SSPI => No
krb4 => No
libz => Yes
CharConv => No
Protocols => tftp, ftp, telnet, dict, ldap, ldaps, http, file, https, ftps
Host => x86_64-pc-linux-gnu
SSL Version => OpenSSL/0.9.8k
ZLib Version => 1.2.3.3
Рассмотрите возможность добавления следующего:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
Теперь, чтобы увидеть, что происходит, используйте var_dump () или журнал ошибок(). Должно получиться примерно так:
var_dump(curl_exec($ch));
ИЛИ
error_log(curl_exec($ch));
Если вы используете error_log()
вы должны найти след в файле error_log.
Если это не поможет, у вас нет выбора, кроме использования strace
Вы можете попробовать собрать последнюю версию curl 7.49.1 вручную, а затем заменить софт-ссылку на старую curl, обычно она находится в / usr / bin / curl и curl-config. затем исправьте lib в /etc/ld.conf.d/local.conf и выполните команду "ldconfig"
Прежде всего, стандартная версия curl / libcurl для CentOS 6 достаточно свежая, поэтому вам не понадобятся старые совместимые пакеты (libcurl7155 и т. Д.).
Самый простой способ установить обновленный curl из моего репо - это установить пакет выпуска моего репо. http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
об / мин -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
а затем отредактируйте файл /etc/yum.repos.d/city-fan.org.repo, изменив строку с enabled = 1 на enabled = 0, чтобы предотвратить втягивание чего-либо оттуда, когда вы этого не ожидаете.
Затем вы можете увидеть, что произойдет, если вы обновите curl из моего репо, выполнив: yum --enablerepo = city-fan.org update curl
На этом этапе вы можете увидеть, что будет установлено / удалено (я бы ожидал, что он установит / обновит несколько библиотек, а также curl и libcurl, и ничего не удалит), и сказать «да» или «нет» обновлению. . Обновленная версия curl должна нормально работать со всем в CentOS 6.
Я сделал именно это и после перезапуска Apache рад сообщить, что PHP теперь также использует новую версию.
Для меня, играя с различными опциями PHP curl, доступными с curl_setopt () помог мне в прошлом. Попробуйте изменить CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST на ложь, для начала.