PHP 文件操作

(本文为个人学习过程的备忘录。内容持续更新)


打开文件 fopen()

$file = fopen("./file.txt", "r");

参数表

  • 文件路径
  • 打开方式
模式描述
r只读。从文件开头开始
r+读写。从文件开头开始
w只写。打开并清空文件内容。文件不在则新建
w+读写。打开并清空文件内容。文件不在则新建
a追加。打开文件并从末尾继续。文件不在则新建
a+读/追加。
x只写。创建新文件。若文件已在,则返回false和一个错误
x+读写。

返回数据

打开成功则返回文件指针。失败返回 false.


关闭文件 fclose()

fclose($file);

文件锁 flock()

函数原型

flock(resource $stream, int $operation, int &$would_block = null): bool

参数表

  • 文件指针:已经打开的文件
  • 操作(可通过位运算多选)
操作说明
LOCK_SH获取共享锁(reader)
LOCK_EX获取独占锁(writer)
LOCK_UN解锁
LOCK_NBshould not block

返回数据

bool: 是否成功。上锁失败,则返回false.

样例

$file = fopen(...);

if (flock($file, LOCK_EX)) { // 获取锁。可能会造成阻塞。
    ...;
    flock($file, LOCK_UN); // 解锁
} else {
    ...; // 上锁失败。
}

if (flock($file, LOCK_EX | LOCK_NB)) { // 获取锁。若文件已被锁,则进入else,不会造成阻塞。
    ...;
    flock($file, LOCK_UN); // 解锁。
} else {
    ...; // 上锁失败
}

结尾判断 feof()

函数原型

feof(resource $stream): bool

读取字符 fgetc()

函数原型

fgetc(resource $stream): string|false

返回数据

包含单个字符的string,或false. 对false做判断时应注意数据类型相同(===, !==).


读取字符串 fgets()

函数原型

fgets(resource $stream, ?int $length = null): string|false

二进制读取 fread()

函数原型

fread(resource $stream, int $length): string|false

停止条件

以下条件任意一条满足则停止:

  • 读入长度已经达到设定的长度length
  • 已经达到文件结尾(EOF)
  • a packet becomes available or the socket timeout occurs (for network streams)
  • if the stream is read buffered and it does not represent a plain file, at most one read of up to a number of bytes equal to the chunk size (usually 8192) is made; depending on the previously buffered data, the size of the returned data may be larger than the chunk size.

(后两条原文摘自 php.net)


二进制写入 fwrite()

函数原型

fwrite(resource $stream, string $data, ?int $length = null): int|false

停止条件

已经达到设定的长度length,或已经达到数据data结尾。

返回数据

int: 成功写入的字节数
false: 出现异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值