PHPの$_FILES変数に悩まされた話
node.jsの話はとりあえず置いといて、、、(汗)
他のプロジェクトで使っているPHPの処理の中で$_FILESの扱いに困ったので記録として残しておきます。(以下、信ぴょう性はいまいちですのでご了承ください)
何がしたかったのかというと、「複数ファイルを送信の際、$_FILESの中身があるかどうかの判定をする」ただそれだけです。
ですが、HTMLのformにて<input type='file' name='hoge[]' >があるだけで、isset($_FILES['name])はtrueを返します。それじゃ、中身はどうなっとんやと思いvar_dump($_FILES['name])を出力しようとしたが出ない。
ということで、リファレンスを見ると$_FILESの配列の形がへんてこであると気づく。今回は複数ファイルを送信することもあり、
['hoge'](
['name'](
[0] => test1.txt,
[1] => test2.txt
)
...etc
)
という形で格納されていました。
僕は以下の形で入ってると思っていたので驚きました
['hoge'](
[0](
['name] => test1.txt,
....
)
[1](
['name'] => test2.txt,
.....
)
)
以下のリンクに詳細が書いてあります。(配列の形を、へんてこ=>下の形への変形の方法も書いてあります。)
僕は最終的に
foreach($_FILES['hoge']['name'] as $file){
empty($file[name])'true処理':'false処理' ;
}
と書いて判定を行いました。empty関数を使ったのは、isset関数だと空の文字列でもtrueを返してしまうためです(ファイルが何もアップロードされなかった場合['name'] => ""となる)。
こんなことをする必要があったのかは甚だ疑問ですが、残しておきます。