2013-10-31 24 views
-1

我是編程領域的新手,這是我的第一個nusoap-0.9.5客戶端和服務器程序。雖然服務器看起來正確,但客戶端仍然給我發出這樣的警告:nuSOAP中的客戶端服務器應用程序

PHP Fatal error: SoapClient::SoapClient(): Invalid parameters in /var/www/client.php on line 5 
PHP Fatal error: Uncaught SoapFault exception: [Client] SoapClient::SoapClient(): Invalid parameters in /var/www/client.php:5 
Stack trace: 
#0 /var/www/client.php(5): SoapClient->SoapClient('http://localhos...', true) 
#1 {main} 
    thrown in /var/www/client.php on line 5 

有人知道原因嗎?我試圖通過網絡在一個多星期內找到一個解決方案,我無法理解我的程序爲什麼不能正常工作。

客戶端代碼:

再次感謝戴維,我看過所有你推薦的教程,我還是有點困惑,但至少比以前少了困惑。我再次修改了我的代碼,我希望現在更有意義。所以在這裏,它是:

<?php 

include "conf_client.php"; 

require_once('nusoap.php'); 

$client = new soapclient('http://localhost:8048/server.php?wsdl',true); 

class Data { 

    public $acro = acro; 

    public $note = note; 

    public $prio = prio; 

    public $date = date; 

    public function Delete() { 

    $create = array ($acro, 
        $date, 
        $note, 
        $prio); 

    return $create; 

    }// End of Function Delete 

}// End of class Data 

$data = new Data(); 

$delete = $data->Delete(); 

$response = $client->call('Lists.DeleteToDo',$delete); 

var_dump($response); 

?> 

目錄:{文件:///var/www/server.php}

任何幫助深表感謝。

'List.DeleteToDo' 是我在調用的服務器端的類:List和Function:DeleteToDo。

+0

請解釋這一點:'SoapClient的( 'HTTP://var/www/connection.php WSDL',真);' –

+0

@跛了鴨,我不知道,但在我的瀏覽器路徑顯示爲: file:///var/www/connection.php 這就是爲什麼我認爲通過添加: http://在前面將工作。 – Thanos

+0

你是對的我明白你的意思:我輸入的網址爲: localhost/connectio.php並且該文件是爲我執行的。所以我用'/localhost/connection.php?wsdl'取代了這一行,但仍然是同樣的錯誤。 我現在做錯了什麼。我很困惑,我認爲這是我的錯誤。提前感謝您的時間和精力。 – Thanos

回答

1

我設法找到更多關於我的問題,我已經解決了它。我在這裏發佈我的服務器代碼,也許它可以幫助別人。

作爲初學者,我儘可能簡化了代碼。我不包括我的答案配置文件,但如果有人需要它,請讓我知道,我也會發布它。

我還想向所有在本論壇中回答我的問題的人表示感謝,並幫助我瞭解自己的錯誤。

<?php 
include "conf.php"; 
require_once('nusoap/lib/nusoap.php'); 
$server = new soap_server(); 
$server->configureWSDL('This is my First nuSoapServer', 'urn:nuSoapServer'); 
$server->wsdl->addComplexType('Data', 
       'compexType', 
       'struct', 
       'all', 
       '', 
       array('id' => array('name' => 'id', 'type' => 'xsd:int'), 
       'acro' => array('name' => 'acro', 'type' => 'xsd:string'), 
       'time' => array('name' => 'time', 'type' => 'xsd:string'), 
       'date' => array('name' => 'date', 'type' => 'xsd:string'), 
       'note' => array('name' => 'note', 'type' => 'xsd:string'), 
       'prio' => array('name' => 'prio', 'type' => 'xsd:int'), 
       'data' => array('name' => 'data', 'type' => 'xsd:string') 
       ) 
      ); 
$server->wsdl->addComplexType(
       'DataArray', // Name 
       'complexType', // Type Class 
       'array',   // PHP Type 
       '',    // Compositor 
       'SOAP-ENC:Array', // Restricted Base 
       array(),   // Elements 
       array(   // Atributes 
       array('ref' => 'SOAP-ENC:arrayType', 
        'wsdl:arrayType' => 'tns:Data[]') 
        ), 
       'tns:Data' 
      ); 
$server->register('GetTodoList',     // method name 
     array('acro' => 'xsd:string'), // input parameters 
     array('DataResult' => 'tns:DataArray'), // output parameters 
     'urn:nuSoapServer',      // namespace($namespace) 
     'urn:nuSoapServer#GetTodoList',   // soap action 
     'rpc',       // style 
     'encoded',      // use 
     'Return Get to do list'); // documentation 
function GetMyConnection() { 

global $InputArray; 

$dbase_link = mysql_connect($InputArray['host'],$InputArray['mysql_user'],$InputArray['mysql_password']); 

//check if connected 
if (!$dbase_link) { 
    die("Can not connect: " . mysql_error()); 
} 

//return $this->myconn; 

//http://se1.php.net/manual/en/function.mysql-create-db.php 
$dbase_select = mysql_select_db($InputArray['mysql_dbase']); 

if (empty($dbase_select)) { 
    $sql = "CREATE DATABASE IF NOT EXISTS ".$InputArray['mysql_dbase']."\n"; 

    if (mysql_query($sql)) { 
    echo "Database: " . $InputArray['mysql_dbase'] . " was created succesfully\n"; 
    } 
    else { 
    echo "Error creating database: " . mysql_error() . "\n"; 
    } 
} 

$dbase_select = mysql_select_db($InputArray['mysql_dbase']); 

$sql = "CREATE TABLE IF NOT EXISTS ".$InputArray['mysql_dbase_table']." (
     `id` int(11) NOT NULL AUTO_INCREMENT, 
     `acro` varchar(25) NOT NULL, 
     `time` varchar(25) NOT NULL, 
     `date` varchar(25) NOT NULL, 
     `note` varchar(1024) NOT NULL, 
     `prio` int(11) NOT NULL, 
     PRIMARY KEY (`id`) 
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1"; 

$create = mysql_query($sql); 

if (!$create) { 
    echo "Error creating table: " . mysql_error() . "\n"; 
} 

}// End of Function GetMyConnection 

function closeConnection() { 

    $terminate = mysql_close(); 

    if ($terminate) { 
    echo "Connection terminated\n"; 
    } 
    else { 
    echo "Error terminating connection: " . mysql_error() . "\n"; 
    } 
}//End of function closeConnection 
// create the function 

function GetTodoList($acro) { 

    global $InputArray; 

    GetMyConnection(); 

    if (!$acro) { 
    return new soap_fault('Client', '', 'No data received!'); 
    } 

    else { 
    $dbase_select = mysql_select_db($InputArray['mysql_dbase']); 

    $get = mysql_query("SELECT * FROM " . $InputArray['mysql_dbase_table'] . " WHERE `acro` = '" . $acro . "'"); 

    if($get === FALSE) { 
     echo "Could not retrieve data from: " . $InputArray['mysql_dbase_table'] . " due to: " . mysql_error() . "\n"; 
    } 

    else { 
     while($total = mysql_fetch_array($get)) { 
    $Data[] = array('id' => $total['id'], 
     'acro' => $total['acro'], 
     'time' => $total['time'], 
     'date' => $total['date'], 
     'note' => $total['note'], 
     'prio' => $total['prio']); 
    } 
    } 
    } 
return $Data; 
closeConnection(); 
} 

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
$server->service($HTTP_RAW_POST_DATA); 
exit(); 
?> 
0

您的SOAP URL試圖訪問本地文件路徑,而不是一個URL

如果你打開你的瀏覽器中,你應該回去XML的(可能很大)塊指定的URL。我可以幾乎保證你會得到什麼除了一個404錯誤

對於必須使用通過服務器而不是本地文件路徑(除非你http://file:///更換指定的URL的SOAP連接 - 可能工作)。

如果你的網站服務器暴露了一個URL(例如,http://localmachine)和WSDL中的子文件夾託管(例如,soapstuff),那麼URL,你需要進入$client=new soapclient線會像http://localmachine/soapstuff?wsdl

+0

根據你的建議,我用下面的代碼替換了:http://var/www/connection.php?wsdl :http://file///var/www/connection.php?wsdl 但仍然得到同樣的錯誤。這種格式是正確的嗎? 在此先感謝您的時間和精力。 – Thanos

+0

我只說它可能是工作,看來它沒有。使用網絡服務器公開的URL。檢查Web服務器的設置以找到基本URL並從那裏開始。另外,如果你的谷歌「nusoap教程」的前4個結果應該給你一個好主意,你需要做什麼 – DaveyBoy

+0

我錯了,我明白你的意思:我輸入了url: localhost/connectio.php和文件爲我執行。所以我用'/localhost/connection.php?wsdl'取代了這一行,但仍然是同樣的錯誤。 我現在做錯了什麼。我很困惑,我認爲這是我的錯誤。 – Thanos

相關問題