Foros del Web » Programando para Internet » PHP »

Upload con PHP (aportación)

Estas en el tema de Upload con PHP (aportación) en el foro de PHP en Foros del Web. Que tal amigos, De nueva cuenta les escribo pero esta vez para poner mi granito de arroz. En estos días estoy haciendo una aplicación donde ...
  #1 (permalink)  
Antiguo 27/03/2009, 12:19
Avatar de thebearprogramer  
Fecha de Ingreso: marzo-2009
Mensajes: 17
Antigüedad: 15 años, 1 mes
Puntos: 1
Upload con PHP (aportación)

Que tal amigos,

De nueva cuenta les escribo pero esta vez para poner mi granito de arroz.

En estos días estoy haciendo una aplicación donde tengo que subir fotos al servidor, después de buscar en las FAQ's del foro encontré muchos temas, pero ninguno de ellos explicaba de manera sencilla como hacer un upload de archivos. Tras una búsqueda de 3 días en google (Sólo Dios sabe cuanto tiempo más me hubiera tomado sin Mr. Google) di con una página que explicaba con un ejemplo muy sencillo como hacer un upload sólo que esta en ingles, por lo que me di a la tarea de traducirlo y compartirlo con ustedes, espero les sirva tanto cómo a mi.
__________________________________________________ ______________

php-Carga de archivos

Un aspecto muy practico de php es la habilidad de manejar carga de archivos a tu servidor. Permitir a los usuarios cargar archivos a tu servidor abre la caja de pandora, así que se cuidadoso al permitir la carga de archivos.

php-Carga de archivos: formulario html

Antes de poder usar php para manejar las cargas de archivos, debemos construir un formulario HTML que permita a los usuarios seleccionar el archivo a cargar.

Código HTML:
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form> 
Esta es una breve descripción de las partes importantes del código HTML.
  • enctype="multipart/form-data" - Necesario para que nuestro archivo PHP (por crear) funcione correctamente.
  • action="uploader.php" - Nombre de nuesta página PHP, la cual crearemos más adelante
  • method="POST" - Informa al navegador que deseamos enviar información al servidor usando el metodo POST.
  • input type="hidden" name="MA..." - Establece el tamaño máximo del archivo en bytes, que puede ser cargado. Este mecanismo de seguridad puede ser facilmente evadido por lo que mostraremos una solución de respaldo en PHP. En este ejemplo hemos establecido el tamaño maximo del archivo en 100KB.
  • input name="uploadedfile" - uploadedfile es como vamos a acceder el archivo en nuestro script PHP.

Guarda el código del formulario en un archivo nombrándoloupload.html.
Después que el usuario da clic en el botón Upload File, los datos serán transmitidos al servidor y el usuario sera redirigido a uploader.php. Este archivo PHP va a procesar el formulario y hará todo el trabajo.

php-Carga de archivos: ¿Qué es lo que va a hacer php?

Ahora que tenemos creado el formulario podemos empezar con el script PHP que manejara nuestras cargas o subidas. Generalmente, el archivo PHP deberá tomar una decisión con TODOS los archivos a cargar: mantener el archivo o desecharlo. Un archivo puede ser desechado por varias razones, incluyendo:
  • El archivo es muy grande y no queremos mantenerlo en el servidor.
  • Deseamos que la persona cargue una foto pero, cargo algo distinto, por ejemplo un ejecutable (.exe)
  • Hubo problemas al subir el archivo por lo tanto no puede ser guardado.

Este ejemplo es muy simple por lo que se omite el código que añadiría dicha funcionalidad.

php-Carga de archivos: uploader.php

Cuando el archivo upluader.php se ejecuta, el archivo que hemos cargado, existe en un área temporal de almacenamiento del servidor, si el archivo no es movido a un lugar diferente será ¡eliminado! Para salvaguardar nuestro preciado archivo usaremos $_FILES arreglo asociativo.

El arreglo $_FILES es donde PHP almacena la información acerca de los archivos. Hay tres elementos de este arreglo que necesitamos entender para este ejemplo.
  • uploadedfile - uploadedfile es la referencia que le referencia que le asignamos en nuestro archivo en el formulario HTML. Necesitaremos esto para decirle al arreglo $_FILES con cual archivo queremos trabajar.
  • $_FILES['uploadedfile']['name'] - name contiene la ruta original del archivo que el usuario desea cargar.
  • $_FILES['uploadedfile']['tmp_name'] - tmp_name contiene la ruta al archivo temporal que esta en el servidor. El archivo debe existir en el servidor en un directorio temporal con un nombre temporal.

Finalmente podemos empezar a escribir nuestro script PHP para cargar un archivo. Así es como obtendremos el nombre temporal de nuestro archivo, le daremos un nombre permanente y seleccionaremos un lugar para almacenar el archivo.

Código PHP:

// Where the file is going to be placed 
$target_path "uploads/";

/* Add the original filename to our target path.  
Result is "uploads/filename.extension" */
$target_path $target_path basename$_FILES['uploadedfile']['name']); 
NOTA: Sera necesario crear una nueva carpeta en el directorio donde reside nuestro archivo uploader.php llamada "uploads", donde vamos a guardar los archivos.

La carpeta donde guardaremos los archivos debe tener por lo menos los privilegios en '775' para poderlo hacer*.

Bien ahora ya tenemos todo lo que necesitamos para cargar nuestro archivo al servidor. $target_path contiene la ruta donde deseamos guardar el archivo.

php-Carga de archivos: Función move_uploaded_file

Ahora, todo lo que tenemos que hacer es llamar a la función move_uploaded_file y dejar que PHP haga su magia.
La función move_uploaded_file necesita saber 1) La ruta del archivo temporal (¡Listo!) 2) La ruta donde el archivo será movido (¡Listo!).

Código PHP:

$target_path 
"uploads/";

$target_path $target_path basename$_FILES['uploadedfile']['name']); 

if(
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo 
"The file ".  basename$_FILES['uploadedfile']['name']). 
    
" has been uploaded";
} else{
    echo 
"There was an error uploading the file, please try again!";

Si la carga se hizo correctamente, entonces podrás ver el texto "The file filename has been uploaded". Esto es porque move_uploaded_file regresa true si el archivo fue movido y false si ha habido un problema.
Si hubo un problema entonces el mensaje de error "There was an error uploading the file, please try again!" se desplegara.

php-Carga de archivos: ¡Practicas seguras!

NOTA: Este script es para propósitos educativos solamente. No recomendamos poner esto en una página web que este a la vista del público.

Las lineas de código aquí expuestas permitirán que cualquiera pueda subir archivos a tu servidor. Por lo tanto, recomendamos que no tengas un cargador de archivos tan simple como este para el público en general. De otro modo tu servidor podría llenarse de basura o comprometer la seguridad del mismo.

Esperamos que hayas disfrutado aprendiendo como trabajar con la carga de archivos en PHP. En un futuro cercano estaremos agregando una lección avanzada que incluirá más seguridad y características adicionales.

*Cursivas mias
__________________________________________________ ___________

Espero que esta traducción les sea de utilidad a quien busque como subir archivos de manera sencilla y comprender un poco el funcionamiento del mismo.

Cómo aun no puedo publicar links dejare escrita la dirección del tutorial original(ingles) en una forma poco convencional.

triple w punto tizag punto com/phpT/fileupload.php

Saludos.
  #2 (permalink)  
Antiguo 27/03/2009, 12:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload con PHP (aportación)



genial, ahora esperemos a que se coloque en los Aportes del foro...

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/03/2009, 16:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Upload con PHP (aportación)

http://www.forosdelweb.com/wiki/PHP

Saludos
  #4 (permalink)  
Antiguo 27/03/2009, 19:21
Avatar de thebearprogramer  
Fecha de Ingreso: marzo-2009
Mensajes: 17
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Upload con PHP (aportación)

Hola GatorV,

Justo allí llegue buscando información pero cómo es la primera vez que veo esto de los archivos pues no lo comprendía del todo y este que publique me pareció lo bastante sencillo de entender =)

Claro que ahora ya comprendo el que esta en las faq's del foro, jejeje...

Saludos.
  #5 (permalink)  
Antiguo 28/03/2009, 08:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 25
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Upload con PHP (aportación)

Muy bueno thebearprogramer (Y)
  #6 (permalink)  
Antiguo 28/03/2009, 09:25
Avatar de thebearprogramer  
Fecha de Ingreso: marzo-2009
Mensajes: 17
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Upload con PHP (aportación)

Cita:
Iniciado por nico92_river Ver Mensaje
Muy bueno thebearprogramer (Y)
Gracias!

Después veré que más puedo compartir. =)

Saludos.
  #7 (permalink)  
Antiguo 21/05/2009, 19:57
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
De acuerdo Respuesta: Upload con PHP (aportación)

HOla man weno discupa pero estaba buscando esto y mira edte el codigo para ser un solo archivo mira aka


Código PHP:
<form enctype="multipart/form-data" action="<?=$PHP_SELF?>?action=upload" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
<?php
// Where the file is going to be placed  
$target_path "uploads/"

/* Add the original filename to our target path.   
Result is "uploads/filename.extension" */ 
$target_path $target_path basename$_FILES['uploadedfile']['name']);  

$target_path "uploads/"

$target_path $target_path basename$_FILES['uploadedfile']['name']);  

if(
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo 
"The file ".  basename$_FILES['uploadedfile']['name']).  
    
"El Archivo Se ha Subido Correctamente!"
} else{ 
    echo 
"Error En Subir El Archivo Intenta de Nuevo!"
}  

?>
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

SíEste tema le ha gustado a 1 personas




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