PHP Should I Use Filesystem DB to store JSON FilesPHP function to access a database and return jsonBest Practices concerning Includes and SQL Connect StringsBlog/Forum implementationIncluding a page specified in query stringCakePHP login action returning jsonPHP script to download json file and display data“Live” searching on a website using AJAX and PHP (MySQL/MariaDB database)Get file absolute path from file URL in PHPImage Database ServiceDisplaying a user profile based on a mock ORM
Why is participating in the European Parliamentary elections used as a threat?
What is the tangent at a sharp point on a curve?
What are the rules for concealing thieves' tools (or items in general)?
Gauss brackets with double vertical lines
Would mining huge amounts of resources on the Moon change its orbit?
How are passwords stolen from companies if they only store hashes?
Is VPN a layer 3 concept?
What favor did Moody owe Dumbledore?
Friend wants my recommendation but I don't want to give it to him
I got the following comment from a reputed math journal. What does it mean?
PTIJ: Why do we make a Lulav holder?
Would this string work as string?
Unable to get newly inserted Product's Id using After Plugin for Catalog Product save controller method
UK Tourist Visa- Enquiry
When should a starting writer get his own webpage?
"Marked down as someone wanting to sell shares." What does that mean?
Weird lines in Microsoft Word
Was World War I a war of liberals against authoritarians?
How to test the sharpness of a knife?
How to determine the greatest d orbital splitting?
Recursively updating the MLE as new observations stream in
Error in master's thesis, I do not know what to do
Why do I have a large white artefact on the rendered image?
How old is Nick Fury?
PHP Should I Use Filesystem DB to store JSON Files
PHP function to access a database and return jsonBest Practices concerning Includes and SQL Connect StringsBlog/Forum implementationIncluding a page specified in query stringCakePHP login action returning jsonPHP script to download json file and display data“Live” searching on a website using AJAX and PHP (MySQL/MariaDB database)Get file absolute path from file URL in PHPImage Database ServiceDisplaying a user profile based on a mock ORM
$begingroup$
My question is regarding the use of the file system as a database to simply hold JSON
files.
I have came up with this following code, not perfect at all. which I found very easy to store and extract data, using JSON
files.
My question is, will this DB be good for any large projects? will it work fast? or is the limitation to use this kind of approach is simply security related?
Is there some kind of built-in solution by PHP
for this kind of things?
Any input on this matter from people who know will be appreciated...
class JDB
public $path;
function JDB( $path = __DIR__.'/jdb/' )
$this->path = $path;
if( !file_exists($this->path) ) mkdir($this->path);
function p($t)
return $this->path.$t.'.json';
function get($t)
return json_decode(file_get_contents( $this->p($t) ));
function set($t,$c)
return file_put_contents( $this->p($t), json_encode($c,JSON_PRETTY_PRINT) );
function create( $t, $d = [] )
$s = file_put_contents( $this->p($t), json_encode($d) );
return $s;
function destroy()
$files = glob($this->path.'*'); // get all file names present in folder
foreach($files as $file) // iterate files
if(is_file($file))
unlink($file); // delete the file
function delete( $t )
$s = unlink( $this->p($t) );
return $s;
function insert( $t, $d = null )
if($d) $d['__uid'] = $t.'_'.$this->uid();
$c = $this->get($t);
array_push($c,$d);
$s = $this->set($t,$c);
if($s) return $d['__uid'];
function update($t,$conditions,$u)
$c = $this->get($t);
$this->search($c,$conditions,function($object) use (&$c,$u)
foreach ($u as $key => $value)
$object->$key = $value;
);
$this->set($t,$c);
function remove($t,$conditions)
$c = $this->get($t);
$this->search($c,$conditions,function($object,$key) use (&$c)
unset($c[$key]);
);
$this->set($t,$c);
function search( $c, $conditions = [], $fn )
$l = count($conditions);
foreach ($c as $key => $object)
$f = 0;
foreach ($conditions as $k => $v)
if( property_exists($object,$k) && ($object->$k == $v) )
$f++;
if( $f==$l ) $fn($object,$key);
else break;
function select( $t, $conditions = [] )
$c = $this->get($t);
$r = [];
$this->search($c,$conditions,function($object) use (&$r)
array_push($r,$object);
);
if (count($r) == 0) return false;
if (count($r) == 1) return $r[0];
return $r;
function count($t)
$c = $this->get($t);
return count($c);
function uid($length = 20)
$c = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$cl = strlen($c);
$uid = '';
for ($i = 0; $i < $length; $i++)
$uid .= $c[rand(0, $cl - 1)];
return $uid;
/*
$db = new JDB();
$db->create('users');
$db->create('pages');
$user_uid = $db->insert('users',[
'name' => 'a',
'password' => 'hello world',
'pages' => []
]);
$user_uid = $db->insert('users',[
'name' => 'b',
'password' => 'hello world',
'pages' => []
]);
_log($user_uid,'1');
$page_uid = $db->insert('pages',[
'name' => 'page 1',
'content' => 'hello world',
'users' => [$user_uid]
]);
_log($page_uid);
$user = $db->select('users',['name' => 'a']);
$page = $db->select('pages',['users' => [$user_uid]]);
$db->update('users',['name' => 'b'],['pages' => [$page->__uid]]);
$db->remove('users',['name' => 'a']);
_log($user);
_log($page);
*/
php database
New contributor
$endgroup$
add a comment |
$begingroup$
My question is regarding the use of the file system as a database to simply hold JSON
files.
I have came up with this following code, not perfect at all. which I found very easy to store and extract data, using JSON
files.
My question is, will this DB be good for any large projects? will it work fast? or is the limitation to use this kind of approach is simply security related?
Is there some kind of built-in solution by PHP
for this kind of things?
Any input on this matter from people who know will be appreciated...
class JDB
public $path;
function JDB( $path = __DIR__.'/jdb/' )
$this->path = $path;
if( !file_exists($this->path) ) mkdir($this->path);
function p($t)
return $this->path.$t.'.json';
function get($t)
return json_decode(file_get_contents( $this->p($t) ));
function set($t,$c)
return file_put_contents( $this->p($t), json_encode($c,JSON_PRETTY_PRINT) );
function create( $t, $d = [] )
$s = file_put_contents( $this->p($t), json_encode($d) );
return $s;
function destroy()
$files = glob($this->path.'*'); // get all file names present in folder
foreach($files as $file) // iterate files
if(is_file($file))
unlink($file); // delete the file
function delete( $t )
$s = unlink( $this->p($t) );
return $s;
function insert( $t, $d = null )
if($d) $d['__uid'] = $t.'_'.$this->uid();
$c = $this->get($t);
array_push($c,$d);
$s = $this->set($t,$c);
if($s) return $d['__uid'];
function update($t,$conditions,$u)
$c = $this->get($t);
$this->search($c,$conditions,function($object) use (&$c,$u)
foreach ($u as $key => $value)
$object->$key = $value;
);
$this->set($t,$c);
function remove($t,$conditions)
$c = $this->get($t);
$this->search($c,$conditions,function($object,$key) use (&$c)
unset($c[$key]);
);
$this->set($t,$c);
function search( $c, $conditions = [], $fn )
$l = count($conditions);
foreach ($c as $key => $object)
$f = 0;
foreach ($conditions as $k => $v)
if( property_exists($object,$k) && ($object->$k == $v) )
$f++;
if( $f==$l ) $fn($object,$key);
else break;
function select( $t, $conditions = [] )
$c = $this->get($t);
$r = [];
$this->search($c,$conditions,function($object) use (&$r)
array_push($r,$object);
);
if (count($r) == 0) return false;
if (count($r) == 1) return $r[0];
return $r;
function count($t)
$c = $this->get($t);
return count($c);
function uid($length = 20)
$c = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$cl = strlen($c);
$uid = '';
for ($i = 0; $i < $length; $i++)
$uid .= $c[rand(0, $cl - 1)];
return $uid;
/*
$db = new JDB();
$db->create('users');
$db->create('pages');
$user_uid = $db->insert('users',[
'name' => 'a',
'password' => 'hello world',
'pages' => []
]);
$user_uid = $db->insert('users',[
'name' => 'b',
'password' => 'hello world',
'pages' => []
]);
_log($user_uid,'1');
$page_uid = $db->insert('pages',[
'name' => 'page 1',
'content' => 'hello world',
'users' => [$user_uid]
]);
_log($page_uid);
$user = $db->select('users',['name' => 'a']);
$page = $db->select('pages',['users' => [$user_uid]]);
$db->update('users',['name' => 'b'],['pages' => [$page->__uid]]);
$db->remove('users',['name' => 'a']);
_log($user);
_log($page);
*/
php database
New contributor
$endgroup$
add a comment |
$begingroup$
My question is regarding the use of the file system as a database to simply hold JSON
files.
I have came up with this following code, not perfect at all. which I found very easy to store and extract data, using JSON
files.
My question is, will this DB be good for any large projects? will it work fast? or is the limitation to use this kind of approach is simply security related?
Is there some kind of built-in solution by PHP
for this kind of things?
Any input on this matter from people who know will be appreciated...
class JDB
public $path;
function JDB( $path = __DIR__.'/jdb/' )
$this->path = $path;
if( !file_exists($this->path) ) mkdir($this->path);
function p($t)
return $this->path.$t.'.json';
function get($t)
return json_decode(file_get_contents( $this->p($t) ));
function set($t,$c)
return file_put_contents( $this->p($t), json_encode($c,JSON_PRETTY_PRINT) );
function create( $t, $d = [] )
$s = file_put_contents( $this->p($t), json_encode($d) );
return $s;
function destroy()
$files = glob($this->path.'*'); // get all file names present in folder
foreach($files as $file) // iterate files
if(is_file($file))
unlink($file); // delete the file
function delete( $t )
$s = unlink( $this->p($t) );
return $s;
function insert( $t, $d = null )
if($d) $d['__uid'] = $t.'_'.$this->uid();
$c = $this->get($t);
array_push($c,$d);
$s = $this->set($t,$c);
if($s) return $d['__uid'];
function update($t,$conditions,$u)
$c = $this->get($t);
$this->search($c,$conditions,function($object) use (&$c,$u)
foreach ($u as $key => $value)
$object->$key = $value;
);
$this->set($t,$c);
function remove($t,$conditions)
$c = $this->get($t);
$this->search($c,$conditions,function($object,$key) use (&$c)
unset($c[$key]);
);
$this->set($t,$c);
function search( $c, $conditions = [], $fn )
$l = count($conditions);
foreach ($c as $key => $object)
$f = 0;
foreach ($conditions as $k => $v)
if( property_exists($object,$k) && ($object->$k == $v) )
$f++;
if( $f==$l ) $fn($object,$key);
else break;
function select( $t, $conditions = [] )
$c = $this->get($t);
$r = [];
$this->search($c,$conditions,function($object) use (&$r)
array_push($r,$object);
);
if (count($r) == 0) return false;
if (count($r) == 1) return $r[0];
return $r;
function count($t)
$c = $this->get($t);
return count($c);
function uid($length = 20)
$c = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$cl = strlen($c);
$uid = '';
for ($i = 0; $i < $length; $i++)
$uid .= $c[rand(0, $cl - 1)];
return $uid;
/*
$db = new JDB();
$db->create('users');
$db->create('pages');
$user_uid = $db->insert('users',[
'name' => 'a',
'password' => 'hello world',
'pages' => []
]);
$user_uid = $db->insert('users',[
'name' => 'b',
'password' => 'hello world',
'pages' => []
]);
_log($user_uid,'1');
$page_uid = $db->insert('pages',[
'name' => 'page 1',
'content' => 'hello world',
'users' => [$user_uid]
]);
_log($page_uid);
$user = $db->select('users',['name' => 'a']);
$page = $db->select('pages',['users' => [$user_uid]]);
$db->update('users',['name' => 'b'],['pages' => [$page->__uid]]);
$db->remove('users',['name' => 'a']);
_log($user);
_log($page);
*/
php database
New contributor
$endgroup$
My question is regarding the use of the file system as a database to simply hold JSON
files.
I have came up with this following code, not perfect at all. which I found very easy to store and extract data, using JSON
files.
My question is, will this DB be good for any large projects? will it work fast? or is the limitation to use this kind of approach is simply security related?
Is there some kind of built-in solution by PHP
for this kind of things?
Any input on this matter from people who know will be appreciated...
class JDB
public $path;
function JDB( $path = __DIR__.'/jdb/' )
$this->path = $path;
if( !file_exists($this->path) ) mkdir($this->path);
function p($t)
return $this->path.$t.'.json';
function get($t)
return json_decode(file_get_contents( $this->p($t) ));
function set($t,$c)
return file_put_contents( $this->p($t), json_encode($c,JSON_PRETTY_PRINT) );
function create( $t, $d = [] )
$s = file_put_contents( $this->p($t), json_encode($d) );
return $s;
function destroy()
$files = glob($this->path.'*'); // get all file names present in folder
foreach($files as $file) // iterate files
if(is_file($file))
unlink($file); // delete the file
function delete( $t )
$s = unlink( $this->p($t) );
return $s;
function insert( $t, $d = null )
if($d) $d['__uid'] = $t.'_'.$this->uid();
$c = $this->get($t);
array_push($c,$d);
$s = $this->set($t,$c);
if($s) return $d['__uid'];
function update($t,$conditions,$u)
$c = $this->get($t);
$this->search($c,$conditions,function($object) use (&$c,$u)
foreach ($u as $key => $value)
$object->$key = $value;
);
$this->set($t,$c);
function remove($t,$conditions)
$c = $this->get($t);
$this->search($c,$conditions,function($object,$key) use (&$c)
unset($c[$key]);
);
$this->set($t,$c);
function search( $c, $conditions = [], $fn )
$l = count($conditions);
foreach ($c as $key => $object)
$f = 0;
foreach ($conditions as $k => $v)
if( property_exists($object,$k) && ($object->$k == $v) )
$f++;
if( $f==$l ) $fn($object,$key);
else break;
function select( $t, $conditions = [] )
$c = $this->get($t);
$r = [];
$this->search($c,$conditions,function($object) use (&$r)
array_push($r,$object);
);
if (count($r) == 0) return false;
if (count($r) == 1) return $r[0];
return $r;
function count($t)
$c = $this->get($t);
return count($c);
function uid($length = 20)
$c = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$cl = strlen($c);
$uid = '';
for ($i = 0; $i < $length; $i++)
$uid .= $c[rand(0, $cl - 1)];
return $uid;
/*
$db = new JDB();
$db->create('users');
$db->create('pages');
$user_uid = $db->insert('users',[
'name' => 'a',
'password' => 'hello world',
'pages' => []
]);
$user_uid = $db->insert('users',[
'name' => 'b',
'password' => 'hello world',
'pages' => []
]);
_log($user_uid,'1');
$page_uid = $db->insert('pages',[
'name' => 'page 1',
'content' => 'hello world',
'users' => [$user_uid]
]);
_log($page_uid);
$user = $db->select('users',['name' => 'a']);
$page = $db->select('pages',['users' => [$user_uid]]);
$db->update('users',['name' => 'b'],['pages' => [$page->__uid]]);
$db->remove('users',['name' => 'a']);
_log($user);
_log($page);
*/
php database
php database
New contributor
New contributor
New contributor
asked 11 mins ago
levilevi
1011
1011
New contributor
New contributor
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
levi is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215724%2fphp-should-i-use-filesystem-db-to-store-json-files%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
levi is a new contributor. Be nice, and check out our Code of Conduct.
levi is a new contributor. Be nice, and check out our Code of Conduct.
levi is a new contributor. Be nice, and check out our Code of Conduct.
levi is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215724%2fphp-should-i-use-filesystem-db-to-store-json-files%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown