PHP で CSV ファイルを読み書きする方法(fgetcsv, fputcsv)初心者向けガイド!
新人
「CSVファイルって何ですか?PHPでどう使うんですか?」
先輩
「CSVファイルは、データをカンマで区切って保存する形式のファイルです。PHPでは、fgetcsv()
やfputcsv()
を使って、CSVファイルの読み書きができます。」
新人
「それは便利そうですね!具体的にはどうやって使うんですか?」
先輩
「では、まず基本的な使い方を見ていきましょう!」
1. CSVファイルとは?(基本的な説明)
CSVファイルは「Comma Separated Values」の略で、データをカンマで区切って保存する形式のファイルです。これにより、簡単に表形式のデータを保存・読み込みできます。
例えば、住所録や成績表など、データを列で整理したい場合に使われます。CSVファイルはテキストファイルなので、通常のテキストエディタで開いて確認することもできます。
2. PHPでCSVファイルを読み書きする方法(fgetcsv, fputcsv)
PHPでは、fgetcsv()
を使ってCSVファイルを読み込み、fputcsv()
を使ってCSVファイルにデータを書き込むことができます。
次のコードは、fgetcsv()
を使ってCSVファイルを読み込む例です。
<?php
if (($handle = fopen("sample.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
print_r($data);
}
fclose($handle);
}
?>
このコードでは、sample.csv
というCSVファイルを開いて、1行ずつ読み込んでいます。fgetcsv()
は、各行を配列として返します。
次に、fputcsv()
を使ってCSVファイルにデータを書き込む方法を見てみましょう。
<?php
$data = array('田中', '25', '東京');
if (($handle = fopen("sample.csv", "a")) !== FALSE) {
fputcsv($handle, $data);
fclose($handle);
}
?>
このコードでは、sample.csv
ファイルに新しいデータ(「田中」「25」「東京」)を追加しています。fputcsv()
を使うと、配列のデータをCSV形式で簡単に書き込むことができます。
3. fgetcsv()を使ったCSVファイルの読み込み例(簡単なコードを使って)
ここでは、fgetcsv()
を使って実際にCSVファイルを読み込む方法を見ていきましょう。
例えば、sample.csv
というファイルが以下のような内容だとします。
田中,25,東京
佐藤,30,大阪
鈴木,22,名古屋
このファイルをPHPで読み込むには、次のようにコードを書きます。
<?php
if (($handle = fopen("sample.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// 各行のデータを表示
echo "名前: " . $data[0] . ", 年齢: " . $data[1] . ", 都道府県: " . $data[2] . "<br>";
}
fclose($handle);
}
?>
このコードでは、fgetcsv()
でCSVファイルの各行を読み込み、print_r()
を使って配列の中身を表示しています。
4. fputcsv()を使ったCSVファイルの書き込み例(簡単なコードを使って)
次に、fputcsv()
を使ってCSVファイルにデータを書き込む方法を見てみましょう。
例えば、以下のようなデータを新しくCSVファイルに書き込む場合です。
<?php
$data = array('田中', '25', '東京');
if (($handle = fopen("new_sample.csv", "w")) !== FALSE) {
fputcsv($handle, $data); // データを書き込む
fclose($handle);
}
?>
このコードでは、new_sample.csv
という新しいCSVファイルに、「田中」「25」「東京」というデータを1行で書き込んでいます。
もし複数のデータを追加したい場合は、同じようにfputcsv()
を複数回使用すれば、ファイルに新しい行が追加されます。
<?php
$data1 = array('田中', '25', '東京');
$data2 = array('佐藤', '30', '大阪');
if (($handle = fopen("new_sample.csv", "w")) !== FALSE) {
fputcsv($handle, $data1);
fputcsv($handle, $data2);
fclose($handle);
}
?>
これで、「田中」「25」「東京」と「佐藤」「30」「大阪」の2行がnew_sample.csv
に書き込まれます。
5. CSVファイルの読み書きにおける注意点
CSVファイルを読み書きする際には、いくつかの注意点があります。これらを理解しておくことで、より効率的で安全にCSVファイルを操作できます。
- ファイルの存在確認:読み込む前にCSVファイルが存在するか確認することが重要です。存在しないファイルを読み込もうとするとエラーになります。
- ファイルの書き込み権限:書き込むファイルに対して適切な書き込み権限があるかを確認しましょう。権限がないとファイルの書き込みが失敗します。
- ファイルを閉じる:ファイルを開いた後は、必ず閉じることが大切です。ファイルを開いたままにしておくと、システムリソースが無駄に消費されることがあります。
- CSVのエンコーディング:ファイルのエンコーディング(文字コード)に注意しましょう。例えば、UTF-8とShift-JISでは文字化けが起きることがあります。
以上の点を注意して、CSVファイルを安全に操作しましょう。ファイルの読み書きがスムーズに行えるようになります。
6. fgetcsv()とfputcsv()の使い分け(どちらを使うべきか)
CSVファイルの操作にはfgetcsv()
とfputcsv()
の2つの関数を使用しますが、それぞれの役割と使いどころを理解することが大切です。
fgetcsv()は、CSVファイルを読み込むための関数です。CSVファイルの内容を1行ずつ配列として取り出すことができます。主にデータを取得したいときに使用します。
一方、fputcsv()は、CSVファイルにデータを追記または上書きするための関数です。データをファイルに保存したい場合に使用します。
例えば、CSVファイルに新しいデータを追加する場合はfputcsv()
を使用し、ファイルからデータを読み込みたい場合はfgetcsv()
を使用します。
以下は、fgetcsv()
とfputcsv()
の使い分けの一例です。
<?php
// CSVファイルからデータを読み込む例
if (($handle = fopen("data.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// ここでデータを処理
echo implode(", ", $data) . "<br>";
}
fclose($handle);
}
// CSVファイルにデータを追加する例
$newData = array('佐藤', '28', '京都');
if (($handle = fopen("data.csv", "a")) !== FALSE) {
fputcsv($handle, $newData);
fclose($handle);
}
?>
上記のコードでは、fgetcsv()
でCSVファイルを読み込んで表示し、fputcsv()
で新しいデータをCSVファイルに追加しています。
7. 実践!CSVファイルを使ったアプリケーションの例
ここでは、CSVファイルを使った簡単なアプリケーションを作成してみましょう。ユーザーが入力したデータをCSVファイルに保存し、それを後で表示する機能を実装します。
まず、ユーザーから名前、年齢、都道府県を入力させるフォームを作成します。
<form action="save_data.php" method="POST">
<label for="name">名前:</label><br>
<input type="text" id="name" name="name"><br>
<label for="age">年齢:</label><br>
<input type="text" id="age" name="age"><br>
<label for="city">都道府県:</label><br>
<input type="text" id="city" name="city"><br><br>
<input type="submit" value="データを保存">
</form>
次に、フォームのデータを受け取り、CSVファイルに保存するPHPコードを作成します。
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$age = $_POST['age'];
$city = $_POST['city'];
$data = array($name, $age, $city);
// CSVファイルにデータを書き込む
if (($handle = fopen("user_data.csv", "a")) !== FALSE) {
fputcsv($handle, $data);
fclose($handle);
echo "データが保存されました!";
} else {
echo "データの保存に失敗しました。";
}
}
?>
このコードでは、フォームから送信された名前、年齢、都道府県をCSVファイルに保存します。新しいデータはCSVファイルの末尾に追加されます。
8. CSVファイルの読み書きを行う際のベストプラクティス
CSVファイルを安全かつ効率的に操作するためには、いくつかのベストプラクティスを守ることが重要です。以下は、CSVファイルを読み書きする際のポイントです。
- ファイルを開く際のモードに注意:ファイルを開くときは、読み込み専用、書き込み専用、追加モードなどの適切なモードを選びましょう。
fopen()
関数でファイルを開く際には、モードを間違えないようにしましょう。 - ファイルの存在確認:ファイルが存在しない場合は、新しく作成するかエラーメッセージを表示するようにしましょう。
- ファイルの閉じ忘れに注意:ファイルを開いたら、必ず
fclose()
で閉じるようにしましょう。閉じ忘れるとリソースが無駄に消費され、システムのパフォーマンスに影響を与える可能性があります。 - CSVデータの検証:CSVファイルを読み書きする前に、データの検証を行い、データが正しい形式であることを確認することが重要です。
- 適切なエラーハンドリング:ファイル操作中にエラーが発生した場合、エラーメッセージを表示し、問題を解決するための適切な処理を行いましょう。
これらのベストプラクティスを守ることで、CSVファイルの読み書きがより安全かつ効率的に行えるようになります。