晚上好。
首先,我为这个问题的长度道歉。我想彻底确保所有信息都与我的意图一致。
我目前正在寻求开发一种基于网络的简单方法,从我的桌面应用程序之一收集统计数据。其主要目的是通过更新最终用户进行故障排除并提供更多相关修复和功能添加。
详情
$_GET
从URL中获取参数并将它们分配给变量。json_encode
并写入文件(称为“statsfile”或“stats file”)。问题
我面临的问题与在我的JSON统计文件中找到特定的GUID有关。
这就是我想要做的事情;
最后,我留下了一个有效的JSON统计文件。
这个脚本也很重要布局和代码
我的JSON布局如下:
[
{
"guid": "spritchard",
"api": "apichoice",
"build": "2200",
"temp1": "1",
"temp2": "2",
"temp3": "3"
},
{
"guid": "helloworld",
"api": "someapi",
"build": "3500",
"temp1": "4",
"temp2": "5",
"temp3": "6"
}
]
我正在使用的PHP代码如下;
<?php
$apikey=$_GET["apikey"];
if ($apikey=="apikey8634215")
{
$gpuapi=$_GET["api"];
$buildno=$_GET["build"];
$temp1=$_GET["temp1"];
$temp2=$_GET["temp2"];
$temp3=$_GET["temp3"];
$guid=$_GET["guid"];
$statsfile = "./api/application/StatsFile.json"; // Assign the stats file
$fh = fopen($statsfile, 'a') // 'a' for append, 'w' for write
or die("Stats File Unavailable");
$sdata = array('guid' => $guid, 'api' => $gpuapi, 'build' => $buildno, 'temp1' => $temp1, 'temp2' => $temp2, 'temp3' => $temp3);
fwrite($fh, json_encode($sdata));
fclose($fh);
echo json_encode($sdata);
// reopen stats file to encode data as it should be
// $cdata = fopen($statsfile, 'r') or die("Stats File Unavailable");
// $encodedata = fread($cdata, filesize($statsfile));
// $decodedata = json_decode($encodedata);
// fclose($cdata);
// $fh = fopen($statsfile, 'w') or die("Stats File Unavailable");
// fwrite($fh, json_encode($encodedata));
// fclose($fh);
}
else
{
die("No Such Usage");
}
?>
您可以看到我已经$apikey
用于检查是否存在特定参数。如果不是,则整个脚本继续死亡。在我开发系统时,这仅仅是一个占位符设计,以防止基本级别的滥用,我将在另一个问题中研究更合适的解决方案。
注释掉的区域是我试图用新数据重写文件并使其成为有效JSON的代码。我不知道如何在数组中找到正确的GUID,但我也在努力弄清楚我是如何重写数据的,所以它被正确编码为JSON。通过取消注释该代码的最终结果是JSON中的大量斜杠,并且JSON本身无效。而且,我不相信我在这里展示的代码是安全的。无论如何,我可以使用POST
方法,但目前,找出如何根据它的GUID更新特定索引是问题。
因此,为了澄清我的问题,我将如何从JSON statsfile中查找特定的GUID,更新数据(如果存在),或者使用提交的数据添加新的数组索引? < / p>
答案 0 :(得分:1)
$apikey=$_GET["apikey"];
if ($apikey=="apikey8634215") {
$newObject = new stdClass();
$newObject->guid = $_GET["guid"];
$newObject->api = $_GET["api"];
$newObject->build = $_GET["build"];
$newObject->temp1 = $_GET["temp1"];
$newObject->temp2 = $_GET["temp2"];
$newObject->temp3 = $_GET["temp3"];
$statsFile = "./api/application/StatsFile.json";
$stats = file_exists($statsFile)
? json_decode(file_get_contents($statsFile))
: array()
;
$found = false;
foreach ($stats as $key => $statItem) {
if ($statItem->guid == $newObject->guid) {
$stats[$key] = $newObject;
$found = true;
break;
}
}
if (!found) {
$stats[] = $newObject;
}
if (file_put_contents($statsFile, json_encode($stats)) === false) {
die("Could not save stats");
}
} else {
die("No Such Usage");
}
此代码缺少get参数存在检查,您应该以某种方式验证输入。