我正在开发一个项目,我正在推动实时gps lat从Arduino到firebase。但是Firebase不允许http请求,所以我在两者之间使用php网站从arduino-sim900a模块获取数据到php网站,firebase代码运行正常,但firebase数据库没有更新
<?php
require 'firebaseLib.php';
$deviceId = $_GET["deviceid"];
$latitude = $_GET["lat"];
$longitude= $_GET["lon"];
echo($deviceId);
echo($latitude);
echo($longitude);
const DEFAULT_URL = 'my_url';
const DEFAULT_TOKEN = 'my_token';
$DEFAULT_PATH = '/Accounts/Devices/'.$deviceId;
date_default_timezone_set('Asia/Kolkata');
$_devicestatus= array(
'latitude' => $latitude + 0.0,
'longitude' => $longitude + 0.0,
'battery' => '100'
);
$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN);
echo('p');
$firebase->set($DEFAULT_PATH, $_devicestatus);
echo('7');
$firebase->update($DEFAULT_PATH, $_devicestatus);
echo('3');
// updates data in Firebase
echo('POST SUCCESSFUL');
?>
答案 0 :(得分:0)
您的代码段表明您使用https://github.com/ktamas77/firebase-php作为库来访问Firebase实时数据库。
您没有收到错误并不意味着请求成功,您可以在source code中看到异常被捕获并且返回值设置为null
以防例外。
您还应该知道Firebase已经弃用了使用数据库机密(在您的情况下为DEFAULT_TOKEN
)的身份验证请求,并且为Google停止支持数据库机密的那一天做好准备,您应该迁移到服务基于帐户的身份验证,而不是以后。
https://github.com/kreait/firebase-php是一个提供基于服务帐户的身份验证的库,您的代码如下所示:
<?php
require __DIR__.'/vendor/autoload.php';
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
$serviceAccount = ServiceAccount::fromJsonFile('/path/to/google-service-account.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->create();
$db = $firebase->getDatabase();
$reference = $db->getReference($DEFAULT_PATH);
$reference->set($devicestatus);
print_r($reference->getValue());
免责声明:我是该图书馆的创建者:)