2016-01-13 55 views
0

我在PHP中編寫SOAP WebService,並遇到問題。SOAP WebService PHP無法訪問擴展功能

此服務在Linux服務器上運行。我有一個連接到Oracle數據庫的功能,另一個連接到本地Memcached服務器。

所以,當我把我的Oracle連接的功能,SOAP回報:

未捕獲的SOAPFault例外:SOAP-ENV:服務器]調用未定義的函數oci_connect()

但是,如果我創建一個簡單的PHP文件具有相同的Oracle功能它工作正常(沒有SOAP)

我創建了一個簡單的服務器/客戶端php文件juste進行測試,我遇到同樣的問題,這裏是我的代碼:

服務器:

<?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'); 
} 

我沒有遇到這個問題我的本地Windows機器上

+0

什麼是你正在使用的服務器? –

+0

我正在使用Apache和PHP 5.4 – ctbs1

+0

您是否能夠爲您的服務生成WSDL?你打電話給他的綁定端口正確的服務名稱? –

回答

0

這是爲我工作的解決方案:

setsebool -P httpd_can_network_connect 1

您也可以像這樣在配置文件中禁用SELinux:

SELINUX =禁用