ファイルへの書き込みと追記
file_put_contentsとFILE_APPENDを使ってファイルにデータを書き込みます
「ファイルへの書き込みと追記」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
PHPでのファイル書き込み
PHP にはファイルに書き込む方法がいくつかあります。
file_put_contents()— 1 回の呼び出しで文字列をファイルに書き込む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'— 書き込み。長さを 0 に切り詰めるか、ファイルを作成する'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ファイルの書き込み
正しい形式の CSV 行を書き込むには fputcsv() を使用します。
<?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()を使用する - CSV 出力には
fputcsv()を使用する - アトミックな書き込み: 一時ファイルに書き込んでから
rename()する - 作成後の権限設定には
chmod()を使用する
よくある質問
「ファイルへの書き込みと追記」レッスンは無料ですか?
はい。「ファイルへの書き込みと追記」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「ファイルへの書き込みと追記」で何を学びますか?
file_put_contentsとFILE_APPENDを使ってファイルにデータを書き込みます ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ファイルへの書き込みと追記」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PHPでファイルを読み込む
- ファイルへの書き込みと追記
- ディレクトリを操作する
- ファイルアップロードの処理