Переход с 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. Кстати, резонанс, который я хочу, чтобы этот шаг в первую очередь был связан с предполагаемой экономией ресурсов в собственном мыле. Я также был бы признателен за любые ссылки на контрольные показатели между этими двумя решениями.
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У нас были очень похожие проблемы со встроенным SOAP-клиентом PHP5, пытающимся использовать веб-службу на основе .NET. Также не удалось выполнить синтаксический анализ WSDL, сообщив о недопустимой схеме. Помещение определений схемы в один локальный файл не помогло.
Мы отказались от попыток и перешли на NuSOAP, который действительно сработал.
Однако NuSOAP также далек от совершенства. Прямо сейчас я попадаю в ситуацию нехватки памяти во время анализа ответов объемом 1 МБ+. Удаление всего неприятного кода отладки немного помогло, но не радикально.
Таким образом, похоже, что на данный момент в PHP нет 100% совместимой/функциональной реализации SOAP-клиента.
Не проверяя это, у меня есть два предложения:
Во-первых, установите значение error_reporting как можно выше (перед созданием SoapClient):
error_reporting( E_ALL );
Если что-то не так с аутентификацией на стороне сервера, PHP выдаст предупреждения. В большинстве случаев он подскажет вам, что пошло не так.
Второе: я не знаю, можете ли вы указать опцию "местоположение" вместе с URL-адресом wsdl. Теоретически, wsdl сообщает вашему клиенту, где конечная точка операций такова, так что вам не нужно беспокоиться.