Created
August 23, 2016 16:40
-
-
Save JarvusChen/40c5e2a8c1d0a3dc047e693c4d0601ac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Firebase PHP Client Library | |
* | |
* @author Tamas Kalman <ktamas77@gmail.com> | |
* @link https://www.firebase.com/docs/rest-api.html | |
* | |
*/ | |
/** | |
* Firebase PHP Class | |
* | |
* @author Tamas Kalman <ktamas77@gmail.com> | |
* @link https://www.firebase.com/docs/rest-api.html | |
* | |
*/ | |
class Firebase | |
{ | |
private $_baseURI; | |
private $_timeout; | |
private $_token; | |
/** | |
* Constructor | |
* | |
* @param String $baseURI Base URI | |
* | |
* @return void | |
*/ | |
function __construct($baseURI = '', $token = '') | |
{ | |
if (!extension_loaded('curl')) { | |
trigger_error('Extension CURL is not loaded.', E_USER_ERROR); | |
} | |
$this->setBaseURI($baseURI); | |
$this->setTimeOut(10); | |
$this->setToken($token); | |
} | |
/** | |
* Sets Token | |
* | |
* @param String $token Token | |
* | |
* @return void | |
*/ | |
public function setToken($token) | |
{ | |
$this->_token = $token; | |
} | |
/** | |
* Sets Base URI, ex: http://yourcompany.firebase.com/youruser | |
* | |
* @param String $baseURI Base URI | |
* | |
* @return void | |
*/ | |
public function setBaseURI($baseURI) | |
{ | |
$baseURI .= (substr($baseURI, -1) == '/' ? '' : '/'); | |
$this->_baseURI = $baseURI; | |
} | |
/** | |
* Returns with the normalized JSON absolute path | |
* | |
* @param String $path to data | |
*/ | |
private function _getJsonPath($path) | |
{ | |
$url = $this->_baseURI; | |
$path = ltrim($path, '/'); | |
$auth = ($this->_token == '') ? '' : '?auth=' . $this->_token; | |
return $url . $path . '.json' . $auth; | |
} | |
/** | |
* Sets REST call timeout in seconds | |
* | |
* @param Integer $seconds Seconds to timeout | |
* | |
* @return void | |
*/ | |
public function setTimeOut($seconds) | |
{ | |
$this->_timeout = $seconds; | |
} | |
/** | |
* Writing data into Firebase with a PUT request | |
* HTTP 200: Ok | |
* | |
* @param String $path Path | |
* @param Mixed $data Data | |
* | |
* @return Array Response | |
*/ | |
public function set($path, $data) | |
{ | |
return $this->_writeData($path, $data, 'PUT'); | |
} | |
/** | |
* Pushing data into Firebase with a POST request | |
* HTTP 200: Ok | |
* | |
* @param String $path Path | |
* @param Mixed $data Data | |
* | |
* @return Array Response | |
*/ | |
public function push($path, $data) | |
{ | |
return $this->_writeData($path, $data, 'POST'); | |
} | |
/** | |
* Updating data into Firebase with a PATH request | |
* HTTP 200: Ok | |
* | |
* @param String $path Path | |
* @param Mixed $data Data | |
* | |
* @return Array Response | |
*/ | |
public function update($path, $data) | |
{ | |
return $this->_writeData($path, $data, 'PATCH'); | |
} | |
/** | |
* Reading data from Firebase | |
* HTTP 200: Ok | |
* | |
* @param String $path Path | |
* | |
* @return Array Response | |
*/ | |
public function get($path) | |
{ | |
try { | |
$ch = $this->_getCurlHandler($path, 'GET'); | |
$return = curl_exec($ch); | |
curl_close($ch); | |
} catch (Exception $e) { | |
$return = null; | |
} | |
return $return; | |
} | |
/** | |
* Deletes data from Firebase | |
* HTTP 204: Ok | |
* | |
* @param type $path Path | |
* | |
* @return Array Response | |
*/ | |
public function delete($path) | |
{ | |
try { | |
$ch = $this->_getCurlHandler($path, 'DELETE'); | |
$return = curl_exec($ch); | |
curl_close($ch); | |
} catch (Exception $e) { | |
$return = null; | |
} | |
return $return; | |
} | |
/** | |
* Returns with Initialized CURL Handler | |
* | |
* @param String $mode Mode | |
* | |
* @return CURL Curl Handler | |
*/ | |
private function _getCurlHandler($path, $mode) | |
{ | |
$url = $this->_getJsonPath($path); | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout); | |
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_timeout); | |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $mode); | |
return $ch; | |
} | |
private function _writeData($path, $data, $method = 'PUT') | |
{ | |
$jsonData = json_encode($data); | |
$header = array( | |
'Content-Type: application/json', | |
'Content-Length: ' . strlen($jsonData) | |
); | |
try { | |
$ch = $this->_getCurlHandler($path, $method); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); | |
$return = curl_exec($ch); | |
curl_close($ch); | |
} catch (Exception $e) { | |
$return = null; | |
} | |
return $return; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment