PHP 文件系统操作:函数与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
```html

在 PHP 中处理文件系统:主要函数与示例



文件系统操作是 Web 开发中的关键任务之一。PHP 提供了一套强大且灵活的函数,用于创建、读取、写入、删除文件和文件夹,以及管理访问权限。在本文中,我们将介绍 PHP 处理文件系统的主要功能,提供实际示例,并讨论常见错误。



1. 在 PHP 中读取文件



PHP 支持多种从文件读取数据的方式。选择哪种方法取决于文件大小和所需的控制级别。



1.1. file_get_contents() 函数

将整个文件读取到字符串中最简单的方法是使用 file_get_contents()。此函数适用于小文件(如配置文件、模板)。



<?php// 将整个文件读取到字符串中$content = file_get_contents('data.txt');if ($content !== false) {    echo "文件内容: " . htmlspecialchars($content);} else {    echo "读取文件时出错";}?>


1.2. file() 函数

如果需要将文件内容作为字符串数组获取(每行一个元素),请使用 file()。



<?php$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);foreach ($lines as $lineNum => $line) {    echo "行 " . ($lineNum + 1) . ": " . htmlspecialchars($line) . "<br>";}?>


1.3. 使用 fopen() + fgets() 逐行读取

对于大文件(例如日志),最好使用流式读取,以避免将整个文件保留在内存中。



<?php$handle = fopen('large_file.csv', 'r');if ($handle) {    while (($buffer = fgets($handle, 4096)) !== false) {        echo $buffer . "<br>";    }    fclose($handle);} else {    echo "无法打开文件";}?>


2. 将数据写入文件



写入操作也可以通过不同方式执行。主要区别在于覆盖文件还是追加到末尾。



2.1. file_put_contents() 函数

将字符串写入文件的快速方法。如果文件不存在,则会创建它。默认情况下,文件会被覆盖。



<?php$data = "新记录: " . date('Y-m-d H:i:s') . "";// 覆盖文件file_put_contents('log.txt', $data);// 追加到末尾(使用 FILE_APPEND 标志)file_put_contents('log.txt', $data, FILE_APPEND);?>


2.2. 通过 fopen() + fwrite() 手动写入

为了进行精细控制(例如文件锁定),请使用 fopen() / fwrite() 组合。



<?php$filename = 'counter.txt';$handle = fopen($filename, 'c+'); // 'c+' — 如果文件不存在则创建if (flock($handle, LOCK_EX)) { // 独占锁定    $current = (int) fread($handle, filesize($filename) ?: 1);    $current++;    ftruncate($handle, 0); // 清空文件    rewind($handle);    fwrite($handle, $current);    flock($handle, LOCK_UN); // 解除锁定}fclose($handle);echo "计数器: $current";?>


3. 处理目录



PHP 不仅可以管理文件,还可以创建、删除和浏览文件夹。



3.1. 创建文件夹 (mkdir)

<?php// 创建一个文件夹if (!is_dir('uploads')) {    mkdir('uploads', 0755);}// 递归创建嵌套文件夹(PHP 5.4+)mkdir('images/2024/12', 0755, true);?>


3.2. 删除文件夹 (rmdir)

rmdir() 仅删除空文件夹。要删除包含所有内容的文件夹,需要一个递归函数。



<?phpfunction deleteDirectory($dir) {    if (!file_exists($dir)) {        return true;    }    if (!is_dir($dir)) {        return unlink($dir);    }    $items = array_diff(scandir($dir), ['.', '..']);    foreach ($items as $item) {
```                

博客

书籍推荐