好的,我会再试一次,多次询问,但似乎并没有让自己清楚。
首先,我在网页上运行了一个 AJAX 脚本,允许我从游戏中提取数据。
然后使用 POST 方法将此数据发送到 PHP 'api' 页面。
我可以在浏览器的控制台中看到数据实际上正在运行。
这是数据流示例:https ://docs.google.com/document/d/1FLHiWBSBqqm7N8LvzISmiedQKxsqYM572iAT4CQpjP8/edit?usp=sharing
现在这是我的问题:
我可以看到数据正在被解析为 PHP。PHP代码如下:
<?php
// 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');
$m = false;
if(preg_match('/http\:\/\/prodgame([0-9]+)\.lordofultima\.com/',$_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 server2. Your are connected!'; break;
case 'member' : /* Code for member request */ break;
case 'city' : /* Code for member request */ break;
case 'support' : /* Code for support request */ break;
default : $json['message'] = 'Nothing Done.'; break;
}
// Respond
die(json_encode($json));
}
die('No Access.');
?>
数据是从我在玩这个在线游戏时在本地运行的 .js 文件中解析出来的。创建者发布了 PHP 示例,显然是希望使用它的人将所需的代码添加到 switch/case 语句中以操作数据。
现在,我尝试使用带有各种选项($_POST 或 $POST('data' 或 PHP 中定义的变量)的 json_decode 来提取数据,只是为了验证数据。没有任何效果。
var_dump 对我不起作用,因为客户端 js 确实使我无法根据提供的内容修改服务器端 PHP 上的代码 - 客户端在我触发发送到服务器功能之前会查找响应。
我可能做错了什么。正如您从 google 链接数据中的 HTML POST 输出中看到的那样,正在传输数据。如何访问和操作这些数据?我的最终目标是在数据进入 SQL 数据库时对其进行解析,但我需要确保首先处理它。
我的环境 - 现在在开发中我正在使用本地机器,在 Linux 操作系统上运行的 Apache 上的 PHP。我也加载了 mySql,但现在没有播放。所有最新版本,昨天刚刚安装了开发环境。
更多信息 - 我尝试在 case 语句以及文档前面的代码中插入此代码,使用此或 var_export 获得的最佳输出是 0 字节文件或仅显示 NULL 的文件:
$data1 = json_decode($_POST, $assoc = null);
$f = fopen("/var/www/aix/data/alliance6.txt", "w");
fwrite($f, $data1);
fclose($f);
另一点信息 - 从我可以看出 javascript 中的发送到服务器函数的调用如下:
// send to server
req = main.ajax.send({
alliance : {
id : a.id,
name : a.name,
members : a.members,
score : a.total_score
},
data_type:type,
data:json
});
if(req){
req.success(function(x){
main.aix.set_loading(tab.index,"Data sent to server!",1000);
main.aix.get_saved(id,type).sent = true;
});
}
});
}
else
{ main.aix.set_loading(tab.index,"This data has already been sent.",2000); }
}
if(typeof callback == "function")
{ callback(json); }
}
},
所以对上面的更新:下面 Wayne 提供的 echo 命令确实给了我 $data 变量的数据结构。现在是一个后续问题:如何将我获取的所有数据(发送方、数据阵列等)转换为 SQL 表?如果定期更新/刷新我创建的表,我将如何对数据库中的数据进行重复数据删除?