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 '入力内容に不備があります。';
}
?>
このコードでは、送信されたname
とemail
を取得し、日付と一緒に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()
で文字化けを防止- 文字コードやパーミッション、セキュリティへの配慮が重要
ログ収集や履歴管理、バックアップに役立つ基本技術として、ぜひ使いこなしてみてください。