勉強したことのメモ

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

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

   2024/01/12  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化する際に表示崩れを防ぐ方法

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

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

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

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

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

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

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