2013-04-12 4 views
17

Il mio problema è molto comune. Ho letto quasi tutti gli argomenti su StackOverflow su questo problema, ma non riesco ancora a fare qualcosa. Il mio codice è:Errore WSDL: SOAP-ERROR: analisi WSDL: impossibile caricare da

ini_set("soap.wsdl_cache", "0"); 
ini_set("soap.wsdl_cache_enabled", "0"); 
$proxy = new SoapClient('http://Myhostname/api/soap?wsdl'); 

ho avuto questo errore:

Error WSDL: SOAP-ERROR: Parsing WSDL: Couldn't load from 
'http://Myhostname/api/soap?wsdl' : failed to load external entity 
"http://Myhostname/api/soap?wsdl" 

Nel browser l'URL

http://Myhostname/api/soap?wsdl 

grandi opere (restituisce una risposta XML)

provo questo codice per vedere se PHP può raggiungere questo URL:

if (file_get_contents('http://Myhostname/api/soap?wsdl') === false) { 
    echo "ERROR: file_get_contents <br/>"; 
} 

Mi visualizza il mio errore "ERRORE: file_get_contents", quindi non funziona. Nei forum ho visto che per risolvere questo problema devo aggiungere il nome host nel file "host" del sistema operativo. Così l'ho fatto. Nel file hosts ho aggiunto questa riga 127.0.0.1 Myhostname

Ma non funziona ancora. Poi ho cambiato l'URL nel mio codice per

http://localhost/Myhostname/api/soap?wsdl 

ma non funziona neanche.

Ho provato un'altra soluzione trovata su Internet. Per alcune persone ha funzionato. Nella mia URL ho cambiato "?" carattere a '.'. Quindi il mio nuovo URL è diventato

http://localhost/Myhostname/api/soap.wsdl 

ma non funziona neanche.

Ho visto official SOAP doc! E ha cercato di creare oggetti SoapClient in modo diverso (con opzioni come "proxy_host" e "proxy_port"). Ma questo non mi ha aiutato.

È il mio secondo giorno che cerco di risolvere questo problema, ma non posso. Sto facendo il mio stage, non ho molta esperienza, quindi forse non ho provato le soluzioni che ho trovato correttamente. Forse qualcuno può aiutarti. Sarei molto contento

+0

Penso che in alcuni casi, non è possibile file_get_contents() per il nome host * da * il server stesso dietro quel nome host. Hai provato a eseguire questo codice da un ambiente locale? – kalenjordan

+0

Hai provato 'http: //127.0.0.1/Myhostname/api/soap? Wsdl'? –

+0

In realtà era una sorta di problema di configurazione del server. Il mio supervisore l'ha riparato. Grazie comunque ragazzi. – Kalitine

risposta

1

Ho il problema simile, lo risolvo senza commenti -MultiViews dal file .htaccess e successivamente dalla configurazione di Apache del sito Web locale.

La mia configurazione di Apache di lavoro è:

<Directory /var/www/> 
     Options Indexes FollowSymLinks -MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
</Directory> 

Si può provare anche url:

http://localhost/Myhostname/api.php?type=soap&wsdl 

se si utilizza Community Edition.

3

Pochi passaggi per verificare

Avere un ping su Myhostname. Darebbe l'ip.Utilizzare IP invece e vedere

Controllare se i servizi sono abilitati S0AP, php_openssl, openssl, curl

Spero che si otterrebbe it :)

+0

Questo lo ha fatto per me! – Olaf

1

invece di $ delega = new SoapClient ('http://Myhostname/api/soap?wsdl');
tentativo $ proxy = new SoapClient (WSDLFILENAME);
dove WSDLFILENAME è il nome del SO del file WSDL. Questo ha l'ulteriore vantaggio di rendere un roundtrip di un client-server inferiore.