Passare da SOAP NuSOAP a PHP5

Ho lavorato su uno script con PHP4 che si basa su NuSOAP. Ora, sto cercando di spostare questo in PHP5 e utilizzare il supporto buildin per SOAP lì.

$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, arrays('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); 

La versione PHP5 genera la seguente exception di stacktrace:

 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} 

Ora, dato che la versione NuSOAP funziona, e il puro PHP5 no – non serve un chirurgo del cervello per capire che sto facendo qualcosa di sbagliato. Ho accesso al file .htaccess, e tramite phpinfo () ho fatto in modo che eseguissi correttamente NuSOAP e eseguissi PHP5 quando dovrei, e PHP4 / Nusoap quando dovrei.

Fondamentalmente, non sono molto bravo con i servizi web e il soap – ma se qualcuno ha qualche idea, apprezzerei qualsiasi input su cosa sto facendo male e come posso passare al soap nativo in PHP5. A proposito, il reson che voglio in primo luogo questa mossa è il presunto risparmio di risorse nel soap nativo. Apprezzerei anche i collegamenti ai benchmark tra queste due soluzioni.

Assicurati che NuSoap e PHPv5-SOAP siano in esecuzione sullo stesso server. Se non sbaglio completamente, entrambe le librerie usano lo stesso nome di class. Forse functionrà meglio se ti assicuri che nessun file NuSopa sia incluso? Inoltre, verifica che la libreria SOAP sia caricata:

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

Immagino che il field di versione a cui fai riferimento sia definito "SOAP 1.1" o simile?

Auguri 🙂

Btw: a cosa stai lavorando? Scambio di ritardi dal pilota all'aeroporto? O forse un servizio web che ridurrà il tempo di attesa per la consegna dei bagagli a Osl? : p

Abbiamo avuto problemi molto simili con il client SOAP integrato PHP5 che cercava di utilizzare un servizio Web basato su .NET. Anche l'analisi WSDL non è rioutput a segnalare uno schema non valido. Mettere le definizioni dello schema in un singolo file locale non ha aiutato.

Abbiamo rinunciato a provare e passati a NuSOAP, che ha funzionato.

Tuttavia, NuSOAP è tutt'altro che perfetto. In questo momento mi trovo in una situazione di memory insufficiente durante l'analisi di risposte da 1 MB +. Cancellare tutto il brutto codice di debug ha aiutato un po ', ma non radicalmente.

Al momento, sembra che non ci sia un'implementazione client SOAP integerperabile / funzionale al 100% in PHP.

Senza testarlo, ho due suggerimenti:

Innanzitutto, imposta error_reporting il più ansible (prima di creare SoapClient):

 error_reporting( E_ALL ); 

Se c'è qualcosa di sbagliato nell'authentication dal lato del server, PHP genererà degli avvertimenti. Nella maggior parte dei casi, ti dirà cosa è andato storto.

Secondo: non so se è ansible specificare l'opzione "posizione" insieme a un URL per un wsdl. Teoricamente, la wsdl dice al tuo cliente, where si trova l'endpoint delle operazioni, quindi non devi preoccuparti.