PHPでCSVファイルを読み込み、テーブルで表示する方法
カテゴリ:WEB制作
タグ:
お問い合わせフォームなどから入力した内容をCSVでサーバーに格納している場合などにウェブ上でデータを確認したいときに使える「PHPでCSVファイルを読み込み、テーブルで表示する方法」を紹介します。
CSVの書き込みの方法は、PHPで入力フォームからCSVにデータを書き込みする方法参考にしてください。
目次
コードの紹介
まずはコードから紹介します。
<?php // CSVファイルのパスを指定 $csvFilePath = 'csv/data.csv'; // CSVファイルが存在するか確認 if (file_exists($csvFilePath)) { // CSVファイルを読み込みモードで開く $fileHandle = fopen($csvFilePath, 'r'); // 最初の行(ヘッダー)を読み込み、テーブルのカラム名として使用 $headers = fgetcsv($fileHandle, 1000, ","); // 表形式でデータを表示、表の枠を指定 echo "<table>"; // ヘッダー部分をtheadタグで囲むことで視覚的に区別 echo "<thead><tr>"; foreach ($headers as $header) { // htmlspecialcharsを使用してHTMLエンティティをエスケープし、XSS攻撃を防ぐ echo "<th>" . htmlspecialchars($header) . "</th>"; } echo "</tr></thead>"; // ボディ部分の生成、tbodyタグで明確に区切る echo "<tbody>"; while (($rowData = fgetcsv($fileHandle, 1000, ",")) !== FALSE) { // 各行データを<tr>タグで囲み、テーブルの行として表示 echo "<tr>"; foreach ($rowData as $cell) { // 各セルのデータもhtmlspecialcharsでエスケープ echo "<td>" . htmlspecialchars($cell) . "</td>"; } echo "</tr>"; } echo "</tbody></table>"; // ファイルを閉じる、これによりリソースを解放 fclose($fileHandle); } else { // ファイルが見つからない場合のエラーメッセージ echo "CSVファイルが見つかりません。"; } ?>
コードの解説
CSVファイルのパスを指定
以下で変数にCSVファイルのパスを挿入します。
$csvFilePath = 'csv/data.csv';
CSVファイルの有無を確認
『file_exists()』でファイルまたはディレクトリが存在するかどうか調べます。
ファイルがある場合は処理を実行、存在しない場合はエラーコメントを出力します。
if (file_exists($csvFilePath)) { //処理の実行 } else { //エラーコメントを出力 echo "CSVファイルが見つかりません。"; }
ファイルを開きます。
『fopen($csvFilePath, ‘r’)』で読み込みモードでCSVファイルを開きます。
2番目のパラメーターである『’r’』で読み込みモードの指定をします。
$fileHandle = fopen($csvFilePath, 'r');
テーブルのヘッドを読み込む
『fgetcsv($fileHandle, 1000, “,”)』で2番目のパラメーターは行の長さになります。
1,000を超える行数がある場合は無視されます。
3番目のパラメーターで各フィールドの境界を表すフィールド区切り文字を指定できます。
ヘッダー用のHTMLタグをechoで出力、『foreach』でループで出力します。
ループ内にある『htmlspecialchars() 』はHTMLで使用する『<』や『>』などの記号をそのまま記号として出力できるように変換しています。
$headers = fgetcsv($fileHandle, 1000, ","); // 表形式でデータを表示、表の枠を指定 echo "<table>"; // ヘッダー部分をtheadタグで囲むことで視覚的に区別 echo "<thead><tr>"; foreach ($headers as $header) { // htmlspecialcharsを使用してHTMLエンティティをエスケープし、XSS攻撃を防ぐ echo "<th>" . htmlspecialchars($header) . "</th>"; } echo "</tr></thead>";
テーブルのボディを読み込む
『echo』でHTMLタグの出力、while文で1行ずつ処理を行います。
『foreach』で各セルのデータを出力します。
// ボディ部分の生成、tbodyタグで明確に区切る echo "<tbody>"; while (($rowData = fgetcsv($fileHandle, 1000, ",")) !== FALSE) { // 各行データを<tr>タグで囲み、テーブルの行として表示 echo "<tr>"; foreach ($rowData as $cell) { // 各セルのデータもhtmlspecialcharsでエスケープ echo "<td>" . htmlspecialchars($cell) . "</td>"; } echo "</tr>"; } echo "</tbody></table>";
ファイルを閉じる
『fclose()』でファイルを閉じます。
// ファイルを閉じる、これによりリソースを解放 fclose($fileHandle);
まとめ
以上、『PHPでCSVファイルを読み込み、テーブルで表示する方法』でした。
わざわざ、CSVをサーバーからダウンロードすることなく整形された状態でデータを見ることができるので保存された、お問い合わせデータの確認などに使えます。
CSVの書き込みの方法は、PHPで入力フォームからCSVにデータを書き込みする方法参考にしてください。