• 使用json传输数组实例


    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();
    //设置选项,包括URL
    curl_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

    <?php
    
    require_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');
    }
    
    ?>

     

  • 相关阅读:
    4.23Java自定义链表最终封装与完善
    4.23Java vector向量
    托管与非托管
    关于C#中的DLLImport (引)
    C#中通过DllImport使用 Win32 API(引)
    ASP.Net HttpHandler (转)
    C#WinForm获取本机网卡的型号,IP地址,子网掩码和网关
    ManagementObject
    asp.net Session详解(再转)
    C#优化字符串操作(引)
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061381.html
Copyright © 2020-2023  润新知