文件系统组件

编辑本页

文件系统组件

Filesystem组件为文件系统操作和文件/目录路径操作提供了独立于平台的实用程序。

安装

1
编译器需要symfony/文件系统ob娱乐下载

请注意

如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

使用

该组件包含两个名为文件系统而且路径

12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\文件系统\异常\IOExceptionInterface使用ob娱乐下载\组件\文件系统\文件系统使用ob娱乐下载\组件\文件系统\路径文件系统文件系统();试一试文件系统->mkdir(路径::正常化(sys_get_temp_dir()。' / '.random_int (01000)));}(IOExceptionInterface异常) {回声"在创建目录时发生错误"异常->getPath ();}

文件系统实用程序

mkdir

mkdir ()递归创建目录。在POSIX文件系统上,目录是用默认模式值创建的0777.你可以使用第二个参数来设置你自己的模式:

1
文件系统->mkdir (“/ tmp /照片”0700);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

请注意

这个函数忽略已经存在的目录。

请注意

目录权限受当前umask.设置umask对于你的web服务器,使用PHPumask函数或使用修改文件权限创建目录后,请执行以下命令。

存在

存在()检查是否存在一个或多个文件或目录并返回如果有遗漏:

1 2 3 4 5 6
//如果该绝对目录存在,则返回true文件系统->存在(“/ tmp /照片”);//如果rabbit.jpg存在而bottle.png不存在,则返回false//非绝对路径相对于运行的PHP脚本所在的目录文件系统->存在([“rabbit.jpg”“bottle.png”]);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

复制

副本()生成单个文件的副本(使用镜子()复制目录)。如果目标已经存在,则仅当源修改日期晚于目标时才复制文件。这个行为可以被第三个布尔参数覆盖:

1 2 3 4 5
//仅当image.jpg之后修改了image-ICC才有效文件系统->复制(“image-ICC.jpg”“image.jpg”);// image.jpg将被覆盖文件系统->复制(“image-ICC.jpg”“image.jpg”真正的);

触摸

联系()设置文件的访问和修改时间。默认使用当前时间。您可以使用第二个参数设置自己的参数。第三个参数是访问时间:

1 2 3 4 5 6
//将修改时间设置为当前时间戳文件系统->联系(“file.txt”);//设置未来10秒的修改时间文件系统->联系(“file.txt”, time() +10);//设置过去10秒的访问时间文件系统->联系(“file.txt”, time(), time() -10);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

乔恩

乔恩()更改文件的所有者。第三个参数是一个布尔递归选项:

1 2 3 4
//设置lolcat视频的所有者为www-data文件系统->乔恩(“lolcat.mp4”www - data”的);//递归地改变视频目录的所有者文件系统->乔恩(/视频的www - data”的真正的);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

chgrp

chgrp ()修改文件组。第三个参数是一个布尔递归选项:

1 2 3 4
//设置lolcat视频的组为nginx文件系统->chgrp (“lolcat.mp4”nginx的);//递归地改变视频目录的组文件系统->chgrp (/视频的nginx的真正的);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

修改文件权限

chmod ()更改文件的模式或权限。第四个参数是一个布尔递归选项:

1 2 3 4
//设置视频模式为0600文件系统->chmod (“video.ogg”0600);//递归地改变SRC目录的模式文件系统->chmod (“src”07000000真正的);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

删除

remove ()删除文件,目录和符号链接:

1
文件系统->删除([符号链接的“/道路/ /目录”“activity.log”]);

请注意

你可以传递一个数组或任何可否认的对象作为第一个参数。

重命名

重命名()更改单个文件或目录的名称:

1 2 3 4 5 6
//重命名文件文件系统->重命名(“/ tmp / processed_video.ogg”“/道路/ /商店/ video_647.ogg”);//重命名目录文件系统->重命名(“/ tmp /文件”/ /存储/文件/路径的);//如果目标已经存在,则可以覆盖第三个布尔参数。文件系统->重命名(“/ tmp / processed_video2.ogg”“/道路/ /商店/ video_647.ogg”真正的);

符号链接()创建从目标到目的地的符号链接。如果文件系统不支持符号链接,第三个布尔参数可用:

1 2 3 4 5
//创建符号链接文件系统->符号链接(“/道路/ /源”“/道路/ /目的地”);//复制源目录//不支持符号链接文件系统->符号链接(“/道路/ /源”“/道路/ /目的地”真正的);

指向()读取链接目标。

指向()Filesystem组件提供的方法在所有操作系统上的行为都是相同的(不像PHP的指向函数):

1 2 3 4 5
//返回该链接的下一个直接目标,而不考虑目标是否存在文件系统->指向“/道路/ /链接”);//返回目标的绝对完全解析的最终版本(如果有嵌套链接,则解析)文件系统->指向“/道路/ /链接”真正的);

其行为如下:

  • 美元的规范化

    • 如果美元的路径不存在或不是一个链接,它返回
    • 如果美元的路径是一个链接,它返回该链接的下一个直接目标,而不考虑目标的存在。
  • 美元的规范化真正的

    • 如果美元的路径如果不存在,则返回null。
    • 如果美元的路径存在时,它返回其绝对完全解析的最终版本。

请注意

如果希望规范化路径而不检查其是否存在,可以使用规范化()方法相反。

makePathRelative

makePathRelative ()获取两条绝对路径,并返回从第二个路径到第一个路径的相对路径:

1 2 3 4 5 6 7
//返回'../'文件系统->makePathRelative (' / var / ob娱乐下载lib / symfony / src / symfony / '' / var / ob娱乐下载lib / symfony / src / symfony /组件的);//返回'videos/'文件系统->makePathRelative (“/ tmp /视频”“/ tmp”);

镜子

镜子()将源目录中的所有内容复制到目标目录中(使用副本()复制单个文件的方法):

1
文件系统->镜子(“/道路/ /源”“/道路/ /目标”);

isAbsolutePath

isAbsolutePath ()返回真正的如果给定的路径是绝对路径,否则:

1 2 3 4 5 6 7 8
//返回true文件系统->isAbsolutePath (“/ tmp”);//返回true文件系统->isAbsolutePath (“c: \ Windows \”);//返回false文件系统->isAbsolutePath (“tmp”);//返回false文件系统->isAbsolutePath (“. . / dir”);

tempnam

tempnam ()创建一个具有唯一文件名的临时文件,并返回其路径,或在失败时抛出异常:

1 2 3 4
//返回路径:/tmp/prefix_wyjgtF文件系统->tempnam (“/ tmp”“prefix_”);//返回路径:/tmp/prefix_wyjgtF.png文件系统->tempnam (“/ tmp”“prefix_”“使用”);

dumpFile

dumpFile ()将给定的内容保存到一个文件中(如果文件不存在,则创建文件及其目录)。它以原子的方式执行此操作:首先写入临时文件,然后在完成时将其移动到新文件位置。这意味着用户总是会看到完整的旧文件或完整的新文件(但永远不会看到部分写入的文件):

1
文件系统->dumpFile (“file.txt”“Hello World”);

file.txt文件包含你好世界现在。

appendToFile

appendToFile ()在文件末尾添加新内容:

1 2 3
文件系统->appendToFile (“logs.txt”“邮件发送至user@example.com”);//第三个参数表示写入文件时是否应该锁定文件系统->appendToFile (“logs.txt”“邮件发送至user@example.com”真正的);

如果文件或其包含目录不存在,此方法将在追加内容之前创建它们。

路径操作实用程序

处理文件路径通常会遇到一些困难:

  • 平台差异:不同平台上的文件路径看起来不同。UNIX文件路径以斜杠(“/”)开始,而Windows文件路径以系统驱动器(“C:”)开始。UNIX使用正斜杠,而Windows默认使用反斜杠。
  • 绝对/相对路径:web应用程序经常需要处理绝对路径和相对路径。正确地将一个转换为另一个是棘手和重复的。

路径提供实用程序方法来解决这些问题。

规范化

返回与给定路径等效的最短路径名称。它迭代地应用以下规则,直到不能进行进一步的处理:

  • "."段被删除;
  • ".."段被解析;
  • 反斜杠(“\”)转换为正斜杠(“/”);
  • 根路径(“/”和“C:/”)总是以斜杠结束;
  • 非根路径永远不会以斜杠结束;
  • 保留方案(例如“phar://”);
  • 将" "替换为用户的主目录。

可以将路径规范化规范化()

1 2
回声路径::规范化(' / var / www / vhost / webmozart / . . / config.ini ');// => /var/www/vhost/config.ini

属性的绝对路径和相对路径规范化()方法。当传递一个相对路径时,路径开头的".."段被保留:

1 2
回声路径::规范化(“. . /上传/ . . / config / config.yaml ');// => ../config/config.yaml .

格式不正确的路径将原封不动地返回:

1 2
回声路径::规范化(“C:项目/ PHP . ini”);// => C:Programs/PHP/ PHP .ini

转换绝对/相对路径

绝对/相对路径可以用这些方法进行转换makeAbsolute ()而且makeRelative ()

makeAbsolute ()方法需要一个相对路径和一个基于该相对路径的基本路径:

1 2
回声路径::makeAbsolute (“配置/ config.yaml”“/ var / www /项目”);// => /var/www/project/config/config.yaml

如果在第一个参数中传递了一个绝对路径,则返回绝对路径不变:

1 2
回声路径::makeAbsolute (“/ usr / share / lib / config.ini”“/ var / www /项目”);// => /usr/share/lib/config.ini

该方法解析".."段,如果有的话:

1 2
回声路径::makeAbsolute (“. . / config / config.yaml”/ var / www /项目/上传的);// => /var/www/project/config/config.yaml

如果您希望能够同时接受相对路径(例如,相对于项目的根目录)和绝对路径,则此方法非常有用。

makeRelative ()逆运算对吗makeAbsolute ()

1 2
回声路径::makeRelative (" / var / www /项目/ config / config.yaml '“/ var / www /项目”);// => config/config.yaml

如果路径不在基路径内,该方法将根据需要在".."段前加上:

1 2
回声路径::makeRelative (" / var / www /项目/ config / config.yaml '/ var / www /项目/上传的);// => ../config/config.yaml .

使用isAbsolute ()而且isRelative ()查询路径是绝对路径还是相对路径。

1 2
路径::isAbsolute (“C: \程序\ PHP \ PHP . ini”// => true

所有四个方法都在内部规范化传递的路径。

寻找最长公共基路径

当您在文件系统上存储绝对文件路径时,这将导致大量重复的信息:

1 2 3 4 5 6 7
返回(' / var / www / vhost /项目/ httpdocs / config / config.yaml”' / var / www / vhost /项目/ httpdocs / config / routing.yaml”' / var / www / vhost /项目/ httpdocs / config / services.yaml”' / var / www / vhost /项目/ httpdocs /图片/ banana.gif '' / var / www / vhost /项目/ httpdocs /上传/图片/ nicer-banana.gif”,);

特别是在存储许多路径时,重复信息的数量是显而易见的。你可以使用getLongestCommonBasePath ()检查一个公共基本路径的路径列表:

1 2 3 4 5 6 7 8
路径::getLongestCommonBasePath (' / var / www / vhost /项目/ httpdocs / config / config.yaml”' / var / www / vhost /项目/ httpdocs / config / routing.yaml”' / var / www / vhost /项目/ httpdocs / config / services.yaml”' / var / www / vhost /项目/ httpdocs /图片/ banana.gif '' / var / www / vhost /项目/ httpdocs /上传/图片/ nicer-banana.gif”);// => /var/www/vhosts/project/httpdocs

与一起使用此路径makeRelative ()缩短存储路径。

1 2 3 4 5 6 7 8 9
英国石油公司' / var / www / vhost /项目/ httpdocs”返回(英国石油公司“/ config / config.yaml”英国石油公司“/ config / routing.yaml”英国石油公司“/ config / services.yaml”英国石油公司“/图片/ banana.gif”英国石油公司' /上传/图片/ nicer-banana.gif ',);

getLongestCommonBasePath ()总是返回规范路径。

使用isBasePath ()测试一个路径是否是另一个路径的基路径。

1 2 3 4 5 6 7 8
路径::isBasePath (" / var / www "" / var / www /项目”);// => true路径::isBasePath (" / var / www "" / var / www /项目/ . .”);// => true路径::isBasePath (" / var / www "" / var / www /项目/ . . / . .”);// => false

查找目录/根目录

PHP提供了以下函数目录名获取文件路径的目录路径。这个方法有一些怪癖:

  • ' dirname() '在UNIX上不接受反斜杠
  • ' dirname("C:/Programs") '返回"C:",而不是"C:/"
  • ' dirname("C:/") '返回".",而不是"C:/"
  • ' dirname("C:") '返回".",而不是"C:/"
  • ' dirname("Programs") '返回".",而不是""
  • ' dirname() '不会规范化结果

getDirectory ()修复这些缺点:

1 2
回声路径::getDirectory (“C: \计划”);// => c:/

此外,您可以使用getRoot ()获取路径的根目录。

1 2 3 4 5
回声路径::getRoot (“/ etc /输入/网站”);// => /回声路径::getRoot (“C: \程序\ Apache \ Config”);// => c:/

错误处理

每当有错误发生时,一个异常实现ExceptionInterfaceIOExceptionInterface抛出。

请注意

一个IOException如果目录创建失败,则引发。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop