フォームからは全ての種類のファイルをアップロードできます。
期待した形式ではないファイルを送られた場合は、なんらかの処理をしなければならなくなります。
そんな場合でもphpには拡張子によって送られたファイルの種類を
判定する為にも文字の比較できる関数があり簡単にできます。
ファイルの種類を判断する方法
まずはファイル名から拡張子のみを取得する関数です。
■pathinfo(ファイル名);
返り値はファイル名を各要素毎に分割した連想配列です。
“dirname” … ディレクトリ名(ファイル名を除いたパス名)
“basename” … ファイル名
“extension” … 拡張子のみ
例1:
<?php $file=pathinfo("http://test/test.php"); echo $file["dirname"]."<br>"; echo $file["basename"]."<br>"; echo $file["extension"]."<br>"; ?>
実行すると以下のように
http://test
test.php
php
と分割された物が表示されます。
次に、これを判別する関数です。
■strcasecmp(文字列1,文字列2);
文字列1と文字列2を比較し同じ場合に数字の「0」を返します。
違う場合は数字の「1」か「-1」返します。
この関数は比較に際して文字列1と文字列2の大文字と小文字の違いを
判定に考慮しません。
つまり「PNG」や「png」や「Png」とかも同じ物として判定します。
この関数を利用すれば保存したいファイルかを判定できます。
例2:
<?php $file=pathinfo($_FILES["pic"]["name"]); if(strcasecmp("png",$file["extension"])==0) { print "png画像です。"; } if(strcasecmp("gif",$file["extension"])==0) { print "gif画像です。"; } if(strcasecmp("txt",$file["extension"])==0) { print "テキストです。"; } ?>
アップロードされたファイルの拡張子により
それぞれ
pngなら「png画像です。」
gifなら「gif画像です。」
txtなら「テキストです。」
と表示を変更できます。
次回はアップロードされたファイルが期待したファイルでは無かった場合に、前のページのフォームに戻る方法を書きます。