2020年07月12日更新
PHPでCSVファイルを読み込み・書き出しする方法を初心者にもわかりやすく解説!
PHPではCSVファイルを読み込みしたり、書き出ししたりすることができます。この記事では、PHPでCSVファイルを読み込みしたり書き出ししたりする方法について、わかりやすくお伝えします。また、CSVファイルを読み込みするときの文字化けについてもお伝えします。
目次
PHPではCSVファイルを配列の形で読み込み・書き込みできる
Webサイトを構築するのに、HTMLとともに欠かせないプログラミング言語であるのがPHPです。PHPを使って、Webサイトでさまざまなことができるようになります。PHPでできることの一つに、CSVファイルの配列の読み込みと書き出しがあります。
CSVファイルでは、さまざまなデータを表計算の形式で表現できます。これをファイルの形式のままでWebサイトに読み込みができれば、Webサイトでデータを示したいときにとても便利です。
また、CSVファイルからデータを読み込んで更新できるようにPHPでプログラミングして設定しておけます。そうすれば、CSVファイルを更新するたびに、わざわざWebサイトに入力し直すことなく、データの更新ができるようになります。
この記事では、PHPを使ってCSVファイルからデータを読み込みしたり、書き込みしたりする方法について詳しく解説します。
fgetcsv関数で配列の形にする
CSVファイルをPHPで読み込みするためには、主な方法としてはfgetcsv関数を使います。fgetcsv関数は「CSV」という文字列が中に入っていることからもわかる通り、CSVファイルの読み込み処理するための関数です。
fgetcsvを使いこなせれば、CSVファイルの読み込みがPHPでできるようになるので、ぜひ利用できるようにしましょう。
PHPでCSVファイルを読み込みする方法
それではPHPでCSVファイルを読み込みするコードを見ていきましょう。あらかじめCSVファイルを作成して、PHPの実行フォルダに保存しておきましょう。
今回は上記のようなCSVファイルを作成しました。ファイル名は「test.csv」です。その上で、適当なエディタに以下のプログラムを作成します。
<?php $row = 1; if (($handle = fopen("test.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle))) { echo "${row}行目\n"; $row++; foreach ($data as $value) { echo "「${value}」\n"; } } fclose($handle); } |
すると、上記の画像の様にCSVファイルがPHPで読み込みされました。
「if (($handle = fopen("test.csv", "r")) !== FALSE)」
上記の行でまずは読み込みしようとしているファイルが存在しているかどうかを確認しています。
「while」からの行で、1行ずつfgetcsの関数を使ってCSVファイルの配列を読み込みして表示するようにプログラムしています。
READ_CSVを使って読み込みする方法
CSVファイルを読み込みする方法には、「READ_CSV」を使う方法もあります。「READ_CSV」は、ファイル操作をするためのSplFileObjectクラスの1つです。こちらを使ったプログラムは次の通りです。
<?php $filepath = 'test.csv'; $file = new SplFileObject($filepath); $file->setFlags(SplFileObject::READ_CSV); $row = 0; foreach ($file as $line) { if (empty($line[0])){ echo 'continue'; continue; } $cnt = count($line); if ($row == 0){ echo 'タイトル:'.$line[0].'<br>'; $row++; continue; } for($i = 0; $i < $cnt; $i++){ echo $line[$i].'<br>'; } } ?> |
するとこのようにCSVファイルが出力されます。
PHPでCSVファイルを書き出しする方法
外部のCSVファイルを、その配列のままでPHPで読み込みするだけではなく、CSVファイルにPHPを使って書き出しすることもできます。プログラムに書き出した文字列の配列を、カンマ区切りのCSVファイルに書き出すプログラムは次の通りです。
<?php $list = array ( array('aaa', 'bbb', 'ccc', 'dddd'), array('123', '456', '789'), array('"aaa"', '"bbb"') ); $file = new SplFileObject('file.csv', 'w'); foreach ($list as $fields) { $file->fputcsv($fields); } ?> |
上記のプログラムを実行すると、画像の様に「file.csv」というcsvファイルが作成されます。
こちらを開くと、次の画像のような文字列が書き出しされています。このように、PHPを使ってCSVファイルを書き出しすることも可能です。
PHPでCSVファイルを読み込み・書き出しするときの文字コードについて
CSVファイルの配列をPHPで読み込みしたり書き出ししたりするときに、良く起こる問題が文字化けです。文字化けが起こる原因は、CSVファイルを保存した時の文字コードと、PHPで読み込みや書き出しをするときの文字コードが違うためです。文字コードが違って、文字化けしてしまうときには、文字コードを一致させる必要があります。
こちらでは、PHPとCSVファイルの文字コードを一致させる方法について解説します。
PHP側で対処する場合
PHP側で対処する場合には、PHPのヘッダーで文字コードを指定します。PHPを書き出すときに、ヘッダーを挿入して、そちらで文字コードcharsetを指定します。文字コードを指定するプログラムの書き方は次の通りです。
<?php header("Content-Type: text/html; charset=UTF-8"); |
「carset=」のあとに書かれている「UTF-8」が文字コードです。文字コードは各国の言語ごとに開発されてきたので、膨大な数があります。しかし、現在では「UTF-8」が標準的な文字コードとなっています。
しかし、「UTF-8」でファイルが作成されているとは限らない場合もあるので、もしも「UTF-8」で文字化けしてしまうときには、「UTF-8」の部分を違う文字コードに変更しましょう。
CSVファイル側で対処する場合
PHPで読み込みをするCSVファイルを保存するときに、文字コードを「UTF-8」に指定して保存すると、文字化けせずにPHPに読み込みできます。CSVファイルを作成した表計算で文字コードの指定ができない場合には、いったん保存してから他のファイルで開きなおして文字コードを変更することもできます。
上記の画像の様に、CSVファイルはメモ帳でも開けます。
メモ帳は、保存するときに上記の画像の様に文字コードを指定できます。文字コードを「UTF-8」で保存すれば、PHPで読み込みしても文字化けせずに開けます。
PHPでCSVファイルの読み込みができるようにしよう!
この記事では、PHPでCSVファイルの読み込みと書き出しをする方法について解説してきました。PHPを使うと、HTMLを使っているときだけとは違い、Webサイトの内容に幅が出ます。その一つが、CSVファイルの読み込みでしょう。
CSVファイルをPHPを使ってWebサイトに組み込むことで、日々更新されていくデータを、Webサイトの簡単な更新だけで表示できます。ぜひ、Webサイトでデータを掲載する必要がある方は、CSVファイルの配列の読み込み方、書き出し方も覚えて、Webサイトの構築に役立ててください。