PHP 文件


在本教程中,我们将学习如何处理文件,包括使用各种方便的PHP文件函数来打开文件、关闭文件、从文件读取内容和写入内容到文件,以及测试文件是否结束。

文件是存储在硬盘等存储媒体上的字节序列。PHP提供了许多有用的函数,方便你有效地处理文件。

获取文件信息

文件路径

不同的平台有不同的方法来处理文件路径。例如,UNIX和Linux系统在文件路径中使用斜杠作为分隔符,如下所示:

1
/www/tmp/test.txt

而Windows系统使用反斜杠作为分隔符:

1
\www\temp\test.txt

PHP会自动将反斜杠转换为斜杠,因此使用以斜杠作为分隔符的文件路径是保险的。

从路径中获取文件名

为了从文件路径中获取文件名,可以使用basename()函数。它接受一个完整的文件路径作为参数并返回文件的名称。

下面的例子演示了如何从文件路径中提取文件名index.php:

1
2
3
4
5
<?php
 
$path = '/wwww/include/index.php';
$filename = basename($path);
echo $filename; // index.php

获取文件扩展名

要获得文件扩展名,可以使用pathinfo()函数,如下所示:

1
2
3
4
<?php
$fn = './test.txt';
$ext = pathinfo($fn, PATHINFO_EXTENSION);
echo $ext; // txt

获取文件大小

要获得文件的大小,可以使用filesize()函数。filesize函数将以字节为单位返回给定文件的大小,如果发生错误则返回false。

1
2
3
<?php
$fn = './test.txt';
echo filesize($fn);

文件的时间属性

PHP提供了一些有用的函数来查询文件的时间属性。

  • fileatime()返回文件的最后一次访问时间。
  • filectime()返回文件最后更改的时间。
  • filemtime()返回文件的最后修改时间。

上面的所有函数都返回一个UNIX时间戳,该时间戳是一个整数值,表示从1970-01-01 0点到给定日期时间之间的秒数。

要从UNIX时间戳获取日期和时间信息,可以使用getdate()函数。请看下面的例子:

1
2
3
4
5
6
7
8
<?php
$fn = './test.txt';
// 获取最后一次修改时间
$ts = filemtime($fn);
// 获取日期
$ta = getdate($ts);
 
var_dump($ta);

打开文件

在对文件进行任何其他操作之前,首先需要线打开它。

要在PHP中打开文件,可以使用fopen()函数。该函数打开文件并返回一个文件句柄,该句柄是一个与文件关联的指针。通过文件句柄,您可以操作文件的内容。

fopen()函数有两个参数:

第一个参数是要打开的文件的名称
第二个参数指定打开的模式,指明将如何使用文件,例如打开文件用于读或写。

下面的示例演示如何打开一个名为Test.txt的现有文件用于读取:

1
$fh = fopen('./test.txt','r');

下表说明了可以传递给fopen()函数的模式值:

mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。
如果文件已存在,则 fopen() 调用失败并返回 FALSE,
并生成一条 E_WARNING 级别的错误信息。
如果文件不存在则尝试创建之。
这和给 底层的 open(2) 系统调用指定 O_EXCL
'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。

请注意,您可以将值b附加到mode参数,以指示该文件应被视为二进制文件。例如,rb模式表示以二进制的方式打开文件进行读取。

关闭文件

当脚本结束时,PHP会自动关闭所有打开的文件。但是,当你完成一个文件的操作,就关闭它都是一个很好的习惯。
要关闭文件,需要将文件句柄传递给fclose()函数,如下所示:

1
fclose($fh);

读取文件

PHP提供了一些有用的函数供读取文件的内容:

  • fread()——读取文件的内容
  • fgetc()——每次读取一个字符
  • fgets()——每次读取一行
  • file()——将所有文件的内容读入一个数组
  • fgetcsv()——读取一行逗号分隔的值
  • file_get_contents()——将整个文件读入一个字符串
  • readfile()——显示整个文件内容,不需要调用fopen()函数。

下面的例子演示了如何将整个文件内容读取到一个字符串中:

1
2
3
4
5
6
7
<?php
$fn = "./test.txt";
$fh = fopen($fn, "r");
$content = fread($fh, filesize($fn));
fclose($fh);
 
echo $content;

或者更简单的:

1
2
3
$fn = "./test.txt";
$content = file_get_contents($fn);
echo $content;

写入文件

要将内容写入文件,可以使用以下函数之一:

  • fwrite()——将字符串写入文件。
  • file_put_contents()——将字符串写入文件,而不需要调用fopen()函数。

下面的例子演示了如何使用fwrite()函数将字符串写入文件:

1
2
3
4
5
6
7
8
<?php
$fn = "./test.txt";
$fh = fopen($fn,'w') or die('无法打开文件');
 
fwrite($fh,'写入内容1');
fwrite($fh,' 写入内容2');
 
fclose($fh);

还可以使用file_put_contents()函数将字符串写入文件:

1
2
3
<?php
$fn = "./test.txt";
file_put_contents($fn, '使用file_put_contents 示例');

检测是否达到文件结尾

为了检测文件的结尾,可以使用feof()函数。当文件指针到达文件末尾时,它返回true,否则返回false。

当您要读取不知道文件有多大的文件时,需要经常将feof()函数与fread()或fgetc()函数一起使用。

下面的例子演示了如何使用feof()函数。我们使用fread()函数一次读取10个字符。

1
2
3
4
5
6
7
8
9
10
11
<?php
 
$fh = fopen('./test.txt','r');
$content = '';
 
while(!feof($fh)){
$content .= fread($fh,10);
}
fclose($fh);
 
echo $content;


原文链接:https://codingdict.com/