문제

NUSOAP에 의존하는 PHP4와 대본 작업을 해왔습니다. 이제 저는 이것을 PHP5로 옮기고 비누에 대한 빌드 딘 지지대를 사용하려고합니다.

$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-Version은 다음과 같은 예외 스택 트레이스를 던집니다.

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의 기본 비누로 이동할 수있는 방법에 대한 의견에 감사드립니다. BTW, 내가이 움직임을 원하는 공명은 처음에 원시 비누에서 가정 된 자원 절약입니다. 이 두 솔루션 사이의 벤치 마크에 대한 링크에 감사드립니다.

도움이 되었습니까?

해결책

NUSOAP 및 PHPV5 SOAP가 동일한 서버에서 실행되고 있는지 확인하십시오. 내가 완전히 틀리지 않으면 두 라이브러리는 동일한 클래스 이름을 사용합니다. 누소 파일이 포함되어 있지 않으면 더 잘 작동할까요? 또한 비누 라이브러리가로드되었는지 확인하십시오.

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

당신이 언급하는 버전 필드는 "SOAP 1.1"또는 Similiar로 정의 된 것 같습니다.

최고의 소원 :)

BTW : 당신은 무엇을하고 있습니까? 조종사에서 공항으로의 지연 교환? 아니면 OSL에서 수하물 배달에서 대기 시간을 줄이는 웹 서비스일까요? :피

다른 팁

.NET 기반 웹 서비스를 소비하려는 PHP5 내장 비누 클라이언트와 매우 유사한 문제가있었습니다. 또한 WSDL 파싱은 잘못된 스키마를보고하지 못했습니다. 스키마 정의를 단일 로컬 파일에 넣는 것은 도움이되지 않았습니다.

우리는 노력을 포기하고 Nusoap으로 전환했습니다.

그러나 Nusoap도 완벽하지 않습니다. 지금은 1MB+ 응답을 구문 분석하는 동안 메모리가 아닌 상황에 빠지게됩니다. 모든 불쾌한 디버그 코드를 지우는 것은 약간의 도움이되었지만 근본적으로는 아닙니다.

따라서 현재 PHP에 100% 상호 운용 가능한/기능적 비누 클라이언트 구현이없는 것 같습니다.

테스트하지 않고 두 가지 제안이 있습니다.

먼저, error_reporting을 가능한 가장 높은 상태로 두십시오 (SOAPClient를 만들기 전에) :

error_reporting( E_ALL );

서버 측의 인증에 문제가있는 경우 PHP는 경고를 던질 것입니다. 대부분의 경우, 그것은 당신에게 무엇이 잘못되었는지 알려줄 것입니다.

둘째 : WSDL의 URL과 함께 '위치'옵션을 지정할 수 있는지 모르겠습니다. 이론적으로 WSDL은 고객에게 작업의 종말점이 어디에 있는지 알려 주므로 귀찮게 할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top