xmlrpc协议是通过http请求xml数据进行通信。webservice中和它相同的是soap。soap调用的确很简单,但是创建wsdl太繁琐,效率低下。xmlrpc很好的解决这个问题。
(1).创建xmlrpc服务端(求和函数api)
function getSum($method,$args,$extra) { return array_sum($args); } //创建RPC服务 $server = xmlrpc_server_create(); //注册RPC服务支持的函数 xmlrpc_server_register_method($server, 'getSum', 'getSum'); //获取客户端POST原始请求内容 //$request = $HTTP_RAW_POST_DATA; $request = file_get_contents('php://input'); //执行调用客户端的XML请求获取执行结果 $xmlrpc_response = xmlrpc_server_call_method($server, $request, null); //定义XML的Header头部 header('content-type:text/xml'); //输出XML echo $xmlrpc_response; //销毁资源句柄 xmlrpc_server_destroy($server);
(2).创建xmlrpc客户端调用
class RpcClient { /** * RPC服务地址 * @var string */ protected $url; public function __construct($url) { $this->url = $url; } protected function __query($request) { //创建请求上下文 $context = stream_context_create([ 'http' => [ 'method' => 'post', 'header' => 'content-type:text/xml', 'content' => $request ] ]); //请求RPC服务器 $response = file_get_contents($this->url, false, $context); if ($response != false) { $response = xmlrpc_decode($response); } return $response; } public function __call($name, $arguments) { $request = xmlrpc_encode_request($name, $arguments); return $this->__query($request); } } $url = 'http://learn.cn/server.php'; $client = new RpcClient($url); $result = $client->getSum(2); var_dump($result);
提示:服务端创建完成后可以直接使用xmlrpc_encode_request生成xml进行post数据即可,这里只是对客户端请求封装了一下,另外服务器端的函数一定要标注3个参数,第一个参数一定是函数名,第二个参数是请求数组
<?php //设置Cookies数组 setcookie('Datatype[a]', '1'); setcookie('Datatype[b]', '2'); set...
【一】.介绍session由于HTTP是无状态的请求,创建一个会话需要保持必须需要身份标识。当用户第一次访问,PHP会为用户创建一个唯一的sessionid,并将sessionid通过cookie发送给浏览器,并在服务器的临时文件创建一个以sessionid为名的文件用来保存这个sessionid保...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...
断点下载的原理:http请求头添加Range参数告诉文件服务器端需要的字节范围例如1个文本文件的字节为1000,第一次请求Range: bytes=0-500第二次请求Range: bytes=501-1000通过每次的请求将返回的流追加写入到文件。注意的项目:断点下载服务器端的每次只返回字节传输的...
最近在项目中处理一个关于商品数据重复需要删除多余的商品记录,但是删除一条商品必然要把关联的其他表商品的id和其他商品信息更换为正确的,删除一个商品记录,同时要去修改100多张表的关联商品数据,在项目中引用了tp orm 1.2版本,由于项目是php5.6版本,没法使用最新orm,在代码中每处理1个商...
本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask(1).安装tp5.0或者5.1composer create-project topthink/think=5.0.* tp5&n...