2013-04-12 29 views
17

Mein Problem ist sehr häufig. Ich lese fast alle Themen auf Stackoverflow zu diesem Thema, kann aber immer noch nicht funktionieren. Mein Code ist:Fehler WSDL: SOAP-FEHLER: Parsing WSDL: Konnte nicht von

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" 

im Browser die URL

http://Myhostname/api/soap?wsdl 

große Werke (gibt eine XML-Antwort)

Ich versuche dies:

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

ich diesen Fehler hatte Code, um zu sehen, ob PHP diese URL erreichen kann:

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

Es zeigt mir meinen Fehler "FEHLER: file_get_contents", so dass es nicht funktioniert. In den Foren sah ich, dass zur Lösung dieses Problems ich Hostnamen in OS "Hosts" -Datei hinzufügen muss. Also habe ich es getan. In meiner Hosts-Datei habe ich diese Zeile hinzugefügt 127.0.0.1 Myhostname

Aber es funktioniert immer noch nicht. Dann änderte ich URL in meinem Code

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

aber es funktioniert auch nicht.

Ich versuchte eine andere Lösung, die ich im Internet gefunden habe. Für einige Leute hat es funktioniert. In meiner URL habe ich '?' Zeichen zu '.' Also meine neue URL wurde

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

aber es funktioniert auch nicht.

Ich sah official SOAP doc! Und versucht, das SoapClient-Objekt auf andere Weise zu erstellen (mit Optionen wie 'proxy_host' und 'proxy_port'). Aber das hat mir nicht geholfen.

Es ist mein zweiter Tag ich versuche, dieses Problem zu lösen, aber ich kann nicht. Ich mache mein Praktikum, ich habe nicht viel Erfahrung, also habe ich vielleicht nicht die richtigen Lösungen gefunden. Vielleicht kann jemand helfen. Ich wäre sehr zufrieden.

+0

Ich denke, dass Sie in einigen Fällen file_get_contents() nicht zu Ihrem Hostnamen * vom Server selbst hinter diesem Hostnamen führen können. Haben Sie versucht, diesen Code von einer lokalen Umgebung aus auszuführen? – kalenjordan

+0

Haben Sie versucht, http: //127.0.0.1/Myhostname/api/soap? Wsdl'? –

+0

Eigentlich war es eine Art von Serverkonfigurationsproblem. Mein Vorgesetzter hat es behoben. Danke trotzdem Jungs. – Kalitine

Antwort

1

Ich habe das ähnliche Problem, ich löse es auskommentieren -MultiViews von .htaccess-Datei und später von Apache-Konfiguration der lokalen Website.

Meine Arbeits Apache-Konfiguration ist:

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

Sie können versuchen, auch url:

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

wenn Sie Community Edition verwenden.

3

Nur wenige Schritte zu überprüfen

Haben Sie einen Ping zu Myhostname. Es würde die IP geben.Verwenden Sie ip statt und

Überprüfen Sie, ob die Dienste aktiviert sind S0AP, php_openssl, openssl, curl

Hoffnung würden Sie bekommen es :)

+0

Das hat es für mich getan! – Olaf

1

statt $ proxy = new Soapclient ('http://Myhostname/api/soap?wsdl');
versuchen $ proxy = neue SoapClient (WSDLFILENAME);
Dabei ist WSDLFILENAME der Betriebssystemname der WSDL-Datei. Dies hat den zusätzlichen Vorteil, dass ein Client-Server-Roundtrip weniger wird.