個人的には、preg_match()関数を使用することを好みます。
if(preg_match("/\.(gif|png|jpg)$/", $filename))
またはin_array()
$exts = array('gif', 'png', 'jpg');
if(in_array(end(explode('.', $filename)), $exts)
Within_array()
は、検証する拡張機能とパフォーマンスに関する質問が多数ある場合に役立ちます。ファイル イメージを検証する別の方法: を使用できます@imagecreatefrom*()
。関数が失敗した場合、これはイメージが有効でないことを意味します。
例えば:
function testimage($path)
{
if(!preg_match("/\.(png|jpg|gif)$/",$path,$ext)) return 0;
$ret = null;
switch($ext)
{
case 'png': $ret = @imagecreatefrompng($path); break;
case 'jpeg': $ret = @imagecreatefromjpeg($path); break;
// ...
default: $ret = 0;
}
return $ret;
}
それから:
$valid = testimage('foo.png');
foo.png
これが拡張子付きの PHP スクリプト ファイルであると仮定すると.png
、上記の関数は失敗します。shell update やLFIなどの攻撃を回避できます。