PHPackages                             infrajs/path - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. infrajs/path

ActiveLibrary[File &amp; Storage](/categories/file-storage)

infrajs/path
============

Resolve paths on the file system. Provide point of view on form of paths to files and folders..

v1.1.34(4y ago)13.4k[1 issues](https://github.com/infrajs/path/issues)20PHP

Since Dec 5Pushed 3y ago1 watchersCompare

[ Source](https://github.com/infrajs/path)[ Packagist](https://packagist.org/packages/infrajs/path)[ Docs](https://github.com/infrajs/path)[ RSS](/packages/infrajs-path/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (6)Dependencies (1)Versions (48)Used By (20)

Path - общая система файловой адресации для сервера и клиента
=============================================================

[](#path---общая-система-файловой-адресации-для-сервера-и-клиента)

Принципы и порядок работы с адресом
-----------------------------------

[](#принципы-и-порядок-работы-с-адресом)

1. Корнем проекта является папка с `vendor/` и `composer.json`
2. Адрес записывается относительно корня проекта и в данных для браузера, и в данных для сервера. Например, index.html, images/1.jpg
3. Слэш в конце означает только папку. Отстутствие слэша в конце означает только файл.
4. Используется только прямой слэш - "/"
5. Есть предопределённая **папка c данными** проекта, которая не попадает в репозиторий системы контроля версий, может содержать логин и пароль (credentials) и использоваться для хранения данных формируемых во время работы проекта. Доступна для записи php. По умолчанию адрес папки с данными `data/`. Короткое обозначение - символ **"~"**
6. Есть предопределённая **папка с кэшем**. Папка не загружается в репозиторий. Доступна для записи php. По умолчанию адрес папки с кэшем `cache/`. Короткое обозначение - символ **"!"**
7. Есть предопределённые **папки библиотек**, в которых будет осуществляться поиск файла при наличии в начале адреса символа **"-"**. По умолчанию это одна папка `vendor/infrajs/` но список папок расширяется автоматически или в ручную в каждом отдельном случае.
8. Адрес записывается в наиболее короткой форме и содержит принятые сокращения "-", "~", "!", если это возможно.

Для разработчиков
-----------------

[](#для-разработчиков)

1. Строку-адрес можно использовать как уникальный идентификатор файла.
2. Недопустимо хранение и обработка абсолютных путей и путей содержающих последовательности "../", "./", "//", ""
3. Адрес может содержать параметры после "?" в этом случае нужно отдельно выполнять `explode('?', $src, 2)` при использовании в стандартных php функциях для работы с файловой системой. Если бы в коносли было это можно данная команда не приводила бы к ошибке `cd cache/?test=1` и открылась бы папка cache
4. Функции не меняют форму адреса, используемые в нём символы или его части и если необходимо генерируют только свою часть адреса и следят только за её правильностью.
5. Функции исходят из того, что форма получаемого адреса соответствует указанным принципам и не проверяют это.
6. Анализ формы строки адреса и её изменение может быть в момент получения адреса от пользователя или от системы незнакомой с указанными принципами.
7. Работа с файловой системой на запись не должна выполняться при наличии ключа `Path::$conf['fs'] = false`. Зависимости работающие с системой учитывают этот ключ. Если зависимая библиотека не может работать без файловой системы, то, например, генерируется обычное исключение... throw new \\Exception('Я не могу работать без файловой системы');
8. Рабочей дирректорией в файлах php, где бы они не находились, является корень проекта. Рабочая директория устанавливается с помощью `chdir()`. Скрипт не полагается на своё фактическое расположение и содержит проверку своего расположения по файлу `vendor/autoload.php` для случае подключения этого скрипта, вместо прямого вызова.
9. Перед использование адреса в стандартных php-функциях работающих с файловой системой необходимо пропускать адрес через `$src=Path::theme($src)`. Функция проверяет наличие указанного файла или папки и возвращает адрес без специальных сокращений. Использовать в стандартных функция можно путь, который эта функция вернула. Path::theme выполняет роль стандартных is\_file is\_dir file\_exists. Папка или файл определяется наличием слэша в конце адреса.
10. Для удаление специальных символов "-", "~", "!" из адреса без обращения к файловой системе предназначена функция `$src=Path::resolve($src)` для спецсимвола "-" выполнить эту операцию невозможно, будет сгенерировано исключение.

Проверка и установка рабочей директории
---------------------------------------

[](#проверка-и-установка-рабочей-директории)

```
if (!is_file('vendor/autoload.php')) {
	chdir('../../../'); //Согласно фактическому расположению файла
}
//Подключаемый скрипт из корня может работать без autoload.php и правильная рабочая дирректория не гарантирует что autoload.php уже подключен
require_once('vendor/autoload.php');
```

Требуется настройка modrewrite в .htaccess
------------------------------------------

[](#требуется-настройка-modrewrite-в-htaccess)

Все запросы для которых нет файла перенаправляются на обработчик vendor/infrajs/path/router.php

```
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ vendor/infrajs/path/router.php [L,QSA]

```

Если сайт использует сторонний контроллер и перенаправлять все запросы нельзя нужно настроить более точное условие и перенаправлять на обработчик только запросы начинающиеся со специальных символов \[-~!\] TODO: добавить код точной переадресации

Path конфиг
-----------

[](#path-конфиг)

В `Path::$conf` указывается куда ведут принятые сокращения "-", "~", "!":

- где искать скрипты - search (-),
- где папка данных - data (~),
- где папка кэша - cache (!).

По умолчанию Path::$conf:

```
{
	"data": "data/",
	"cache": "cache/",
	"space": false,
	"fs": true,
	"search":[
		"vendor/infrajs/"
	],
	"clutch": {}
}
```

Параметр space
--------------

[](#параметр-space)

Нужен для совместимости, когда функция Path::encode не должна заменять пробелы на дифисы.

Расширяемость расширений - clutch
---------------------------------

[](#расширяемость-расширений---clutch)

Одно расширение, может содержать файлы для подмены другого расширения

Конфиг расширения cart может содержать такой конфиг и вложенные папки pixeden-stroke-7-icon и cart.

```
	"clutch":{
		"catalog":"vendor/infrajs/cart/",
		"pixeden-stroke-7-icon":[
			"vendor/grimmlink/",
			"vendor/infrajs/cart/"
		]
	}
```

Файл "-catalog/some.php" возьмётся из папки vendor/infrajs/cards/catalog/some.php если такой файл там будет иначе будет использоваться файл vendor/infrajs/catalog/some.php При разрешении адреса начинающегося с символа "-" корень проекта имеет наивысший приоритет, за которым следует папка с данными "~" и затем идут папки `conf.search` начиная с последней. Первый путь в `conf.search` имеет наименьший приоритет.

С помощью clutch можно "подмешать" к стороннему расширению новые файлы или подменить существующие, например добавить конфигурационый файл [.infra.json](https://github.com/infrajs/config) с настройками авторматической интеграции расширения в систему [infrajs/collect](https://github.com/infrajs/collect).

Так как расширение pixeden-stroke-7-icon стороннего производителя и не содержит конфигурационного файла .infra.json нужно ещё и на него явно указать чтобы оно участвовало в поиске файлов (-)

Примеры
-------

[](#примеры)

- `site.ru/~mypic.jpg` - указывает на файл `site.ru/data/mypic.jpg`
- `site.ru/-path/test.jpg` - указывает на файл `site.ru/vendor/infrajs/path/test.jpg`

Синоним корня index/
--------------------

[](#синоним-корня-index)

- `site.ru/-index/test.html` - указывает на файл `site.ru/test.html`

DirectoryIndex
--------------

[](#directoryindex)

Если адресная строка содержит путь к **-папке/**, ищутся файлы **index.php** или **index.html**. Если файлов нет, то путь до папки будет считаться 404 ошибкой.

API
---

[](#api)

```
$query = Path::init(); //$query содержит запрос для которого не нашлось решения иначе выполнится exit;
echo Path::theme('~mypic.jpg'); //если файл есть "data/mypic.jpg" иначе false
echo Path::resolve('~mypic.jpg'); //всегда "data/mypic.jpg"
Path::req('-path/file.php'); //Аналог require_once с поддержкой спецсимволов
Path::reqif('-path/file.php'); //Не приводит к ошибке если файл отсутствует
echo Path::toutf($str); //Конвертирует строку в кодировку UTF-8
echo Path::tofs($str); //Конвертирует строку в кодировку файловой системы cp1251 под windows, depricated, используется при использовании кирилицы вименах файлов
echo Path::encode($str); //Ковертирует строку в последовательность которую можно использовать в имени файла и в адресной строке - удаляются запрещённые символы
echo Path::getExt($str); //Возвращает расширение файла
echo Path::mkdir($str); //Создать папку если fs:true
echo Path::isdir($str);
echo Path::getQuery();//Возвращает текущий запрос
echo Path::pretty('data/mypic.jpg'); //антоним resolve. Результат "~mypic.jpg"
Path::fullrmdir($path, $sefldelete); //Очищает дирректорию и если второй аргумент true то дирректория удаляется
```

Path выполняет узкий набор функций по нахождению файлов и декларации правил работы с адресом. Для обработки запросов вида `/contacts` `/about` используется отедльное расширение [infrajs/controller](https://github.com/infrajs/controller).

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity76

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~45 days

Recently: every ~94 days

Total

47

Last Release

1769d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/341a8ef8a06866ad99b1bbcf0216fd8e331b076b1690a7d992c386192674b787?d=identicon)[akiyatkin](/maintainers/akiyatkin)

---

Top Contributors

[![akiyatkin](https://avatars.githubusercontent.com/u/953753?v=4)](https://github.com/akiyatkin "akiyatkin (111 commits)")

### Embed Badge

![Health badge](/badges/infrajs-path/health.svg)

```
[![Health](https://phpackages.com/badges/infrajs-path/health.svg)](https://phpackages.com/packages/infrajs-path)
```

###  Alternatives

[venveo/craft-compress

Create smart zip files from Craft assets on the fly

124.7k](/packages/venveo-craft-compress)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
