2011-10-11 12 views
9

Ho sviluppato un codice che utilizza le classi NuSoap per PHP per chiamare un servizio Web soap. Sto usando NuSoap piuttosto che le classi native di PHP 5 principalmente perché non voglio aggiungere un prerequisito aggiuntivo quando questo codice è installato su un server web condiviso. Il codice funziona bene sulla mia macchina:Utilizzo di NuSoap funziona su computer locale ma non su server

require DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php'; 
$client = new nusoap_client('http://www.nbnws.net/ws_3_5/GatewayWebService?wsdl', true); 
$query1 = '<TaxonReportingCategoryListRequest xmlns="http://www.nbnws.net/TaxonReportingCategory" registrationKey="'.$key.'"></TaxonReportingCategoryListRequest>'; 
$response = $client->call('GetTaxonReportingCategoryList', $query1); 

Quando ho messo questo in su su un server virtuale, piuttosto che correre a livello locale, l'ultima riga appena si blocca per circa 10 secondi, quindi PHP bombe fuori. Non viene sollevata alcuna eccezione e non vi è alcun errore PHP (ho provato a utilizzare try..catch e set_error_handler solo per essere sicuri).

La mia prima reazione è stata che questo potrebbe essere un firewall in esecuzione sul server che blocca le richieste in uscita, ma sto usando con successo cUrl altrove per richieste e sono abbastanza sicuro che non ci sia un firewall in esecuzione qui. Chiamare $ client-> use_curl non fa alcuna differenza per la chiamata NuSoap, tuttavia, non funziona ancora.

Qualsiasi idea del motivo per cui questo potrebbe accadere sarebbe molto apprezzata.

+0

Molto probabilmente l'impostazione memory_limit è diversa su localhost e server e il server esaurisce la memoria. –

+0

Grazie per il suggerimento. Ho aumentato il limite di memoria a 96M, ma questo ha funzionato solo se avessi chiamato $ client-> setGlobalDebugLevel (0). 64M non era abbastanza anche con il debug disattivato. Ho appena controllato e il servizio web sta rispondendo con ~ 2 MB di dati. Sembra strano che l'utilizzo della memoria sia così alto in questo caso. – Johnvb

+0

Anche io sto vivendo un problema simile. Ho una risposta dati 5mb da un servizio web che nuSOAP vuole occupare più di 256 MB di memoria da gestire. – Travis

risposta

0

Si può fare in modo che i dati www-ha (il permesso di) l'accesso a

DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ? 

o si può provare a copiare nusoap in un'altra directory?

Oppure si può provare a eseguirlo dal prompt dei comandi come utente root?

A proposito, che tipo di errore/avviso si ottiene?

2

Se non si è in grado di risolvere i problemi e si presuppone che si stia utilizzando Linux, è possibile osservare le chiamate di sistema utilizzando strace. Le chiamate possono sembrare piuttosto criptiche, ma a volte puoi vedere a quale sistema si appende, quindi Google che richiede maggiori informazioni.

strace -p processid 

Oppure, se si vuole tracciare lo script dall'inizio dell'esecuzione alla fine e scaricare un file di output:

strace -o trace.txt myscript.php 

Here is a good strace tutorial.

Problemi correlati