SOAP-PHP-Fehler parsing WSDL: failed to load external entity?
Ich versuche, ein web service mit PHP & SEIFE, aber ich bin immer so weit ist:
(SoapFault)[2] Botschaft, die besagt: "SOAP-ERROR: Parsing WSDL: Couldn' T load from 'http://localhost/MyRegistration/login.xml' : failed to load external entity "http://localhost/MyRegistration/login.xml"
Ich habe versucht localhost zu 127.0.0.1, aber das macht keinen Unterschied. login ist eigentlich eine wsdl-Datei, aber wenn ich die login.wsdl in der SOAPClient Konstruktor, es sagt "looks like we got no XML document'" statt.
Hier ist mein code für den SOAP-Client (register_client.php):
<?php
try
{
$sClient = new SoapClient('http://127.0.0.1/MyRegistration/login.wsdl');
$param1 = $_POST["regname"];
$param2 = $_POST["regpass1"];
$response = $sClient->loginVerify($param1, $param2);
var_dump($response);
}
catch(SoapFault $e)
{
var_dump($e);
}
?>
Und hier ist der login.wsdl-Datei:
<?xml version="1.0"?>
<definitions name="LoginVal"
targetNamespace="urn:LoginVal"
xmlns:tns="urn:LoginVal"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Login">
<xsd:element name="getName" type="xsd:string" />
<xsd:element name="getPass" type="xsd:string" />
<xsd:element name="LoginResponse" type="xsd:string" />
</xsd:schema>
</types>
<message name="loginVerify">
<part name="username" type="tns:getName" />
<part name="password" type="tns:getPass" />
</message>
<message name="doLoginResponse">
<part name="return" type="tns:LoginResponse" />
</message>
<portType name="LoginPort">
<operation name="loginVerify">
<input message="tns:loginVerify" />
<output message="tns:doLoginResponse" />
</operation>
</portType>
<binding name="LoginBinding" type="tns:LoginPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="loginVerify">
<soap:operation soapAction="urn:LoginAction" />
<input>
<soap:body use="encoded" namespace="urn:Login" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="urn:Login" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="LoginService">
<port name="LoginPort" binding="tns:LoginBinding">
<soap:address location="http://localhost/MyRegistration/register.php" />
</port>
</service>
</definitions>
Und ich bin mir nicht sicher, ob dieser beteiligt ist, so dass ich die Bereitstellung der code für den SOAP-Server register.php:
<?php
if(!extension_loaded("soap"))
{
dl("php_soap.dll");
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("login.wsdl", array('uri'=>'http://127.0.0.1/MyRegistration'))
public function loginVerify($username, $password)
{
if($_POST["regname"] && $_POST["regemail"] && $_POST["regpass1"] && $_POST["regpass2"] )
{
if($_POST["regpass1"] == $_POST["regpass2"])
{
$servername = "localhost";
$username = "root";
$password = "Hellfire";
$conn = mysql_connect($servername,$username,"Hellfire")or die(mysql_error());
mysql_select_db("soap",$conn);
$sql = "insert into users (name,email,password)values('$_POST[regname]','$_POST[regemail]','$_POST[regpass1]')";
$result = mysql_query($sql,$conn) or die(mysql_error());
return "You have registered sucessfully";
//print "<a href='index.php'>go to login page</a>";
}
else return "passwords dont match";
}
else return "invalid data";
}
$server->AddFunction("loginVerify");
$server->handle();
?>
Tut mir Leid, wenn ich gebe unnötige Informationen, aber ich bin ein völliger Neuling an diesem - und ich würde es wirklich schätzen, wenn jemand darauf hinweisen könnte, warum genau dieses SOAP Fault generiert wird, und was kann ich tun, um Sie zu berichtigen.
Ich bin mit WAMP Server 2.2-version mit mySQL 5.5.24 und PHP 5.3.13
InformationsquelleAutor der Frage user1743679 | 2012-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der Migration zu PHP 5.6.5, soap 1.2 hat nicht mehr funktioniert. Also ich habe das problem gelöst, durch hinzufügen optionaler SSL-Parameter.
Mein Fehler:
Wie zu lösen:
InformationsquelleAutor der Antwort Rômulo Z. C. Cunha
Diesen code vor jedem Soap-Aufruf:
InformationsquelleAutor der Antwort Nguyen Thanh
Auf register_client.php stellen Sie sicher, dass der URL mit übergeben wurde SoapClient ist zugänglich von der Maschine, die Sie ausführen, den code.
Wenn 127.0.0.0 nicht funktioniert, können Sie versuchen, mit einige Netzwerk-IP-Adresse und sehen.
Lassen Sie mich wissen, wenn es dann immer noch nicht lösen es für Sie, ich wollte versuchen, mit Ihrem Beispiel und ändern den Pfad (so dass es die richtige in meinem dev. Umwelt) festgelegt hat, die gleichen Fehler für mich.
Ich wäre daran interessiert zu wissen, ob es nicht reparieren es für Sie.
InformationsquelleAutor der Antwort deej
Ich hatte das gleiche problem.
Diese php-Einstellung die mein problem gelöst:
InformationsquelleAutor der Antwort hazard16
versuchen. funktioniert bei mir
InformationsquelleAutor der Antwort gogagubi
Bekam eine ähnliche Antwort mit https WSDL-URL mit php soapClient
Nach dem server aktualisiert worden ist, von PHP 5.5.9-1ubuntu4.21 >> PHP 5.5.9-1ubuntu4.23 ging etwas schief für meinen client-Rechner osx 10.12.6 /PHP 5.6.30, aber MS-Web-Services-Clients verbindungen gemacht werden konnten, ohne Probleme.
Apache2 ist server_access.log zeigte kein Eintrag, wenn ich versuchte zu laden WSDL-so fügte ich
'cache_wsdl' => WSDL_CACHE_NONE
zu verhindern, dass der client-Seite das wsdl-caching, aber noch keine Einträge. Schließlich habe ich versucht zu laden wsdl-proCURL -i
geprüft HEADER aber alles schien in Ordnung zu sein..Nur
libxml_get_last_error()
einigen Aufschluß >SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Also ich habe einige ssl-Optionen auf meinen Anruf:
In meinem Fall
'allow_self_signed' => true
hat den trick!InformationsquelleAutor der Antwort c3labs
Wenn jemand hat das gleiche problem, eine mögliche Lösung ist, um die
bindto
stream Kontext-Konfigurations-parameter (vorausgesetzt, Sie sind über die Verbindung von 11.22.33.44 zu 55.66.77.88):InformationsquelleAutor der Antwort Shmarkus