使用json传输数组实例

来源:互联网 发布:mac最贵的软件 编辑:程序博客网 时间:2024/05/16 08:06

client.php

<?php//遍历数组元素,并将元素转码function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){    if (!is_array($data)){        $output = iconv($in_charset, $out_charset, $data);    }elseif(count($data) === count($data, 1)){//判断是否是二维数组        foreach($data as $key => $value){        $output[$key] = iconv($in_charset, $out_charset, $value);        }    }else{        eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data, TRUE)).';');    }    return $output;}$arr = array("username"=>'aaa',"pwd"=>'47bce5c74f589f4867dbd57e9ca9f808','sex'=>'男'); $arr['_e_'] = 'pwd,sex,username';   //这个参数中存的是randkey里面数组value值的排序//获得按'_e_'排序的临时数组,这是为了得到randkey$keys = explode(",",$arr['_e_']);$tempArr = array();for($i=0;$i<count($arr)-1;$i++){    $tempArr["$keys[$i]"] = $arr["$keys[$i]"];}$str='';foreach ($tempArr as $key=>$value){$str .= $value;}$randkey = md5($str.'123abc');$arr['randkey'] = $randkey;$arr = array_iconv($arr);$arr = array_map('urlencode',$arr);  //可使用http_build_query()函数替代$data = json_encode($arr);$url = "http://localhost/zchnqi/member/receive.php?json=$data";/****get方式传递数据******//初始化$ch = curl_init();//设置选项,包括URLcurl_setopt($ch, CURLOPT_URL, "$url");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);//执行并获取HTML文档内容$output = curl_exec($ch);//释放curl句柄curl_close($ch);//打印获得的数据print_r($output);*///***post方式传输数据******$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据curl_setopt($ch, CURLOPT_POST, 1);// post的变量curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $output = curl_exec($ch);curl_close($ch); //打印获得的数据print_r($output);$res=unserialize($output);var_dump($res);if ($res['stat']=='1') {    echo 'right';}else{    echo 'error';}?>

server.php

<?phprequire_once(dirname(__FILE__)."/config.php");//遍历数组元素,并将元素转码function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){    if (!is_array($data)){        $output = iconv($in_charset, $out_charset, $data);    }elseif(count($data) === count($data, 1)){//判断是否是二维数组        foreach($data as $key => $value){            $output[$key] = iconv($in_charset, $out_charset, $value);        }    }else{        eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data, TRUE)).';');    }    return $output;}if($_GET["json"]){  //数据传递为get方式    $arr = json_decode($_GET["json"],true);}else{      //数据传递为post方式  或者使用$_SERVER['REQUEST_METHOD'] == 'POST',判断提交的数据是否是POST方式传来的    $arr = file_get_contents("php://input");  //若$arr=$_POST;返回null    $arr = json_decode($arr,true);    //var_dump($arr);}$arr = array_map('urldecode',$arr); $arr = array_iconv($arr,'utf-8','gbk');$str = $arr['_e_'];//获得按'_e_'排序的临时数组,这是为了得到randkey$keys = explode(",",$str);$tempArr = array();for($i=0;$i<count($arr)-2;$i++){    $tempArr["$keys[$i]"] = $arr["$keys[$i]"];}$str='';foreach ($tempArr as $key=>$value){$str .= $value;}$randkey = md5($str.'123abc');if($randkey == $arr['randkey']){    $son = $dsql->GetOne("SELECT * FROM #@__member WHERE user='$arr[username]' ");    if($son[pwd] == $arr[pwd]){        //将数组序列化后输出,客户端反序列化后还原为数组;也可以使用json_encode()输出,客户端使用josn_decode()获得数组        echo serialize($son);      }else{        echo serialize('password error'); //这边序列化是为了防止客户端反序列化该字符串不标准而报错    }}else{    echo serialize('vertiy code error');}?>

 

0 0
原创粉丝点击