2011-02-08 106 views
2

對不起發佈整個錯誤。基本上我有兩個在肥皂服務器上運行的功能,並且工作得很好。我已經添加了第三個函數'getk',它不會使其他函數更復雜。接受兩個參數並返回一個數組。但是,當調用這個函數客戶端時,我得到以下錯誤。PHP SOAP函數名稱必須是一個字符串?

Fatal error: Uncaught SoapFault exception: 
[SOAP-ENV:Server] Function name must be a string in /home/od2u/public_html/wp-content/plugins/link-monitor/link-monitor.php:33 
Stack trace: #0 [internal function]: SoapClient->__call('getk', Array) 
#1 /home/od2u/public_html/wp-content/plugins/link-monitor/link-monitor.php(33): SoapClient->getk('3', 'wpmu1') 
#2 /home/od2u/public_html/wp-content/themes/twentyten/header.php(18): wsfKeywords('3', 'wpmu1') 
#3 /home/od2u/public_html/wp-includes/theme.php(1086): require_once('/home/od2u/publ...') 
#4 /home/od2u/public_html/wp-includes/theme.php(1062): load_template('/home/od2u/publ...', true) 
#5 /home/od2u/public_html/wp-includes/general-template.php(34): locate_template(Array, true) 
#6 /home/od2u/public_html/wp-content/themes/twentyten/index.php(16): get_header() 
#7 /home/od2u/public_html/wp-includes/template-loader.php(43): include('/home/od2u/publ...') 
#8 /home/od2u/public_html/wp-blog-header.php(16): require_once('/home/od2u/publ...') 
#9 /home/od2u/public_html/index.php(17): require(in /home/od2u/public_html/wp-content/plugins/link-monitor/link-monitor.php on line 33 

我已到處尋找如何對此進行排序的建議。函數確實存在,它不像美元符號或使用錯誤類型的括號那樣愚蠢。

我也清除和禁用了WSDL服務器和客戶端的緩存。

客戶端調用:

$c->getk($site, $server); 

$ c是SOAP客戶端和getk是函數名稱。

功能服務器端:

function getk($website, $server) 
{ 
    $ret_array('blah', 'blah2', 'blah3'); 
    return $ret_array; 
} 

,這是使用添加到SOAP服務器:

$server->addFunction(array("getk", "getLinks", "getDirectLinks")); 

希望你們能幫助:)

+0

從理論上講,只要你使用內建的``SoapServer`](http://us2.php.net/manual/en/class.soapserver.php)類,就應該可以正常工作。但是你的`getk`函數定義中有一個語法錯誤。它應該是`$ ret_array = array('blah','blah2','blah3');`... – ircmaxell 2011-02-08 16:30:45

+0

它沒有得到那麼遠,我只是把它放在那裏,因爲此時函數的內容是不重要的。雖然大聲笑,愚蠢的錯誤。 – 2011-02-08 16:38:06

回答

0

我認爲,問題出在

$ret_array('blah', 'blah2', 'blah3'); 

解釋器試圖解決這個函數調用,但找不到變量$ret_array

0

我有同樣的錯誤,並經過一些更深入的檢查後,問題似乎是在肥皂服務器的一側。 被調用的例程(在這個例子中是getk()函數)產生了一個致命錯誤,導致Soap服務器沒有給出可以被Soap客戶端解釋的適當響應。 如果有人有相同的錯誤,請儘可能檢查Soap服務器的錯誤日誌。你會發現被調用函數產生了一個致命的錯誤,並且「因此」沒有返回任何xml。

相關問題