2011-02-08 122 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。

相关问题