Como excluir tipos de archivos para subir en un file?

  • Autor Autor TaurusZDK
  • Fecha de inicio Fecha de inicio
T

TaurusZDK

Gamma
Programador
No recomendado
hola tengo unas dudas sobre un formulario a la hora de usar la parte de files.

estoi armando una web y estoi armando el perfil del usuario (soy algo nuevo en esto de la programacion unos 3 meses o mas) y a la hora de cambiar su imagen de perfil (avatar) quiero permitir que solo suba cierto tipo de archivos que son solo los formatos de imagenes tengo este codigo aver si me ayudan

PHP:
$upload_dir = 'uploads/photo/';
$user_id = $_POST['uid'];
$destin = $_POST['destino'];
$extensi_img = array('.jpg','.jpeg','.gif','.png');	
 
  $Photo_Name = $_FILES['avatar']['name'];
  $Photo_tmpName  = $_FILES['avatar']['tmp_name'];
  $Photo_Size = $_FILES['avatar']['size'];
  $Photo_Format_Type = $_FILES['avatar']['type'];	  
  
  if ($Photo_Format_Type == $extensi_img) { 
  
  } else {
      Header("Location: index.php");	  
  }

como ven intente poner la clase o formatos permitidos de archivos que quiero que suban para evitar que le den un mal uso al formulario
intento usar un if para validar el formato de en el caso de que toque un formato no permitido lo mande a otra pagina donde pondre un mensaje.

me podrian ayudar se los agradeceria muchisio 😀........ saludos
 
PHP:
$tipos= array('image/jpeg', 'image/gif');
if (in_array($_FILES['avatar']['type'], $tipos)) {
//subir
}else{
//no subir, eliminar temporario (unlink)
}

+info PHP: Handling file uploads - Manual
 
También puedes hacerlo utilizando PHP: getimagesize - Manual, esa function te dice el width y el height (los únicos archivos que tienen ancho y alto son las imágenes, el resto de archivos NO). :encouragement:
 
PHP:
$tipos= array('image/jpeg', 'image/gif');
if (in_array($_FILES['avatar']['type'], $tipos)) {
//subir
}else{
//no subir, eliminar temporario (unlink)
}

+info PHP: Handling file uploads - Manual

ahhhhhhhhhhhhhh gracias recien buscaba en google y nada me salio como lo que me dejaste mil!!!!!!!!!!!!!!!!!!!!! gracias!!!!

otra pregunta e.e como puedo hacer para renombrar esas imagenes al momento de ser subidas al servidor digo para que no alla ninguna con el mismo nombre.

y disculpa la molestia y gracias x sus respuestas tan rapidas!!

- - - Actualizado - - -

También puedes hacerlo utilizando PHP: getimagesize - Manual, esa function te dice el width y el height (los únicos archivos que tienen ancho y alto son las imágenes, el resto de archivos NO). :encouragement:

gracias ati tmb ya me estoi biendo ese manual ( a esto le falta un boton para agradecer e.e)
 
ahhhhhhhhhhhhhh gracias recien buscaba en google y nada me salio como lo que me dejaste mil!!!!!!!!!!!!!!!!!!!!! gracias!!!!

otra pregunta e.e como puedo hacer para renombrar esas imagenes al momento de ser subidas al servidor digo para que no alla ninguna con el mismo nombre.

y disculpa la molestia y gracias x sus respuestas tan rapidas!!

- - - Actualizado - - -



gracias ati tmb ya me estoi biendo ese manual ( a esto le falta un boton para agradecer e.e)

PHP: rename - Manual
 
gracias por compartir esto no lo sabia.
 
ahhhhhhhhhhhhhh gracias recien buscaba en google y nada me salio como lo que me dejaste mil!!!!!!!!!!!!!!!!!!!!! gracias!!!!

otra pregunta e.e como puedo hacer para renombrar esas imagenes al momento de ser subidas al servidor digo para que no alla ninguna con el mismo nombre.

y disculpa la molestia y gracias x sus respuestas tan rapidas!!

- - - Actualizado - - -



gracias ati tmb ya me estoi biendo ese manual ( a esto le falta un boton para agradecer e.e)

Yo uso esta función para renombrarla:

PHP:
function nombre($tamano) {
$caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345689';
for($i = 0; $i < $tamano; $i++) {
$salida .= substr($caracteres, rand(0,64), 0);
}
return $salida;
}

Y por ejemplo, donde la quieras usar:

PHP:
echo nombre(20);

Que te devolverá una cadena aleatoria de 20 caracteres :encouragement:
 
gracias a todos e tomado de le que me dejaron todos un pokito xD les dejare como lo puse yo

PHP:
	if ($Photo_Format == 'image/jpeg'){ // valido los formatos y los transformo
		$format = 'jpeg';
	} elseif ($Photo_Format == 'image/jpg'){
		$format = 'jpg';
	} elseif ($Photo_Format == 'image/gif'){
		$format = 'gif';
	} elseif ($Photo_Format == 'image/png'){
		$format = 'png';
	} elseif ($Photo_Format == 'image/GIF'){
		$format = 'gif';
	} elseif ($Photo_Format == 'image/PNG'){
		$format = 'png';
	} elseif ($Photo_Format == 'image/JPEG'){
		$format = 'jpeg';
	} elseif ($Photo_Format == 'image/JPG'){
		$format = 'jpg';
	}
	
	$ran_num = mt_rand(12313,124113112); // genero un numero aleatorio de 12313 al 124113112
	$ran_name1 = "".$ran_num."".$user_id; //uno el resultado random anterior con el id del usuario
	$ran_num2 = mt_rand(12342,10786512); // genero otro resultado random aun mayor
	$ran_name2 = "".$ran_name1."".$format."".$ran_num2."".$Photo_Size;	// y aka uno todos los resultados para darle un nombre que jamas se repita
	
    $New_nombre = "$ran_name2.$format"; // uno el nombre con el formato que le corresponde
    $destino = "".$upload_dir."".$New_nombre; // completo la direccion de la imagen con el nombre generado

    if (move_uploaded_file($Photo_tmpName, $destino)) { // y x ultimo la guardo con el nuevo nombre en la carpeta de destino
    $msg1 = "La imagen se guardo satisfactoriamente.\n";
    } else {
    $err_msg1 = "Posible error al guardar la imagen !\n";
    }
asi le regenero un nombre unico que nunca se volvera a repetir mas!! xD y asi no me causo mas errores con esa parte.

gracias a todos por sus comentarios y me parece exelent esta comunidad!!!
 
Última edición:
gracias a todos e tomado de le que me dejaron todos un pokito xD les dejare como lo puse yo

PHP:
if ($Photo_Format == 'image/jpeg'){ // valido los formatos y los transformo
$format = 'jpeg';
} elseif ($Photo_Format == 'image/jpg'){
$format = 'jpg';
} elseif ($Photo_Format == 'image/gif'){
$format = 'gif';
} elseif ($Photo_Format == 'image/png'){
$format = 'png';
} elseif ($Photo_Format == 'image/GIF'){
$format = 'gif';
} elseif ($Photo_Format == 'image/PNG'){
$format = 'png';
} elseif ($Photo_Format == 'image/JPEG'){
$format = 'jpeg';
} elseif ($Photo_Format == 'image/JPG'){
$format = 'jpg';
}

$ran_num = mt_rand(12313,124113112); // genero un numero aleatorio de 12313 al 124113112
$ran_name1 = "".$ran_num."".$user_id; //uno el resultado random anterior con el id del usuario
$ran_num2 = mt_rand(12342,10786512); // genero otro resultado random aun mayor
$ran_name2 = "".$ran_name1."".$format."".$ran_num2."".$Photo_Size;// y aka uno todos los resultados para darle un nombre que jamas se repita

    $New_nombre = "$ran_name2.$format"; // uno el nombre con el formato que le corresponde
    $destino = "".$upload_dir."".$New_nombre; // completo la direccion de la imagen con el nombre generado

    if (move_uploaded_file($Photo_tmpName, $destino)) { // y x ultimo la guardo con el nuevo nombre en la carpeta de destino
    $msg1 = "La imagen se guardo satisfactoriamente.\n";
    } else {
    $err_msg1 = "Posible error al guardar la imagen !\n";
    }
asi le regenero un nombre unico que nunca se volvera a repetir mas!! xD y asi no me causo mas errores con esa parte.

gracias a todos por sus comentarios y me parece exelent esta comunidad!!!

Usa switch:

PHP:
switch (strtolower($Photo_Format )){
case 'image/jpeg' : case 'image/jpg' :
$format = 'jpeg';
break;
case 'image/png' :
$format = 'png';
break;
case 'image/gif' :
$format = 'gif';
break;
default:
return false;
break;
}
 
otra pregunta e.e como puedo hacer para renombrar esas imagenes al momento de ser subidas al servidor digo para que no alla ninguna con el mismo nombre.

Estás uso yo tanto para quitar caracteres especiales, cambiar letras acentuadas por normales y poner un nombre que no exista:

PHP:
function replace_chars($str) {
	$pattern = array(
		'/á/i',
		'/é/i',
		'/í/i',
		'/ó/i',
		'/ú/i',
		'/[Ñ|ñ]/i',
		'/[^a-z0-9\. ]/i',
		'/[ ]+/i',
		'/[_]{2,}/i',
		'/^_/i',
		'/_$/i'
	);
	$replacement = array(
		'a',
		'e',
		'i',
		'o',
		'u',
		'n',
		'',
		'_',
		'_',
		'',
		''
	);
	return preg_replace($pattern, $replacement, strtolower($str));
}

function get_unexisting_filename($path, $filename) {
	$tmp_name	=	$filename;
	$name 		= 	pathinfo($tmp_name, PATHINFO_FILENAME);
	$ext 		= 	pathinfo($tmp_name, PATHINFO_EXTENSION);
	$cont 		=	0;
	while (file_exists($path . $tmp_name)) {
		$tmp_name = $name . $cont++ . '.' . $ext;
	}
	return $tmp_name;
}

y lo usarias algo asi:
PHP:
$filename = get_unexisting_filename($path, replace_chars($filename));

Saludos.
 

Temas similares

Atrás
Arriba