zoukankan      html  css  js  c++  java
  • PHP企业级应用之WebService续篇

    简介:这是PHP企业级应用之WebService续篇的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=323134' scrolling='no'>

    PHP企业级应用之WebService篇

    Ping Service,博客程序提供一种通知机制,以便在第一时间将博客的更新信息发布到提供Ping Service服务的网站,写聚合的时候研究了一下。

    先看 标准 吧

    这是一个标准的Ping Service,用XMLRPC来传数据的,注释写的这么详细,代码说明就不需要了吧,PHP5开启XMLRPC方法

    client.php

    以下为引用的内容:

    <?php
    $host  = 'zxsv';
    $port  = 80;
    $rpc_server = '/test/xmlrpc_server.php';
    $title = 'zxsv';
    $server = 'http://zxsv/test/';
    $rss = 'http://zxsv/test/rss.php';
    //weblogUpdates.Ping方法
    $Ping = xmlrpc_encode_request('weblogUpdates.Ping', array($title, $server ));
    //weblogUpdates.extendedPing方法
    $extendedPing = xmlrpc_encode_request('weblogUpdates.extendedPing', array($title, $server, $rss ));
    //调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
    $response = rpc_client_call($host, $port, $rpc_server, $Ping);
    $split = '<?xml version="1.0" encoding="iso-8859-1"?>';
    $xml =  explode($split, $response);
    $xml = $split . array_pop($xml);
    $response = xmlrpc_decode($xml);
    //输出从RPC服务器端获取的信息
    print_r($response);
    /**
    * 函数:提供给客户端进行连接XML-RPC服务器端的函数
    * 参数:
    * $host  需要连接的主机
    * $port  连接主机的端口
    * $rpc_server XML-RPC服务器端文件
    * $request  封装的XML请求信息
    * 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
    */
    function rpc_client_call($host, $port, $rpc_server, $request) {
       $fp = fsockopen($host, $port);
       $query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";
       if (!fputs($fp, $query, strlen($query))) {
           $errstr = "Write error";
           return false;
       }
       $contents = '';
       while (!feof($fp)){
           $contents .= fgets($fp);
       }
       fclose($fp);
       return $contents;
    }
    ?>

    server.php

    以下为引用的内容:

    <?php
    /**
    * 函数:提供给RPC客户端调用的函数
    * 参数:
    * $method 客户端需要调用的函数
    * $params 客户端需要调用的函数的参数数组
    * 返回:返回指定调用结果
    */
    function rpc_server_extendedping($method, $params) {
        $title = $params[0];
        $server = $params[1];
        $rss = $params[2];
            //中间的判断,成功返回$XML_RPC_String
        $XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
      return $XML_RPC_String;
    }
    function rpc_server_ping($method, $params) {
        $title = $params[0];
        $server = $params[1];
            //中间的判断,成功返回$XML_RPC_String
        $XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
      return $XML_RPC_String;
    }
    //产生一个XML-RPC的服务器端
    $xmlrpc_server = xmlrpc_server_create();
    //注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_extendedping函数
    xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.extendedPing", "rpc_server_extendedping");
    xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.Ping", "rpc_server_ping");
    //接受客户端POST过来的XML数据
    $request = $HTTP_RAW_POST_DATA;
    //print_r($request);
    //执行调用客户端的XML请求后获取执行结果
    $xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
    //把函数处理后的结果XML进行输出
    header('Content-Type: text/xml');
    echo $xmlrpc_response;
    //销毁XML-RPC服务器端资源
    xmlrpc_server_destroy($xmlrpc_server);
    ?>

    类写的,有BUG

    以下为引用的内容:

    <?php
    class Pings {
        public $xmlrpc_server;
        public $xmlrpc_response;
        public $methodName;   
        public function __construct() {
            //产生一个XML-RPC的服务器端
            $this->xmlrpc_server = xmlrpc_server_create ();
            $this->run ();
        }
       
        //注册一个服务器端调用的方法rpc_server,实际指向的是ping函数
        public function rpc_server() {       
            $this->methodName = !$this->methodName ? 'weblogUpdates.extendedPing':'weblogUpdates.Ping';       
            xmlrpc_server_register_method ( $this->xmlrpc_server, $this->methodName, array (__CLASS__, "ping"));       
        }
            /**
         * 函数:提供给RPC客户端调用的函数
         * 参数:
         * $method 客户端需要调用的函数
         * $params 客户端需要调用的函数的参数数组
         * 返回:返回指定调用结果
         */   
        public function ping($method, $params) {
            $this->title = $params [0];
            $this->server = $params [1];
            $this->rss = $params [2];
            $this->tag = $params [3];
            //$a  = $this->title ? $this->update():'';
            $string = array ('flerror' => false, 'message' => 'Thanks for the ping.', 'legal' => "You agree that use of the blueidea.com ping service is governed by the Terms of Use found at www.blueidea.com." );
            return $string;
        }
       
        public function update(){
            echo '这里放更新的一些条件';
        }
           
        public function run() {   
            $this->rpc_server ();   
            $request = isset ( $GLOBALS ["HTTP_RAW_POST_DATA"] ) ? file_get_contents ( "php://input" ) : $GLOBALS ["HTTP_RAW_POST_DATA"];       
            $this->xmlrpc_response = xmlrpc_server_call_method ( $this->xmlrpc_server, $request, null );
            //把函数处理后的结果XML进行输出
            header ( 'Content-Type: text/xml' );
            echo $this->xmlrpc_response;
        }
       
        //销毁XML-RPC服务器端资源
        public function __destruct() {
            xmlrpc_server_destroy ( $this->xmlrpc_server );
        }
    }
    $Obj = new Pings ( );
    ?>

    WebService的最常用的两种方法算是写齐了

    “PHP企业级应用之WebService续篇”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/323134.html pageNo:16
  • 相关阅读:
    Proxy 相对于 Object.defineProperty 有哪些优点?
    Vue 3.0 所采用的 Composition Api 与 Vue 2.x使用的Options Api 有什么区别?
    Vue 3.0 性能提升主要是通过哪几个方面体现的?
    封装 Vue 组件库
    rollup-plugin-postcss ( PostCSS plugin postcss-noop-plugin requires PostCSS 8. Migration guide for end-users:)
    LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
    vue serve 命令不管用
    典型80后的5年工作总结
    Elasticsearch强大的聚合功能Facet
    Mongodb使用总结
  • 原文地址:https://www.cnblogs.com/ooooo/p/2255926.html
Copyright © 2011-2022 走看看