07.file
goer ... 2022-01-07 大约 5 分钟
[toc]
# 文件操作
对操作文件
# 1.fopen()
fopen() 打开文件 是一个资源
$res = fopen('one.txt','a+'); //当前目录下的one.txt a+可读可写
var_dump($res); //resource(3, stream) 是一个资源
1
2
3
2
3
"r" (只读方式打开,将文件指针指向文件头)
"r+" (读写方式打开,将文件指针指向文件头)
"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
"x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
"x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)"r" (只读方式打开,将文件指针指向文件头)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.fclose()
关闭文件,fclose很少使用,PHP有垃圾回收机制
// 执行完一个页面后自动回收页面资源
fclose($res);
1
2
2
# 3.文件读取
# a. fread()
从资源内读取数据 , 读取不重复
//a.txt 内: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$res = fopen('a.txt',"a+");
$str1 = fread($res,10); //读取10个字符
$str2 = fread($res,100); //接着后面读取,到最后没有返回false
1
2
3
4
2
3
4
拓展:
utf-8编码:汉字占3个字符 空格占两个字符
# b.fgets()
每次读取文件的一行文本 读取不重复
$str3 = fgets($res); //读取一行 最后false
//读取所有内容
while($a=fgets($res)){
$a.=$a."<br>";
}
1
2
3
4
5
2
3
4
5
# c.file_get_contents()
不需要使用资源,直接从文件内读取所有内容
file_get_contents('a.txt');
1
//读取图片要使用图片声明
header('Content-Type:jpge');
echo file_get_contents('one.jpg');
1
2
3
2
3
# d. file()
函数将文件读取到数组中,各元素由换行符分隔。
// 一行一行的读取 放在数组内
a.txt
aaa
bbb
ccc ddd
eee
$arr = file('文件路径'); //文件路径
print_r($arr);// ['aaa','bbb','ccc ddd','eee'];
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4. filesize()
获取文件大小
echo filesize('a.txt'); //几B
// 读取的文件和脚本文件 也要是utf-8编码
//写一个计算文件大小的函数 pow()
1
2
3
4
2
3
4
拓展:
B-字节 Bit-比特位
KB-千字节 MB GB TB
1 Byte = 8 bits; // 1字节=8比特(位)
1 KB = 1024 Bytes; //依次内推 1B(字节)
1
2
2
# 5.文件写入
写入到文件内
# a.file_put_contents()
直接将字符串覆盖存入文件内,新内容覆盖旧内容
file_put_contents('a.txt','aadfasdsaf'); //第二个参是需要写入的内容
1
# b.fwrite() / fputs(安全)
不会覆盖文件内容 使用文件资源
a+指针在文件最后,fwrite存入的内容会接着文件后面存入
$res = fopen('b.txt','a+'); //a+指针在文件最后 文件不存在会创建
fwrite($res,'adafdsf'); // 第二个参是需要写入的内容
1
2
3
2
3
# 6.文件复制
复制文件 copy()
copy('a.txt','b.txt');
1
# 7.重命名和剪切
重命名 rename()
rename('a.txt','aa.txt');
rename('a.txt','aaa/bbb/a.txt');
1
2
2
# 8.删除文件
删除文件 unlink()
unlink('aaa/bbb/a.txt');
1
# 9.文件时间
一定要设置时区
date_default_timezone_set('PRC'); //设置时区
// 文件创建的时间,返回时时间戳,所有格式化
filectime() //参数文件路径
echo date('Y-m-d H:i:s',filection('a.txt'));
filemtime() //文件最后内容修改的时间
echo date('Y-m-d H:i:s',filemtime('a.txt'));
fileatime() //文件内容 权限等修改后的时间
echo date('Y-m-d H:i:s',fileatime('a.txt'));
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 10.判断文件
==重要==file_exists()
判断文件是否存在,返回布尔值
var_dump(file_exists('a.txt')); //true
1is_readable() is_writeable() 可写
判断文件是否可读
var_dump(is_readable('a.txt')); //true
1is_dir()
判断文件是否是文件夹
var_dump(dir('a.txt'));//false
1is_file()
判断是否是文件
var_dump(is_file('a.txt')); //true
1feof()
测是否已到达文件末尾 (eof)。
//读取全部内容 $file = fopen("test.txt", "r"); while(! feof($file)) { echo fgets($file). "<br />"; } fclose($file);
1
2
3
4
5
6
7
8filetype()
返回文件类型
echo filetype('a.txt'); //file
1
- 指针(鼠标)位置 fseek() frwind()
$res3 = fopen('a.txt','r'); //只读,指针指向开头
//fwrite('$res3','bbb');
fseek($res3,20); //改变指针 在20b的位置
frwind($res3); //文件指针的位置倒回文件的开头。
$str2 = fread($res3,filesize('a.txt'));
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- tmpfile() 临时文件
tmpfile() 函数以读写(w+)模式建立一个具有唯一文件名的临时文件。
文件会在关闭后(用 fclose())自动被删除,或当脚本结束后。
$tmp = tmpfile();
1
2
3
2
3
# 11.文件名
文件路径:
// 1. 当前文件路径
echo __FILE__;
echo __DIR__;
// 右斜杠在服务器linux无效
$path = str_replace('\\','/',__FILE__); //字符串替换
// 2. dirname() 只返回路径的文件夹部分
echo dirname('../def/a.txt'); //文件夹部分
// 3. basename() 两个参数
echo basename($path); // 返回文件名
echo basename($path,'后缀名') // 只返回文件名称不包含后缀
// 4.pathinfo() 将完整路径解析后存储到数组内
打印数组处来看 pathinfo($p);
echo pathinfo($p)['extension']; //后缀名
echo pathinfo($p,PATHINFO_EXTESION); //后缀名
echo pathinfo($P,PATHINFO_BASENAME); // 获取文件完整名称
echo pathinfo($P,PATHINFO_DIRNAME); // 获取文件路径的目录部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 文件包含
引入文件
1. include
包含并运行指定文件,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告这一点和require不同,后者会发出一个致命错误
2. include_once
在脚本执行期间包含并运行指定文件,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。
3. require
require 和 include几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include只产生警告(E_WARNING),脚本会继续运行。
4. require_once
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12