Archives Posts
Subir archivos a servidor y evitar reescritura en PHP. I
Hoy, luego de un condorazo en la pega, tuve que hacer una aplicación que permitiera subir archivos a una carpeta del servidor, y que verificara que al momento de subir no existieran archivos similares o que al momento de subirlos les pusiera otro nombre, que evitara sobreescribir archivos ya cargados.
Además de esto, necesitaba poder administrar los archivos cargados. En vez de meter los archivos a la base de datos, usé la misma para manejar y administrar la dirección en donde se guardan los archivos cargados, de forma tal que pueda evitar cargas innecesarias al motor de base de datos y también poder controlar que se sube, quien lo sube, que sección es la que sube más cosas, etc.
Requisitos:
- Servidor local para pruebas
- Base de datos MySQL
- PHP 5 (o superior)
- Acceso a FTP o carpeta para uploads.
- Phpmyadmin o similar.
Antes de todo hay que tener permisos de escritura sobre la carpeta a utilizar. Generalmente se se coloca “uploads”, pero pueden ponerle lo que deseen.
Para quienes tengan acceso a el FTP de su hosting o un servidor local, basta con darle permisos de lectura, escritura y ejecución a dicha carpeta o mejor dicho un chmod 777.
Para evitar que malos malosos accedan a la carpeta, bastará con crear un archivo llamado “index.html” y que no contenga nada o con algún mensajito como… “Clickea para otro lado.. pillin!” jaja.
El proceso comienza generando un formulario estandar en HTML pero con un par de campos especiales.
<form name=”uploads” method=”post” enctype=”multipart/form-data”>
<table width=”350px” border=”0″ cellpadding=”1″ cellspacing=”1″ class=”caja”>
<tr width=”300″>
<td>
<input type=”hidden” name=”MAX_FILE_SIZE” value =”2000000″ />
<input name=”archivo” type=”file” id=”archivo” />
</td>
<td>
<input type=”submit” name=”upload” value=”upload”>
</td>
</tr>
</table>
</form>
Ahora es el momento de la página que se encargará de procesar todo esto. Si, PHP.
<?php
//En esta parte va la conexion a la DB. Todavia no definimos la BD y sus tablas, pero es mejor tener esto listo y ordenadito.
include(”conexion.php”);
$carpeta_destino = “uploads/”;
if(isset($_POST["upload"]))
{
$nombre_archivo = $_FILES['archivo']['name'];
$tipo = $_FILES['archivo']['type];
$peso = $_FILES['archivo']['size'];
$temporal = $_FILES['archivo']['tmp_name'];
/* Nótese que se usan comillas simples. Primero va encerrado el nombre de la variable cuyo valor trae el archivo del formulario y despues el campo que requerimos de la funcion de archivos o _FILES*/
}
/*Ahora lo entretenido. Joder un rato con las funciones de PHP para poder separar la extension
del archivo de su nombre, para poder renombrarlo de forma segura, sin perder la extensión, a pesar de que sepamos de que tipo es. lo bueno de esto es que les permite controlar el tipo de archivo que suben por extension o tipo, sin importar que suban. Hace que el uploader sea estandar hasta el momento en que hacen las validaciones de tipo, para filtrar aquellas que desean o no permitir en el servidor*/
Puta tenia la media explicacion con lujo de detalles y la MIERDA DE SERVER - DREAMHOST.COM SE CAYÓ!!! y perdí el post.
Mañana seguimos con el tutorial… tengo que terminar unas cosas para la pega….
Tags: Code, español, move_uploaded_file, PHP, tutorial, uploader, _FILES









