日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Codeigniter框架中使用NuSOAP

發(fā)布時間:2023/11/29 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Codeigniter框架中使用NuSOAP 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0、NuSOAP的簡介

NuSOAP 是一組功能強大的PHP類,這個工具的發(fā)布讓使用和創(chuàng)建SOAP消息變得相當(dāng)簡單。 NuSOAP有Dirtrich Ayala編寫,可以無縫的與許多最流行的SOAP服務(wù)實現(xiàn)交互,它以LGPL協(xié)議進行發(fā)布。NuSOAP的主要特性包括:

簡單:NuSOAP的面向?qū)ο蠓椒[藏了SOAP消息的組裝、解析、提交和接收的有關(guān)細節(jié),是用戶能夠集中精力處理自己的業(yè)務(wù)。

WSDL的生成和導(dǎo)入:NoSOAP可以生成一個對應(yīng)于所發(fā)布的Web服務(wù)的WSDL文檔,并且能導(dǎo)入一個WSDL引用在NuSOAP客戶端使用。

代理類:NuSOAP可以生成的一個代理類,允許調(diào)用遠程方法,如同調(diào)用本地方法一樣。

HTTP代理:出于多種原因(安全性和審計是其中兩個原因),有些客戶端被強制將請求委托給HTTP代理,由代理代表客戶端執(zhí)行請求。也就是說,需要所有SOAP請求都傳遞給此代理,而不是直接查詢服務(wù)器。NuSOAP為指定代理服務(wù)器提供了基本支持。

SSL:如果可以通過PHP使用CURL擴展,NuSOAP還支持通過SSL的安全通信。

1、Nusoap的獲取安裝

NuSOAP是一組PHP類,只要從SourceForge下載源碼后,放入自己的工程目錄引用,就可以使用。當(dāng)然,NuSOAP庫的存放位置可以自由決定,include目錄、工程目錄或者任何能夠訪問到的位置。

2、NuSOAP的使用

要使用NuSOAP,我覺得需要要對于SOAP有些基礎(chǔ)得了解,附錄中的參考資料我們可以了解到一些知識,從下面的圖片,也可以了解到SOAP在Web服務(wù)堆棧中的地位。

使用SOAP時,有客戶端和服務(wù)器兩種情況。具體的使用比較簡單,以至于NuSOAP官方都沒有什么文檔來說明,也許作者覺得不需要說明吧。下面就結(jié)合CodeIgniter框架,來說明NuSOAP的使用。

PS:需要說明的一點,NuSOAP不能和PHP的SOAP擴展同時使用,如果你的LAMP環(huán)境中安裝了SOAP的擴展,那么NuSOAP直接是不能用的,因為類名重復(fù)的,如果花些力氣把名字改下,也可以使用 :)

3、CI中使用Nusoap的方法

CI中調(diào)用第三方的類庫,如果簡單的調(diào)用,則非常的簡單。一般的做法是將NuSOAP放在application/libraries 下面,然后編寫一個引用這些文件的類,如 Nusoap_lib.php

<?php? if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Nusoap_lib {
??? function __construct(){
??????? $library_path = '/home/apache/htdocs/libraries/';
??????? $nusoap = $library_path . 'nusoap0.9.5/nusoap.php';

??????? require_once $nusoap;
??? }
}

?>

?

這樣,我們就可以在其他的文件中通過CI常規(guī)的加載的方式來調(diào)用 NuSOAP 進行使用,比如在一個 Client類中。

$this->load->library('Nusoap_lib');

?

$api_url = "http://app.x.com/webservicefordiscuz/Service.asmx";
$this->nusoap_client = new SoapClient( $api_url );
$this->nusoap_client->soap_defencoding = 'utf-8';
$this->nusoap_client->decode_utf8 = false;
$this->nusoap_client->xml_encoding = 'utf-8';

$err = $this->nusoap_client->getError();

if( $err ){
??? echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
??? echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
??? exit();
}else{

}

try{
??? $result = $this->nusoap_client->call(
??????? 'CheckExistUser',
??????? array('username' => "$username"),
??????? '',
??????? 'http://app.x.com/webserviceForDiscuz/CheckExistUser'
??? );

??? print_r( $result );
??? echo "<br />";
??? echo '<p>Request:<br />';
??? echo '<pre>',htmlspecialchars($this->nusoap_client->request,ENT_QUOTES),'</pre>';
??? echo '<br />Response:<br />';
??? echo '<pre>',htmlspecialchars($this->nusoap_client->response,ENT_QUOTES ),'</pre></p>';
??? echo "<br />";
??? print_r( $this->nusoap_client );
}catch(Exception $e){
??? echo $e->getMessage();
}

事實上,在CI中使用NuSOAP,最大的挑戰(zhàn)不在于如何引入。而在于理解并使用NuSOAP,我們照著參考資料1中的例子,一步步也能做出一個SOAP應(yīng)用,但是卻不是十分理解為什么要這樣做,以及SOAP的具體通信和實現(xiàn)方式是怎么樣的。建議感興趣的同學(xué)可以看看IBM Developer Works中關(guān)于SOAP的介紹,相信對于SOAP的理解和今后的使用會有很大幫助。

下面,是我自己試驗的過程中的兩個例子,希望對大家有所幫助。

服務(wù)端

<?php? if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Server extends Controller{
??? function __construct(){
??????? parent::__construct();
??????? $this->load->library('Nusoap_lib');

??????? $this->nusoap_server = new soap_server();
??????? $this->nusoap_server->register(
??????????? 'hello',
??????????? array(
??????????????? 'name' => 'xsd:string'
??????????? ),
??????????? array('return'=>'xsd:string'),
??????????? 'uri:soap/server',
??????????? 'uri:soap/server/hello',
??????????? 'rpc',
??????????? 'encoded'
??????? );
??? }

??? function index(){
??????? if($this->uri->segment(3) == "wsdl"){
??????????? $_SERVER['QUERY_STRING'] = "wsdl";
??????? }else{
??????????? $_SERVER['QUERY_STRING'] = "";
??????? }
??????? function hello($name){
??????????? return "Hello $name.";
??????? }
??????? $this->nusoap_server->service( file_get_contents('php://input') );
??????? exit;
??? }
}
?>

?

客戶端

<?php? if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Client extends Controller{
??? function __construct(){
??????? parent::__construct();
??????? $this->load->library('Nusoap_lib');
??? }

??? function index(){
??????? $this->nusoap_client = new SoapClient('http://mti.x.com/soap/server');
//??????? $this->nusoap_client->soap_defencoding = 'utf-8';
//??????? $this->nusoap_client->decode_utf8 = false;
//??????? $this->nusoap_client->xml_encoding = 'utf-8';

??????? $err = $this->nusoap_client->getError();
??????? if( $err ){
??????????? echo '<p><b>Constructor error:' . $err . '</b></p>';
??????? }
??????? $result = $this->nusoap_client->call(
??????????? 'hello',
??????????? array('name'=>'World'),
??????????? 'uri:soap/server',
??????????? 'uri:soap/server/helo' );

??????? if( $this->nusoap_client->fault ){
??????????? echo '<p><b>Fault:';
??????????? print_r( $result );
??????????? echo '</b></p>';
??????? }else{
??????????? print_r( $result );
??????? }

??????? echo "<br />";
??????? echo '<p>Request:<br />';
??????? echo '<pre>',htmlspecialchars($this->nusoap_client->request,ENT_QUOTES),'</pre>';
??????? echo '<br />Response:<br />';
??????? echo '<pre>',htmlspecialchars($this->nusoap_client->response,ENT_QUOTES ),'</pre></p>';
??????? echo "<br />";

??????? // Display the debug messages
??????? echo '<h2>Debug</h2>';
??????? echo '<pre>' . htmlspecialchars($this->nusoap_client->debug_str, ENT_QUOTES) . '</pre>';
??? }

?

}

4、常見問題

調(diào)試的三個方法:1、使用->request,->response查看消息頭;2、使用日志查看調(diào)試信息;3、使用錯誤信息捕捉。

Technorati 標(biāo)簽: SOAP,NuSOAP,PHP,WSDL

參考資料:
1、Nusoap in Code Igniter 1.5.4
2、CI Nusoap Library
3、淺談SOAP
4、WSDL:描述你的Web服務(wù)
5、NuSoap的使用
6、Introduction to NuSOAP

總結(jié)

以上是生活随笔為你收集整理的在Codeigniter框架中使用NuSOAP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。