Está en: Recursos web Php - Subir archivos de imagen al servidor

Subir archivos de imagen al servidor con php:




Permitir en nuestros sitios web que el usuario pueda colocar archivos en nuestro servidor es una de las acciones potencialmente peligrosas que nos permite realizar php. Pero muchas veces es necesario el envío de imágenes por parte del usuario. Vamos a intentar crear un script php para dicha finalidad teniendo un cuenta unas cuantas medidas de seguridad:

Necesitaremos dos archivos uno html y otro php.

Archivo Html:

Creamos un formulario con un campo de archivo al que llamamos "upfile" y otro de texto para el nombre de la foto.

<form action="subir.php" method="post" enctype="multipart/form-data">
<input name="upfile" id="upfile" type="file"/><br>
Nombre de la imagen: <input name="nombre" type="text" size="40" maxlength="50" />
<input type="submit" value="Enviar fotos" style="margin-bottom:10px;"/>
</form>


Ahora cofiguramos el archivo php llamado subir.php:

<?php

Definimos la variable $max para establecer el límite máximo de tamaño del archivo.

$max=1500000; (1.5Mb)

Ahora ordenamos donde se almacenará la imagen, hemos decidido que se cree un nuevo directorio dentro de la carpeta que hemos creado en el root de nuestro hosting para contener todas las subidas. Con la función mkdir creamos el directorio el cual lo nombramos con la fecha de subida del archivo y el nombre de la imagen.

$nombreclean=htmlspecialchars($email);
(htmlspecialchars, esteriliza el texto del campo "nombre" eliminando los caracteres que pudieran ejecutar algún script malicioso en nuestro servidor).

$hh=date("H")+8;
$hora = date("d-m-Y $hh:i:s");
$nuevodirectorio="$DOCUMENT_ROOT/../imagenes/$hora.$nombreclean";
mkdir ($nuevodirectorio);
$uploaddir = "$nuevodirectorio/";


A continuación tratamos el archivo de imagen, aplicando unas funciones en particular como medida de seguridad.

$filesize = $_FILES['upfile']['size'];
$filename = trim($_FILES['upfile']['name']);
(trim elimina los posibles espacios al final y al principio del nombre del archivo)
$filename = substr($filename, -20); (con substr le decimos que coja solamente los últimos 20 caracteres por si el nombre fuera muy largo)
$filename = ereg_replace(" ", "", $filename); (con esta función eliminamos posibles espacios entre los caracteres del nombre)

Ahora creamos las condiciones que debe cumplir el archivo antes de ser almacenado en el servidor. Restringimos a .jpg ó .gif (tanto en mayusculas como en minúsculas) y finalmente cambiamos el archivo de la carpeta temporal a la final elegida.

if($filesize < $max){
if($filesize > 0){
if((ereg(".jpg", $filename)) || (ereg(".gif", $filename)) || (ereg(".JPG", $filename))|| (ereg(".GIF", $filename))){
$uploadfile = $uploaddir . $filename;
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile)) {
print("Archivo subido correctamente");
} else {
print("Error de conexi&oacute;n con el servidor.");
}
} else {
print("Sólo se permiten imágenes en formato jpg. y gif., no se ha podido adjuntar.");
}
}
else {
print("<br><br>Campo vac&iacute;o, no ha seleccionado ninguna imagen");
}
}
else {
print("<br><br>La imagen que ha intentado adjuntar es mayor de 1.5 Mb, si desea cambie el tamaño del archivo y vuelva a intentarlo.");
}
?>


Inicio / Servicios Web / Recursos Web / Portfolio / Enlaces / Contacto / Sitemap / Aviso Legal

Hu Creative Web Site - info@hucreative.com
www.hucreative.com