Ext JSやRapid Driveなど
システム開発の技術情報をご紹介。

お問い合わせ 資料請求 無料見積り

お電話でお気軽にお問い合わせくださいTel 03-6805-2904 営業時間 [平日]AM 9:30 - PM 6:30

ファイル操作

ファイル操作について

CSV形式ファイルのアップロード

CSV

CSVとは、Comma Separated Value(カンマで区切られた値)の頭文字をとったものです。つまり、CSVファイルとは、値(数値やテキスト等)をカンマで区切って書いたテキストファイルのことを指しています。

CSV ファイルをダブルクリックすると、自動的に表計算ソフト(Excel等)が起動し、カンマは見えず、表計算ソフト(Excel等)のデータと見た目は変わりありません。また、CSVファイルはテキストファイルなので、PCの機種の違いやアプリケーションの違いが(ほとんど)ありません。

このことにより、異なるアプリケーション間でデータを受け渡しすることが可能になります。

アップロードされたCSVファイルを利用するためには、カンマで区切られたそれぞれのデータを切り離して取得する必要があります。

PHPの関数の中には、いとも簡単にCSVファイルをそのままデータとして活用することができる関数が用意されています。

アップロードしたcsvファイルを切り離す

それではまず、ファイル送信フォームを作成します。

ここで使用するファイル送信フォームは、前節の「テキストファイルのアップロード」で使用したフォームの実行対象スクリプトを、「reception.php」から「address.php」に変更したHTMLのページです。

ファイル送信フォームのソース
<html>
    <head>
    <meta http-equiv="Content-Language" content="ja">
    <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
    <title>送信ファイル</title>
    </head>
    <body>
    <form method="POST" enctype="multipart/form-data" action="address.php">
    <p>送信ファイル:<input type="file" name="userfile" size="40"> <input type="submit" value="送信" name="up"></p>
    </form>
    </body>
</html>

送信対象のCSVファイルを作成します。今回は、作成したCSVファイル「address.csv」を、ローカルディスク(C:)直下のtemplateディレクトリに配置します。

送信対象のCSVファイル「address.csv」
山田太郎,男,166-0003,東京都杉並区高円寺南1-111-11
山田花子,女,154-0017,東京都世田谷区世田谷2-2-22
山田二郎,男,150-0002,東京都渋谷区渋谷3-3-33
山田三郎,男,180-0001,東京都武蔵野市吉祥寺北町4-4-44
山田華子,女,542-0062,大阪府大阪市中央区上本町西5-5-5
csvファイル処理スクリプト

前章のaction属性で指定した「address.php」ファイルを作成します。

CSVファイルを処理するスクリプト「address.php」
<?php
    $handle = fopen( $_FILES[ 'userfile' ][ 'tmp_name' ], "r" );

    while( $data = fgetcsv( $handle, 1000, "," ) ) {

        $name = $data[0];
        $sex = $data[1];
        $postcode = $data[2];
        $address = $data[3];

        echo "名前:$name<br>n";
        echo "性別:$sex<br>n";
        echo "郵便番号:$postcode<br>n";
        echo "住所:$address<br>n";
        echo "-----------------------------------------<br>n";
    }

    fclose( $handle );
?>
実行結果
名前:山田太郎
性別:男
郵便番号:166-0003
住所:東京都杉並区高円寺南1-111-11
-----------------------------------------
名前:山田花子
性別:女
郵便番号:154-0017
住所:東京都世田谷区世田谷2-2-22
-----------------------------------------
名前:山田二郎
性別:男
郵便番号:150-0002
住所:東京都渋谷区渋谷3-3-33
-----------------------------------------
名前:山田三郎
性別:男
郵便番号:180-0001
住所:東京都武蔵野市吉祥寺北町4-4-44
-----------------------------------------
名前:山田華子
性別:女
郵便番号:542-0062
住所:大阪府大阪市中央区上本町西5-5-5
-----------------------------------------

上記スクリプトのfgetcsv()関数で取得したデータをカンマで切り離し、その結果を配列$dataに格納します。後は配列に格納されたデータを取り出せば、CSVファイル経由でアップロードされたデータを自由に使うことができます。

fgetcsv( resource handle [, int length [, string delimiter
[, string enclosure]]] );
handle
fopen()、popen()、fsockopen()で正常にオープンされたファイルへのファイルポインタである必要があります。
length
行末文字を考慮して、CSVファイルにある最も長い行よりも大きい必要があります。
delimiter
フィールドの注)デリミタ(1文字のみ)を設定します。デフォルトは「カンマ」です。
注)デリミタとは・・・
「カンマ」、「スペース」、「タブ」など、データをテキストファイル形式で記録する際に、(項目フィールド)を区切る記号として使用される特殊な文字のことです。区切り文字ともいいます。
enclosure
フィールド囲い子文字(1文字のみ)を設定します。デフォルトは「"」ダブルクォーテーションマークです。