ZetCode

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 用于写入文本的最简单用法。

basic_write.php
<?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 标志添加内容,而不会覆盖现有数据。

append_write.php
<?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 添加正确的行尾字符。

将数组写入文件

您可以先将数组转换为字符串,然后写入数组数据。

array_write.php
<?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 阻止其他进程同时写入文件。

locked_write.php
<?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 运算符组合多个标志。

combined_flags.php
<?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 file_put_contents 函数,并提供了实际示例,展示了它在不同场景中的用法。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数