【PHP】文件操作

这篇博客详细介绍了PHP中关于文件操作的基础知识,包括如何打开和关闭文件、以不同模式写入内容,特别是内容覆盖的情况,以及如何读取文件,尤其是读取一行的功能。还提到了在不同操作系统下换行符的差异,并介绍了如何判断文件指针是否到达末尾及获取文件修改时间的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开文件

首先是打开文件的函数,我们将使用fopen()

fopen(
    string $filename,
    string $mode,
    bool $use_include_path = false,
    resource $context = ?
): resource

首先第一个参数$filename是文件的路径, 同时也可以是一个url,如果是url,PHP将检查并确认 allow_url_fopen已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

fopen的第二个参数是模式,这里只介绍几种常用的,如果不清楚,请查手册

mode说明
‘r’只读方式打开,将文件指针指向文件头
’r+‘读写方式打开,将文件指针指向文件头
‘w’写入方式打开,将文件指针指向文件头,并将文件大小截为零。如果文件不存在则尝试创建之
‘a+’读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。追加效果

fopen返回的是一个资源类型,资源类型就像当于是一个权限

下面是具体的例子:当使用w模式,最终会将文件的内容给清空

<?php
fopen("./modew.txt", 'w');
?>

注意

如果文件路径不存在的话,那么将可能会创建一个新的文件,如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限

关闭文件

fclose(resource $handle): bool

用完文件后把它们全部关闭是一个良好的编程习惯。您并不想打开的文件占用您的服务器资源

文件指针必须有效,并且是通过fopen()fsockopen()成功打开的, 成功时返回 true, 或者在失败时返回 false。

写入内容

记住写入内容时候,权限一定要是可以写的模式

fwrite(resource $handle, string $string, int $length = ?): int

$handle:文件系统指针,是典型地由 fopen()创建的resource(资源)。
$string:向文件中写入的东西

<?php
$fh = fopen("./modew.txt", 'w');
echo fwrite($fh,  "hello, xx") ? "写入成功":"写入失败";
fclose($fh);
?>

内容覆盖

写入的内容还可能会覆盖,比如r+模式和w+, 这是因为文件指针会指向同一个地方

当我第一次执行下面的代码的时候

<?php
$myfile = fopen("newfile.txt", "w");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>

此时的$myfile内容是这样的

Bill Gates
Steve Jobs

现在指向下面这段代码

<?php
$myfile = fopen("newfile.txt", "w");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Mickey Mouse
Minnie Mouse

读取一行

上面我们讲了打开文件, 关闭文件, 写入内容, 现在我们来将读取文件中的内容

fgets(resource $handle, int $length = ?): string

从文件指针中读取一行

<?php
$fh = fopen("./modew.txt", 'r+');
echo fgets($fh);
fclose($fh);
?>

碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

注意各个操作系统之下的换行符号是不同的

win: \r\n
*nix: \n
mac: \r

同时如果你想读整个文件, 那么可以使用一个循环,判断指针是否指向文件末尾。

判断文件是否指向末位的函数可以使用feof这个函数。

<?php
$fh = fopen("./modew.txt", 'rb');
while (!feof($fh)) {
    echo fgets($fh), '<br/>';
}
fclose($fh);
?>

下面将介绍,下面一个函数这个函数叫做file函数

file(string $filename, int $flags = 0, ?resource $context = null): array|false

这个函数将读取文件, 并将文件的没一行转化为一个数组,然后分别读出来

<?php
$arr = file("./modew.txt");
print_r($arr);
?>

当我们想知道文件是什们时候修改的,我们将使用filemtime(文件名)函数

<?php
$file = "./modew.txt";
echo date("Y-m-d H:i:s", filemtime($file));
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值