2011-02-08 7 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); 

$ с является клиентом мыла и getk этого имя функции.

сторона сервер

Функции:

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

И это добавляется к серверу с помощью мыльного:

$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

+0

Это не так далеко, я просто положил его туда, потому что в этот момент содержимое функции неважно. Спасибо, хотя LOL, глупые ошибки. –

ответ

0

Я думаю, что проблема в

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

Interpreter попытается разрешить это как вызов функции, но не может найти значение $ret_array

+0

Это не так далеко, я просто положил его туда, потому что на данный момент содержание функции несущественно. Спасибо, хотя LOL, глупые ошибки. –

0

У меня была такая же ошибка, и после некоторого более глубокого изучения проблема оказалась на стороне Soap-сервера. Вызванная процедура (в этом примере функция getk()) вызвала фатальную ошибку, которая привела к тому, что Soap-сервер не дал правильного ответа, который может быть интерпретирован Soap-клиентом. Если у кого-то такая же ошибка, пожалуйста, проверьте возможные ошибки в файле Soap-сервера. Вы сможете найти, что вызываемая функция производит фатальную ошибку и «таким образом» не возвращает какой-либо xml.

Смежные вопросы