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

What is the tangent at a sharp point on a curve?

Do I need to convey a moral for each of my blog post?

Was World War I a war of liberals against authoritarians?

PTIJ: Where did Achashverosh's years wander off to?

Why is this tree refusing to shed its dead leaves?

Would mining huge amounts of resources on the Moon change its orbit?

What is it called when someone votes for an option that's not their first choice?

Have any astronauts/cosmonauts died in space?

How can a new country break out from a developed country without war?

Symbolism of 18 Journeyers

Isn't the word "experience" wrongly used in this context?

How can an organ that provides biological immortality be unable to regenerate?

What is the reasoning behind standardization (dividing by standard deviation)?

PTIJ: Which Dr. Seuss books should one obtain?

Fair way to split coins

Writing in a Christian voice

What are the rules for concealing thieves' tools (or items in general)?

Pre-Employment Background Check With Consent For Future Checks

Why didn’t Eve recognize the little cockroach as a living organism?

Air travel with refrigerated insulin

Determine voltage drop over 10G resistors with cheap multimeter

How to find the largest number(s) in a list of elements, possibly non-unique?

Which partition to make active?

Hot air balloons as primitive bombers



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













0












$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);

*/








share







New contributor




levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$
















    0












    $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);

    */








    share







    New contributor




    levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$














      0












      0








      0





      $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);

      */








      share







      New contributor




      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $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





      share







      New contributor




      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share







      New contributor




      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share



      share






      New contributor




      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 7 mins ago









      levilevi

      1011




      1011




      New contributor




      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      levi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          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.









          draft saved

          draft discarded


















          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.









          draft saved

          draft discarded


















          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

          Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

          चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि