Я бы сделал дерево каталогов действительно виртуальным , т. Е. Вместо того, чтобы создавать его в файловой системе, я бы создал его в БД.Список файлов также будет в БД (т.е. имена файлов в БД, файлы - в файловой системе).Другая таблица БД будет использоваться для связи файлов с каталогами.
create table file (
id integer primary key,
name varchar(64) not null
) engine = InnoDB;
create table directory (
id integer primary key,
parent_id integer,
name varchar(64) not null
) engine = InnoDB;
create table file_in_directory (
file_id integer not null,
directory_id integer not null,
primary key (file_id, directory_id)
) engine = InnoDB;
insert into directory (id, parent_id, name) values
(1, null, 'rootfolder'),
(2, 1, 'sub-folder1'),
(3, 1, 'sub-folder2'),
(4, 1, 'sub-folder3'),
(5, 1, 'sub-folder4'),
(6, 1, 'sub-folder5'),
(7, 2, 'sub-folder11'),
(8, 4, 'sub-folder31'),
(9, 5, 'sub-folder41'),
(10, 9, 'sub-folder42'),
(11, 10, 'sub-folder43');
insert into file (id, name) values
(1, 'contracts1.php'),
(2, 'contracts2.php'),
(3, 'contracts3.php'),
(4, 'contracts5.php');
insert into file_in_directory (file_id, directory_id) values
(1, 7), -- rootfolder/sub-folder1/sub-folder11/contracts1.php
(1, 3), -- rootfolder/sub-folder2/contracts1.php
(2, 8), -- rootfolder/sub_folder3/sub-folder31/contracts2.php
(3, 11), -- rootfolder/sub_folder4/sub-folder41/sub-folder42/sub-folder43/contracts3.php
(4, 6); -- rootfolder/sub-folder5/contracts5.php