php 在工作中框架下做的一个soap代理示例

soap.php文件:

<?php
class control_soap{
    public function client(){
        try{
            $soap = new SoapClient(null,array(
                    "location" => "http://localhost/soap/server.html",
                    "uri"      => "moudle_soapEmail",  //资源描述符服务器和客户端必须对应
                    "style"    => SOAP_RPC,
                    "use"      => SOAP_ENCODED
                       ));
                       //debug($soap);
                       //debug($soap->Get_NoSynEmail());
            
            $ids=array(0=>'0');
            if($soap->Update_SynEmail($ids)){
                //echo $soap->Update_SynEmail($ids);
                echo "yesyang";
            }
        }catch(Exction $e){
            echo print_r($e->getMessage(),true);
        }
        exit();
    }
    
    public function server(){
        $server=new SoapServer(null,array('uri' => "moudle_soapEmail"));
        //debug(DOCUMENT_ROOT.DS.'module\soapEmail.php');
        include DOCUMENT_ROOT.DS.'module\soapEmail.php';
        //load('soapEmail');
        $server->setClass("moudle_soapEmail");
        $server->handle();
        exit();
    }
}

 

soapEmail.php文件:

<?php
/**
 * @author yang
 * @date 2011-11-5
 * @todo 提供给邮箱服务器端的同步邮箱功能
 */
class moudle_soapEmail extends base_sql{
    /**
     * @author yang
     * @date 2011-11-5
     * @todo 返回未同步的邮箱给邮箱服务器端
     * @return array 未同步的邮箱的二维数组
     */
    public function Get_NoSynEmail(){
        $sql="select * from `#__email` where SynFlag=0 limit 50";
        return $this->db->fetchAll($sql);
    }

    /**
     * @author yang
     * @date 2011-11-5
     * @todo 更新本地的email表中未同步的邮箱为同步过的
     * @return array 更新成功与否
     */
    public function Update_SynEmail($ids){
        if (!is_null($ids)) {
            foreach ($ids as $key=>$val){
                $sql="update `#__email` set SynFlag=1 where ID=".$val;
                $this->db->query($sql);
            }
            return true;
        }else{
            return false;
        }
    }
}

浏览器输入client方法的路径即可:localhost/soap/client.html

另外更加正式的代码写法是:

再写个server.php类:

<?php
class control_server{
    public function server(){
        $server=new SoapServer(null,array('uri' => "moudle_soapEmail"));
        //debug(DOCUMENT_ROOT.DS.'module\soapEmail.php');
        include DOCUMENT_ROOT.DS.'module\soapEmail.php';
        //load('soapEmail');
        $server->setClass("moudle_soapEmail");
        $server->handle();
        exit();
    }
}

而soap.php类改为:

<?php
class control_soap{
    public function client(){
        try{
            $soap = new SoapClient(null,array(
                    "location" => "http://localhost/server/server.html",
                    "uri"      => "moudle_soapEmail",  //资源描述符服务器和客户端必须对应
                    "style"    => SOAP_RPC,
                    "use"      => SOAP_ENCODED
                       ));
                       //debug($soap);
                       //debug($soap->Get_NoSynEmail());
            
            $ids=array(0=>'0');
            if($soap->Update_SynEmail($ids)){
                //echo $soap->Update_SynEmail($ids);
                echo "yesyang";
            }
        }catch(Exction $e){
            echo print_r($e->getMessage(),true);
        }
        exit();
    }

}

soapEmail.php文件及调用方式不变。这样改后的目的是实现服务器方法与客户端方法的分离。


你可能感兴趣的:(框架,工作,PHP,function,Module,SOAP)