勉強したことのメモ

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

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

   2024/04/18  PHP

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

 

ソースコード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?
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>
<? 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>
<?
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化する際に表示崩れを防ぐ方法

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

CSVファイルを使って郵便番号から住所を抽出する

■ソース <? error_reporting(E_ALL & ~ ...

PHPからCSVファイルを出力する際にメモリを節約する方法

MySQLよりデータを大量に取り出してCSVファイル化し、ダウンロードさせるとい ...

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

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

S