0Pricing
PHP Academy · レッスン

ファイルへの書き込みと追記

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PHPでファイルを読み込む
  2. ファイルへの書き込みと追記
  3. ディレクトリを操作する
  4. ファイルアップロードの処理
← PHP Academyに戻る