xiaoyi's blog
首页
  • 后端文章

    • PHP
  • 学习笔记

    • 《Git》学习笔记
  • MySQL
  • NoSQL
  • 中间件
  • Linux
  • Nginx
  • 网络
  • Mac
  • 学习笔记

    • 《Nginx》学习笔记
  • 学习
  • 博客搭建
  • 技术文档
  • GitHub技巧
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub

xuexuguang

后端新秀
首页
  • 后端文章

    • PHP
  • 学习笔记

    • 《Git》学习笔记
  • MySQL
  • NoSQL
  • 中间件
  • Linux
  • Nginx
  • 网络
  • Mac
  • 学习笔记

    • 《Nginx》学习笔记
  • 学习
  • 博客搭建
  • 技术文档
  • GitHub技巧
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub
  • 学习

  • GitHub技巧

  • 面试

    • 面试问题集锦
    • PHP基础
    • 正则表达式
    • PHP文件操作
      • 文件读取/写入操作
      • fopen打开文件模式整理
      • 访问远程文件
      • 目录操作
      • 为什么要使用php会话技术
      • cookie如何操作?
      • cookie优点和缺点
      • session
      • session的优缺点
      • 传递SessionID的问题
    • PHP会话控制
    • 自定义函数及内置函数
    • MVC对比
    • linux
    • MySQL数据库基础
    • MySQL创建高性能的索引
    • MySQL的SQL优化
    • MySQL的高可扩展和高可用
    • MySQL安全
    • 常见算法
    • 常见数据结构
    • 高并发解决方案
    • 流量优化
    • 浏览器缓存和数据压缩
    • 图片优化
    • 静态化处理
    • 动态语言并发处理
    • 数据库缓存优化
    • 负载均衡
  • 博客搭建

  • 心情杂货

  • 技术文档

  • 实用技巧

  • 友情链接
  • 更多
  • 面试
xuexuguang
2020-12-31

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

# 访问远程文件

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

# 会话控制

# 为什么要使用php会话技术

http协议本身是无状态的,用户在两个不同的页面发起请求,对于服务端而言是无法坚定请求是否是来源于同一个用户。会话控制就是为了解决这种问题,用于识别用户请求。

# cookie如何操作?

// 设置cookie
setcookie($name,$value,$expire,$path,$domain,$secure);
// 读取cookie 
$_COOKIE
// 删除cookie
setcookie($name, '', time() - 1000)
1
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

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

# 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
编辑
#php面试题
上次更新: 2020/12/31, 06:55:18
正则表达式
PHP会话控制

← 正则表达式 PHP会话控制→

最近更新
01
MVC对比
12-31
02
负载均衡
12-31
03
数据库缓存优化
12-31
更多文章>
Theme by Vdoing | Copyright © 2020-2020 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式