Como excluir tipos de archivos para subir en un file?

TaurusZDK Seguir

Gamma
Programador
Verificación en dos pasos desactivada
Desde
27 Ene 2015
Mensajes
327
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 :D........ saludos
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
961
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
 

jonay

Kappa
Verificación en dos pasos activada
Desde
7 May 2010
Mensajes
2.577
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:
 

TaurusZDK

Gamma
Programador
Verificación en dos pasos desactivada
Desde
27 Ene 2015
Mensajes
327
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)
 

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
961
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
 

kanikase

Préstamo
Ómicron
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
22 Feb 2014
Mensajes
4.720
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:
 

TaurusZDK

Gamma
Programador
Verificación en dos pasos desactivada
Desde
27 Ene 2015
Mensajes
327
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:

kanikase

Préstamo
Ómicron
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
22 Feb 2014
Mensajes
4.720
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;
}
 

lombervid

Zeta
Verificación en dos pasos desactivada
Desde
29 Abr 2011
Mensajes
1.516
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.
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba