使用PHP操作JSON数据

时间:2013-03-29 18:34:56

标签: php ajax arrays json post

场景:玩在线游戏,有一个javascript文件,允许我使用POST / json将数据移植到服务器上的PHP。我必须将我的服务器路径输入我的客户端PC才能使用。我收到确认连接正常的确认。

PHP只识别我正在播放的网站上的来源,我可以在我的开发者控制台中看到数据传输到该网站。 POST的数据采用以下格式: 我可以看到数据进入控制台的数组:

Request URL: //xxxxxx.xxxx/aix/server_api.php Request Method:POST Status Code:200 OK Request Headersview source Accept:application/json, text/javascript, */*; q=0.01 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-GB,en-US;q=0.8,en;q=0.6 Connection:keep-alive Content-Length:65236 Content-Type:application/x-www-form-urlencoded; charset=UTF-8 Host:sd.fast-page.org Origin:http://xx.yyy.com Referer:http://xxx.yyy.com/232/index.aspx User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22 Form Dataview sourceview URL encoded alliance[id]:118 alliance[name]:DS alliance[members]:12 alliance[score]:982078 data_type:city data[0][id]:12517457 data[0][owner_id]:1538 data[0][owner]:MM1 data[0][coords]:'081:191 data[0][name]:C31 4Chief data[0][score]:11020 data[0][city_type]:castle data[0][location]:land data[1][id]:12517458 data[1][owner_id]:1538 data[1][owner]:MM1 data[1][coords]:'082:191 data[1][name]:C31 5Redrum data[1][score]:10596 data[1][city_type]:castle data[1][location]:water data[2][id]:12386381 data[2][owner_id]:1538 data[2][owner]:MM1 data[2][coords]:'077:189 data[2][name]:C31 1Home data[2][score]:10460 data[2][city_type]:castle data[2][location]:land data[3][id]:12320847 data[3][owner_id]:1538 data[3][owner]:MM1 data[3][coords]:'079:188 data[3][name]:C31 6North data[3][score]:10182 data[3][city_type]:castle data[3][location]:land data[4][id]:12386382 data[4][owner_id]:1538 data[4][owner]:MM1 data[4][coords]:'078:189 data[4][name]:C31 3Back data[4][score]:10108 data[4][city_type]:castle data[4][location]:land data[5][id]:12517453 data[5][owner_id]:1538 data[5][owner]:MM1 data[5][coords]:'077:191 data[5][name]:C31 2Second data[5][score]:9968 data[5][city_type]:castle data[5][location]:land data[6][id]:12714060 data[6][owner_id]:1538 data[6][owner]:MM1 data[6][coords]:'076:194 data[6][name]:C31 MacoHub data[6][score]:9692 data[6][city_type]:castle data[6][location]:land data[7][id]:12517460 data[7][owner_id]:1538 data[7][owner]:MM1 data[7][coords]:'084:191 data[7][name]:C31 Tango data[7][score]:9163 data[7][city_type]:castle data[7][location]:land data[8][id]:12582993 data[8][owner_id]:1538 data[8][owner]:MM1 data[8][coords]:'081:192 data[8][name]:C31 Spring data[8][score]:8864 data[8][city_type]:castle data[8][location]:land data[9][id]:12517454 data[9][owner_id]:1538 data[9][owner]:MM1 data[9][coords]:'078:191 data[9][name]:C31 Pally data[9][score]:8816 data[9][city_type]:castle data[9][location]:land data[10][id]:12779603 data[10][owner_id]:1538
[and so on and so forth.....have masked the rest but this is the format
Response Headersview source Access-Control-Allow-Headers:Content-Type Access-Control-Allow-Methods:POST, GET, OPTIONS Access-Control-Allow-Origin: //xxx.yyy Access-Control-Max-Age:1000 Cache-Control:no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform Connection:keep-alive Content-Encoding:gzip Content-Length:70 Content-Type:application/json Date:Fri, 29 Mar 2013 18:08:14 GMT Expires:Fri, 29 Mar 2013 18:08:14 GMT Pragma:no-cache Server:Apache Vary:Accept-Encoding X-Powered-By:PHP/5.5.0alpha5

现在,我在上面看到的是当我触发客户端应用程序时,PC上控制台的输出。

PHP如下:

$m = false;
if(preg_match('/http\:\/\/game url/',$_SERVER['HTTP_ORIGIN'],$m))
    { $m = $m[1]; }

if(empty($m)) { die('Invalid Origin.'); }

if(!empty($_POST['data_type']))
{
    $sender     = $_POST['sender'];
    $alliance   = $_POST['alliance'];
    $request    = $_POST['data_type'];
    $data       = $_POST['data'];

    // Response to Alliance Info Exporter
    $json       = array(
        'message'   => 'recieved.',
        'data'      => array(),
        'error'     => false
    );

    // handle data types
    switch($request)
    {
        case 'connection_test': $json['message'] = 'Welcome to our server. Your are connected!'; break;
        case 'member'   : /* Code for member request */         break;
        case 'city'     : /* Code for city request */           break;
        case 'support'  : /* Code for support request */        break;
        default         :  $json['message'] = 'Nothing Done.';  break;
    }

    // set headers for API
    header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
    header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
    header('Access-Control-Max-Age: 1000');
    header('Access-Control-Allow-Headers: Content-Type');
    header('Content-type: application/json');

    // Respond
    die(json_encode($json));
}
die('No Access.');

我这里有两三个问题

  1. 我似乎无法操纵PHP正在获取的数据
  2. 每当我尝试向case语句添加任何参数时,只是为了看看我是否能以某种方式解析数据然后api停止响应我的客户端
  3. 例如,在城市交换机上,我只是尝试将数据输出到文件,只是为了确认它已经通过,因为我的浏览器控制台给了我一个POST成功代码(http 200)

    这是我使用的代码:

    $f = fopen("city.txt", "w");
    fwrite($f, $_POST);
    fclose($f);
    

    我在PHP的主要部分尝试了它,在城市案例切换(这是我首先执行的查询类型)中尝试了它,我尝试了其他已定义的类型,如$ data等。没有写入。

    我做错了什么?

    其次我的endstate是将它发布到SQL服务器,我该怎么做?

0 个答案:

没有答案