Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将请求获取到json数据文件中_Php_Json - Fatal编程技术网

Php 如何将请求获取到json数据文件中

Php 如何将请求获取到json数据文件中,php,json,Php,Json,我想使用html GET请求加载json文件中的数据: http://www.example.com/xxx/?id={device}&time={time}&snr={snr}&station={station}&lat={lat}&lng={lng}&rssi={rssi}&data={data}&avgSnr={avgSnr} 服务器端是my index.html文件: 演示模型 您正在手动编译JSON,这只是自找麻烦。

我想使用html GET请求加载json文件中的数据:

http://www.example.com/xxx/?id={device}&time={time}&snr={snr}&station={station}&lat={lat}&lng={lng}&rssi={rssi}&data={data}&avgSnr={avgSnr}
服务器端是my index.html文件:


演示模型

您正在手动编译JSON,这只是自找麻烦。使用
json\u encode
它将为您带来很多好处:

<?php
$data = [
  'data' => [
    'id' => $_GET['id'],
    'data' => $_GET['data'],
    'from' => $_GET['station'],
    'lat' => $_GET['lat'],
    'lng' => $_GET['lng']
  ]
];

     if ( $fl = fopen('data.json','a')) {
       fwrite($fl, json_encode($data));
       fclose($fl);
     } else {
       echo 'Cannot open file';
     }
?>

来自@Farkie的初始代码。您可能还希望清理并验证是否设置了所有的_GET索引,如果没有,也会为它们抛出一个默认值

<?php
$data = array(
    'id'     => $_GET['id'],
    'time'   => $_GET['time'],
    'snr'    => $_GET['snr'],
    'from'   => $_GET['station'],
    'lat'    => $_GET['lat'],
    'lng'    => $_GET['lng'],
    'rssi'   => $_GET['rssi'],
    'data'   => $_GET['data'],
    'avgSnr' => $_GET['avgSnr'],
);

if( $fl = fopen( 'data.json', 'a+' ) ){
    $stats = fstat( $fl );
    if( $stats['size'] ){
        $contents = fread( $fl, $stats['size'] );
        $collection = @json_decode( $contents, true );
        $collection = isset( $collection['data'] ) && is_array( $collection['data'] )
            ? $collection
            : array( 'data' => array() );
    } else {
        $collection = array( 'data' => array() );
    }
    $collection['data'][] = $data;
    ftruncate( $fl, 0 );
    fwrite( $fl, json_encode( $collection ) );
    fclose( $fl );
} else {
    echo 'Cannot open file';
}

更改了代码并使用URL{device}&data={data}&station={station}&lat={lat}&lng={lng}进行了测试,但在json数据文件中没有发布任何信息来编辑答案。写入该文件的权限可能有问题。请检查当前目录的权限。另外请注意,如果您想将此文件用作数据的集合,它将不起作用。你基本上会有这样的重复:{“数据”:{“id”:“{device}”,“data”:“{data}”,“from”:“{station}”,“lat”:“{lat}”,“lng”:“{lng}”}{“data”:{“id”:“{device}”,“data”:“{data}”,“from”:“{station}”,“lat lat”:“{lat lat lat}”,“lng”:“{lng}}}从技术上讲,你可以在新线上分开,但还是有点尴尬