infrajs / path
解析文件系统上的路径。提供对文件和文件夹路径形式的观点。
Requires
- infrajs/nostore: ~1
- dev-master
- v1.1.34
- v1.1.33
- v1.1.32
- v1.1.31
- v1.1.30
- v1.1.29
- v1.1.28
- v1.1.27
- v1.1.26
- v1.1.25
- v1.1.24
- v1.1.23
- v1.1.22
- v1.1.21
- v1.1.20
- v1.1.19
- v1.1.18
- v1.1.17
- v1.1.16
- v1.1.15
- v1.1.14
- 1.1.13
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-09-14 08:22:59 UTC
README
地址的原则和工作顺序
- 项目的根是包含
vendor/
和composer.json
的文件夹 - 地址相对于项目根记录,并在浏览器数据和服务器数据中记录。例如,index.html,images/1.jpg
- 末尾的斜杠仅表示文件夹。末尾没有斜杠仅表示文件。
- 仅使用直接斜杠 - "/"
- 有一个预定义的 数据文件夹,它不会进入版本控制系统,可能包含凭据(credentials),并用于在项目工作期间存储数据。它可用于php记录。默认数据文件夹地址为
data/
。简称为 "~" - 有一个预定义的 缓存文件夹。文件夹不会加载到版本控制系统中。它可用于php记录。默认缓存文件夹地址为
cache/
。简称为 "!" - 有一些预定义的 库文件夹,在地址以符号 "-" 开头时将在此处搜索文件。默认为一个文件夹
vendor/infrajs/
,但列表在每种情况下都会自动或手动扩展。 - 地址以最简形式记录,并包含如果可能的话接受的缩写 "-"、"~"、"!"。
面向开发者
- 可以将地址行用作文件的唯一标识符。
- 不允许存储和处理绝对路径和包含 "../"、"./"、"//"、"空" 的路径序列。
- 地址可以包含"?"后面的参数,在这种情况下,需要单独执行
explode('?', $src, 2)
,在标准php文件系统函数中使用时。如果命令行是这样的,那么这个命令不会导致错误cd cache/?test=1
,并且会打开 cache 文件夹。 - 函数不改变地址的形式,使用其中的符号或其部分,并且如果需要,仅生成其部分地址并确保其正确性。
- 函数假定获得的地址形式符合指定的原则,并不进行检查。
- 地址形式的分析和更改可能在获得地址时发生,无论是从用户那里还是从不知道这些原则的系统那里。
- 当存在键
Path::$conf['fs'] = false
时,不应执行文件系统上的写入操作。考虑使用系统的依赖项会考虑此键。如果依赖库不能在没有文件系统的情况下工作,则例如,生成常规异常... throw new \Exception('我没有文件系统无法工作'); - 无论php脚本在哪里,工作目录都是项目的根目录。使用
chdir()
设置工作目录。脚本不依赖于其实际位置,并包含检查其位置的文件vendor/autoload.php
的检查,以替代直接调用。 - 在使用标准php文件系统函数之前,需要通过
$src=Path::theme($src)
将地址传递。该函数检查指定的文件或文件夹是否存在,并返回没有特殊缩写的地址。可以使用该函数返回的路径。Path::theme 执行标准 is_file is_dir file_exists 的功能。文件夹或文件通过地址末尾是否存在斜杠来确定。 - 用于从地址中删除特殊符号 "-"、"~"、"!" 的函数是
$src=Path::resolve($src)
。对于 "-" 特殊符号,执行此操作是不可能的,将会抛出异常。
检查和设置工作目录
if (!is_file('vendor/autoload.php')) { chdir('../../../'); //Согласно фактическому расположению файла } //Подключаемый скрипт из корня может работать без autoload.php и правильная рабочая дирректория не гарантирует что autoload.php уже подключен require_once('vendor/autoload.php');
需要配置 .htaccess 中的 modrewrite
所有没有文件的请求都重定向到处理程序 vendor/infrajs/path/router.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ vendor/infrajs/path/router.php [L,QSA]
如果网站使用第三方控制器且不能重定向所有请求,则需要设置更精确的条件,只重定向以特殊符号 [-~!] 开头的请求。TODO:添加精确重定向代码
路径配置
在 Path::$conf
中指定短横线 "-"、波浪号 "~" 和感叹号 "!" 的指向
- 搜索脚本的位置 - search (-)
- 数据文件夹的位置 - data (~)
- 缓存文件夹的位置 - cache (!)
默认 Path::$conf
{ "data": "data/", "cache": "cache/", "space": false, "fs": true, "search":[ "vendor/infrajs/" ], "clutch": {} }
space 参数
用于兼容性,当 Path::encode 函数不应替换空格为连字符时。
扩展的扩展性 - 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,其中包含将扩展自动集成到系统 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
根目录的索引同义词
site.ru/-index/test.html
- 指向文件site.ru/test.html
DirectoryIndex
如果地址字符串包含指向 -文件夹/ 的路径,则查找 index.php 或 index.html 文件。如果没有文件,则路径将视为 404 错误。
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。