Foros del Web » Programando para Internet » PHP »

Como validar solo imagenes en PHP

Estas en el tema de Como validar solo imagenes en PHP en el foro de PHP en Foros del Web. Saludos soy nuevo en el Foro. Hola Tengo este siguiente código para subir imagenes. Funciona muy bien pero como le restrinjo que sean solo imagenes ...
  #1 (permalink)  
Antiguo 29/12/2013, 16:19
 
Fecha de Ingreso: diciembre-2013
Mensajes: 81
Antigüedad: 10 años, 4 meses
Puntos: 1
Como validar solo imagenes en PHP

Saludos soy nuevo en el Foro. Hola

Tengo este siguiente código para subir imagenes. Funciona muy bien pero como le restrinjo que sean solo imagenes por que en realidad me sube cualquier archivo, pero yo quiero que sea solo imagenes.

?php
require_once("conexion.php");
$titulo=$_POST['titulo'];
$resumen=$_POST['resumen'];
$desarrollo=$_POST['desarrollo'];


$nombrefoto=$_FILES['imagen']['name'];
$ruta=$_FILES['imagen']['tmp_name'];
$destino = "fotos/".$nombrefoto;
//$fecha=$_POST['fecha'];
copy($ruta,$destino);


$query = @mysql_query('SELECT * FROM noticias WHERE imagen="'.$destino.'"');
if($existe = @mysql_fetch_array($query))
{
echo 'La Imagen Cuyo Nombre Ya Existe. Porfavor Cambie El Nombre A la Imagen.';
return false;
echo $destino;
exit;
}



if($existe = @mysql_fetch_array($query))
{
echo 'Este esta ocupado';
return false;
exit;
}



else{


mysql_query("insert into noticias(titulo,resumen,desarrollo,imagen,id_notd, fecha) values('$titulo','$resumen','$desarrollo','$destin o','1',CURDATE())");
header("Location:man_web.php");}
?>


Gracias
  #2 (permalink)  
Antiguo 29/12/2013, 17:06
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Como validar solo imagenes en PHP

con eso

Código PHP:
Ver original
  1. $nombrefoto=strtolower($nombrefoto);
  2. if(substr($nombrefoto,-4)!=".jpeg"){
  3. echo "No es imagen";
  4. die();
  5. }

este es un ejemplo muy sencillo
  #3 (permalink)  
Antiguo 29/12/2013, 17:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Como validar solo imagenes en PHP

También puedes tomar el tipo de archivo desde el array FILES, estableces los tipos de archivo permitidos y los comparas con el del archivo:

Código PHP:
Ver original
  1. $tipo = $_FILES["imagen"]["type"];
  2. $admitidos = ["jpg", "jpeg", "gif", "bmp", "png"];
  3.  
  4. if (array_search(strtolower($tipo), $admitidos) !== FALSE) {
  5.   //Procesas y subes el archivo
  6. }
  7. else
  8.   echo "El archivo no es de un tipo válido";

También puedes restringir los tipos de archivo desde el input a través del atributo accept:
Código HTML:
Ver original
  1. <input type = "file" accept = "image/*" />

El único inconveniente está en que el usuario puede cambiar el filtrado desde el cuadro en el que elige el archivo que subirá.

Combinando ambas formas, será muy complicado que algún otro tipo de archivo pueda colarse.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 29/12/2013, 21:20
 
Fecha de Ingreso: diciembre-2013
Mensajes: 81
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Como validar solo imagenes en PHP

Cita:
Iniciado por Alexis88 Ver Mensaje
También puedes tomar el tipo de archivo desde el array [URL="http://php.net/manual/es/reserved.variables.files.php"][COLOR="Blue"][B]FILES[/B][/COLOR][/URL], estableces los tipos de archivo permitidos y los comparas con el del archivo:

Código PHP:
Ver original
  1. $tipo = $_FILES["imagen"]["type"];
  2. $admitidos = ["jpg", "jpeg", "gif", "bmp", "png"];
  3.  
  4. if (array_search(strtolower($tipo), $admitidos) !== FALSE) {
  5.   //Procesas y subes el archivo
  6. }
  7. else
  8.   echo "El archivo no es de un tipo válido";

También puedes restringir los tipos de archivo desde el input a través del atributo [URL="http://www.w3schools.com/tags/att_input_accept.asp"][B][COLOR="Blue"]accept[/COLOR][/B][/URL]:
Código HTML:
Ver original
  1. <input type = "file" accept = "image/*" />

El único inconveniente está en que el usuario puede cambiar el filtrado desde el cuadro en el que elige el archivo que subirá.

Combinando ambas formas, será muy complicado que algún otro tipo de archivo pueda colarse.

Saludos
ME SALE ERROR EN LA LINEA
$admitidos = ["jpg", "jpeg", "gif", "bmp", "png"];

  #5 (permalink)  
Antiguo 29/12/2013, 21:42
 
Fecha de Ingreso: diciembre-2013
Mensajes: 81
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Como validar solo imagenes en PHP

Cita:
Iniciado por enlinea777 Ver Mensaje
con eso

Código PHP:
Ver original
  1. $nombrefoto=strtolower($nombrefoto);
  2. if(substr($nombrefoto,-4)!=".jpeg"){
  3. echo "No es imagen";
  4. die();
  5. }

este es un ejemplo muy sencillo
me funciono
ahora tengo que ver como lo ago para que me acepte otras extensiones de imagenes.
haci quedo el codigo




<?php
require_once("conexion.php");


$titulo=$_POST['titulo'];
$resumen=$_POST['resumen'];
$desarrollo=$_POST['desarrollo'];

$nombrefoto=$_FILES['imagen']['name'];
$nombrefoto=strtolower($nombrefoto);

if(substr($nombrefoto,-4)!=".jpg"){
echo "La Imagen o Foto Que Ha Acabado de Subir No Pertenece A imagen O Foto";
exit();
}


else{


$ruta=$_FILES['imagen']['tmp_name'];
$destino = "fotos/".$nombrefoto;
//$fecha=$_POST['fecha'];
copy($ruta,$destino);

$destino2 = "../../cosmosportal/cosmoportalsupervisor/noticias/fotos/".$nombrefoto;

copy($ruta,$destino2);

$destino3 = "../../cosmosportal/CosmosPortalUsuario/noticias/fotos/".$nombrefoto;

copy($ruta,$destino3);




$query = @mysql_query('SELECT * FROM noticias WHERE imagen="'.$destino.'"');
if($existe = @mysql_fetch_array($query))
{
echo 'La Imagen Cuyo Nombre Ya Existe. Porfavor Cambie El Nombre A la Imagen.';
return false;
echo $destino;
exit;
}



if($existe = @mysql_fetch_array($query))
{
echo 'Este esta ocupado';
return false;
exit;
}



else{


mysql_query("insert into noticias(titulo,resumen,desarrollo,imagen,id_notd, fecha) values('$titulo','$resumen','$desarrollo','$destin o','1',CURDATE())");
header("Location:man_web.php");}}
?>


si me ayudaras xD slds
  #6 (permalink)  
Antiguo 29/12/2013, 22:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Como validar solo imagenes en PHP

Cita:
Iniciado por el__tamer Ver Mensaje
ME SALE ERROR EN LA LINEA
$admitidos = ["jpg", "jpeg", "gif", "bmp", "png"];
Probablemente sea porque tu versión de PHP es inferior a la 5.4 en donde los arrays pueden ser declarados de esa forma. Sustituye esa línea por esta:

Código PHP:
Ver original
  1. $admitidos = array("jpg", "jpeg", "gif", "bmp", "png");

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 29/12/2013 a las 22:56
  #7 (permalink)  
Antiguo 29/12/2013, 23:17
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 14 años, 11 meses
Puntos: 12
Respuesta: Como validar solo imagenes en PHP

A ver gente, usen los "mimes"... que sucede si alguien sube un archivo.exe renombrado a archivo.jpg?

windows abre archivos por su mime y no extensión, dando puerta a posibles ataques/infecciones

Código PHP:
// array de mimes
$acceptado = array('image/gif''image/jpeg''image/jpg');

// mime del archivo
$mime mime_content_type($filepath);

// comprobación de tipos
if(!in_array($acceptado$mime))
{
      echo 
'no admitido';

espero que les sirva

nota final: mime_content_type() esta deprecado, se debería usar finfo
  #8 (permalink)  
Antiguo 30/12/2013, 09:29
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Como validar solo imagenes en PHP

Cita:
Iniciado por nksn Ver Mensaje
nota final: mime_content_type() esta deprecado, se debería usar finfo
¿Y por qué haces el ejemplo con la función en desuso?

Aun así, es correcto comprobar el tipo por el valor MIME. el__tamer, dale una leída a esto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 30/12/2013 a las 09:35
  #9 (permalink)  
Antiguo 30/12/2013, 09:46
Avatar de moriorGames  
Fecha de Ingreso: diciembre-2013
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: Como validar solo imagenes en PHP

Tenía por ahí un código para subir archivos pero me he dado cuenta de que lo he perdido :(

De todas formas, he googleado un poco y he llegado a w3schools una página que uso bastante como referencia y he encontrado este código que me parece bastante correcto. Además, que tiene restricciones de peso, algo bastante interesante también :)

Código PHP:
<?php
$allowedExts 
= array("gif""jpeg""jpg""png");
$temp explode("."$_FILES["file"]["name"]);
$extension end($temp);
if (((
$_FILES["file"]["type"] == "image/gif")
|| (
$_FILES["file"]["type"] == "image/jpeg")
|| (
$_FILES["file"]["type"] == "image/jpg")
|| (
$_FILES["file"]["type"] == "image/pjpeg")
|| (
$_FILES["file"]["type"] == "image/x-png")
|| (
$_FILES["file"]["type"] == "image/png"))
&& (
$_FILES["file"]["size"] < 20000)
&& 
in_array($extension$allowedExts))
  {
  if (
$_FILES["file"]["error"] > 0)
    {
    echo 
"Error: " $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo 
"Upload: " $_FILES["file"]["name"] . "<br>";
    echo 
"Type: " $_FILES["file"]["type"] . "<br>";
    echo 
"Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo 
"Stored in: " $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo 
"Invalid file";
  }
__________________
Mi juego de estrategia medieval si lo entras hazme llegar tu opinión por favor, siempre la tengo en cuenta.

Etiquetas: fecha, imagenes, mysql, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:19.