PHP Academy · 课时

写入和追加文件内容

使用 file_put_contents 和 FILE_APPEND 向文件写入数据。

第 2 / 4 课13 个步骤

写入和追加文件内容 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。

在 PHP 中写入文件

PHP 提供了多种写入文件的方法:

  • file_put_contents() — 一次调用即可将字符串写入文件
  • fopen() + fwrite() — 基于流的写入
  • 使用 FILE_APPEND 标志追加内容,而不是覆盖文件

file_put_contents()

将字符串写入文件——文件不存在时创建,文件存在时覆盖:

<?php
$data = "Hello, PHP!\nThis is line 2.\n";

$bytes = file_put_contents('/tmp/output.txt', $data);

if ($bytes === false) {
    echo 'Failed to write';
} else {
    echo "Wrote $bytes bytes";
}

使用 FILE_APPEND 追加内容

使用 FILE_APPEND 标志将内容添加到现有文件的末尾:

<?php
$logEntry = date('Y-m-d H:i:s') . ' - User logged in' . PHP_EOL;

file_put_contents(
    '/var/log/app.log',
    $logEntry,
    FILE_APPEND | LOCK_EX  // append + exclusive lock
);

fopen 写入模式

fopen 的打开模式决定文件的打开方式:

  • 'w' — 写入,将长度截断为零或创建文件
  • 'a' — 写入并追加,文件不存在时创建
  • 'x' — 写入,文件已存在时失败
  • 'r+' — 从开头读写,文件必须存在

fopen + fwrite

基于流的写入,可进行精确控制:

<?php
$handle = fopen('/tmp/report.txt', 'w');

if ($handle === false) die('Cannot open file');

fwrite($handle, "Report generated: " . date('Y-m-d') . "\n");
fwrite($handle, str_repeat('-', 40) . "\n");
fwrite($handle, "Total: 1234\n");

fclose($handle);
echo 'Report written';

写入 CSV 文件

使用 fputcsv() 写入格式正确的 CSV 行:

<?php
$rows = [
    ['Name', 'Email', 'Score'],
    ['Alice', 'alice@test.com', 95],
    ['Bob',   'bob@test.com',   87],
];

$handle = fopen('/tmp/results.csv', 'w');
foreach ($rows as $row) {
    fputcsv($handle, $row);
}
fclose($handle);

写入 JSON 文件

将 PHP 数据序列化为 JSON 并写入文件:

<?php
$config = [
    'version' => '2.0',
    'debug'   => false,
    'db'      => ['host' => 'localhost', 'port' => 3306],
];

$json = json_encode($config, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
file_put_contents('/app/config.json', $json);

echo 'Config saved';

原子性文件写入

先写入临时文件,再重命名,以实现原子性(可防止崩溃导致问题)的更新:

<?php
$target  = '/app/data.json';
$tmpFile = $target . '.tmp.' . uniqid();

$data = json_encode(['ts' => time(), 'value' => 42]);

file_put_contents($tmpFile, $data, LOCK_EX);
rename($tmpFile, $target);  // atomic on most OSes

echo 'File updated atomically';

权限和所有权

创建文件后,使用 chmod() 设置文件权限:

<?php
$path = '/var/www/uploads/avatar.jpg';

// Copy uploaded temp file to destination
move_uploaded_file($_FILES['avatar']['tmp_name'], $path);

// Set permissions (owner read/write, group read, world read)
chmod($path, 0644);

echo 'File uploaded and permissions set';

临时文件

使用 tempnam() 或 tmpfile() 安全地创建临时文件:

<?php
// Create a named temp file
$tmpPath = tempnam(sys_get_temp_dir(), 'php_');
file_put_contents($tmpPath, 'temp data');
$content = file_get_contents($tmpPath);
unlink($tmpPath);  // delete when done

// Anonymous temp file handle
$tmp = tmpfile();
fwrite($tmp, 'anonymous temp');
// auto-deleted when $tmp is garbage collected

复制和移动文件

使用内置函数复制和重命名/移动文件:

<?php
// Copy a file
copy('/src/template.html', '/dst/page.html');

// Move / rename
rename('/tmp/upload_abc', '/storage/images/photo.jpg');

// Delete
unlink('/tmp/old_file.txt');

// Check if file was copied successfully
if (copy('a.txt', 'backup.txt')) {
    echo 'Backup created';
}

快速检查

要将内容添加到文件末尾而不是覆盖文件,需要将哪个标志传递给 file_put_contents()?

回顾:写入文件

写入文件的基础知识:

  • file_put_contents() — 最简单的写入/覆盖方式
  • 使用 FILE_APPEND 标志进行追加
  • 使用 fopen('a', ...) + fwrite() 进行流式写入
  • 使用 fputcsv() 输出 CSV
  • 原子性写入:写入临时文件 + rename()
  • 使用 chmod() 在创建后设置权限
免费开始

用 AI 导师学习 PHP — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
49
课程
195

常见问题解答

「写入和追加文件内容」课时是免费的吗?

是的 — 「写入和追加文件内容」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。

「写入和追加文件内容」这节课中我会学到什么?

使用 file_put_contents 和 FILE_APPEND 向文件写入数据。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「写入和追加文件内容」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 PHP 读取文件
  2. 写入和追加文件内容
  3. 操作目录
  4. 处理文件上传
← 返回 PHP Academy