Переход с NuSOAP на МЫЛО PHP5


Я работал над сценарием с 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, когда должен.

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

Author: tereško, 2008-11-27

3 answers

Убедитесь, что 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" или аналогично?

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

Кстати: над чем вы работаете? Обмен задержками от пилота до аэропорта? Или, возможно, веб-сервис, который сократит время ожидания доставки багажа в Osl?:p
 2
Author: qualbeen, 2008-12-03 23:57:44

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

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

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

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

 1
Author: Ivan Krechetov, 2009-02-17 11:38:20

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

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

error_reporting( E_ALL );

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

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

 1
Author: Dan Soap, 2009-10-30 07:19:23