Filesystem组件组件是一个小包,它为常规的文件系统操作,提供便利的工具。它还把各个操作系统中的不同行为,抽象成对应那些操作系统的方法。

在Symfony 3.2中我们添加了两个全新方法,改进了该组件。

添加了一个跨平台的readlink()方法 

PHP的readlink()函数返回了一个symbolic link的目标信息。但是,它这个行为在Windows上和Unix上是完全不同的。在Windows上,readlink()对一个链接(link)递归地解析其子链接,直到最终目标被找到为止。在类Unix系统上,readlink()仅解析下一个链接。

Filesystem组件提供的全新readlink()方法始终按照(与操作系统)相同的方式进行作动:

1
public function readlink($path, $canonicalize = false)

$canonicalizefalse时:

  • $path不存在或并非一个link,将返回null

  • $path是一个link,返回下一个link的直接目标(0direct target),不考虑目标存在与否。

$canonicalizetrue时:

  • $path不存在,返回null

  • $path存在,返回其绝对的和完整解析的最终版本。

添加了一个hardlink()方法 

虽然多数时候开发者使用的是soft或symbolic的链接(links),有时创建一个“写死的链接(hard links)”是更加方便的。hard links的行为与“对象引用(object references)”时的过程类似:一个hard link指向的是与目标文件完全相同的节点,你甚至可以对目标文件重命名而毋须修改已写死的链接。

Filesystem组件的全新hardlink()方法使你能针对一个给定的文件去创建一个或多个hard links:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Filesystem\Filesystem;
 
$fs = new Filesystem();
$fs->hardlink('file1.txt', 'hardlink1.lnk');
// fileinode('file1.txt') === fileinode('hardlink1.lnk')
 
// multiple hardlinks pointing to the same file
// 多个hardlinks都指向同一个文件
$fs->hardlink('file2.txt', ['hardlink2.lnk', 'hardlink3.lnk']);