2017-10-13 21 views
0

こんにちは私の写真の雲で私のフィルタ拡張機能に問題があります。ファイルが拡張フィルタを含んでいればうまくいきます。もしasd.phpがうまくいけばいいですが、 image.jpg.php彼はそれをアップロードし、彼が望むことをすることができます...どうすれば修正できますか?ここで私の拡張フィルタの問題php

はコードです:

<?php 

//genera directorios random 
$dirname = uniqid(); 
mkdir("uploads/$dirname", 0774); 

//crea index.php en nuevos directorios con redireccion 
$myfile = fopen("uploads/$dirname/index.php", "w") or die(""); 
$txt = "<?php 
header('Location: /publictools/nube'); 
?>"; 
fwrite($myfile, $txt); 
$txt = "<?php 
header('Location: /publictools/nube'); 
?>"; 
fwrite($myfile, $txt); 
fclose($myfile); 

$folder = "uploads/$dirname/"; //directorio al que subir imagenes 
$maxlimit = 9000000; //tamaño maximo 
$allowed_ext = "png,jpg,gif"; //extensiones permitidas 
$overwrite = "no"; //sobreescritura (yes/no) 

$match = ""; 
$filesize = $_FILES['userfile']['size']; //tamaño de imagen 
$filename = strtolower($_FILES['userfile']['name']); //pasa a minusculas 


if(!$filename || $filename==""){ //ninguna imagen 
    $error = "- Ninguna imagen selecccionada.<br>"; 
}elseif(file_exists($folder.$filename) && $overwrite=="no"){ //imagen existente 
    $error = "- La imagen <b>$filename</b> ya existe<br>"; 
} 

//comprobar tamaño de imagen 
if($filesize < 1){ //imagen vacia 
    $error .= "- Imagen vacía.<br>"; 
}elseif($filesize > $maxlimit){ //imagen supera el máximo permitido 
    $error .= "- Esta imagen supera el tamaño maximo.<br>"; 
} 

$file_ext = preg_split("/\./",$filename); 
$allowed_ext = preg_split("/\,/",$allowed_ext); 
foreach($allowed_ext as $ext){ 
    if($ext==$file_ext[1]) $match = "1"; //acepta la imagen 
} 

//extensión no permitida 
if(!$match){ 
    $error .= "- Este tipo de archivo no está permitido: $filename<br>"; 
} 

if($error){ 
    print "Se ha producido el siguiente error al subir la imagen:<br> $error"; //errores 
}else{ 
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $folder.$filename)){ //sube la imagen 
     print "<div align='center'>Encontraras tu imagen <a href='http://*****/uploads/$dirname/$filename'>Aqui</a></div></form>"; //upload correcto 
    }else{ 
     print "Error!"; //error 
    } 
} 

?> 

答えて

0

あなたはこのような何かのために、既存の機能pathinfoを使用することができます。

// use pathinfo to parse the name 
$ext = pathinfo($filename, PATHINFO_EXTENSION); 
// check if the extension is in the allowed extensions 
$allowed = preg_split("/\,/",$allowed_ext); 
$match = (!in_array($ext,$allowed)) ? false : true; 
+0

それはあなたが拡張子を持つ非常に同じことを行う行を置き換え、あなたがそれはpreg_splitと以下のforeachループを持っています。それともあなたのコードではありませんか? –

関連する問題