riimu / kit-pathjoin
跨平台库,用于规范和连接文件系统路径
Requires
- php: >=5.4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- phpunit/phpunit: ^5.7 || ^6.2
- squizlabs/php_codesniffer: ^3.0
README
PathJoin 是一个PHP库,用于规范和连接文件系统路径。该库的目的是使无论在哪个平台或系统目录分隔符下,处理文件系统路径都变得更加容易。
文件路径规范化的目的是提供一个统一的文件路径表示。换句话说,该库中的规范化将解析目录引用 .
和 ..
,并将多个目录分隔符压缩成一个。这使得比较路径时避免常见问题变得容易得多。
虽然PHP提供了一个内置函数 realpath()
,但由于它是通过文件系统工作的,所以并非在所有情况下都适用。这个库简单地将路径合并并使用字符串处理进行规范化。不需要文件或目录是可读的,甚至不需要存在。
API文档可在以下位置找到: http://kit.riimu.net/api/pathjoin/
需求
- 最低支持的PHP版本是5.6
安装
使用Composer安装
安装此库最简单的方法是使用Composer来管理依赖。要使用Composer安装此库,请按照以下两个步骤操作
-
在项目根目录下运行Composer的命令行安装,以获取
composer.phar
。 -
运行安装脚本后,您应该在项目根目录中拥有
composer.phar
文件,并可以运行以下命令php composer.phar require "riimu/kit-pathjoin:^1.2"
通过Composer安装此库后,您可以通过包含由Composer在安装期间生成的 vendor/autoload.php
文件来加载库。
添加库作为依赖项
如果您已经熟悉如何使用Composer,您还可以通过将以下 composer.json
文件添加到您的项目并运行 composer install
命令来将库作为依赖项添加
{ "require": { "riimu/kit-pathjoin": "^1.2" } }
手动安装
如果您不希望使用Composer来加载库,您还可以通过下载最新版本并将 src
文件夹提取到您的项目中来手动下载库。然后,您可以包含提供的 src/autoload.php
文件来加载库类。
用法
此库提供了两个方便的方法,Path::normalize()
和 Path::join()
。这两个方法的工作方式非常相似。主要区别在于,join()
方法可以接受多个路径进行连接,而 normalize()
只接受单个路径。这两种方法都将返回规范化的路径作为结果。
以下示例将包含该库的多种不同用法
<?php require 'vendor/autoload.php'; use Riimu\Kit\PathJoin\Path; // Both of the following will output 'foo/bar' on Unix and 'foo\bar' on Windows echo Path::normalize('foo/bar') . PHP_EOL; echo Path::join('foo', 'bar') . PHP_EOL; // The join method accepts multiple arguments or a single array echo Path::join('foo', 'bar', 'baz') . PHP_EOL; // outputs 'foo/bar/baz' echo Path::join(['foo', 'bar', 'baz']) . PHP_EOL; // outputs 'foo/bar/baz' // The '.' and '..' directory references will be resolved in the paths echo Path::normalize('foo/./bar/../baz') . PHP_EOL; // outputs 'foo/baz' echo Path::join(['foo/./', 'bar', '../baz']) . PHP_EOL; // outputs 'foo/baz' // Only the first path can denote an absolute path in the join method echo Path::join('/foo', '/bar/baz') . PHP_EOL; // outputs '/foo/bar/baz' echo Path::join('foo', '/bar') . PHP_EOL; // outputs 'foo/bar' echo Path::join('foo', '../bar', 'baz') . PHP_EOL; // outputs 'bar/baz' echo Path::join('', '/bar', 'baz') . PHP_EOL; // outputs 'bar/baz' // Relative paths can start with a '..', but absolute paths cannot echo Path::join('/foo', '../../bar', 'baz') . PHP_EOL; // outputs '/bar/baz' echo Path::join('foo', '../../bar', 'baz') . PHP_EOL; // outputs '../bar/baz' // Empty paths will result in a '.' echo Path::normalize('foo/..') . PHP_EOL; echo Path::join('foo', 'bar', '../..') . PHP_EOL;
Path::normalize()
还接受一个名为 $prependDrive
的第二个参数,它接受布尔值,默认为 true。在Windows平台上,驱动器字母是绝对路径的重要部分。因此,当参数设置为 true 时,如果绝对路径本身没有提供驱动器字母,该方法将向绝对路径前缀添加当前工作目录的驱动器字母。
以下示例适用于Windows系统,如果工作目录位于C:驱动器上
<?php require 'vendor/autoload.php'; use Riimu\Kit\PathJoin\Path; echo Path::normalize('/foo/bar') . PHP_EOL; // outputs 'C:\foo\Bar' echo Path::normalize('D:/foo/bar') . PHP_EOL; // outputs 'D:\foo\Bar' echo Path::normalize('/foo/bar', false) . PHP_EOL; // outputs '\foo\Bar'
致谢
此库的版权所有(c)2014-2017 Riikka Kalliomäki。
查看LICENSE获取许可和复制信息。