PHP 目录与文件操作实用指南:创建、读写、属性获取

晚来风
晚来风
发布时间:2026-10-16| 5人浏览过
原创

本文详解 PHP 目录与文件操作,涵盖目录遍历、新建与删除,文件读写、复制与删除,以及属性获取等核心功能,提供基于 fopen、file_get_contents、mkdir 等函数的实用代码示例。

结果或目标

掌握在 PHP 环境中对服务器文件系统进行管理的常用技能,包括目录的创建与列出、文件的创建与内容读写、文件的安全删除与复制,以及获取文件元数据(如大小、修改时间、权限)。这些操作是构建缓存系统、配置管理或日志记录等应用的基础。

准备条件

  1. 运行环境:已安装的 PHP 环境(推荐 PHP 5.0+ 以支持 file_get_contents 和 file_put_contents)。
  2. 权限配置:确保脚本执行用户(如 www-data 或 nginx)对目标目录具有读写执行(rwx)权限。在 Linux 系统中通常表现为目录权限为 777 或所有者匹配,或使用 umask() 调整默认权限。
  3. 安全提醒:涉及 rmdir()、unlink() 的操作会导致数据永久丢失,请在测试环境中验证逻辑,生产环境中建议先备份或增加二次确认机制。

真实操作顺序

第1步:目录基础操作(创建、删除与遍历)

目的:建立或清理文件夹结构,并列出其中内容。

  • 创建目录:mkdir($path, 0777) 用于创建新目录,第二个参数设置权限。在非 Windows 环境下可结合 umask() 使用。
  • 删除目录:rmdir($path) 仅能删除空目录。
  • 遍历目录:使用资源句柄打开目录,循环读取文件名。
<?php
$base_dir = "filelist/";
$fso = opendir($base_dir);
echo $base_dir . "<hr/>";
while ($flist = readdir($fso)) {
    echo $flist . "<br/>";
}
closedir($fso);
?>

辅助函数:dirname($path) 获取路径中的目录部分,basename($path) 获取文件名,disk_free_space($path) 查看剩余空间。

第2步:文件存在性与权限检查

目的:在执行读写前确保文件状态符合预期,避免报错。

使用 is_readable() 判断是否可读,is_writable() 判断是否可写。这两个函数比单纯的 file_exists() 更具针对性。

<?php
$file = 'dirlist.php';
// 检查是否存在且可读
if (is_readable($file) == false) {
    die('文件不存在或者无法读取');
} else {
    echo '文件存在且可读';
}

// 仅检查存在性
if (!file_exists($file)) {
    die('文件不存在');
}
?>

第3步:文件读取操作

目的:获取文件内容。

  • 简单读取:对于文本文件,推荐使用 file_get_contents(),它将整个文件读入字符串。配合 htmlentities() 可用于显示 HTML 标签内容。
  • 二进制或大文件:可使用 implode('', file($file)) 按行读取并拼接,适用于某些旧版本 PHP 或特定场景。
  • 指针式读取:使用 fopen() 打开句柄,再通过循环读取(原文未详述循环细节,但提供了打开方式)。
<?php
$file = "filelist.php";
if (file_exists($file)) {
    $data = file_get_contents($file);
    // 输出转义后的内容以便观察标签
    echo htmlentities($data);
}
?>

第4步:文件写入操作

目的:创建或更新文件内容。

  • 现代写法(推荐):file_put_contents() 是 PHP 5 引入的高效函数,自动完成打开、写入和关闭过程。
  • 兼容写法:若需支持更低版本或需精细控制,使用 fopen() + fwrite() + fclose()。
  • 并发锁定:在写入缓存或关键数据时,建议使用 flock() 防止多进程冲突。
<?php
$file = 'dirlist.php';
$data = '这是写入的内容';

// 方法一:file_put_contents
if (is_writable($file)) {
    file_put_contents($file, $data);
} elseif (function_exists('file_put_contents')) {
     // 若文件不可写则失败
     die('无写入权限');
}

// 方法二:传统 fopen 方式
$f = fopen($file, 'w');
fwrite($f, $data);
fclose($f);

// 带锁定的写入示例
function cache_page($pageurl, $pagedata){
    if(!$fso = fopen($pageurl, 'w')){
        return false;
    }
    if(!flock($fso, LOCK_EX)){
        return false;
    }
    if(!fwrite($fso, $pagedata)){
        flock($fso, LOCK_UN);
        fclose($fso);
        return false;
    }
    flock($fso, LOCK_UN); // 释放锁定
    fclose($fso);
    return true;
}
?>

第5步:文件管理与属性获取

目的:重命名、复制、删除文件及查询元数据。

  • 删除:unlink($file)。
  • 复制:copy($source, $dest),注意目标目录需有写权限。
  • 重命名:rename($old, $new)。
  • 属性查询:
    - filemtime($file):最后修改时间戳。
    - filesize($file):文件大小(字节)。
    - fileperms($file):权限位,通常用 substr(sprintf('%o', fileperms($file)), -4) 格式化为八进制字符串。
    - stat($file):返回包含所有详细信息的数组。
<?php
// 删除文件
@$result = unlink('dirlist.php');

// 复制文件
if(file_exists('yang.txt')){
    copy('yang.txt', 'ji.txt');
}

// 获取权限字符串
$file = 'dirlist.php';
$perms = substr(sprintf('%o', fileperms($file)), -4);
echo "权限: " . $perms;

// 获取修改时间
echo date('r', filemtime('test.txt'));
?>

简要总结

通过上述步骤,可以覆盖 PHP 开发中绝大多数文件与目录交互需求。关键点在于始终优先检查权限(is_readable/writable),在写入敏感数据时使用锁定(flock),并根据 PHP 版本选择合适的 API(如新版优先使用 file_put_contents)。以上就是 PHP 创建文件(文件夹)以及目录操作代码的详细内容,更多关于 PHP 文件处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。