写入和追加文件内容
使用 file_put_contents 和 FILE_APPEND 向文件写入数据。
写入和追加文件内容 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 PHP 读取文件
- 写入和追加文件内容
- 操作目录
- 处理文件上传