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个参数,第一个参数一定是函数名,第二个参数是请求数组
(1).创建数据库test ,创建表shop(字段id,total),商品id是1,商品总数10 (2).PHP模拟购买,商品数量大于0才能购买<?php //连接数据库 $con=mysqli_connect("192.168.2.18...
开启错误提示代码:ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);关闭错误提示代码:error_reporting(E_ALL ^&n...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) { pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...
<?php //如果支持exec函数,可以使用的方式 exec('chcp 65001'); //如果exec函数因安全问题禁用,可以使用的方式 pclose(popen('chcp 65001', 'r'));...
有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...