一、前言
在公司的项目中,主要是用php作为服务端语言开发,但是对于区块链这个技术,提供的SDK一般都是node的,包括一些底层验证是通过go编写的,那么我们php该如何调用这些程序呢
二、使用file_get_contents
或者curl
1、使用file_get_contents
范例
比如我们都知道node程序默认的端口号是3000,然后定义好路由之后,我们可以通过:ip:3000/路由
来访问node程序:
private function uplinkPost($url, $post_data) {
//这里的$post_data是传递给node程序的参数,先转化为标准的url传参格式
//$url为访问node程序的地址
$postdata = http_build_query($post_data);
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/x-www-form-urlencoded',
'content' => $postdata,
'timeout' => 60 * 10 // 超时时间(单位:s)
)
);
//通过php提供的stream_context_create()函数来访问程序
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
//返回的结果是node程序处理之后的结果
return $result;
}
具体的参考注释,建议大家百度下stream_context_create()
函数
2、使用curl监听go程序
function curlRequest($url,$method='get',$data=''){
extension_loaded('curl') or die('The curl extension is not loaded.');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);//去除header中的信息
// 设置curl 参数,要求结果保存到变量中还是输出到屏幕上,false直接输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);//是否抓取跳转后的页面
if($method == 'post'){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
$return_data = curl_exec($curl);
//$Headers = curl_getinfo($curl);//头信息
if (curl_errno($curl)) {
//log_message('error', 'curl错误:'.curl_error($curl));
curl_close($curl);
exit();
}
curl_close($curl);
return $return_data;
}
这里也是使用curl访问go程序的访问路径即可。如果是想监听某个端口的程序,也可以通过ip+port
的方式来实现
end