しろあじ備忘録

システム関係の備忘録。ザルのような記憶力なので、こうして書いておかないと忘れるのだよ。

アップロードしたファイルがcsv形式かどうか調べたい(php) その2

前記事

shiroajisashi.hatenablog.com

の続き

 

mime_content_type さらに着目

 前回はjpegでテストしたが、

csv形式ならmime_content_typeはどう返すのか試してみよう。

(って、最初からそれを試せばよかったな)

 

前回はテキストファイルかどうかまでの判定まで進めたので、さて、csv形式という判定は?という考察である。

 

では前回の続き

var_dump($_FILES);
echo "<BR>" . mime_content_type ($_FILES['datafile']['tmp_name'] );

 で結果を見てみる。PHP5.4です。←これ大事

 mime_content_type は、PHP5.3より前は非推奨なので

 

EXCELcsv保存したファイルの場合 

f:id:ramapipi:20171006145600p:plain

f:id:ramapipi:20171006145851p:plain

こちらを見ると、

$_FILES が excelを見抜いていますね。

というか送信元のブラウザからの情報らしい。拡張子を見てるらしい。

 

mime_content_type はテキストファイルであると教えてくれる。

 

同じファイルだが拡張子をcsvからjpgに変えた場合、

 f:id:ramapipi:20171006150253p:plain

テキストエディタで手打ちで作ったcsvの場合

f:id:ramapipi:20171006151051p:plain

マックで作成したcsvも試したいが、用意できないなあ。それは別途でいいか。

 

アップロードするcsvのフォーマットは?

さてテキストファイルである前提なら、

もうしょっぱなから

SplFileObject::READ_CSV でファイルを読み込んじゃいましょうかね。

SplFileObject::READ_CSVについては以下のサイトが参考になる↓

コードのサンプルも参考にしよう

blog.fenrir-inc.com

 

csvのフォーマットは例として、

ID,名前,処理日付 の3項目としよう。

カンマ区切りで3つとも必須といったものなのだが、

SplFileObject::READ_CSV で1行ずつ読み込んで、

配列の要素数が3つかどうかチェックしたり、さらにその値を見たりしていけばいいかな。