Verwendung von SOAP in PHP

WBOY
Freigeben: 2016-07-30 13:29:27
Original
2033 Leute haben es durchsucht

SOAP bedeutet auf Englisch „Seife“. Aber dieses Ding hat die Internetwelt stark beeinflusst, nachdem das Konzept der „Webdienste“ in den letzten Jahren gehypt wurde, ist SOAP seine Errungenschaft oder sein „Vermächtnis“, denn SOAP leitete die Implementierung von Webdiensten ein.
SOAP = Simple Object Access Protocol, Simple Object Access Protocol. Es handelt sich um ein leichtes, einfaches XML-basiertes Protokoll, das für den Austausch strukturierter und fester Informationen im WEB entwickelt wurde. SOAP kann in Verbindung mit vielen vorhandenen Internetprotokollen und -formaten verwendet werden, einschließlich Hypertext Transfer Protocol (HTTP), Simple Mail Transfer Protocol (SMTP) und Multipurpose Internet Mail Extensions (MIME). Es unterstützt außerdem eine breite Palette von Anwendungen, von Messaging-Systemen bis hin zu Remote Procedure Calls (RPC).
Durch das SOAP-Protokoll implementierte Webdienste ermöglichen die Zusammenstellung von Klassen und Funktionen, die von Programmierern auf der ganzen Welt geschrieben wurden, um eine riesige Funktionsbibliothek zu erstellen, die sprachunabhängig ist. Dies stellt eine brillante Entwicklungsperspektive für die Softwareindustrie dar. Solange das Netzwerk verbunden ist, kann die gemeinsame Nutzung der Codeebene erreicht werden. Die bisherigen Probleme bei der prozess-, maschinen- und netzwerkübergreifenden Kommunikation wurden gelöst http Das Protokoll kann die Firewall passieren (tatsächlich blockieren Firewalls im Allgemeinen nicht den Port 80 des http-Protokolls, da sonst niemand auf das Internet zugreifen kann).
Kein Wunder, dass viele Menschen dieser Technologie sehr optimistisch gegenüberstehen und sie als „aufregend“ bezeichnen.Webdienste sind heute sehr einfach zu implementieren und können problemlos auf unzähligen Webplattformen im Internet veröffentlicht werden. Das Einfache ist oft das Schönste, und Webdienste sind ein praktisches Beispiel.
In PHP kann SOAP unterstützt werden, nachdem die Erweiterung php_soap.dll in der Datei php.ini aktiviert wurde.
In der Soap-Erweiterungsbibliothek gibt es hauptsächlich drei Arten von Objekten.
1. SoapServer
Wird zum Definieren von Funktionen verwendet, die aufgerufen werden können und Antwortdaten zurückgeben, wenn serverseitige PHP-Seiten erstellt werden. Das Syntaxformat zum Erstellen eines SoapServer-Objekts lautet wie folgt:
$soap = new SoapServer($wsdl, $array);
Unter anderem ist $wsdl die von Shoep verwendete WSDL-Datei und WSDL ist ein Standardformat zur Beschreibung des Webdienstes. Wenn $wsdl auf null gesetzt ist, bedeutet dies, dass der WSDL-Modus nicht verwendet wird. $array sind die Attributinformationen von SoapServer und ein Array.
Die addFunction-Methode des SoapServer-Objekts wird verwendet, um zu deklarieren, welche Funktion vom Client aufgerufen werden kann. Das Syntaxformat ist wie folgt:
$soap->addFunction($function_name);
Darunter: $soap ist ein SoapServer-Objekt. $function_name ist der Name der Funktion, die aufgerufen werden muss.
Die Handle-Methode des SoapServer-Objekts wird verwendet, um Benutzereingaben zu verarbeiten und die entsprechende Funktion aufzurufen, und gibt schließlich das Verarbeitungsergebnis an den Client zurück. Das Syntaxformat lautet wie folgt:
$soap->handle([$soap_request]);
Darunter ist $soap ein SoapServer-Objekt und $soap_request ein optionaler Parameter, der zur Darstellung der Anforderungsinformationen des Benutzers verwendet wird . Wenn $soap_request nicht angegeben ist, bedeutet dies, dass der Server alle Anfragen des Benutzers akzeptiert.
2. SoapCliet
wird verwendet, um die SoapServer-Seite auf dem Remote-Server aufzurufen und den Aufruf der entsprechenden Funktion zu implementieren. Das Syntaxformat zum Erstellen eines SoapClient-Objekts lautet wie folgt:
$soap = new SoapClient($wsdl,$array);
Unter diesen sind die Parameter $wsdl und $array dieselben wie bei SoapServer.
Nach dem Erstellen des SoapClient-Objekts entspricht der Aufruf der Funktion auf der Serverseite dem Aufruf der SoapClient-Methode. Die Erstellungssyntax lautet wie folgt:
$soap->user_function($params);
Darunter , $soap ist ein SoapClient-Objekt, user_function ist die Funktion, die auf der Serverseite aufgerufen werden soll, und $params sind die Parameter, die an die Funktion übergeben werden sollen.
3. SoapFault
SoapFault wird verwendet, um Fehler zu generieren, die beim Soap-Zugriff auftreten können. Das Syntaxformat zum Erstellen eines SoapFault-Objekts lautet wie folgt:
$fault = new SoapFault($faultcode,$faultstring);
Darunter ist $faultcode ein benutzerdefinierter Fehlercode und $faultstring ein Benutzer -definierte Fehlermeldung. Das SoapFault-Objekt wird automatisch generiert, wenn auf der serverseitigen Seite ein Fehler auftritt oder wenn der Benutzer ein SoapFault-Objekt erstellt. Bei Fehlern, die beim Soap-Zugriff auftreten, kann der Client die entsprechenden Fehlerinformationen durch Erfassen des SoapFalut-Objekts erhalten.
Nach der Erfassung des SoapFault-Objekts auf dem Client können der Fehlercode und die Fehlerinformationen über den folgenden Code abgerufen werden:
$fault->faultcode;//Fehlercode
$fault->faultstring; //Fehlerinformationen
Darunter ist $fault das zuvor erstellte SoapFault-Objekt.
{ 🎜> $retval='';
      if(strlen($str)<1)
      {
        return new SoapFault('Client','','Invalid string');
      }
      for($i=1; $i<=strlen($str); $i++)
      {
        $retval .= $str[(strlen($str)-$i)];
} } }
        return new SoapFault('Client','','The first number is invalid');
      }
      if(trim($num2) != intval($num2))
      {
        return new SoapFault('Client','','The second number is invalid');
      }
      return ($num1+$num2);
    }
    function gettime()
    {
      $time = date('Y-m-d H:i:s',time());
      return $time;
    }
    ?>
    文件 Soapclsoapserverient.php Beschreibung:
#用来处理接受的soap请求
      include_once(' Soapfunc.php');
      error_reporting(7); //正式发布时,设为 0
      date_default_timezone_set('PRC'); //设置时区
      $soap = new SoapServer(null, array('uri'=>"httr://test-rui"));
      $soap->addFunction('reverse');
      $soap->addFunction('add2numbers');
      $soap->addFunction('gettime');
      $soap->addFunction(SOAP_FUNCTIONS_ALL);
      $soap-> ;handle();
    ?>
    文件 Soapclient.php 内容:
          error_reporting(7);
      try
      {
        $client. = neuer SoapClient (null, array('location'=>"http://localhost:8080/_myPHP5/soap/soapserver.php", 'uri'=>"http://test-uri"));
$str="Diese Zeichenfolge wird umgekehrt";
        $reversed = $client->reverse($str);
        echo "Wenn Sie '$str' umkehren, erhalten Sie '$reversed'";
        $n1 = 20;
        $n2 = 33;
        $sum = $client->add2numbers($n1,$n2);
        echo "
";
echo "Wenn Sie $n1 + $n2 versuchen, erhalten Sie $sum";
        echo "
";
        echo "Die Remote-Systemzeit ist: ".$client->gettime() ;
      }
      Catch(SoapFault $fault)
      {
        echo "Fault! code:" . $fault->faultcode . " string:" . $fault->faultstring;
      }
    ?>


PHP 中还实现了通过 WSDL 对Web 服务的发布.

WSDL 是一种用于描述Web服务的语法规范,针对每个Web服务来说,它是一个说明文档, 对web服务的位置, 协议和接口进行详细的说明.由web服务的开发者提供.

WSDL文件包括5部分:types, Message,PortType,Binding和Service五部分.

1 Typdefinition: Typdefinition, unabhängig von der Sprache.
2 Nachricht: Jede Webmethode entspricht zwei Nachrichtendefinitionen enthält Header und Body
3 PortType: Jeder Webdienst entspricht einem PortType, der die darauf veröffentlichten Methoden enthält, Operation (Operation)
4 Bindungen: Gibt die Bindungsinformationen für jede Operation (Klasse und Methode) an, einschließlich des Formats von Eingabe- und Ausgabenachrichten.
5 Dienst: An jeden Webdienst gebundene Portinformationen

Zusätzlich zur Veröffentlichung gemäß der oben genannten Beispielform kann der Webdienst auch über ein WSDL-Dokument veröffentlicht werden.

Beispiel:

Zu veröffentlichende Klasse, Datei myservice.php:
Klassendienst
{
öffentliche Funktion HelloWorld()
{
return „Hello“;
}
public function Add($a,$b)
{
return $a+$b;
}
}

$server=new SoapServer('TestSoap.wsdl',array('soap_version' => SOAP_1_2));
$server->setClass("service");
$server-> ; handle();
?>

WSDL-Beschreibungsdokument, Datei TestSoap.wsdl:

targetNamespace="urn:TestSoap"
xmlns:typens="urn:TestSoap"
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/">

< ;message name="Add">















< ;input message="typens:HelloWorld"/>


🎜>








< ;output>










🎜>




< ; Soap:body namespace="urn:TestSoap" use="literal"/>







< ;port name="servicePort" binding="typens:serviceBinding">





Aufrufcode, Datei Client.php:

error_reporting(7);

$client = new SoapClient("http://localhost:8080/_myPHP5/soap/Wsdl/TestSoap.wsdl");
echo $client->HelloWorld();
echo("
");
echo $client->Add(10, 20);
?>

Allerdings ist das Schreiben von WSDL-Dokumenten eine umständliche Aufgabe, langweilig und fehleranfällig. Viele Leute denken, dass diese Dinge nicht von Menschen geschrieben wurden. Wenn es jedoch gute Softwaretools gibt, müssen diese Dinge nicht von Menschen geschrieben werden. Die ZED 5.0-Serie von Zend und Zend Studio für Eclipse 6.0 unterstützten ursprünglich die visuelle WDSL-Bearbeitung und Klassenveröffentlichung (intelligente Generierung gemäß einer Klassendatei), aber nach Zend Studio 7.0 wurde diese Funktion geschwächt. Allerdings verfügt Zend Studio 7.x, das auf Eclipse basiert, immer noch über einen visuellen WSDL-Editor, und die generierten WSDL-Funktionen sind ausreichend Die Datei weist im Vergleich zu früher geringfügige Änderungen auf. Programmierer müssen mit den Tags und Elementen in WSDL-Dokumenten vertraut sein.

Anhang: Einige Fehler bei der PHP-Soap-Entwicklung

1. Achten Sie beim Entwickeln darauf, den PHP-Soap-Cache auszuschalten, da sowohl der Server als auch der Client ihn benötigen, sonst wird Folgendes gemeldet:

Schwerwiegender Fehler: Nicht erfasste SoapFault-Ausnahme: [Client]-Funktion („test“) ist keine gültige Methode für diesen Dienst in ……clien.php:5 ​​​​Stack Trace:
#0 [internal Funktion]: SoapClient-> __call('test', Array)
#1 D:xampphtdocsclien.php(5): SoapClient->test()
#2 {main}

Close-Methode:
ini_set ("soap.wsdl_cache_enabled", "0");

Sie können einige Informationen über Soap über Methoden wie $client->__getFunctions() anzeigen.


2. Wenn beim Debuggen der Fehler gemeldet wird, dass XML nicht erkannt wird, stellen Sie bitte sicher, dass der Code keine Leerzeichen und andere irrelevante Informationen enthält, wie z. B. der BOM-Header von Utf-8-codierten Dateien.

Autor: Zhang Qing (Mesh) Xi'an PHP Education and Training Center 2010-7-11
Von „Mesh Vision“: http://blog.why100000.com
Autor Weibo: http: //t.qq.com/zhangking
Computer-Lernwebsite „One Hundred Thousand Whys“: http://www.why100000.com


Das Obige hat die Verwendung von SOAP in PHP vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage