PHP file_put_contents 函数
最后修改于 2025 年 4 月 3 日
PHP file_put_contents
函数将数据写入文件。这是一种在一次函数调用中创建或覆盖文件的简单方法。
基本定义
file_put_contents
函数将一个字符串写入文件。如果文件不存在,它可以创建文件。该函数返回写入的字节数,如果失败则返回 false。
语法: file_put_contents(string $filename, mixed $data, int $flags = 0, ?resource $context = null): int|false
。
file_put_contents 基本示例
这展示了 file_put_contents
用于写入文本的最简单用法。
<?php declare(strict_types=1); $file = 'example.txt'; $data = 'Hello, World!'; $result = file_put_contents($file, $data); if ($result !== false) { echo "Successfully wrote $result bytes to $file"; } else { echo "Failed to write to $file"; }
这会使用 "Hello, World!" 创建或覆盖 example.txt 文件。该函数返回写入的字节数,如果出错则返回 false。
追加到文件
使用 FILE_APPEND 标志添加内容,而不会覆盖现有数据。
<?php declare(strict_types=1); $file = 'log.txt'; $data = "New log entry at " . date('Y-m-d H:i:s') . PHP_EOL; $result = file_put_contents($file, $data, FILE_APPEND); if ($result !== false) { echo "Appended $result bytes to $file"; } else { echo "Failed to append to $file"; }
这会将一个带时间戳的日志条目追加到 log.txt 文件中。 FILE_APPEND 标志保留现有内容。 PHP_EOL 添加正确的行尾字符。
将数组写入文件
您可以先将数组转换为字符串,然后写入数组数据。
<?php declare(strict_types=1); $file = 'data.csv'; $data = ['Name', 'Email', 'Phone']; $csv = implode(',', $data) . PHP_EOL; $result = file_put_contents($file, $csv); if ($result !== false) { echo "Wrote CSV header with $result bytes"; } else { echo "Failed to write CSV data"; }
这会将一个数组转换为 CSV 字符串并将其写入文件。 implode 使用逗号连接数组元素。 始终首先验证和清理数组数据。
在写入期间锁定文件
使用 LOCK_EX 阻止其他进程同时写入文件。
<?php declare(strict_types=1); $file = 'counter.txt'; $data = '1'; $result = file_put_contents($file, $data, LOCK_EX); if ($result !== false) { echo "Wrote data with exclusive lock"; } else { echo "Failed to acquire lock or write data"; }
LOCK_EX 在操作期间提供独占写入访问。这可以防止在并发访问场景中出现竞争条件。 始终检查返回值。
组合标志
您可以使用按位 OR 运算符组合多个标志。
<?php declare(strict_types=1); $file = 'audit.log'; $data = "User action at " . date('Y-m-d H:i:s') . PHP_EOL; $flags = FILE_APPEND | LOCK_EX; $result = file_put_contents($file, $data, $flags); if ($result !== false) { echo "Appended with lock: $result bytes written"; } else { echo "Failed to write with combined flags"; }
这结合了 FILE_APPEND 和 LOCK_EX 以实现安全的并发追加。 按位 OR 运算符 (|) 组合了这些标志。 始终彻底测试标志组合。
最佳实践
- 错误处理:始终检查返回值。
- 权限: 确保适当的文件权限。
- 验证: 在写入之前清理输入数据。
- 安全性: 避免使用用户控制的文件名。
- 内存: 对于大数据,请考虑使用流。
来源
本教程介绍了 PHP file_put_contents
函数,并提供了实际示例,展示了它在不同场景中的用法。
作者
列出 所有 PHP 文件系统函数。