<?php
session_start();
//require_once('SimpleServer.class.php');
header('Content-type: application/json');
/***
* REQUEST FORMAT
* JSON encoded string supplied as the POST parameter 'data'
* action getData, putData or listData
* objectname (getData & putData) name of a file in the designated directory
* objectdata (putdata)the data to be stored in that file
*
* REPLY FORMAT
* JSON encoded string containing the following properties
* errnum numeric code (Server else SQL92)
* error textual desxription of error
* severity errorlevel
* objectdata as retrieved from file
***/
if(!isset($_REQUEST['data']) )
{
echo '{
"errorMessage":"SSRV: No request received",
"errorNum":"SSRV:1",
"severity":2
}';
die();
}
$server = new SimpleServer();
echo json_encode($server->evaluate($_REQUEST['data']), JSON_PRETTY_PRINT);
/***
* Class simpleserver.php - serves JSON files
*
* the file must start <?php /* and end appropriately too, must already
* exist and must be valid JSON. The call may be POST or GET.
*
* @param string fn the name of the file to get
* @returns object PHP type
***/
class SimpleServer {
private $fn;
private $json;
private $FPATH = "/home/chris/json/";
private $response;
function __construct() {
$this->response = new stdClass();
$this->response->errorMessage ='OK';
$this->response->errorNo = 0;
$this->response->severity = 0;
$this->response->resultData = new stdClass();
}
function evaluate($data) {
$data = $this->testjson($data);
if(!isset($data->action)) { $this->send('{"errorMessage":"SSRV:Invalid action type","errorNo":25,"severity":2}'); }
switch($data->action)
{
case 'getData':
if(!isset($data->objectName) && !isset($data->queryName))
{
$this->send('{"errorMessage":"SSRV:Invalid name","errorNo":26,"severity":2}');
}
if(!isset($data->objectName))
{
$data->objectName = $data->queryName;
}
$this->response->resultData = $this->get($data->objectName);
break;
case 'putData':
$this->response->resultData = $this->put($data->objectData, $data->objectName);
break;
case 'list':
$this->response->resultData = $this->getList();
break;
default:
$this->response->errorMessage = "SSRV:Invalid action type: {$data->action}";
$this->response->errorNo = 24;
$this->response->severity = 2;
}
return $this->response;
}
function get($fn) {
$fn = $this->FPATH . $fn;
//does the file even exist?
if (!file_exists($fn))
{
$this->response->errorMessage = "SSRV:File does not exist ".$fn;
$this->response->errorNo = 20;
$this->response->severity = 2;
return (object) [];
}
$json = file_get_contents($fn);
$_SESSION['simpleserver'] = [];
$_SESSION['simpleserver']['lastfile'] = $fn;
$result = new stdClass();
return $this->testJSON($json);
}
function put($json, $fn) {
$fn = $this->FPATH . $fn;
if(!isset($_SESSION['simpleserver']) || !isset($_SESSION['simpleserver']['lastfile'])) {
$this->response->errorMessage = "SSRV:Invalid invocation - get file first";
$this->response->errorNo = 21;
$this->response->severity = 2;
return (object) [];
}
if ($fn != $_SESSION['simpleserver']['lastfile']) {
$this->response->errorMessage = "SSRV:Invalid invocation - wrong file name";
$this->response->errorNo = 22;
$this->response->severity = 2;
return (object) [];
}
try
{
file_put_contents($fn, json_encode($json, JSON_PRETTY_PRINT));
$this->response->errorMessage = 'Your data has been saved';
return (object)[];
}
catch (Exception $e)
{
$this->response->errorMessage ="SSRV:Error saving file:".$e;
$this->response->errorNo = 23;
$this->response->severity = 2;
return (object) [];
}
}
function getList() {
$searchpath = $this->FPATH. '*';
$files = glob($searchpath);
$resultData = [];
$crop = strlen($this->FPATH);
foreach($files as $file) {
$name = substr($file, $crop);
$resultData[] = (object) ["queryName"=>$name];
}
return $resultData;
}
/***
* testjson - receive a JSON string - convert to PHP object
*
* @note set repsonse error codes if there is an error - check
* $this->response->severity if error status needs to be known
* @para string JSON
* @return object PHP version of JSON string or empty object on error
*
***/
function testJSON($json,$candie=false) {
$temp = json_decode($json);
if ($this->response->errorNo == JSON_ERROR_NONE)
{
return $temp;
}
else
{
$this->response->errorMessage = "JSON: " . json_last_error_msg();
$this->response->errorNo = json_last_error();
$this->response->severity = 2;
return (object) [];
}
}
}
|