解决Unable to find the wrapper "https"的二种方法

张映 发表于 2012-02-22

分类目录: linux

标签:, ,

先啰嗦一下,这个问题其实通php加载openssl模块来解决,是件挺容易的事,但是牵扯到用什么linux系统,以及是用多少位的linux系统,以及php自身的版本问题,以及是不是手动安装,还是管理工具安装时,其实有的时候,还是比较麻的。

解决方法一,php加载openssl模块

遇到这个问题时,我的第一反映就是加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个例子



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/linux/1379.html