欢迎来到虎佩网_虎佩_hupei_hupeinet_hupei.net!
当前位置:首页 > PHP Web开发 > php技巧 > uc_client调用代码隔离方案 内容

uc_client调用代码隔离方案

选择字号: 超大 标准 发布时间:2015-08-27 15:12 | 作者:hupei

前些时间用ucenter来做一个用户登录系统,项目本身使用的是ThinkPHP框架,由于早期的PHP没有命名空间的原因,于是Ucenter与ThinkPHP的代码产生了冲突,具体是什么冲突我没有去细究,相信也没有这个必要,反正我是证明了二者的代码存在冲突就好了。

而我又不得不同时使用Ucenter和ThinkPHP,因此我需要一个解决方案,于是很自然地想到了,把对Ucenter的调用做成HTTP Service的形式,让ThinkPHP与Ucenter通过HTTP协议来进行通信,这就把二者的运行环境隔离开来了。

由于比较简单,下面直接上代码,不明白的可以回复评论提问。

复制代码
<?php // UClient 中间件通讯类 class UClientApi{ private function __call( $method, $args ){ // 使用 curl 扩展进行 HTTP 通信
        // ThinkPHP 项目配置文件需作以下配置:
        // UCLIENT_URL        UClient HTTP 服务的 URL
        // UCLIENT_KEY        UClient HTTP 服务的密钥  $data = 'UCLIENT_KEY='.urlencode(C('UCLIENT_KEY')).'&method='.urlencode($method).'&args='.urlencode(base64_encode(serialize($args))); $uclient_handle = curl_init( C('UCLIENT_URL') ); $opts = array( 
        CURLOPT_HEADER            =>false,
        CURLOPT_RETURNTRANSFER    =>true,
        CURLOPT_POST            =>true,
        CURLOPT_POSTFIELDS        =>$data );
         
        curl_setopt_array( $uclient_handle, $opts ); $result = curl_exec( $uclient_handle ); return unserialize(base64_decode($result));
        
    }
}
复制代码

感叹一下PHP有多高效。

复制代码
<?php // Web Service 接口文件 ob_start(); include './config.inc.php'; include './uc_client/client.php'; // 检查密钥,认证访问身份 if ( empty($_POST['UCLIENT_KEY']) || $_POST['UCLIENT_KEY'] != UCLIENT_KEY) exit('Access denied.'); // 检查调用的api是否存在 $method = 'uc_'.$_POST['method']; if ( !function_exists( $method ) ) exit('Method is not exists.'); $args = unserialize(base64_decode($_POST['args'])); $exec_string = '$result='+$method.'('; for ($i = 0; $i < count($args); $i++) $exec_string += '$args['+$i+']'; $exec_string += ');'; eval($exec_string); ob_clean(); exit( base64_encode(serialize($result)) );
复制代码
网站分类
最新文章
随机文章