JSON:
//控制器的方法 验证接收请求,返回json字符串
/**
* @return string
*/
public function ttt_json(){
$result = array("method" => null);
if($_SERVER['REQUEST_METHOD'] == 'GET' ? true : false){
$result = array("method" => "GET","data" => $_GET['data']);
}
if($_SERVER['REQUEST_METHOD'] == 'POST' ? true : false){
$result = array("method" => "POST","data" => $_POST['data']);
}
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
// ajax 请求的处理方式
$result = array("method" => "AJAX");
}
return json_encode($result);
}
//主动发送get请求,并返回json
function getJson($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
//json_decode($output, true);
return $output;
}
//主动发送post请求,并返回json
function postJson($url,$array=[]){
$curl = curl_init();
//设置提交的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//设置post数据
$post_data = $array;
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//获得数据并返回
//json_decode($data, true);
return $data;
}
//请求控制器的方法
var_dump(getJson("http://www.***.com/index.php/test/temp/ttt_json?data=nihao"));
var_dump(postJson("http://www.***.com/index.php/test/temp/ttt_json",["data"=>"nihao"]));
XML:
//控制器的方法 验证接收请求,返回json字符串
//接收xml的数据
function input_xml_json(){
//接收传送的数据
$xmldata = file_get_contents("php://input");
// $this->log("xml.txt",$xmldata);
//转换为simplexml对象
$xmlResult = simplexml_load_string($xmldata);
//XML转成JSON格式
// $json = json_encode($xmlResult);
return json_encode($xmlResult);
}
function log($file,$txt){
$fp = fopen($file,'ab+');
fwrite($fp,'-----------'.date('Y-m-d H:i:s').'-----------------'."\n");
fwrite($fp,$txt);
fwrite($fp,"\r\n\r\n\r\n");
fclose($fp);
}
//主动发送xml并返回json
function getxml($url,$xml){
$post_url = $url;//目的url
$post_str = $xml;
$timeout = 10;//连接/响应超时设置,单位秒s
$ch = curl_init();//初始化curl
$header[] = "Content-type: text/xml";//设置http报文头text/xml
curl_setopt($ch, CURLOPT_URL, $post_url);//设置目的URL
curl_setopt($ch, CURLOPT_POST, 1);//1:post方式 0:get方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);//设置将要发送的数据
curl_setopt($ch, CURLOPT_HEADER, 0);//1:显示 0:不显示
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);//响应超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);//连接超时
$data = curl_exec($ch);//执行发送
curl_close($ch);
//json_decode($data, true);
return $data;
}
$xml="
1
Google Maps
1.0
2
Chrome
2.1
3
Google Play
2.3
";
var_dump(getxml("http://www.xxx.com/index.php/test/temp/input_xml_json",trim($xml)));
yaml: 两种方式
1、使用pecl的yaml扩展,https://pecl.php.net/package/yaml ,需要编译安装,稍显麻烦,但是性能比第二种好一些。
2、使用composer包symfony/yaml,安装只需要 composer require symfony/yaml ,都是php写的,直接安装即可。
选择最新扩展,下载正在使用php版本,将php_yaml.dll 扩展放到php的ext下
重启,-》php -m
php-yaml的使用:
function get_yaml_json2(){
try {
/**1: yaml内容*/
// $str_yaml = 'database:
// host: 127.0.0.1
// user: root
// dbname: test
// pwd: 123456';
// $data = yaml_parse($str_yaml); //将YAML解析为PHP值。
/**2: php内容数组*/
// $arr = [
// 'database' => [
// 'host' => '127.0.0.1',
// 'user' => 'root',
// 'dbname' => 'test',
// 'pwd' => '123456',
// ],
// ];
// $yaml = yaml_emit($arr); //将PHP值转储到YAML字符串。
// // file_put_contents('./db.yaml', $yaml); //写进文件
// $data = yaml_parse($yaml); //将YAML解析为PHP值。
/**3: yaml内容文件*/
$data = yaml_parse_file('./db.yaml');
} catch (ParseException $e) {
echo $e->getMessage(); //
}
return json_encode($data, true);
}
var_dump(get_yaml_json2());
composer require symfony/yaml
命令下后会有vendor文件
require_once __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;
function get_yaml_json(){
try {
/**1: yaml内容*/
$str_yaml = 'database:
host: 127.0.0.1
user: root
dbname: test
pwd: 123456';
$data = Yaml::parse($str_yaml); //将YAML解析为PHP值。
/**2: php内容数组*/
// $arr = [
// 'database' => [
// 'host' => '127.0.0.1',
// 'user' => 'root',
// 'dbname' => 'test',
// 'pwd' => '123456',
// ],
// ];
// $yaml = Yaml::dump($arr); //将PHP值转储到YAML字符串。
// // file_put_contents('./db.yaml', $yaml); //写进文件
// $data = Yaml::parse($yaml); //将YAML解析为PHP值。
/**3: yaml内容文件*/
// $data = Yaml::parseFile('./db.yaml');
} catch (ParseException $e) {
echo $e->getMessage(); //
}
return json_encode($data, true);
}
var_dump(get_yaml_json());
二进制传输数据
//json字符串
$str = '{"code": 1,"msg": "ok","time": "1637998234","data": {"is_tc": 1,"advertisement": [{"id": 5,"content": "书(拼音:shū),是汉语通用规范一级字 [1] 。最早见于甲骨文 [2] 。本义作动词,是书写、记述的意思;后引申为名词,指简册、典籍、文书、信函等。","type": "1","status": "1","start_time": 1637745813,"end_time": 1638000208,"weigh": 2}]}}';
/**
* 将字符串转换成二进制
* @param type $str
* @return type
*/
function StrToBin($str){
//1.列出每个字符
$arr = preg_split('/(?, $str);
//2.unpack字符
foreach($arr as &$v){
$temp = unpack('H*', $v);
$v = base_convert($temp[1], 16, 2);
unset($temp);
}
return join(' ',$arr);
}
$binary = StrToBin($str); //二进制
/**
* 二进制转换成字符串
* @param type $str
* @return type
*/
function BinToStr($str){
$arr = explode(' ', $str);
foreach($arr as &$v){
$v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
}
return join('', $arr);
}
var_dump(json_decode(BinToStr($binary),true));