Переход с NuSOAP на PHP5 SOAP

Я работаю над скриптом с PHP4, который использует NuSOAP. Теперь я пытаюсь перенести это на PHP5 и использовать встроенную поддержку SOAP.

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

Версия PHP5 выдает следующую трассировку стека исключений:

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

Теперь, когда версия NuSOAP работает, а чистый PHP5 — нет, не требуется нейрохирург, чтобы понять, что я делаю что-то не так. У меня есть доступ к файлу .htaccess, и с помощью phpinfo() я удостоверился, что правильно запускаю NuSOAP и запускаю PHP5, когда должен, и PHP4/Nusoap, когда должен.

По сути, я не очень хорошо разбираюсь в веб-сервисах и мыле, но если у кого-то есть какие-либо идеи, я был бы признателен за любую информацию о том, что я делаю неправильно и как я могу перейти на родное мыло в PHP5. Кстати, причиной, по которой я хочу этот шаг, в первую очередь является предполагаемая экономия ресурсов в родном мыле. Я был бы признателен за любые ссылки на тесты между этими двумя решениями.


person Jørgen Emerslund    schedule 26.11.2008    source источник


Ответы (3)


Убедитесь, что NuSoap и PHPv5-SOAP работают на одном сервере. Если я не ошибаюсь, обе библиотеки используют одно и то же имя класса. Может быть, это будет работать лучше, если вы убедитесь, что никакие NuSopa-файлы не включены? А также убедиться, что SOAP-библиотека загружена:

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

Я предполагаю, что поле версии, на которое вы ссылаетесь, определяется как «SOAP 1.1» или подобное?

С наилучшими пожеланиями :)

Btw: what are you working on? Exchange of delays from the pilot to the airport? Or perhaps a webservice which will decrease the waiting-time on luggage delivery at Osl? :p

person qualbeen    schedule 03.12.2008

У нас были очень похожие проблемы со встроенным SOAP-клиентом PHP5, пытающимся использовать веб-службу на основе .NET. Также не удалось выполнить синтаксический анализ WSDL с сообщением о недопустимой схеме. Помещение определений схемы в один локальный файл не помогло.

Мы отказались от попыток и перешли на NuSOAP, который действительно сработал.

Однако NuSOAP также далек от совершенства. Прямо сейчас я попадаю в ситуацию нехватки памяти при разборе ответов размером более 1 МБ. Стирание всего противного отладочного кода немного помогло, но не кардинально.

Таким образом, похоже, что на данный момент нет 100% функциональной/совместимой реализации клиента SOAP в PHP.

person Ivan Krechetov    schedule 17.02.2009

Не тестируя его, у меня есть два предложения:

Во-первых, установите максимально возможное значение error_reporting (перед созданием SoapClient):

error_reporting( E_ALL );

Если что-то не так с аутентификацией на стороне сервера, PHP выдаст предупреждение. В большинстве случаев он скажет вам, что пошло не так.

Во-вторых: я не знаю, можете ли вы указать параметр «местоположение» вместе с URL-адресом wsdl. Теоретически wsdl сообщает вашему клиенту, где находится конечная точка операций, так что вам не нужно беспокоиться.

person Dan Soap    schedule 30.11.2008