从本文开始,我们将学习一系列PHP文件系统相关函数。事实上,其中有许多功能是我们经常使用的。你不需要刻意去记住它们。只要知道有这个东西,在使用的时候记得查看文档。文件路径相关函数文件路径相关函数在一些框架中往往很常见,经常和\_\_FILE\_\_,\_\_DIR\_\_等魔法常量一起使用。echo"1)".basename("/etc/sudoers.d",".d"),PHP_EOL;echo"2)".basename("/etc/passwd"),PHP_EOL;echo"3)".basename("/etc/"),PHP_EOL;echo"4)".basename("."),PHP_EOL;echo"5)".basename("/"),PHP_EOL;echo"6)".basename("/usr/local/Cellar/php/7.3.9_1/README.md"),PHP_EOL;//1)sudoers//2)passwd//3)etc//4).//5)//6)自述文件。mdbasename()函数是获取路径中的文件名。它有两个参数。第一个是文件的路径,第二个是过滤后的内容。例如,在第一个测试语句中,我们过滤掉了文件扩展名。回声“1)”。目录名("/etc/passwd"),PHP_EOL;回声“2)”。目录名("/etc/"),PHP_EOL;回声“3)”。目录名("."),PHP_EOL;//1)/etc//2)///3).dirname()返回路径的路径部分,即不包含文件名的部分,与basename().print_r(路径信息('/usr/local/Cellar/php/7.3.9_1/README.md'));//Array//(//[dirname]=>/usr/local/Cellar/php/7.3.9_1//[basename]=>README.md//[extension]=>md//[filename]=>README//)echorealpath('./../../..//../etc/passwd'),PHP_EOL;///private/etc/passwdpathinfo()函数用于返回信息数组形式的路径。从结果中我们可以看到文件的dirname部分,basename部分,还有文件扩展名的extension和不带扩展名的filename的内容。realpath()返回规范化的绝对??路径名,对输入路径中的所有符号链接进行扩展和处理./,../和冗余/,返回内容为标准绝对路径。修改文件的相关信息接下来我们学习一些修改文件相关属性的函数,主要是Linux系统环境下对文件权限信息的操作。当然,首先我们要创建一个文件。它与Linux中的命令非常相似。touch('test3.txt');touch()函数除了给出要创建的文件名外,还有两个可选参数来指定文件的创建时间和访问时间。如果没有给出参数,则默认为当前时间。文件名可以是相对路径或绝对路径中具有权限的目录,并在该目录下创建一个空文件。echofileowner('test.txt'),PHP_EOL;//501chown('test.txt','www');清除状态缓存();echofileowner('test.txt'),PHP_EOL;//70通过fileowner()函数,我们可以得到某个文件所属的用户,默认我们的用户是当前运行PHP脚本的用户,也就是系统当前的登录用户。在这里,我们使用chown()函数将用户更改为www用户。clearstatcache()用于清除文件系统的缓存信息。如果不清理,fileowner()仍然会返回之前的用户信息。echo文件组('test.txt'),PHP_EOL;//20chgrp('test.txt','www');clearstatcache();echofilegroup('test.txt'),PHP_EOL;//70echosubstr(sprintf('%o',fileperms('test.txt')),-4),PHP_EOL;//0766chmod('test.txt',0777);clearstatcache();echosubstr(sprintf('%o',fileperms('test.txt')),-4),PHP_EOL;//0777同理,使用filegroup()函数获取文件组信息,chgrp()用于修改文件组。fileperms()用于返回文件的权限信息。它以数字方式返回文件访问权限。这里我们使用sprintf()对结果进行格式化,得到我们常用的Linux系统权限格式。chmod()函数用于修改文件的权限。它的权限参数是一个由三个八进制数据组成的数字,在linux系统中表示1、2、4及其组合,所以我们需要在前面加上前面的0,用来保证操作可以正常进行。关于系统文件权限的知识,需要仔细研究Linux系统中的相关内容。注意,如果上述功能在命令行运行失败,多半是没有权限的原因,可以使用sudo来测试。在fastcgi中运行时,更需要注意权限问题,只在我们服务器可以操作的目录下进行安全的文件权限修改。print_r(stat('test.txt'));//数组//(//[0]=>16777220//[1]=>8707958352//[2]=>33279//[3]=>2//[4]=>70//[5]=>70//[6]=>0//[7]=>0//[8]=>1603070453//[9]=>1603070453//[10]=>1603072836//[11]=>4096//[12]=>0//[dev]=>16777220//[ino]=>8707958352//[mode]=>33279//[nlink]=>2//[uid]=>70//[gid]=>70//[rdev]=>0//[size]=>0//[atime]=>1603070453//[mtime]=>1603070453//[ctime]=>1603072836//[blksize]=>4096//[blocks]=>0//)stat()函数可以获取指定文件的所有属性信息,这里我们可以看到文件uid、gid、ctime、mtime等信息。文件软硬连接相关的操作在Linux系统中,有关于软硬连接的知识。实际上,软链接就像Windows中的快捷方式,而硬链接则与复制一份数据有关。在PHP中也为我们提供了软硬连接的创建以及一些相关的操作。link('test.txt','ltest.txt');echolinkinfo('ltest.txt'),PHP_EOL;//16777220symlink('test.txt','ltest2.txt');echolinkinfo('ltest2.txt'),PHP_EOL;//16777220print_r(lstat('ltest2.txt'));//数组//(//[0]=>16777220//[1]=>8707962848//[2]=>41453//[3]=>1//[4]=>0//[5]=>20//[6]=>0//[7]=>8//[8]=>1603072717//[9]=>1603072717//[10]=>1603072717//[11]=>4096//[12]=>0//[dev]=>16777220//[ino]=>8707962848//[模式]=>41453//[nlink]=>1//[uid]=>0//[gid]=>20//[rdev]=>0//[size]=>8//[atime]=>1603072717//[mtime]=>1603072717//[ctime]=>1603072717//[blksize]=>4096//[blocks]=>0//)使用link()函数创建硬链接文件,同时使用symlink()来创建一个软链接文件。相对来说,我们使用软连接的场景更多。lstat()与stat()函数的作用相同,可以查看文件的各种属性信息,但是lstat()函数针对的是软硬连接文件。lchown('ltest2.txt','zhangyue');lchgrp('ltest2.txt','staff');//lrwxr-xr-x1zhangyuestaff8Oct1909:58ltest2.txt->test.txt同样,我们也可以修改软硬链接的用户和用户组信息,但是他们的信息是无法通过fileowner()或filegroup()查看的。因为是链接文件,所以还是和原文件绑定的,原文件的信息还是通过fileowner()等函数显示的。我们可以在系统环境下使用ls-l查看连接文件的用户和用户组信息是否修改成功。总结一下今天的内容比较简单,修改权限的操作不常用。但是,对于系统安全来说,它们还是非常有用的。比如上传,如果我们要防止上传可执行文件,我们可以修改文件的权限,让文件不能直接运行,从而起到安全保护的作用。另外,目录路径相关的操作也是一些框架的基础。几乎所有的framework入口或者Composer入口都会看到dirname()和basename()等函数。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系统函数(一).php参考文档:https://www.php。net/manual/zh/ref.filesystem.php各媒体平台均可搜索【硬核项目经理】
