PHP Classes


Recommend this page to a friend!
  Classes of Omar Andrés Barbosa Ortiz  >  Papyrus  >  >  Download  
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: Papyrus
Store and retrieve database data in files
Author: By
Last change: Improvements to the README file
Date: 5 years ago
Size: 6,841 bytes


Class file image Download

Papyrus: Storing data in the file system with PHP


The Papyrus package can store information in files, perform queries, updates, and deletes data . All this, based on a primary key or identifier. The information is stored in JSON format.


To install via composer (, place the following in your composer.json file:

    "require": {
        "barbosa/papyrus": "dev-master"

or download package from


Papyrus need to run an array of configurations and a path to the folder containing the files storage.

Configuration array

Create an array of configurations in a file or in the file which instances to Papyrus. The array must have two key, extension and files:


 * Example in a configurations file. 

return [

        'extension'	=>	'.project',

        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']

Other way, in the file which instances to Papyrus:


require 'vendor/autoload.php';

use \Barbosa\Papyrus\Papyrus;

$config = [

        'extension' =>  '.project',

        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']

$papyrus = new Papyrus($config);

This extension is for all files:

'extension' => '.project'

The file structure represents fields in a SQL table , what is in brackets, are the fields of each file:

'files' => [

    'fileName' => ['primaryKey(int#)', 'field', 'otherField'],
    'otherFileName' => ['primaryKey(str#)', 'field', 'otherField']

The options for primary key:

Auto increment integer (int++)
Unique integer (int#)
Unique string (str#)

Absolute storage folder path

Storage files that are configured in the array must be created in a folder chosen by the user, the folder path should be passed to Papyrus:


require 'vendor/autoload.php';

use \Barbosa\Papyrus\Papyrus;

 * Complete example. 

$config = [

        'extension' =>  '.project',

        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']

$path = realpath(__DIR__ . '/storageFolder/');

$papyrus = new Papyrus($config, $path);

You can also switch configurations through methods:


require 'vendor/autoload.php';

use \Barbosa\Papyrus\Papyrus;

 * Complete example with setters. 

$papyrus = new Papyrus();

$papyrus->setStoragePath(realpath(__DIR__ . '/storageFolder/'));

$config = [

        'extension' =>  '.project',

        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']


Creating of storage files

As example, a file will be created with registers name and the extension .data:

$ touch path/to/storageFolder/

In the console:

$ ls -l
-rwx---rw- 1 user user 494 jul  8 21:10

You can add every files that you need.

Permissions (Only in Linux)

Files in the storage folder (path/to/storageFolder/):

chmod 706 fileName.extension


chmod 706

Quick Start and Examples

For purposes of explaining with examples , it is assumed that there is a file called users with the following structure:

'files' => [
	'users' => ['dni(int#)', 'name', 'lastName']

Field dni(int#), indicates that is the primary key and a unique integer.

Require the autoload file:

require 'vendor/autoload.php';

use \Barbosa\Papyrus\Papyrus;


$values = ['dni' => 123456, 'name' => 'Tony', 'lastName' => 'Stark'];

$papyrus = new Papyrus();


The where method can only receive a value of array type, which should be the primary key or identifier.

Select all content in a file with all fields.


Select all content in a file with some fields.

$papyrus->select('dni, name')->from('users')->runQuery();

Select a record with all fields.

$papyrus->select()->from('users')->where(['dni' => 123456])->runQuery();

Select a record with some fields

$papyrus->select('dni, name')->from('users')->where(['dni' => 123456])->runQuery();

Select records without 'Where' clausule, sorted by a field with value ASC or DESC.

$papyrus->select()->from('users')->orderBy(['name' => 'ASC'])->runQuery();

$papyrus->select('dni, lastName')->from('users')->orderBy(['lastName' => 'ASC'])->runQuery();

Select records without 'Where' clausule but with limitation.


$papyrus->select()->from('users')->limit(3)->orderBy(['name' => 'DESC'])->runQuery();


Delete all records


Delete a record

$papyrus->deleteFrom('users')->where(['dni' => 123456])->runQuery();


The primary key of a record can not be modified.

Update all records

$data = ['name' => 'Tony', 'lastname' => 'Stark'];


Update a record

$data = ['name' => 'Tony', 'lastName' => 'The Iron Man'];

$papyrus->update('users')->set($data)->where(['dni' => 123456])->runQuery();

Get the data of query


Get the status of query


Available methods

Papyrus::deleteFrom($file = '');
Papyrus::update($file = '');            
Papyrus::from($file = '');
Papyrus::insertInto($file = '');
Papyrus::set(array $data = null);
Papyrus::values(array $data = null);
Papyrus::where(array $conditions = null);
Papyrus::orderBy(array $order = null);
Papyrus::limit($limit = 0);
$papyrus->loadConfigurations(array $config = null);
$papyrus->setStoragePath($path = '');


  1. Check for open issues or open a new issue to start a discussion around a bug or feature.
  2. Fork the repository on GitHub to start making your changes.
  3. Write one or more tests for the new feature or that expose the bug.
  4. Make code changes to implement the feature or fix the bug.
  5. Send a pull request to get your changes merged and published.


Omar Andrés Barbosa

For more information send a message to info at phpclasses dot org.