打开文件
首先是打开文件的函数,我们将使用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));
?>