人们在创建网站时,数据通常被存储在数据库中。然而,有时我们需要将数据存储在文件中,以方便人们在以后的时间里阅读或修改。
PHP自带了很多函数来读取和写入数据到文件中。我们还可以用其中的几个函数来向文件追加数据。在本教程中,你将学习用PHP向文件追加数据的两种不同方法。
了解file_put_contents() 函数
file_put_contents()函数是用 PHP 向文件写入数据的最简单的方法之一。它接受四个不同的参数来决定其行为。这些参数是
filename:我们要写入数据的文件位置的路径。data:指定要写到文件中的数据。它通常是一个字符串,但你也可以指定一个数组或一个流资源。该函数将自动用implode()内爆单维数组的内容,以便将数据写到文件中。flags: 控制file_put_contents()的行为。这里有三个不同的标志,你可以单独设置,也可以与其他标志组合。不同的标志可以使用|操作符进行组合。context:只在从流中读取或访问内容时向PHP提供额外数据时有用。
使用file_put_contents() ,用PHP向文件中添加数据
函数file_put_contents() 的默认行为是用你提供的任何新数据覆盖一个给定文件的内容。当你想保留旧数据和新数据时,这是不可取的。在这种情况下,可以使用FILE_APPEND 标志来让 PHP 知道它应该在文件中原有内容的末尾追加数据。
在某些特殊情况下,可能会同时从多个脚本向一个文件追加数据。在这种情况下,建议使用LOCK_EX 标志来获得文件的独占锁。这可以帮助防止数据损坏或其他一些意外行为。当你使用这个标志时,其他脚本将等待当前进程完成对文件的写入,然后再追加自己的数据。
下面是一个例子,使用file_put_contents() ,将一些文本追加到一个现有的文件中。
<?php
// Original File: Canada is a country in North America. .... bi-national land border.
// File Contents After this Line: Canada is a country in North America. .... bi-national land border. Canada's capital is Ottawa,
file_put_contents('canada.txt', " Canada's capital is Ottawa,", FILE_APPEND | LOCK_EX);
// File Contents After this Line: Canada is a country in North America. .... bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver.
file_put_contents('canada.txt', " and its three largest metropolitan areas are Toronto, Montreal, and Vancouver.", FILE_APPEND | LOCK_EX);
?>
在上面的例子中,我们写了一些字符串到一个叫canada.txt的文件中,该文件包含关于加拿大的信息。两个字符串都被一个接一个地追加到了文件的末尾。
请记住,如果一个文件不存在,这个函数将创建一个文件。但是,它不会创建一个不存在的目录。因此,在你开始写文件之前,检查文件是否存在可能是一个好主意。
使用fwrite() ,用PHP将数据写入文件
使用file_put_contents() 函数将数据写到文件中,类似于调用 fopen(), fwrite()和 fclose()的顺序。这意味着在同一个文件上做多个写操作可能是低效的,因为我们在不断地重复打开和关闭文件。
克服这个问题的一个方法是自己调用这些函数。只要在写操作的开始时调用fopen() 。之后,用fwrite() 函数向文件写入内容,次数不限。最后,你可以简单地调用fclose() 来关闭文件句柄。现在让我们详细讨论一下这些步骤中的每一个。
fopen() 函数接受四个不同的参数,可以用来告诉 PHP 应该如何打开一个文件。
filename:要打开的文件的名称。mode:打开文件的模式可以用一个或两个字符来指定。因为我们要打开文件,然后向其中添加一些文本。要追加,用字符a或a+设置模式。这将把文件指针放在文件的末端。如果文件不存在,PHP也会尝试创建该文件。当用a+模式打开文件时,还可以读取文件的内容。use_include_path: 指示 PHP 也寻找指定的包含路径内的文件。默认为false。context:只在从流中读取或访问内容时向 PHP 提供额外的数据时有用。
现在文件已经打开,我们可以使用fwrite() 函数来向文件添加信息。fwrite() 需要三个参数。
resource:这是我们先前用fopen()创建的资源句柄。string: 你想在文件中添加的文本。length: 是可选的,它用于设置应写入文件的最大字节数。
一旦你完成了所有的写操作,你可以通过使用fclose() 函数来关闭文件句柄。
下面是一个例子,告诉你如何使用fopen(),fwrite() 和fclose() 来追加数据到一个文件。
<?php
$square_file = fopen("squares.txt", "a+");
//output the squares from 1 to 10
for($i = 1; $i <= 10; $i++) {
$square = $i*$i;
$cube = $square*$i;
$line = "Square of $i is: $square.\n";
fwrite($square_file, $line);
}
fseek($square_file, 0)
echo fgets($square_file)
fclose($square_file);
?>
square.txt的内容
Square of 1 is: 1.
Square of 2 is: 4.
Square of 3 is: 9.
Square of 4 is: 16.
Square of 5 is: 25.
Square of 6 is: 36.
Square of 7 is: 49.
Square of 8 is: 64.
Square of 9 is: 81.
Square of 10 is: 100.
在这个例子中,我们在一个叫做square.txt 的文件中写入数字 1 到 10 的平方。我们使用fopen() 函数在a+ 模式下打开它,这意味着我们也可以从文件中读取内容,并追加我们自己的内容。在for循环的每一次迭代中,我们都会在文件中添加一行新的内容,包括$i 的当前值和它的平方。
有一些函数,如fread() 和 fgets()你可以使用这些函数来读取文件中的任何内容。然而,你通常需要使用 fseek()将文件指针放在所需的位置上,以便按预期读取数据。循环之后,我们寻找文件的开头,用fgets() 读取它的第一行。
最后,我们通过调用函数fclose() 来关闭我们文件的句柄。
最后的思考
在本教程中,我们学习了用PHP向文件追加数据的两种不同方法。使用file_put_contents() 函数在向文件写入数据时比较方便。然而,当你必须对一个文件进行多次写操作时,使用fwrite() 可能更有效率。用fopen() 打开一个文件来追加数据,也可以选择通过移动文件指针到所需的位置来读取其内容。
