我正在用PHP编写SOAP WebService,遇到了一个问题。
此服务在 Linux 服务器上运行。我有一个连接到 Oracle 数据库的函数,另一个函数连接到本地 Memcached 服务器。
因此,当我调用我的 Oracle 连接的函数时,SOAP 返回:
未捕获的 SoapFault 异常:[SOAP-ENV:Server] 调用未定义的函数 oci_connect((
但是如果我使用相同的 Oracle 函数创建一个简单的 php 文件,它就可以正常工作(没有 SOAP(
我创建了一个简单的服务器/客户端php文件进行测试,我遇到了同样的问题,这是我的代码:
服务器:
<?php
class Serveur{
function helloWorld()
{
return "Hello World";
}
function connexionOracle()
{
$conn = oci_connect('XXXXX', 'XXXX', 'XXXXX');
if($conn == false)
{
return "Error";
}
else
{
return "OK";
}
}
}
$serversoap = new SoapServer(null, array('uri' => "http://localhost/test/"));
$serversoap->setClass("Serveur");
$serversoap->handle();
?>
客户:
<?php
error_reporting(E_ALL | E_STRICT);
$client = new SoapClient(null, array('location' => "http://localhost/test/serveur.php",'uri'=> "http://localhost/test/"));
print_r($client->helloWorld());
echo "</br>";
print_r($client->connexionOracle());
?>
此代码返回:
调用未定义的函数 oci_connect((
但是如果我使用像这样的简单文件,一切都在工作:
$conn = connexionOracle2();
var_dump($conn);
function connexionOracle2()
{
$db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = XXXXX)(Port = XXXX)) ) (CONNECT_DATA = (SID = XXXXXX) ) )";
return oci_connect('cartetest', 'evol', $db) or Die('Connexion Oracle impossible');
}
我在本地窗口计算机上没有遇到此问题
这是对我有用的解决方案:
塞布尔 -P httpd_can_network_connect 1
您也可以在配置文件中像这样禁用 SELinux:
SELINUX=禁用