Ich versuche, einen Web-Service mit PHP & SOAP zu laufen, aber alles, was ich dies so weit ist immer:SOAP PHP Fehler beim Parsing von WSDL: Externe Einheit konnte nicht geladen werden?
(SoapFault)[2] message which states: '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 127.0.0.1 ändern, aber das macht keinen Unterschied . login ist eigentlich eine wsdl-Datei, aber wenn ich login.wsdl in den SOAPClient-Konstruktor lege, sagt es stattdessen "'sieht so aus, als hätten wir kein XML-Dokument'".
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 die 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 nicht sicher, ob dies ich bin die Bereitstellung der Code für den SOAP-Server register.php beteiligt, so:
<?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();
?>
es tut mir leid, wenn ich unnötig informati geben werde weiter, aber ich bin ein absoluter Neuling dabei - und ich würde es wirklich schätzen, wenn jemand darauf hinweisen könnte, warum genau dieser SOAP-Fehler erzeugt wird und was ich tun kann, um es zu korrigieren.
Ich benutze WAMP Server Version 2.2, mit mySQL 5.5.24 und PHP 5.3.13
einfach auf die Antwort hinzuzufügen, wird dies durch Änderungen in OpenSSL in 5.6.x http://php.net/manual/en/migration56.openssl.php –
Statt Deaktivierung von SSL Peer motiviert Verifizierung sollten Sie versuchen, zu beheben, was die Validierung fehlschlägt. Zum Beispiel, indem Sie explizit den Pfad zu einem Cafile setzen, der die notwendigen Root-Zertifikate enthält, gegen die verifiziert werden kann. Die Antwort kommt jedoch zum Kern des Problems, und manchmal ist dies möglicherweise die einzige verfügbare Lösung, also +1. – deceze
Wie "openssl.cafile = C: /path/to/sslCertificates/cacert.pem" zu php.ini hinzufügen :-) (wie curl.cainfo!) –