PHP 文件与目录操作

摘要:PHP学习笔记(四)

一、判断普通文件和目录

1
2
3
4
5
6
7
8
9
1.is_file()
判断给定文件名是否为一个正常的文件
语法:is_file(file) //规定要检查的文件。
如果文件是常规的文件,该函数返回 TRUE

2.is_dir()
判断给定文件名是否是一个目录
语法: is_dir(file)
如果文件名存在并且为目录,则返回 true。如果 file 是一个相对路径,则按照当前工作目录检查其相对路径。

二、文件的属性

1.file_exists()
检查文件或目录是否存在

1
语法:file_exists(path)   //path为规定要检查的路径。

如果指定的文件或目录存在则返回 true,否则返回 false。

2.filesize()
取得普通文件大小

1
语法: filesize(filename)  //filename为规定要检查的文件。

若成功,则返回文件大小的字节数。若失败,则返回 false 并生成一条 E_WARNING 级的错误。

3.is_readable()
判断给定文件名是否可读

1
语法: is_readable(file)

如果由 file 指定的文件或目录存在并且可读,则返回 TRUE。

4.is_writable()
判断给定的文件名是否可写

1
语法: is_writable(file)

如果文件存在并且可写则返回 true。file 参数可以是一个允许进行是否可写检查的目录名。

5.filectime()
获取指定文件的上次访问时间。

1
语法: fileatime(filename)

该函数返回文件上次被访问的时间。如果出错则返回 false。时间以 Unix 时间戳的方式返回。

6.filemtime()
获取文件的修改时间

1
语法: filemtime(filename)

返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。

7.fileatime()
获取指定文件的上次 inode 修改时间。

1
语法: fileatime(filename)

返回文件上次 inode 被修改的时间。如果出错则返回 false。时间以 Unix 时间戳的方式返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fileatime、filemtime与filectime区别
<?php
$file = "1.txt";
outputFileTestInfo( $file );
function outputFileTestInfo( $f ){
if ( ! file_exists( $f ) ){
print "$f does not exist<BR>";
return;
}
print "$f was accessed on ".date( "D d M Y g:i A", fileatime( $f ) )."<br>";
print "$f was modified on ".date( "D d M Y g:i A", filemtime( $f ) )."<br>";
print "$f was changed on ".date( "D d M Y g:i A", filectime( $f ) )."<br>";
}
?>
/*
输出:
1.txt was accessed on Sun 13 Sep 2020 7:16 PM
1.txt was modified on Sun 13 Sep 2020 5:23 PM
1.txt was changed on Sun 13 Sep 2020 7:16 PM
*/

8.stat()
获取文件大部分属性值

三、目录的基本操作

1.basename()
返回路径中的文件名部分

1
语法:basename(path)或basename(path,文件拓展名)  

例:

1
2
3
4
5
6
7
<?php
$path = "demo/test.php";
//Show filename with file extension
echo basename($path) ."<br/>"; //输出test.php
/Show filename without file extension
echo basename($path,".php"); //输出 test
?>

2.dirname()
返回路径中的目录部分

1
语法: dirname(path)

案例:

1
2
3
4
<?php
echo dirname("c:/testweb/home.php"); //输出c:/testweb
echo dirname("/testweb/home.php"); //输出testweb
?>

3.pathinfo()
以数组的形式返回文件路径的信息。

1
语法: pathinfo(path,options)

用法:
pathinfo() 返回一个关联数组包含有 path 的信息。包括以下的数组元素:[dirname]( 目录路径)、[basename] (文件名)、[extension]: (文件后缀名)、[filename] (不包含后缀的文件名)。
其中options为规定要返回的数组元素。默认是 all。
若出现PATHINFO_DIRNAME , 则只返回 dirname
若出现PATHINFO_BASENAME , 则只返回 basename
若出现PATHINFO_EXTENSION ,则只返回 extension

例:

1
2
3
<?php
print_r(pathinfo("index.html"));
?>

输出:

1
Array ( [dirname] => . [basename] => index.html [extension] => html [filename] => index )

4.opendir()
打开目录句柄

1
2
语法:opendir(path);
//path为规定要打开的目录路径。。

5.readdir()
从目录句柄中读取条目,返回目录中下一个文件的文件名

1
2
readdir(dir_handle);
//dir_handle指定之前由 opendir() 打开的目录句柄资源。如果该参数未指定,则使用最后一个由 opendir() 打开的链接。

6.rewinddir()
倒回目录句柄

1
2
语法:rewinddir(dir_handle);
//rewinddir() 函数重置由 opendir() 创建的目录句柄。

7.closedir()
关闭目录句柄

1
语法:closedir(dir_handle);

8.mkdir()
新建目录,如果成功该函数返回 true,如果失败则返回 false。

1
语法:mkdir(path,mode,recursive)

9.rmdir()
删除指定的空目录,如果成功该函数返回 true,如果失败则返回 false。

1
语法:rmdir(dir)

10.scandir()
返回指定目录中的文件和目录的数组。

1
2
3
4
5
6
7
语法:scandir(directory,sorting_order);
/*
directory为要扫描的目录。
sorting_order为排列顺序。默认是 0,表示按字母升序排列。
如果设置为 sorting_order_descending 或者 1,则表示按字母降序排列。
如果设置为 sorting_order_none,则返回未排列的结果。
*/

四、文件的基本操作

1.fopen(): 打开文件或者 URL
fopen()函数的参数是目标文件的路径和文件的读写模式;同时fopen函数也会 在打开文件时候发现没有文件会自动创建一个文件,但是模式必须是读写或写入的模式

1
2
$file=fopen("D:/test/file.txt","r");//使用绝对路径打开一个文件,选择只读模式,并返回资源$file
$file=fopen("http://www.test.com","r");//打开远程文件,使用http协议只能以读的方式打开

2.fread():读取文件

1
fread($file,filesize("file.txt"));

fread()函数的参数是需要读取的文件和文件读取的最大字节数

3.fgets():从文件指针中读取一行

1
fgets($file);

读取文件中的单行文字,没读取一次就会将文件指针指向下一行的首部

fgetc():读取单个字符

1
fgetc($file);

fgetc()函数将会逐个字符的读取内容输出;

4.feof():检查文件指针是否到了文件结束的位置

1
feof($file);

feof()函数的主要功能是检查文件中的指针是否到达文件末尾,可以借此来解决未知大小的文件读写防止越界的问题

5.fwrite():写入文件

1
fwrite(file,string,length)

fwrite() 返回写入的字符数,出现错误时则返回 false。

1
2
3
4
5
6
7
<?php
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World");
fclose($file);
?>
//输出
11

6.rewind()
倒回文件指针的位置

7.flock()
轻便的咨询文件锁定

8.ftruncate()
将文件截断到给定的长度

9.fclose():关闭一个已打开的文件指针

1
fclose(file)

file 参数是一个文件指针,fclose() 函数关闭该指针指向的文件。如果成功则返回 true,否则返回 false。

10.file() :把整个文件读入一个数组中

1
file(path)

file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。

1
2
3
4
5
<?php
print_r(file("test.txt"));
?>
//输出
Array ( [0] => Hello World [1] => abc [2] => fe [3] => vdf )

11.copy():拷贝文件

1
2
copy(source,destination)
//source 为要复制的文件,destination 为复制文件的目的地。

将文件从 source 拷贝到 destination。如果成功则返回 TRUE,否则返回 FALSE。

1
2
3
<?php
echo copy("a.txt","b.txt");
?>

12.unlink():删除文件

1
unlink(filename)

删除文件若成功,则返回 true,失败则返回 false。

1
2
3
4
5
6
7
8
9
10
11
<?php
$file = "test.txt";
if (!unlink($file))
{
echo ("Error deleting $file");
}
else
{
echo ("Deleted $file");
}
?>

13.file_get_contents():将整个文件读入一个字符串

1
file_get_contents(path)

14.file_put_contents():将字符串写入文件中

1
file_put_contents(file,data)

file_put_contents() 函数把一个字符串写入文件中。与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

1
2
3
<?php
echo file_put_contents("test.txt","Hello World!");
?>

15.rename():重命名一个文件或目录

1
2
rename(oldname,newname)
//oldname 要重命名的文件或目录。newname 文件或目录的新名称。

16.readfile();读入一个文件并写入到输出缓冲

1
readfile(filename)

该函数读入一个文件并写入到输出缓冲。若成功,则返回从文件中读入的字节数。若失败,则返回 false。

1
2
3
4
5
<?php
echo readfile("test.txt");
?>
//输出
Hello World!12

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!