Personalmente, yo prefiero usar preg_match() función:
if(preg_match("/\.(gif|png|jpg)$/", $filename))
o in_array()
$exts = array('gif', 'png', 'jpg');
if(in_array(end(explode('.', $filename)), $exts)
Con in_array()
puede ser útil si usted tiene una gran cantidad de extensiones para validar y pregunta del perfomance. Otra forma de validar imágenes de archivo: puede usar @imagecreatefrom*()
; si la función falla, significa que la imagen no es válida.
Por ejemplo:
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;
}
a continuación:
$valid = testimage('foo.png');
Suponiendo que foo.png
es un archivo de script PHP con .png
extensión, la función anterior falla. Puede evitar ataques como la actualización de shell y LFI.
¿Por qué el llamado 'video_file' presentado todavía estás permitiendo sólo las imágenes .. – cream
me encontré con esta pregunta en busca de extensiones de archivo válidos. No estoy respondiendo la pregunta aquí, pero me gustaría indicar que tiene un error de lógica en su declaración if. Debe ser '&&' entre las condiciones y no '||' ... Solo pensé en compartir mi punto de vista. – itsols