当人们创建网站时,数据通常存储在数据库中。然而,有时我们需要将数据存储在文件中,以便人们以后更容易阅读或修改。
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()
函数将数据写入 PHP 文件类似于按顺序调用 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 //open the file $square_file = fopen("squares.txt", "a+"); //write 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); } //read the first line of the file and echo fseek($square_file, 0); echo fgets($square_file); //close the 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.
在本例中,我们将数字 1 到 10 的平方写入名为 square.txt 的文件中。我们在 a+
模式下使用 fopen()
函数打开它,这意味着我们还可以从文件中读取内容以及附加我们自己的内容。每次 for 循环迭代时,都会将包含 $i
及其平方的当前值的新行附加到我们的文件中。
有一些函数,例如 fread()
和 fgets()
,您可以使用它们来读取文件中写入的内容。但是,您通常需要使用 fseek()
将文件指针放置在所需位置以按预期读取数据。循环结束后,我们转到文件的开头并使用 fgets()
读取其第一行。
最后,我们通过调用函数 fclose()
关闭文件句柄。
最终想法
在本教程中,我们学习了使用 PHP 将数据附加到文件的两种不同方法。使用 file_put_contents()
函数可以更方便地将数据写入文件。但是,当您必须对一个文件执行多次写入操作时,使用 fwrite()
会更有效。使用 fopen()
打开文件来附加数据还可以让您选择通过将文件指针移动到所需位置来读取其内容。
以上就是PHP教程:如何使用PHP追加文件内容的详细内容,更多请关注php中文网其它相关文章!