【PHP】POSTされたデータをCSV形式で保存する方法|フォームと連携したログ収集の実装例

【PHP】POSTされたデータをCSV形式で保存する方法|フォームと連携したログ収集の実装例 PHP

Webフォームで送信された内容を、CSVファイルに記録して保存したい場面は多くあります。たとえば、お問い合わせの履歴をCSV形式で保存しておけば、Excelでの管理や外部ツールとの連携が容易になります。

本記事では、PHPを使ってPOSTデータをCSV形式で保存する方法を、フォームとの連携例も含めてわかりやすく解説します。

フォームと連携する基本構成

まず、HTMLで簡単な送信フォームを用意します。ユーザーが名前とメールアドレスを入力して送信するだけのシンプルな構成です。

<form action="save.php" method="post">
  <label>名前:<input type="text" name="name"></label><br>
  <label>メールアドレス:<input type="email" name="email"></label><br>
  <button type="submit">送信</button>
</form>

このフォームはsave.phpにPOSTでデータを送信します。次に、受け取ったデータをCSVに保存する処理をsave.phpで記述します。

POSTデータをCSVに保存するPHPコード

以下は、送信されたデータをdata.csvというファイルに追記保存するスクリプトです。

<?php
// データの受け取りとバリデーション
$name  = isset($_POST['name'])  ? trim($_POST['name'])  : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';

if ($name !== '' && $email !== '') {
  // 保存先のCSVファイル(存在しなければ自動作成)
  $file = fopen('data.csv', 'a');

  if ($file !== false) {
    // 文字コードをUTF-8に変換(Excel用にSJISにしたい場合は'SJIS-win'も可)
    $data = [
      mb_convert_encoding($name, 'UTF-8', 'UTF-8'),
      mb_convert_encoding($email, 'UTF-8', 'UTF-8'),
      date('Y-m-d H:i:s')
    ];

    // CSVに1行書き込み
    fputcsv($file, $data);

    // ファイルを閉じる
    fclose($file);

    echo '保存しました。';
  } else {
    echo 'ファイルの書き込みに失敗しました。';
  }
} else {
  echo '入力内容に不備があります。';
}
?>

このコードでは、送信されたnameemailを取得し、日付と一緒にCSVファイルに1行として追記しています。文字化け対策としてmb_convert_encoding()を使い、UTF-8に明示的に変換しています。

CSVファイルの保存形式と注意点

保存されるCSVファイルの中身は次のようになります:

山田太郎,yamada@example.com,2025-05-27 13:45:10
佐藤花子,hanako@example.com,2025-05-27 14:12:03
  • 文字コード:Windowsで開く前提ならSJIS-winで保存したほうが無難です。
  • パーミッション:data.csvに書き込めるよう、chmod 666などでパーミッションを調整する必要があります(サーバー環境により異なります)。
  • セキュリティ:公開ディレクトリにdata.csvを置くと内容が見えてしまう可能性があるため、配置場所とアクセス制限は要注意です。

実運用での活用例

この仕組みは、お問い合わせフォームだけでなく、以下のような用途にも応用可能です。

  • アンケート集計
  • 資料請求フォームの履歴保存
  • ユーザー応募ログの保存
  • 管理者向けの簡易バックアップ

CSVはExcelやスプレッドシートで簡単に開けるため、エンジニア以外の関係者とデータを共有しやすいというメリットもあります。

まとめ

PHPでPOSTされたデータをCSV形式で保存する方法は、非常にシンプルながら実務でも使いやすいテクニックです。

  • fopen() + fputcsv()で簡単にCSVファイルへ保存可能
  • mb_convert_encoding()で文字化けを防止
  • 文字コードやパーミッション、セキュリティへの配慮が重要

ログ収集や履歴管理、バックアップに役立つ基本技術として、ぜひ使いこなしてみてください。