Php 简明教程

PHP - File Handling

在 PHP 中,文件是一种资源对象,可以按线性方式从其中读写数据。“文件处理”一词是指 PHP 中的一组函数,这些函数允许使用 PHP 代码对磁盘文件执行读/写操作。

一个文件对象会被分类为 stream 。可以在其上执行线性读/写操作的任何资源都是流。其他类似流的对象是 TCP 套接字、标准输入流,即由“php://stdin”表示的系统键盘、由“php://stdout”表示的标准输出流以及错误流“php://stderr”。

Note − 常量 STDIN、STDOUT 和 STDERR 分别代表相应的标准流。

尽管 PHP 被视为用于开发 Web 应用程序的服务器端脚本语言,但 PHP 还有一个命令行界面来执行控制台 IO 操作。

Example

PHP 中的 readline() 函数接受来自标准键盘的用户输入,echo/print 语句在控制台上呈现输出。

<?php
   $str = readline("Type something:");
   echo $str;
?>

它将生成以下 output

C:\xampp\php>php hello.php
Type something: Are you enjoying this PHP tutorial?
Are you enjoying this PHP tutorial?

Example

我们可以通过从“php://stdin”读取输入并将其输出到“php://stdout”来获得相同的效果。

<?php
   $f = fopen("php://stdin", "r");
   echo "Type something: ";

   $str = fgets($f);
   $f1 = fopen("php://stdout", "w");

   fputs($f1, $str);
?>

这里,fopen() 函数用于打开 stdin 流以进行读取并打开 stdout 流以进行写入。

Example

PHP 支持各种流协议,以用于流相关函数,例如 fopen()、file_exists() 等。使用 php_get_wrappers() 函数获取所有已注册包装器的列表。

<?php
   print_r(stream_get_wrappers());
?>

它将生成以下 output

Array
(
   [0] => php
   [1] => file
   [2] => glob
   [3] => data
   [4] => http
   [5] => ftp
   [6] => zip
   [7] => compress.zlib
   [8] => compress.bzip2
   [9] => https
   [10] => ftps
   [11] => phar
)

这些流被引用为“scheme://target”。例如,文件流为“file://xyz.txt”。

在应用程序运行之前,来自控制台的输入数据存储在计算机的主内存(RAM)中。此后,来自 RAM 的内存内容会被擦除。

我们希望以一种方式存储它,以便在永久介质(如磁盘文件)中需要时可以检索它。因此,我们将使用磁盘文件(而非标准流(键盘用于输入,显示设备用于输出))来读取数据,以及将数据存储的目的位置。

除了上面示例中使用(使用标准流的 IO 操作)的读写模式外,还可以使用“r+”和“w+”(用于同时读写)、“b”(用于二进制模式)等各种其他模式打开文件流。

要打开磁盘文件以便读取并获取其引用指针,请使用 fopen() 函数。

$handle = fopen('file://' . __DIR__ . '/data.txt', 'r');

“file://”方案是默认方案。因此,可以很容易地将其删除,尤其是在处理本地文件时。

Note − 强烈建议关闭已打开的流。为此,请使用 fclose() 函数。

fclose($handle);

PHP 包含几个用于在文件流上执行读/写操作的内置函数。在后续的章节中,我们将探索文件系统函数。