PHP 文件

时间:2018-11-15 15:07:27  来源:igfitidea点击:

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

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

获取文件信息

文件路径

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

/www/tmp/test.txt

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

\www\temp\test.txt

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

从路径中获取文件名

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

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

<?php
 
$path = '/wwww/include/index.php';
$filename = basename($path);
echo $filename; // index.php

获取文件扩展名

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

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

获取文件大小

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

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

文件的时间属性

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

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

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

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

<?php 
 $fn = './test.txt';
 // 获取最后一次修改时间
 $ts = filemtime($fn);
 // 获取日期
 $ta = getdate($ts);
 
 var_dump($ta);

打开文件

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

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

fopen()函数有两个参数:

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

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

$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()函数,如下所示:

fclose($fh);

读取文件

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

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

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

<?php
 $fn = "./test.txt";
 $fh = fopen($fn, "r");
 $content = fread($fh, filesize($fn));
 fclose($fh);
 
 echo $content;

或者更简单的:

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

写入文件

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

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

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

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

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

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

检测是否达到文件结尾

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

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

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

<?php
 
$fh = fopen('./test.txt','r');
$content = '';
 
while(!feof($fh)){
 $content .= fread($fh,10);
}
fclose($fh);
 
echo $content;