PHP 文件(File)

在本教程中,您将学习如何使用PHP的文件系统函数动态创建,访问(或读取)和操纵文件。

使用PHP处理文件

由于PHP是服务器端编程语言,因此它使您可以使用Web服务器上存储的文件和目录。在本教程中,您将学习如何使用PHP文件系统函数在Web服务器上创建,访问和操作文件。

用PHP fopen() 函数打开文件

要使用文件,首先需要打开文件。PHP fopen()函数用于打开文件。该函数的基本语法可以通过以下方式给出:

fopen(filename, mode)

传递给fopen()的第一个参数指定要打开的文件的名称,第二个参数指定应以哪种模式打开文件。 例如:

<?php
$handle = fopen("data.txt", "r");
?>
测试看看‹/›

可以通过以下方式之一打开文件:

模式它能做什么
r打开文件只读。
r+打开文件进行读写。
w打开仅用于写入的文件,并清除文件内容。如果该文件不存在,PHP将尝试创建它。
w+打开文件进行读写,并清除文件内容。如果该文件不存在,PHP将尝试创建它。
a追加。打开仅用于写入的文件。通过写入文件末尾来保留文件内容。如果该文件不存在,PHP将尝试创建它。
a+读取/追加。打开文件进行读写。通过写入文件末尾来保留文件内容。如果该文件不存在,PHP将尝试创建它。
x打开仅用于写入的文件。 如果文件已存在,则返回False并生成错误。 如果该文件不存在,PHP将尝试创建它。
x+打开文件进行读写;否则,其行为与“ x”相同。

如果您试图打开一个不存在的文件,PHP将生成一条警告消息。因此,为了避免这些错误消息,在尝试访问某个文件或目录之前,应该使用PHP file_exists()函数实现一个简单的检查,检查文件或目录是否存在。

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    // 尝试打开该文件
    $handle = fopen($file, "r");
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

提示:对文件和目录的操作容易出错。因此,实现某种形式的错误检查是一个好习惯,这样,如果发生错误,您的脚本将可以优雅地处理错误。请参考有关PHP错误处理的教程。

使用PHP fclose()函数关闭文件

使用完文件后,需要将其关闭。fclose()函数用于关闭文件,如以下示例所示:

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //打开要读取的文件
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    /* 这里是一些要执行的代码 */
        
    //正在关闭文件句柄
    fclose($handle);
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

注意:虽然PHP会在脚本终止时自动关闭所有打开的文件,但最好在执行所有操作后关闭文件。

使用PHP fread()函数从文件读取

现在您已经了解了如何打开和关闭文件。 在下一节中,您将学习如何从文件中读取数据。 PHP有几个用于从文件读取数据的函数。 您可以使用单个操作从一个字符读取整个文件。

读取固定数量的字符

fread()函数可用于从文件中读取指定数量的字符。可以使用此函数的基本语法。

fread(file handle, length in bytes)

此函数接受两个参数-文件句柄和要读取的字节数。 下面的示例从“data.txt”文件读取20个字节,包括空格。 假设文件“data.txt”包含一段文本“The quick brown fox jumps over the lazy dog.”。

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //打开要读取的文件
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    //从文件中读取固定的字节数
    $content = fread($handle, "20");
        
    //关闭文件的句柄
    fclose($handle);
        
    //显示文件内容
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

上面的示例将产生以下输出:

The quick brown fox

读取文件的全部内容

fread()函数可以与filesize()函数结合使用,一次读取整个文件。filesize()函数的作用是:以字节为单位返回文件的大小。

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //打开要读取的文件
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    //正在读取整个文件
    $content = fread($handle, filesize($file));
        
    //正在关闭文件句柄
    fclose($handle);
        
    //显示文件内容
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

上面的示例将产生以下输出:

The quick brown fox jumps over the lazy dog.

在PHP中读取文件全部内容的最简单方法是使用readfile()函数。此函数允许您在不需要打开文件的情况下读取文件的内容。以下示例将生成与上述示例相同的输出:

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //读取并输出整个文件
    readfile($file) or die("ERROR: Cannot open the file.");
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

上面的示例将产生以下输出:

The quick brown fox jumps over the lazy dog.

另一种无需打开即可读取文件全部内容的方法是使用file_get_contents()函数。此函数接受文件的名称和路径,并将整个文件读入字符串变量。下面是一个实例:

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    // 将整个文件读入字符串
    $content = file_get_contents($file) or die("ERROR: Cannot open the file.");
        
    //显示文件内容
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

从文件读取全部数据的另一种方法是PHP的file()函数。 它的功能与file_get_content()函数类似,但它将文件内容作为行数组返回,而不是以单个字符串的形式返回。 返回的数组的每个元素对应于文件中的一行。

要处理文件数据,您需要使用foreach循环遍历数组。这是一个示例,该示例将文件读入数组,然后使用循环显示它:

<?php
$file = "data.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //将整个文件读入数组
    $arr = file($file) or die("ERROR: Cannot open the file.");
    foreach($arr as $line){
        echo $line;
    }
} else{
    echo "ERROR: File does not exist.";
}
?>
测试看看‹/›

使用PHP fwrite() 函数写入文件

同样,您可以使用PHP fwrite()函数将数据写入文件或追加到现有文件。该函数的基本语法可以通过以下方式给出:

fwrite(file handle, string)

fwrite()函数接受两个参数—文件句柄和要写入的数据字符串,如以下示例所示:

<?php
$file = "note.txt";
    
//要写入的数据字符串
$data = "The quick brown fox jumps over the lazy dog.";
    
//打开文件进行写入
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
    
//将数据写入文件
fwrite($handle, $data) or die ("ERROR: Cannot write the file.");
    
//关闭文件句柄
fclose($handle);
    
echo "数据已成功写入文件。";
?>

在上面的示例中,如果“ note.txt”文件不存在,PHP将自动创建该文件并写入数据。但是,如果“ note.txt”文件已经存在,PHP将在写入新数据之前擦除此文件的内容(如果有的话),但是,如果您只想追加文件并保留现有内容,上面的示例请使用模式 a而不是w。

另一种方法是使用file_put_contents()函数。它是file_get_contents()函数的对应功能,提供了一种无需打开即可将数据写入文件的简便方法。该函数接受文件的名称和路径以及要写入文件的数据。这是一个实例:

<?php
$file = "note.txt";
    
//要写入的数据字符串
$data = "The quick brown fox jumps over the lazy dog.";
    
//将数据写入文件
file_put_contents($file, $data) or die("ERROR: Cannot write the file.");
    
echo "数据已成功写入文件。";
?>

如果file_put_contents()函数中指定的文件已经存在,则默认情况下PHP将覆盖它。如果要保留文件的内容,可以将特殊FILE_APPEND标志作为第三个参数传递给file_put_contents()函数。它将简单地将新数据追加到文件中,而不是覆盖它。这是一个实例:

<?php
$file = "note.txt";
    
//要写入的数据字符串
$data = "The quick brown fox jumps over the lazy dog.";
    
//将数据写入文件
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file.");
    
echo "数据已成功写入文件。";
?>

用PHP rename()函数重命名文件

您可以使用PHP的rename()函数重命名文件或目录,如下所示:

<?php
$file = "file.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //尝试重命名文件
    if(rename($file, "newfile.txt")){
        echo "文件重命名成功。";
    } else{
        echo "错误:无法重命名文件。";
    }
} else{
    echo "错误:文件不存在。";
}
?>

使用PHP unlink()函数删除文件

您可以使用PHP的unlink()函数删除文件或目录,如下所示:

<?php
$file = "note.txt";
 
//检查文件是否存在
if(file_exists($file)){
    //尝试删除该文件
    if(unlink($file)){
        echo "文件已成功删除。";
    } else{
        echo "错误:无法删除文件。";
    }
} else{
    echo "错误:文件不存在。";
}
?>

在下一章中,我们将学习有关在PHP中解析目录或文件夹的更多信息。

PHP文件系统函数

下表概述了一些其他有用的PHP文件系统函数,这些函数可用于动态读取和写入文件。

函数
描述
fgetc()一次读取一个字符。
fgets()一次读取一行。
fgetcsv()读取一行用逗号分隔的值。
filetype()返回文件的类型。
feof()检查是否已到达文件末尾。
is_file()检查文件是否为常规文件。
is_dir()检查文件是否为目录。
is_executable()检查文件是否可执行。
realpath()返回规范化的绝对路径名。
rmdir()删除一个空目录。

请查看PHP文件系统参考,以获取其他有用的PHP文件系统函数。