每当我使用“https://”URL从PHP调用curl_exec()时,我的Apache进程就会发生段curl_exec() 。
如果我使用http而不是https作为URL传输,它可以很好地工作,所以我知道curl和其他curl选项是正确的。
我可以使用URL的https版本从该服务器上的命令行使用curl ,并且完美地工作,所以我知道远程服务器正确响应,证书没有过期等。
我的服务器是:
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
我的PHPcurl模块信息是:
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()提供的各种PHP curl选项在过去帮助过我。 对于初学者,尝试将CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST更改为false。
考虑添加以下内容:
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,TRUE);
现在,为了看看使用var_dump()或error_log() 。 它应该是这样的:
的var_dump(curl_exec($ CH));
要么
error_log中(curl_exec($ CH));
如果使用error_log(),则应该在error_log文件中find跟踪。
如果失败,除了使用strace之外别无select
您可以尝试手动build立curl最新版本7.49.1,然后将软链接更改为旧curl,通常位于/ usr / bin / curl和curl-config。 然后将lib修复到/etc/ld.conf.d/local.conf并运行命令“ldconfig”
首先,标准的CentOS 6版本的curl / libcurl已经足够了,你不需要旧的compat包(libcurl7155等)。
从我的回购安装更新curl最简单的方法是安装我的回购发行包http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13。 rhel6.noarch.rpm
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,将启用的行= 1更改为启用= 0,以防止在您不期望的时候从那里拉入任何内容。
然后,您可以看到如果通过执行更新了我的回购中的curl,会发生什么情况:yum –enablerepo = city-fan.org update curl
在这一点上,你可以看到什么将被安装/删除(我希望它安装/更新一些库,以及curl和libcurl,而不是删除任何东西),并说“是”或“否”的更新。 curl的更新版本应该可以在CentOS 6中正常运行。
我做了这个,重新启动Apache后,我很高兴地说,PHP也正在使用新版本。