1


我正在尝试从 Arduino 传感器获取一些值并将它们传递给 php 网络服务器以进行一些计算,并将它们保存在 json 文件中。不幸的是,我对 json 了解不多。
我的问题是,虽然数据被正确插入到 JSON 文件中,但当我尝试从另一个函数中读取它们时,我获得了正确的键,但值为 NULL。
这是从 POST 请求中获取值并将它们保存在 JSON 文件中的函数。

<?php 
include 'handledata.php';
//take data from POST
$light=$_POST["light"];
$temp=$_POST["temp"];

$sensors = array('light'=>$light, 'temp'=>$temp);
$fp=fopen('sensors.json', 'w');
fwrite($fp, json_encode($sensors));
fclose($fp);

echo "Sensor updated: calling data handler..\n";

handleData();
?>

这段代码确实有效。输出 sensors.json 如下所示:

{"light":"300","temp":"22"}

这是 handleData() 函数的代码:

<?php
function handleData(){
    $json = file_get_contents('./sensors.json', true);
    var_dump($json);
    $sensors=json_decode($json, true);
    var_dump($sensors);
}
?>

这两个转储如下所示:

string(26) "{"light":null,"temp":null}"
array(2) { ["light"]=> NULL ["temp"]=> NULL }

到目前为止,我尝试做的是更改 json 文件(第一个函数):我没有将值作为包含数字的字符串提供,而是提供了一个 int 和一个字符串,如下所示:

$l=intval($light);
$sensors = array('light'=>$l, 'temp'=>"eight");

现在sensors.json看起来像这样:

{"light":793,"temp":"eight"}

handleData 的输出如下所示:

string(26) "{"light":0,"temp":"eight"}" 
array(2) { ["light"]=> int(0) ["temp"]=> string(5) "eight" }

我不知道可能是什么问题。使用字符串“8”它可以工作,但不能使用字符串“300”。另外,我是否遗漏了有关解析整数和数字的内容?谢谢。

4

2 回答 2

0

为什么不直接将数组传递给函数呢?

handleData($sensors);

一个函数应该是可重用的,所以期待一个参数并用它做一些事情,而不是读取函数内的文件内容。

<?php
    function handleData($sensors){

        var_dump($sensors);
        // do something
    }
?>

我已经看到你的评论,然后试试这个,如果需要,将 $_GET 更改为 $_POST。

<?php

    function handleData ($array) {
        var_dump($array);
        // do something later
    }

    if (!empty($_GET)) {


        file_put_contents("sensor.json", json_encode($_GET));

        handleData(json_decode(file_get_contents("sensor.json"), true));

    }


?>
于 2013-10-17T08:29:33.220 回答
0

在我的本地主机上测试代码后,我使用了这个 index.php:

<?php 
include 'handledata.php';
//take data from POST

if (isset($_POST['submit'])) {
    $light=$_POST["light"];
    $temp=$_POST["temp"];

    $sensors = array('light'=>$light, 'temp'=>$temp);
    $fp=fopen('sensors.json', 'w');
    fwrite($fp, json_encode($sensors));
    fclose($fp);

    echo "Sensor updated: calling data handler..\n";

    handleData();
}
?>
<form method="post" action="index.php">
    <input type="text" name="light" value="300" />
    <input type="text" name="temp" value="22" />
    <button type="submit" name="submit">Send!</button>
</form>

这给了我以下输出:

Sensor updated: calling data handler.. string(27) "{"light":"300","temp":"22"}" array(2) { ["light"]=> string(3) "300" ["temp"]=> string(2) "22" }

于 2013-10-17T08:33:20.567 回答