和数据库操作一样,操作文件同样也分为打开文件,读取文件,写入文件和关闭文件四步。
一、打开关闭文件
1、fopen()函数打开文件,它有两个参数第一个是文件名,第二个是打开方式。
// 获取文件路径
$filePath = "psg.txt";
// 打开文件,将资源绑定到一个流或者句柄,绑定之后,脚本就可以通过句柄与此资源交互。
$fileHandle = fopen($filePath, "a+");
fopen()函数第二个参数可能的值
mode | 说明 |
---|---|
r | 只读方式打开,文件从头开始读。 |
r+ | 读写方式打开,文件从头开始读写。 |
w | 只写方式打开文件,从文件开头开始写。如果文件已经存在,将文件指针指向文件头并将文件大小截为零,即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。 |
w+ | 读写方式打开文件,如果文件已经存在,将文件指针指向文件头并将文件大小截为零。即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。 |
a | 写入方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加,如果该文件不存在,函数将创建这个文件。 |
a+ | 读写方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加或者读,如果该文件不存在,函数将创建这个文件。 |
2、fclose() 关闭文件。文件指针必须有效,并且是通过fopen()或fsockopen()成功打开的文件。虽然每个请求最后都会自动关闭文件,但明确的关闭打开的所有文件是一个好的习惯。
// 打开文件
fopen("psg.txt");
// 关闭文件
fclose("psg.txt");
二、读取文件
php提供了很多从文件中读取数据的方法,不仅可以一次只读取一个字符,还可以一次读取整个文件。
1、fread()函数从指定的资源中读取length个字符当到达EOF(文件结束符)或者读取到length个字符时读取将停止。
// 获取文件路径
$filePath = "psg.txt";
// 打开文件
$fileHandle = fopen($filePath, "a+");
// fread()读取文件 要读取文件的最大字节数,3个字节表示一个汉字
// filesize()读取整个文件
$str = fread($fileHandle, filesize($filePath));
echo $str;
filesize()函数读取整个文件。
2、fgets()函数从handle(句柄)指定的资源中读取一行字符。碰到换行符(包括在返回值中)、EOF或者已经读取了length-1字节后停止(看先碰到哪一种情况)。
// 获取文件路径
$filePath = "psg.txt";
// 打开文件
$fileHandle = fopen($filePath, "a+");
//fgets()从句柄中指定的资源中按某一标准读取一行字符。
while ($str = fgets($fileHandle)) { //遍历读取全部内容
echo nl2br($str); //按换行符读取
}
注意如果没有指定length,则默认为1K,或者说1024字节。
3、file()函数将文件读取到数组中,各元素由换行符分隔。
// file()将文件读取到数组中,按换行符分隔
$arr = file("psg.txt");
print_r($arr);
4、file_get_contents()函数将文件内容读取到字符串中。
// file_get_contents()将文件内容读到字符串中
echo file_get_contents("psg.txt");
三、写入文件
1、fwrite()将内容写入到打开的文件中,如果指定length参数,将在写入length个字符时停止,成功返回字节数,失败返回false。
// fwrite()将内容写入到打开的文件中,成功返回字节数,失败返回false
echo fwrite($fileHandle, "\n上兵伐谋,其次伐交,\n其次伐兵,其下攻城。");
2、file_put_contents(file,data,mode,context)函数把一个字符串写入文件中。 后两个参数可选,如果文件不存在,将会创建一个文件,成功返回字节数量。
file文件名。
data要写入的字符串。
mode有多个可选值其中FILE_APPEND表示在文件末尾插入内容。
// 在文件末尾插入内容
echo file_put_contents($filePath,"\n上兵伐谋,其次伐交,\n其次伐兵,其下攻城。", FILE_APPEND);
// 创建文件并插入内容
echo file_put_contents("liangxi.txt","胜败兵家事不期,\n包羞忍辱是男儿;\n江东子弟多才俊,\n卷土重来未可知。");
四、复制、重命名、删除文件
1、copy() 复制文件 成功返回true,失败返回false
// copy() 复制文件 成功返回true,失败返回false
echo copy($filePath, "liangxi.txt");
2、rename(oldname,newname) 函数重命名文件或目录,成功返回true,失败返回false
// rename(oldname,newname) 函数重命名文件或目录,成功返回true,失败返回false
rename($filePath, "sunzibingfa.txt");
3、unlink() 函数删除文件,成功返回true,失败返回false
// unlink() 函数删除文件,成功返回true,失败返回false
unlink("sunzibingfa.txt");
五、读取目录
1、opendir()打开目录句柄。
2、 closedir()关闭目录句柄。
3、readdir()返回指定目录中的各个元素。可以使用此函数列出给定目录中的所有文件和子目录。
// opendir()打开目录句柄
$dirHandle = opendir(".");
// 读取文件 返回目录中的文件
while ($file = readdir($dirHandle)) {
echo $file . "<hr/>";
};
// 关闭目录
closedir($dirHandle);
. 表示当前目录
4、scandir()获取目录中的所有文件和子目录放到数组中。
// 获取所有文件放到数组中
$arr = scandir(".");
var_dump($arr);
5、mkdir() 创建文件夹
6、rmdir() 删除文件夹
// 创建文件夹,注意文件夹只能逐级创建,然后逐级删除
mkdir("newfile");
mkdir("newfile/file");
rmdir("newfile/file");
rmdir("newfile");
六、其他文件操作函数
1、filesize() 取得文件的大小,以字节为单位。
echo filesize("test.txt");
2、filectime() 获取指定文件最后修改时间,单位为s。
3、fileatime() 获取文件最后访问的时间。
4、filemtime() 获取文件内容最后修改时间。
// 获取指定文件的上次修改时间,单位为s
echo filectime("test.txt");
echo "Last change: ".date("F d Y H:i:s.",filectime("test.txt"));
echo "<hr/>";
// 获取文件上次访问的时间
echo fileatime("test.txt");
echo "Last change: ".date("F d Y H:i:s.",fileatime("test.txt"));
echo "<hr/>";
// 获取文件内容最后修改时间,修改情况是指:权限的修改、所有者的修改、用户组的修改或其他元数据的修改。
echo filemtime("test.txt");
echo "Last change: ".date("F d Y H:i:s.",filemtime("test.txt"));
5、file_exists() 检查文件是否存在,存在返回true否则返回false。
// 检查文件是否存在,存在返回true否则返回false。
file_exists("test.txt");
6、is_readable() 判断文件是否可读,如果文件存在并且可读,存在返回true否则返回false。
7、is_writable() 判断文件是否可写,如果文件存在并且可写,存在返回true否则返回false。
七、解析目录路径函数
1、basename(string path, suffix) 获取文件名,可指定可选参数suffix会将这部分内容去掉。
2、dirname() 获取目录名
3、pathinfo() 返回关联数组,包含目录,文件名,扩展名。
$path = "PHP/four/test.txt";
// 获取文件名
echo basename($path, ".txt");
echo "<hr/>";
// 获取目录名
echo dirname($path);
echo "<hr/>";
// 返回关联数组,包含目录,文件名,扩展名
print_r(pathinfo($path));
4、chmod() 函数改变指定文件的权限,如果成功则返回 TRUE,如果失败则返回 FALSE。
以上内容纯属个人理解,由于本人水平有限,若有错漏之处,敬请指出改正,谢谢!