PHPでCSV追記アップロード機能を作る方法
PHPでCSV追記アップロード機能を作る方法を紹介します。CSVファイルをアップロードすると、既存のCSVデータを残したまま新しいデータを末尾へ追加できます。顧客リストや商品一覧などのデータを蓄積したい場合に便利なサンプルコードです。データベースを使わずにCSVファイルだけで管理したい場合にも利用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
CSVファイルを追記アップロードしました。
| 名前 | カテゴリー | メールアドレス |
|---|---|---|
| 山田 太郎 | 営業 | taro@example.com |
| 佐藤 花子 | 企画 | hanako@example.com |
コードをコピーして使おう!
<?php
$message = '';
if (
$_SERVER['REQUEST_METHOD'] === 'POST' &&
isset($_FILES['csv_file'])
) {
$file = $_FILES['csv_file'];
if (
$file['error'] === 0 &&
strtolower(
pathinfo(
$file['name'],
PATHINFO_EXTENSION
)
) === 'csv'
) {
$fp = fopen(
$file['tmp_name'],
'r'
);
$appendFp = fopen(
'data.csv',
'a'
);
while (
($row = fgetcsv($fp))
!== false
) {
fputcsv(
$appendFp,
$row
);
}
fclose($fp);
fclose($appendFp);
$message =
'CSVファイルを追記アップロードしました。';
}
}
$rows = [];
if (file_exists('data.csv')) {
if (($fp = fopen('data.csv', 'r')) !== false) {
while (($row = fgetcsv($fp)) !== false) {
$rows[] = $row;
}
fclose($fp);
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSV追記アップロード</title>
<style>
body{
font-family:sans-serif;
margin:20px;
}
.upload-wrap{
border:1px solid #e5e7eb;
border-radius:20px;
padding:24px;
margin-bottom:24px;
}
.note{
margin:0 0 16px;
line-height:1.8;
color:#374151;
}
.file-input{
width:100%;
margin-bottom:16px;
}
.upload-btn{
border:none;
background:#ff6a00;
color:#fff;
padding:14px 24px;
border-radius:10px;
font-size:16px;
font-weight:700;
cursor:pointer;
}
.success{
margin-top:16px;
padding:12px 16px;
background:#ecfdf5;
border:1px solid #86efac;
border-radius:10px;
}
.table-wrap{
border:1px solid #e5e7eb;
border-radius:20px;
overflow:hidden;
}
table{
width:100%;
border-collapse:collapse;
}
th{
background:#f7f2e5;
}
th,
td{
padding:16px;
text-align:left;
border-bottom:1px solid #e5e7eb;
}
</style>
</head>
<body>
<div class="upload-wrap">
<p class="note">
※このサンプルは追記保存です。アップロードしたCSVデータを既存の data.csv の末尾へ追加します。
</p>
<form
method="post"
enctype="multipart/form-data">
<input
type="file"
name="csv_file"
accept=".csv"
class="file-input"
required>
<button
type="submit"
class="upload-btn">
CSVを追記アップロード
</button>
</form>
<?php if ($message): ?>
<div
class="success"
id="successMessage">
<?=
htmlspecialchars(
$message,
ENT_QUOTES,
'UTF-8'
)
?>
</div>
<script>
setTimeout(function(){
const msg =
document.getElementById(
'successMessage'
);
if(msg){
msg.style.display='none';
}
},3000);
</script>
<?php endif; ?>
</div>
<div class="table-wrap">
<table>
<tr>
<th>名前</th>
<th>カテゴリー</th>
<th>メールアドレス</th>
</tr>
<?php foreach ($rows as $row): ?>
<tr>
<td><?= htmlspecialchars($row[0] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row[1] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row[2] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルで使用するファイル構成です。
下記のファイルを同じフォルダ(同じ階層)へ配置してください。
sample/
├─ index.php
└─ data.csv
サーバーへ設置する場合は、index.php と data.csv を同じフォルダ(同じ階層)へアップロードしてください。
このサンプルは追記保存です。アップロードしたCSVファイルの内容を既存の data.csv の末尾へ追加します。既存データは削除されず、そのまま保持されます。
同じデータを複数回アップロードすると重複して追加されるため、必要に応じて事前にCSV内容を確認してください。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーへアップロードするか、PHPが利用できるローカル環境で行ってください。
コメント