PHP - 写入文件


PHP 内置函数库提供了两个函数,用于对文件流执行写入操作。这些函数是 fwrite() 和 fputs()

为了能够在文件中写入数据,必须以写入模式 ( )、附加模式 ( )、读/写模式( r+w+ )或二进制写入/附加模式( rb+wb+wa )打开文件。

fputs() 函数

fputs() 函数将字符串写入以可写模式打开的文件中。


 fputs(resource $stream, string $string, int $length)

此处,$stream 参数是在可写模式下打开的文件的句柄。$string 参数是要写入的数据,$length 是指定要写入的最大字节数的可选参数。

fputs() 函数返回写入的字节数,如果函数不成功,则返回 false

示例

下面的代码将打开一个新文件,在其中写入一个字符串,并返回写入的字节数。


<?php
   $fp = fopen("hello.txt", "w");
   $bytes = fputs($fp, "Hello World\n");
   echo "bytes written: $bytes";
   fclose($fp);
?>

它将产生以下输出 -

bytes written: 12

示例

如果需要在较早的现有文件中添加文本,则必须以追加模式 ( ) 打开该文件。让我们在前面的示例中的同一文件中再添加一个字符串。


<?php
   $fp = fopen("hello.txt", "a");
   $bytes = fputs($fp, "Hello PHP");
   echo "bytes written: $bytes";
   fclose($fp);
?>

如果您在文本编辑器中打开 “hello.txt” 文件,您应该可以看到其中的两行。

示例

在下面的 PHP 脚本中,在循环中逐行读取已存在的文件 (hello.txt),并将每一行写入另一个文件 (new.txt

假设“hello.txt” 由以下文本组成 -

Hello World
启科普在线教程
PHP 教程

以下是创建现有文件副本的 PHP 代码 -


<?php
   $file = fopen("hello.txt", "r");
   $newfile = fopen("new.txt", "w");
   while(! feof($file)) {
      $str = fgets($file);
      fputs($newfile, $str);
   }
   fclose($file);
   fclose($newfile);
?>

新创建的 “new.txt” 文件应具有完全相同的内容。

fwrite() 函数

frwrite() 函数是 fread() 函数的对应函数。它执行二进制安全的写入操作。


 fwrite(resource $stream, string $data, ?int $length = null): int|false

此处,$stream 参数是指向以可写模式打开的文件的资源。要写入文件的数据在 $data 参数中提供。可以提供可选的 $length 参数来指定要写入的字节数。它应该是 int ,写入将在写入长度字节数或到达数据末尾后停止,以先到者为准。

fwrite() 函数返回写入的字节数,失败时返回 false 以及 E_WARNING

示例

以下程序将打开一个新文件,执行写入操作并显示写入的字节数。


<?php
   $file = fopen("/PhpProject/sample.txt", "w");
   echo fwrite($file, "Hello 启科普在线教程!!!!!");
   fclose($file);
?>

示例

在下面给出的示例代码中,以二进制读取模式打开的现有文件 “welcome.png”。fread() 函数用于读取 “$data” 变量中的字节,然后写入另一个文件 “new.png” -


<?php
   $name = "welcome.png";
   $file = fopen($name, "rb");
   $newfile = fopen("new.png", "wb");
   $size = filesize($name);
   $data = fread($file, $size);
   fwrite($newfile, $data, $size);
   fclose($file);
   fclose($newfile);
?>

运行上述代码。当前目录现在应该具有现有 “welcome.png” 文件的副本。