首页 » PHP教程 » phpfilemtime技巧_PHP中的文件系统函数二

phpfilemtime技巧_PHP中的文件系统函数二

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

var_dump(mkdir("./a")); // bool(true)var_dump(rmdir("./a")); // bool(true)

mkdir() 函数用于创建一个目录,它除了给定的路径参数外,还有一个可选参数可以设置目录的文件权限,也是通报 0777 之类的值就可以了,这个函数相信大家不会很陌生,大部分的文件上传分目录的能力正是利用 is_dir() 来合营 mkdir() 进行目录创建的。
rmdir() 是用于删除目录的,这个函数有两个条件,一是要删除的目录必须是空的,二是要有删除这个目录的权限,如果任一条件不知足的话,就会报出一个 E_WARNING 级别的缺点。

realpath('./');var_dump(realpath_cache_get());// array(8) {// ["/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202010/source"]=>// array(4) {// ["key"]=>// float(1.4990943845035E+19)// ["is_dir"]=>// bool(true)// ["realpath"]=>// string(61) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202010/source"// ["expires"]=>// int(1603327834)// }// ["/Users/zhangyue/MyDoc/博客文章"]=>// array(4) {// ["key"]=>// int(8597410586338680)// ["is_dir"]=>// bool(true)// ["realpath"]=>// string(34) "/Users/zhangyue/MyDoc/博客文章"// ["expires"]=>// int(1603327834)// }// ["/Users"]=>// ……// ……var_dump(realpath_cache_size()); // int(673)

realpath_cache_get() 函数用于获取真实目录缓存的详情,我们须要先利用 realpath() 得到一个目录路径,然后就可以看到 realpath_cache_get() 里面的内容。
可以看出它返回的数组中,是这条路径从第一个目录到这个目录中的所有目录信息,包括每一级目录的 realpath 、 is_dir 等属性信息。
realpath_cache_size() 获取的是真实路径缓冲区的大小,也便是真实路径缓存区大小在内存中的利用量。

phpfilemtime技巧_PHP中的文件系统函数二

软连接信息

上篇文章中我们已经学过了如何创建连接文件,这次我们再来看看两个小的关于连接信息的函数。

phpfilemtime技巧_PHP中的文件系统函数二
(图片来自网络侵删)

var_dump(readlink('ltest2.txt')); // "test.txt"var_dump(is_link('ltest2.txt')); // bool(true)

readlink() 函数用于得到软连接所连接到的真实文件的名称。
在上篇文章中,我们创建的 ltest2.txt 文件正是 test.txt 文件的软连接。
而 is_link() 函数则用于判断给定的文件是否是一个连接文件。

拷贝、移动、改名、删除文件操作

var_dump(copy('test.txt', 'cp_test.txt')); // bool(true)var_dump(is_file("cp_test.txt")); // bool(true)var_dump(move_uploaded_file('test.txt', 'mv_upload_test.txt')); // bool(false)var_dump(is_file("mv_upload_test.txt")); // bool(false)var_dump(is_uploaded_file("mv_upload_test.txt")); // bool(false)var_dump(copy('test.txt', 're_test.txt')); // bool(true)var_dump(rename('re_test.txt', 'new_re_test.txt')); // bool(true)var_dump(copy('test.txt', 'del_test.txt')); // bool(true)var_dump(unlink("del_test.txt")); // bool(true)

对付文件来说,copy() 是非常常用的一个函数。
不管是写代码还是日常办公,复制粘贴这样的拷贝操作都是我们事情中的重心肠点。
PHP 供应的 copy() 函数便是专门用于文件拷贝的,不过须要把稳的是,一定要有文件和拷贝目标目录的读写权限哦。

move_uploaded_file() 文件相信大家也是非常熟习的,在上传文件的操作中也是常常会用到的一个功能。
不过须要把稳的是,从文件名就可以看出,move_uploaded_file() 的浸染是移动已上传文件,也便是 $_FILES 里面 tmp 中的文件,它是不能当做 copy() 函数来利用的。
从演示代码中就可以看出,对付普通文件来说,它是无法拷贝移动的。
is_uploaded_file() 函数便是用于判断要操作的文件是不是一个 PHP 已上传文件。

通过上面这两个函数,相信不少人都会想到文件上传中他们的利用,这里就给出一个大略的伪代码。

if(!move_uploaded_file('xxxx', 'xxxx')){ if(copy('xxxx', 'xxxx')){ // 上传成功 }else{ // 上传失落败 }}

很多教程里都会有这样的写法,乃至一些框架中也会有这样的写法。
实在便是先利用 move_uploaded_file() 去移动上传文件,如果失落败了,再利用 copy() 函数拷贝一次。
如果还是失落败了,就认为全体上传操作失落败了。

rename() 函数用于给文件改名,实在它便是类似于 Linux 系统中的 mv 命令。

is_file() 函数用于判断给定的文件是否是一个正常的文件。
在操作系统中,特殊是 Linux 系统中,统统皆文件,以是这个函数真正最常用的场景是判断给定的路径到底是目录还是一个文件,很多时候我们会用它来判断上传成功后的文件是否正常,或者判断一个给定的路径到底是一个目录还是一个文件。

末了便是 unlink() 函数。
在 PHP 中,没有 delete 或者 rm 这样的函数,unlink() 便是用于删除文件的。
不过它的名字起得却像是要解除符号连接文件的连接一样,不管是连接文件还是普通文件,都是通过这个 unlink() 函数来进行删除的。

文件一次性读取

关于文件一次性读取到内容和流式按字节或行来读取的内容我们之前已经有一篇文章详细的学习讲解过,大家可以移步 PHP大文件读取操作 中查看。
以是这里我们就大略的贴出代码演示一下。

var_dump(file_exists('test.txt')); // bool(true)var_dump(readfile('test.txt')); // asdfasdfint(8)var_dump(file('test.txt'));// array(1) {// [0]=>// string(8) "asdfasdf"// }$c = file_get_contents('test.txt');var_dump($c); // string(8) "asdfasdf"var_dump(file_put_contents('fpc_test.txt', $c)); // int(8)

file_exists() 函数是专业的用于判断文件是否存在的函数,上面的 is_file() 会更多地用于上传之后的操作。
而 file_exists() 则是在日常的代码编写中非常常用的函数。
readfile() 直接读取文件内容到内容中,file_get_contents() 也是这样的功能,只不过 file_get_contents() 返回的因此字符串为格式的文件内容。
把稳看我们 var_dump() 的结果,file_get_contents() 明显的标了是 string(8) 这样的类型,而 readfile() 是直接输出内容,不走缓冲区的,也便是说它是类似于 phpinfo() 这样的函数。
须要利用 ob_start() 之类的函数才能将 readfile() 函数读取的内容放到一个变量中,我们之前的文章也专门讲过缓冲区的观点,PHP中的输出缓冲掌握 。
它的返回值是文件的字节数,也便是后面的 int(8) 。

file() 函数是将文件的内容保存到一个数组中,它会默认以行进行分隔,也便是每一行分为数组中的一个元素。

file_put_contents() 是将给定的内容写入到一个文件中,和 file_get_contents() 合营也可以实现一个拷贝的操作。

文件属性

var_dump(fileatime('test.txt')); // int(1603243708)var_dump(filectime('test.txt')); // int(1603242166)var_dump(filemtime('test.txt')); // int(1603242166)var_dump(fileinode('test.txt')); // int(8707958352)var_dump(filesize('test.txt')); // int(8)var_dump(filetype('test.txt')); // string(4) "file"var_dump(is_executable('test.txt')); // bool(true)var_dump(is_writable('test.txt')); // bool(true)var_dump(is_readable('test.txt')); // bool(true)

很明显,fileatime() 、filectime() 、filemtime() 对应的便是文件的上次访问韶光、inode修正韶光以及修正韶光,和 Linux 系统中的文件干系的那三个韶光观点同等。
fileinode() 用于得到文件的 inode 信息。
filesize() 便是文件的大小,filetype() 是文件的类型信息。

is_executable() 用于判断文件是否可以实行,is_writable() 、is_readable() 判断文件是否可以写和读。
这三个函数对应的便是文件的权限干系的判断。

创建不重名文件及临时文件

var_dump(tempnam('./', 't_')); // string(70) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202010/source/t_Gx6S5d"$temp = tmpfile();fwrite($temp, "writing to tempfile");fseek($temp, 0);// sleep(30); // /tmp/phpU2LZ3V 文件echo fread($temp, 1024), PHP_EOL; // writing to tempfilefclose($temp); // 文件直接被删除了

tempnam() 函数会根据指定的 prefix 参数来天生一个随机不重名的空文件。
在测试代码中,我们给定的 prefix 的值是 t_ ,末了天生的文件便是 t_Gx655d 这样一个空的文件。

tmpfile() 在之前的文章中也讲解过,它是天生一个临时文件,一样平常会放在 /tmp 目录下(如果你没有修正 php.ini 文件中的干系设置的话)。
这个函数创建文件后会返回一个句柄,一旦利用 fclose() 关闭了这个文件句柄,那么文件就立时会被删除掉。

按规则返回目录内容

foreach (glob(".txt") as $filename) { echo "$filename size: " . filesize($filename) , PHP_EOL;}// cp_test.txt size 8// fpc_test.txt size 8// ltest.txt size 8// ltest2.txt size 8// new_re_test.txt size 8// test.txt size 8// test3.txt size 0foreach (glob("../../202009/.md") as $filename) { echo "$filename size: " . filesize($filename) , PHP_EOL;}// ./../202009/1.PHP中的PDO操作学习(三)预处理类及绑天命据.md size: 16881// ../../202009/10.PHP中非常好玩的Calendar扩展学习.md size: 8784// ../../202009/11.学习PHP中的国际化功能来查看货币及日期信息.md size: 5521// ../../202009/12.PHP中的日期干系函数(一).md size: 14217// ../../202009/13.PHP中的日期干系函数(二).md size: 9858// ../../202009/2.PHP中的PDO操作学习(四)查询构造集.md size: 12825// ../../202009/3.在PHP中利用SPL库中的工具方法进行XML与数组的转换.md size: 6068// ../../202009/4.PHP中的MySQLi扩展学习(一)MySQLi先容.md size: 6029// ../../202009/5.PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法.md size: 9726// ../../202009/6.PHP中的MySQLi扩展学习(三)mysqli的基本操作.md size: 9403// ../../202009/7.PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句.md size: 3556// ../../202009/8.PHP中的MySQLi扩展学习(五)MySQLI_STMT工具操作.md size: 7450// ../../202009/9.PHP中的MySQLi扩展学习(六)MySQLI_result工具操作.md size: 10650

glob 函数也是之前有讲解过的一个函数,它会根据指定的规则返回目录中的所有文件或者目录信息。
可以方便地用于目录地遍历操作。
把稳这里的规则参数不是完备的正则表达式,关于它详细支持的语法可以自行查阅干系的文档。

文件 umask 操作

$old = umask(0);echo $old, PHP_EOL; // 18$now = umask();echo $now, PHP_EOL; // 0

umask() 函数便是操作当前实行进程的 umask 信息,和 Linux 中的 umask 命令一样,用于指定当前创建的目录文件的默认权限信息。
在 PHP 中,umask() 将 PHP 的 umask 设定为 mask & 0777 ,并返回原来的 umask 。
当 PHP 被作为做事器模块利用时,在每个要求结束后 umask 会被规复。
详细的 umask 知识大家可以参考 Linux 中的干系内容。

配置文件信息读取

末了这两个函数是用于读取 PHP 类型的配置文件信息的,什么叫 PHP 类型的配置文件信息?实在便是类似于 php.ini 文件那样的配置文件,key=value 这种形式的配置文件。
就像 Laravel 的 .env 文件也是可以利用这两个函数进行读取的。

var_dump(parse_ini_file('/usr/local/etc/php/7.3/php.ini'));// array(133) {// ["#zend_extension"]=>// string(9) "xdebug.so"// ["extension"]=>// string(6) "vld.so"// ["engine"]=>// ……// ……var_dump(parse_ini_file('/usr/local/etc/php/7.3/php.ini', true));// array(38) {// ["#zend_extension"]=>// string(9) "xdebug.so"// ["extension"]=>// string(6) "vld.so"// ["PHP"]=>// array(45) {// ["engine"]=>// string(1) "1"// ["short_open_tag"]=>// ……// ……

parse_ini_file() 函数便是直接读取指定路径的配置文件内容,在这里我们直接测试的便是读取 php.ini 文件。
它有一个可选参数,如果设置为 true 的话,返回的便是数组分类的构造化的内容。

$ini = file_get_contents('/usr/local/etc/php/7.3/php.ini');var_dump(parse_ini_string($ini));// array(133) {// ["#zend_extension"]=>// string(9) "xdebug.so"// ["extension"]=>// string(6) "vld.so"// ["engine"]=>// ……// ……var_dump(parse_ini_string($ini, true));// array(38) {// ["#zend_extension"]=>// string(9) "xdebug.so"// ["extension"]=>// string(6) "vld.so"// ["PHP"]=>// array(45) {// ["engine"]=>// string(1) "1"// ["short_open_tag"]=>// ……// ……

parse_ini_string() 则是从给定的字符串中读取配置信息,同样也有一个格式化分组输出的参数可选。
它和 parse_ini_file() 是完备相同的,唯一的差异便是一个是从文件路径读取,一个是从字符串读取。

总结

一口气先容了这么多函数,大家是不是都用过呢?有人要说了,写这玩意干嘛,直接去看文档不就好了嘛?那可不一样哦,文档中很多函数的先容就一句话,示例代码也都是利用英文注释的,咱这虽说也是一个搬运工,但咱不仅是大略地搬运了一下,还把例子重写了,其余还加上了一些运用处景的先容哦!
至于各位看官觉得好不好,那就仁者见仁,智者见智咯!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/7.PHP中的文件系统函数(二).php

参考文档:

https://www.php.net/manual/zh/ref.filesystem.php

标签:

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0