本人对linux的东西不是很了解,都是边做边看,再加上身边搞linux的人的指点。开始只是简单的部署到服务器上,以为只要部署过去,就可以使用了,后来才发现,需要安装soap的扩展支持。在centos5.5的操作系统中,执行如下的命令:
/usr/bin/php -m|grep soap
/usr/bin/php:这个是php的执行文件,可能不同的服务器位置不同,但是没有关系,用whereis查询一下即可。
上面的命令执行了后,会检测是否启动soap,如果没有,那么不会返回任何结果,如果已经启动了的,那么会看到soap这个字符串。
我做的时候,用的是php5带的soap扩展来做的,centos自带的php的版本是5.1.6的,如果上面没有返回soap结果,那么需要用yum来进行安装:
yum install php-soap
这个命令将安装好soap,并且自动在/etc/php.d/目录下面生成一个soap.ini的文件,里面只有一行代码:
extension=soap.so
如果看到这一行了,那就说明已经安装上了,然后重新启动httpd:
/etc/init.d/httpd stop
/etc/init.d/httpd start
然后再执行/usr/bin/php -m|grep soap,确认是否已经启动了soap扩展,如果没有,那就先把这个东西弄好。
接下来需要做一个事情,那就是开通httpd访问网络的权限,如果不开通,将会有错误的,而错误是:
PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Could not connect to host in /var/www/html/test/testcall_old.php:10/nStack trace:/n#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://222.210....', 'http://222.210....', 1, 0)/n#1 /var/www/html/test/testcall_old.php(10): SoapClient->__soapCall('createWebCall', Array)/n#2 {main}/n  thrown in /var/www/html/test/testcall_old.php on line 10
至于这个错误,折腾了我三天时间,查询了很多网站,很多文章,可是很多都没有结果,所以基本没有解决。
我调用web service的方式是采用no wsdl的方式,至于wsdl的方式,我没有测试。
从这里顺便说一下我愚蠢的3天所做的事情,这三天就是一直通过各种渠道搜索这个错误,也查看了error_log中的日志,但是除了我上面贴的这个错误,均没有。而代码里面,没有进行错误的输出,所以,在做php的soap的时候(不管是用的nusoap还是php自带的soap),那么记住一定要做错误输出,日志里面是没有记录这些错误的。获取soap的错误的代码:
$err=$client->getError()
这个错误有详细的信息。
我处理的过程中,输出的错误信息是:
soap_transport_http: Couldn't open socket connection to server *****,
Error (13): Permission denied
soapclient: Error: HTTP Error: Couldn't open socket connection to server ***** 
Error (13): Permission denied
(注:上面的*****表示我要调用的web service的地址,在此用星号表示了。)
然后我在谷歌上查到了这个错误,是因为linux操作系统中,默认设置了httpd不能访问网络。
那么需要运行命令:
setsebool -P httpd_can_network_connect 1
(其中参数的含义自己去查一下,我是水货,写这篇文章的时候,没有去查,不好意思。)
目的是允许httpd访问网络。
另外说一下,如果你不知道setsebool在什么位置,那么建议使用whereis查一下。
如果执行这个命令得到错误信息:
bash: setsebool: command not found
那么你需要直接找到这个命令的目录然后执行以下的命令:
./setsebool -P httpd_can_network_connect 1
执行了就ok了,然后重新启动httpd,一切ok。
祝遇到这个问题的同仁好运。