PHP 內置的 SOAP,簡單的來說,就是一套協議用來讓不同的應用程序之間進行通信。這套協議一般用于 Web 服務上,在本文中,我們將會了解到如何使用 PHP 內置的 SOAP。
首先,讓我們來看一個簡單的例子,如下:
$client = new SoapClient('http://localhost/soapserver/server.php?wsdl'); echo $client->sayHello('World');
上面的代碼中,首先創建一個 SoapClient 對象,然后調用 sayHello 方法并輸出結果為 "Hello, World!"。
那么,如何創建一個 SOAP 服務呢?下面就給出相關的代碼:
class HelloWorld { function sayHello($name) { return "Hello, " . $name . "!"; } } $server = new SoapServer('hello.wsdl'); $server->setClass('HelloWorld'); $server->handle();
這里,我們創建了一個 HelloWorld 類,它有一個 sayHello 方法。然后我們創建了一個 SoapServer 對象,指定了 WSDL 文件,指定了實現的類,以及調用了 handle 方法來處理請求。
如果想要自定義 SOAP 協議,我們也可以手動編寫請求和響應。下面的代碼演示了如何手動構造一個 SOAP 協議:
$xml_post_string = '<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <sayHello xmlns="http://localhost/soapserver/server.php"> <name>World</name> </sayHello> </soap:Body> </soap:Envelope>'; $headers = array( "Content-type: text/xml;charset=\"utf-8\"", "SOAPAction: http://localhost/soapserver/server.php/sayHello", "Content-length: ".strlen($xml_post_string), ); $url = "http://localhost/soapserver/server.php"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); curl_close($ch); $result = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response); $xml = new SimpleXMLElement($result); echo $xml->xpath('//return')[0];
上面的代碼中,我們手動構造了一個 SOAP 請求,并使用 cURL 來發送請求并獲取響應。注意,這里的 SOAPAction 要與服務端的 WSDL 文件中的地址一致。最后,我們使用 SimpleXMLElement 來解析響應并輸出結果。
最后,需要注意的是,PHP 內置的 SOAP 可能不是最佳選擇。如果你需要更多的功能和自由度,可以考慮使用第三方庫,如 NuSOAP 或 PHP XML-RPC。當然,這并不是我們本文多討論的內容。
上一篇css文字漸變不兼容
下一篇css文字浮在圖片上部