File
Using file driver
This library is abandoned. Please consider using a different library.
These drivers allow you to store and fetch data from filesystem. The first key from the path indicates the filename (without extension) where the data resides.
Provided drivers
Driver | Extension | Readability | Data types | Mentions |
---|---|---|---|---|
JSONFile | json | Best | JSON types (int, float, string, bool, null, stdClass object, array) | - |
PHPFile | php | Good | PHP standard types (int, float, bool, null, stdClass object, array) | can use opache |
File | conf | Bad | Any serializable data | - |
JSONFile driver
You can use this driver if you want to store JSON compatible data types.
use Opis\DataStore\Drivers\JSONFile;
$dataStore = new JSONFile("/path/to/dir");
$dataStore->read("config.memory.max");
/*
Attempts to read the value from /path/to/dir/config.json file
using ["config", "memory", "max"] as path
*/
$dataStore->write("settings.defaults.language", "en");
/*
After this write, we will have the file /path/to/dir/settings.json
containing a json like this:
{
"settings": {
"defaults": {
"language": "en"
}
}
}
*/
PHPFile driver
If your app is using the data store as a configuration manager, you can boost the speed by using this driver and enabling opcache. You’ll also keep your configuration files easy to read.
use Opis\DataStore\Drivers\PHPFile;
$dataStore = new PHPFile("/path/to/dir");
$dataStore->read("config.memory.max");
/*
Attempts to read the value from /path/to/dir/config.php file
using ["config", "memory", "max"] as path
*/
$dataStore->write("settings.defaults.language", "en");
/*
After this write, we will have the file /path/to/dir/settings.php
containing somthing like this:
<?php return array(
"settings" => array(
"defaults" => array(
"language" => "en",
),
),
);
*/
File driver
If you don’t care about readability and you need to store any (serializable) kind of data, then this driver is what you are looking for.
use Opis\DataStore\Drivers\File;
$dataStore = new File("/path/to/dir");
$dataStore->read("config.memory.max");
/*
Attempts to read the value from /path/to/dir/config.conf file
using ["config", "memory", "max"] as path
*/
$dataStore->write("settings.defaults.language", "en");
/*
After this write, we will have the file /path/to/dir/settings.conf
containing somthing like this:
a:1:{s:8:"settings";a:1:{s:8:"defaults";a:1:{s:8:"language";s:2:"en";}}}
*/
Adding a new filesystem based driver
Adding a new filesystem based driver is very easy, just extend the
Opis\DataStore\Drivers\AbstractFile
class and implement the abstract methods:
import and export.
import
Returns the decoded data.
signature
/**
* @param string $data
* @return mixed
*/
abstract protected function import(string $data);
export
Returns the encoded data.
signature
/**
* @param mixed $data
* @return string
*/
abstract protected function export($data): string;
Example of custom filesystem based driver
use Opis\DataStore\Drivers\AbstractFile;
class Base64SerializedDriver extends AbstractFile
{
/**
* @param string $dir
* @param string $prefix Optional
*/
public function __construct(string $dir, string $prefix = '')
{
// We want to use base64conf as file extension
parent::construct($dir, $prefix, 'base64conf');
}
/**
* @inheritdoc
*/
protected function import(string $data)
{
return unserialize(base64_decode($data));
}
/**
* @inheritdoc
*/
protected function export($data): string
{
return base64_encode(serialize($data));
}
}