Table of Contents
When you're working with Javascript frameworks such as Phaser.io or CraftyJS you often need to retrieve a set of resources - such as images, videos, sounds & more - from your project asset folders and load/preload them into your code. It's easy when you already know the URL, but it can be tricky if you need to rely to your assets folder tree only, because... well, because Javascript simply isn't allowed do that: as a matter of fact, for security reasons, it cannot issue IO calls at all. The only thing it could do would be to load a structured index of sort - possibly built using a standard, readable format - which can be used to "browse" in order to retrieve the needed contents.
That's when dir2json comes to help.
What does it do
It's basically a PHP CLI script that can be used to ouput the contents of a whole directory tree into a JSON-formatted file.
To properly understand it, let's do a quick example. Suppose we have a directory tree structure like this:
1 2 3 4 5 6 7 8 9 10 11 |
/images/ /gif/ man.gif woman.gif /jpg/ photo1.jpg photo2.jpg /png/ avatar.png howto.txt readme.md |
This would be the file generated by dir2json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "gif": [ "man.gif", "woman.gif" ], "jpg": [ "photo1.jpg", "photo2.jpg" ], "png": [ "avatar.png" ], "0": "howto.txt", "1": "readme.md" } |
As we already said, it can be very useful when working with Javascript frameworks and/or similar scenarios where you need to load/browse/show a directory structure without being allowed to access the system IO.
Conversion rules
The json conversion is handled by the native php json_encode function (available in PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7). For further info on PHP's json_encode function, read here: http://php.net/manual/en/function.json-encode.php
The generated JSON object will adopt the following conventions:
- If a folder contains only files (without subfolders), they will be listed as items of a single array.
- If a folder contains one or more subfolders, each one will be listed as a key/value array.
- If a folder contains files and subfolders, both will be listed as a key/value array: each file will have an auto-generated numeric key starting from 0 (numbers already used by a subfolder's name will be skipped).
Usage
The code it's meant to be used as a dedicated CLI script, but you can also execute it from a standard, web-hosted PHP page by populating the $argv[] array directly from code. If you need further help to implement it into a PHP page, contact me and I'll update the docs accordingly.
From CLI
1 |
php dir2json <targetFolder> <outputFile> [JSON_OPTIONS] |
JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,
JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION,
JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR
The behaviour of these constants is described on the JSON constants page in the official PHP docs:
http://php.net/manual/en/json.constants.php
Example
This example uses JSON_PRETTY_PRINT, a constant that will tell json_encode to output the JSON result in a readable way using spaces, linefeeds and indents.
1 |
php dir2json ./images out.json JSON_PRETTY_PRINT |
For more info, please read the dir2json's project page on this website.
Download links
That's it for now: hope you'll like it!
“If you need further help to implement it into a PHP page, contact me and I’ll update the docs accordingly”…
Hi Ryan, can you give more info about using this in a php web page ?