我有一个php网站曾经在Centos 6.2上运行,但我无法在Centos 7上运行。
我有Apache 2.4.6 with php 5.4.16
我遇到的问题是php SoapClient给了我一个Soap Exception"无法连接"我的Soap Server和我的http服务器在同一台服务器上。我尝试使用服务器IP地址和127.0.0.1但仍然无法正常工作。
所以我做了一个简单的php测试文件(test.php)来消除我的web服务器的所有复杂性
我不明白的是,如果我从HTTP请求运行php文件,它只会失败。 (http://my-server/test-soap.php)
如果我从命令行运行php文件,它可以工作。 (php test-soap.php)
如果我用Curl测试是有效的。如果我从我的Mac(远程机器)使用Soap-UI,它可以工作。
另外,如果我运行tcpdump,我甚至不会看到php试图连接。 (根本没有包)
有什么想法吗?
这是测试代码。
<?php
if (php_sapi_name() == "cli") {
echo "Running from CLI\n";
$nl="\n";
$_SERVER = array (
'SERVER_ADDR' => '127.0.0.1',
'PHP_AUTH_USER' => '',
'PHP_AUTH_PW' => '',
);
} else {
$nl="<br/>\n";
// Not in cli-mode
}
echo "Start".$nl;
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
$http_port = 80;
$ems_soap_port = 8003;
$ems_addr = "127.0.0.1";
$soap_target_ems = "https://$ems_addr:$ems_soap_port";
$wsdl_target_ems = "http://$ems_addr:$http_port/wsdl/gccpa.wsdl";
$uri_ems = "urn:gccpa";
$context = stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
));
$client = new SoapClient( $wsdl_target_ems, array(
'stream_context' => $context,
'exceptions'=> true,
'location' => $soap_target_ems ,
'uri' => $uri_ems,
'encoding' => 'UTF-8',
'trace' => true ) );
try
{
$getnodesResult = $client->__soapCall( 'gccpa-getnodes',
array( 'parameters' => array('sessionId' => 0, 'sysId' => 1) ) );
echo "Soap Successull".$nl;
}
catch(SoapFault $exception)
{
echo 'gccpa:'.'getnodes exception: '. $exception ;
unset($client);
}
?>