DEFAULT_PATH_NOISE
DEFAULT_PATH_NOISE = '/\\ ' : string
路径处理助手
这个的方法方法实现,参数为 $ds
的,表明该参数必须是目录分隔符,也即 PathHelper::DS_WIN
或 PathHelper::DS_UNIX
其中之一。
参数命名为 $spr
,表明该参数可以指定除了目录分隔符以外的字符串,但因为处理机制的问题,该参数只支持 1 位长度字符串,超出的会截取掉保留首位的字符串。
purge(string $path, integer|null $mode = null, string|null $spr = null, string|null $trimNoise = null) : string
净化路径值
基于上一个版本的kephp的全局函数 purge_path 方法,优化了 $mode 参数。
去掉了默认的 urldecode ,所以处理 Url 的路径时,请自行先行进行 decode。
$mode 用于说明一个路径净化处理时的三个处理模式:
PathHelper::DOT_REMOVE
- 默认值,强制删除路径中点,忽略其意义PathHelper::DOT_ORIGINAL
- 维持原状,不做处理。PathHelper::DOT_NORMALIZE
- 常规化处理,即将 ../ 向前一层的目录递进, ./ 则删除。PathHelper::LEFT_REMOVE
PathHelper::RIGHT_REMOVE
- 默认值,强制去除最左边或最右边的分隔符PathHelper::LEFT_ORIGINAL
PathHelper::RIGHT_ORIGINAL
- 最左边或最右边的分隔符维持原状(原来有就有,原来没有就没有)PathHelper::LEFT_FILL
PathHelper::RIGHT_FILL
- 最左边或最右边的分隔符强制填充(原来没有也会强制加上)PathHelper::LR_REMOVE = PathHelper::LEFT_REMOVE | PathHelper::RIGHT_REMOVE
- 左右两边都删除
PathHelper::LR_ORIGINAL = PathHelper::LEFT_ORIGINAL | PathHelper::RIGHT_ORIGINAL
- 左右两边都维持原状
PathHelper::LR_FILL = PathHelper::LEFT_FILL | PathHelper::RIGHT_FILL
- 左右两边都填充
$mode = PathHelper::DOT_ORIGINAL | PathHelper::LR_REMOVE; // 路径中的点维持原状,左右两边的分隔符删除
$mode = PathHelper::DOT_REMOVE | PathHelper::LR_FILL; // 路径中的点强制删除,左右两边的分隔符强制填充
调用示例:
$helper = new PathHelper();
$helper->purge('a/b/c', PathHelper::LR_FILL); // => /a/b/c/
$helper->purge('-a---b---..--.---c-d---', PathHelper::DOT_REMOVE | PathHelper::LR_REMOVE, '-'); // => a-b-c-d
更多示例代码,请参阅 Test_PathHelper
。
该方法支持通过 $spr 指定其他的分隔符,但分隔符只支持 1 位长度字符串,如果超出,会只取该字符的 0 的字符值作为 $spr。
string | $path | 要净化处理的路径值 |
integer|null | $mode | 净化的处理模式,参考 PathHelper 的常量说明 |
string|null | $spr | 目录分隔符,可以指定其他的分隔符 |
string|null | $trimNoise | 路径处理的噪音字符串 |
prepareDirectory(string $path, boolean $isDir = false, integer $mode = 493) : false|string
指定一个路径,为该路径预备建立所需的目录(递归)
string | $path | 一个要写入的文件路径,或者是一个目录的路径 |
boolean | $isDir | 说明 $path 是一个文件路径还是一个目录路径 |
integer | $mode | 创建目录的权限值 |
返回所创建的(或者本身目录已经存在的)目录的绝对路径,如果创建失败或者传入的路径名有误,返回 false
split(string $path) : array
将一个路径分离(解析)出目录名、文件名、文件后缀名(强制转小写)、无后缀文件名
.
之后(不含 .
)的字符串path('/var/log/'); // => 表示为一个目录路径,结果:['/var/log', null, null, null]
path('/var/log'); // => 表示为一个文件路径,结果:['/var', ‘log’, null, 'log']
path('/var/log/nginx.log'); // => 表示为一个文件路径,结果:['/var/log', ‘nginx.log’, 'log', 'nginx']
// 文件名不会进行大小写转换处理,但是提取出来的后缀文件名,会强制转为小写
path('/var/log/nginx.LOG'); // => 表示为一个文件路径,结果:['/var/log', ‘nginx.LOG’, 'log', 'nginx']
// 后缀名匹配,为右匹配的模式
path('/var/log/nginx.20180930.log'); // => 表示为一个文件路径,结果:['/var/log', ‘nginx.20180930.log’, 'log', 'nginx.20180930']
注意:由于风格的问题,dirname
强制去除了最末尾的 目录分隔符。
string | $path |
返回数据格式:[dirname, filename, extname, basename]
compare(string|null $source = null, string|null $target = null, string|null $delimiter = null, string|null $prefix = null, string|null $noise = null) : string
比较两个路径,返回相同的部分
必须确保两个传入的路径都是被净化处理过的路径名,不包含类如/../,并且请确保传入的路径都有一致的目录分隔符。 本函数不会自动调用purge的函数,请调用前自己执行
compare_path('/aa/bb/cc', '/aa/bb/dd'); // => aa/bb
// 这个函数还可以用于挑出两个字符串相同的部分
compare_path('ab-cd-ef-gh-ij', 'ab-cd-ef-gh-abc', '-'); // => ab-cd-ef-gh
string|null | $source | |
string|null | $target | |
string|null | $delimiter | |
string|null | $prefix | |
string|null | $noise |