PHP文件操作
# 文件读取/写入操作
方法 | 备注 |
---|---|
fopen | 用来打开一个文件,打开时需要指定打开模式 |
fwrite | 写入函数 |
fread、fgets、fgetc | 读取 |
fclose | 关闭 |
file_get_contents、file_put_contents、file | 不需要fopen打开的操作 |
# fopen打开文件模式整理
打开模式 | 描述 |
---|---|
r | 只读方式打开,将文件指针指向文件头。 |
r+ | 读写方式打开,将文件指针指向文件头。 |
w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
x | 创建并以写入方式打开,将文件指针指向文件头。 如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。 如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL |
b | 打开一个二进制文件 |
t | 打开windows独有的文件类型 |
如何去读写一个文件?
$file = './1.txt';
$handle = fopen($file, 'r');
$content = fread($handle, filesize($file));
$content = 'hello world' . $content;
fclose($handle);
$handle = fopen($file, 'w');
fwrite($handle, $content);
fclose($handle);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 访问远程文件
php中开启allow_url_fopen,HTTP协议连接只能使用只读,FTP协议可以使用只读和只写
# 目录操作
函数 | 描述 |
---|---|
名称相关 | basename()、dirname()、pathinfo() |
目录读取 | opendir()、readdir()、closedir()、rewinddir() |
目录删除 | rmdir() |
目录创建 | mkdir() |
文件大小 | filesize() |
目录大小 | disk_free_space()、disk_total_space() |
文件拷贝 | copy() |
删除文件 | unlink() |
文件类型 | filetype() |
重命名文件或者目录 | rename() |
文件截取 | ftruncate() |
文件属性 | file_exists()、is_readable()、is_writable()、is_executable()、filectime()、fileatime()、filemtime() |
文件锁 | flock() |
文件指针 | ftell()、fseek()、rewind() |
如何去扫描一个目录下的文件?
function loopDir($dir)
{
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
echo "$file\n";
if (filetype($dir.'/'.$file) == 'dir') {
loopDir($dir.'/'.$file);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 会话控制
# 为什么要使用php会话技术
http协议本身是无状态的,用户在两个不同的页面发起请求,对于服务端而言是无法坚定请求是否是来源于同一个用户。会话控制就是为了解决这种问题,用于识别用户请求。
# cookie如何操作?
// 设置cookie
setcookie($name,$value,$expire,$path,$domain,$secure);
// 读取cookie
$_COOKIE
// 删除cookie
setcookie($name, '', time() - 1000)
1
2
3
4
5
6
2
3
4
5
6
# cookie优点和缺点
- cookie将信息存储在客户端,不会占用服务器资源。
- Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。
- 由于在HTTP请求中的cookie是明文传递的,潜在的安全风险,Cookie 可能会被篡改
# session
Session基于cookie的,存储在服务器端,用户每次请求浏览器的时候会携带sessionID,服务端根据sessionID来读取会话。
session如何操作?
// 开启session
session_start();
// 读取session
$_SESSION
// 清空session
$_SESSION = [];
// 删除session文件
session_destroy();
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
php.ini中session如何配置?
// 是否自动开启session_start
session.autostart
// 存储session的cookie的有效域名是什么
session.cookie_domain
// 存储session的cookie路径
session.cookie_path
// 存储的sessionid的名称
session.name
// 存储的session的路径
session.save_path
// session的垃圾回收
// 每100次调用session_start会有一次去清文件,清空当前时间-文件最后修改时间大于gc_maxlifetime的文件
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
// session存储的句柄
session.save_handler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# session的优缺点
由于存储在服务器端所以比较安全,但是由于存储在服务器端会存在服务器资源占用问题
# 传递SessionID的问题
1、session是基于cookie的,但是如果我们禁用掉cookie的话,该怎么办呢?
可以使用session_name()和session_id()来传递或者SID
// 可以使用session_name()和session_id()
<a href="demo.php?SESSIONID=<?php echo session_name()."=".session_id()?>">下个页面</a>
// 使用SID,如果开启cookie的话,SID是空,否则就是session_name()和session_id()的拼接
<a href="demo.php?SESSIONID=<?php echo SID?>">下个页面</a>
1
2
3
4
5
2
3
4
5
上次更新: 2020/12/31, 06:55:18