PHP SOAP Имя функции должно быть строкой? - PullRequest
2 голосов
/ 08 февраля 2011

Извините за публикацию всей ошибки.В основном у меня есть две функции, которые работают на мыльном сервере и прекрасно работают.Я добавил третью функцию 'getk', которая не делает ничего более сложного, чем другие.Принимает два параметра и возвращает массив.Однако при вызове этой функции на стороне клиента я получаю следующую ошибку:

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 - это мыльный клиент, а getk - этоимя функции.

Функция на стороне сервера:

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

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

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

Надеюсь, вы, ребята, можете помочь:)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2015

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

0 голосов
/ 08 февраля 2011

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

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

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

...