勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

フォームからCSVファイルをアップロードしてPHPの配列に格納する方法

   2024/04/18  PHP

formからcsvファイルをアップロードさせて、PHPで色々処理したかった。とりあえず配列に入れてしまえば、後はいじれるかと思うのでその方法のメモ。

 

ソースコード

<?
if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
    if (move_uploaded_file($_FILES["upfile"]["tmp_name"],  $_FILES["upfile"]["name"])) {
        chmod( $_FILES["upfile"]["name"], 0644);

        setlocale(LC_ALL, 'ja_JP.UTF-8');    //ロケール情報の設定
        $data = file_get_contents($_FILES["upfile"]["name"]);
        $data = mb_convert_encoding($data, 'UTF-8', 'sjis-win');    //文字エンコードをUTF-8へ変換
        $temp = tmpfile();    //テンポラリファイルの作成
        $meta = stream_get_meta_data($temp);    //メタデータからファイルパスを取得して読み込み
        fwrite($temp, $data);    //バイナリセーフなファイル書き込み処理
        rewind($temp);    //ファイルポインタの位置を先頭に戻す
        $file = new SplFileObject($meta['uri']);    //fgetcsvよりSplFileObjectを使うほうが高速らしい。
        $file->setFlags(SplFileObject::READ_CSV);
        $csv  = array();
        foreach($file as $line) {
            $csv[] = $line;
        }
        fclose($temp);
        $file = null;
        var_dump($csv);

    } else {
        echo "ファイルをアップロードできません。";
    }
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>csv</title>

<body>
    <form enctype="multipart/form-data" method="post" action="">
        <input type="file" name="upfile" /><br />
        <input type="submit" value="Upload" />
    </form>
</body>
</html>

 

参考サイト

http://php-archive.net/php/csv-tsv-array/

 - PHP

  関連記事

PHPで改行を含むデータをCSV化する際に表示崩れを防ぐ方法

PHPで改行を含むデータをCSV化した場合、そのCSVファイルをエクセル等で開く ...

PHPで簡単にCSVファイルの生成

簡単にデータ並べるだけのCSVファイル生成。 file_put_contensで ...

PHPでCSVファイル出力用の関数

ここのところログ系をCSVファイル出力にするケースが多かった為、使いまわせるよう ...

PHPでCSVを簡単に取り扱える「LeagueCSV(thephpleague / csv)」の利用方法

PHPでCSVファイルの書き込みや読み込みを行う際、バニラPHPで対応していたが ...

PHPで配列データをCSVとしてダウンロードさせる方法

PHPでログ的なデータをCSV化したかった。ただ、複数の人間が使うのでCSVファ ...