解决Unable to find the wrapper "https"的二种方法
先啰嗦一下,这个问题其实通php加载openssl模块来解决,是件挺容易的事,但是牵扯到用什么linux系统,以及是用多少位的linux系统,以及php自身的版本问题,以及是不是手动安装,还是管理工具安装时,其实有的时候,还是比较麻的。
遇到这个问题时,我的第一反映就是加openssl模块,但是不好加啊。开发的时候测试服务器是2000块多台式机,系统是32位的CentOS5.5,php是5.2.6.到正式服务器是用的是64位的CentOS6,代码是基于php5.2.6开发的,所以没办法正式服务器手动安装php的5.2.6(没有找到可以管理工具安装的源),保重测试服务器和正式服务器一样
当我在正式服务器用phpize来编译安装openssl模块时,老是提示如下信息。
/home/download/php-5.2.6/ext/openssl/openssl.c:229: error: expected specifier-qualifier-list before 'LHASH' /home/download/php-5.2.6/ext/openssl/openssl.c:410: error: expected declaration specifiers or '...' before 'LHASH' /home/download/php-5.2.6/ext/openssl/openssl.c: In function 'php_openssl_config_check_syntax': /home/download/php-5.2.6/ext/openssl/openssl.c:416: error: 'config' undeclared (first use in this function) /home/download/php-5.2.6/ext/openssl/openssl.c:416: error: (Each undeclared identifier is reported only once /home/download/php-5.2.6/ext/openssl/openssl.c:416: error: for each function it appears in.) /home/download/php-5.2.6/ext/openssl/openssl.c: In function 'add_oid_section': /home/download/php-5.2.6/ext/openssl/openssl.c:435: error: 'struct php_x509_request' has no member named 'req_config' /home/download/php-5.2.6/ext/openssl/openssl.c:439: error: 'struct php_x509_request' has no member named 'req_config'
我在网上找了好多方法,没有一个可行的。
导致这种情况产生的原因我分析了一下:
1,依赖关系没有处理,因为php5.2.6我是手动安装的,并且php5.2.6相对于CentOS6来说是比较老的了。
2,php5.2.6根64位的CentOS兼容性性问题,如果是这样的问题,那就麻烦了,不过我觉得这种可能性比较小。
我的建议是,最好不要手动去编译php,mysql这类的,以前我是很喜欢手动编译的,因为好控制。但是如果系统升级了,或者php自身要升级了,到时又挺麻烦的,所以在可以用管理工具的情况下,还是用管理工具比较好的。
上面扯了这么多,还没有说到实质性的东西。哈哈。
1,先确认一下,你的系统中有的有木有openssl,如果没有安装一下openssl
2,先确认一下,有没有装过libiconv,这个是php的支持库,如果没有安装一下,一般情况是有的,系统不同,可能有的有,有的没有
3,如果上面都没有问题,你就可以用phpize来编译openssl模块,或者是重新把php编译一下
上面的操作具体步骤就不详细说了,下面推荐另一种方法,更好用。
解决方法二,通过curl来抓取https的数据,或者是模拟登录
$url = 'https://接域名' $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch);
解决了这个问题后,你可以干什么呢,比较如模块登录到有https的网站啊,可以来抓取https网站的内容等。关于curl的例子请参考:php curl常用的5个例子