Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2008, 17:47
Federic0
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Subir archivos a mi servidor a través de formulario

Hola gente,

Necesito modificar este codigo para que los archivos se suban a una carpeta en mi servidor y que queden "para siempre" digamos, que no sean temporales. Como no entiendo nada de php no puedo modificar el codigo yo, alguno no le puede modificar algo para que quede como lo necesito? Por favor!

Este es el codigo que vi en el FAQ:


Cita:
Iniciado por GhostRider Ver Mensaje
Tema: Archivos
Pregunta: ¿Cómo puedo subir archivos a través de un formulario?
Respuesta: Con el siguiente ejemplo.

Código PHP:
<?php
if (isset($_POST['submit'])) { 
    if(
is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
        
if(move_uploaded_file($_FILES['fichero']['tmp_name'], $_FILES['fichero']['name'])) { // se coloca en su lugar final
                    
echo "<b>Upload exitoso!. Datos:</b><br>";
            echo 
"Nombre: <i><a href=\"".$_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";
            echo 
"Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";
                    echo 
"Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";
                        echo 
"<br><hr><br>";
        }
    }

// A continuación el formulario
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post" enctype="multipart/form-data">
    Archivo: <input name="fichero" type="file">
    <input name="submit" type="submit" value="Upload!"> 
</form>
Funciona de la siguiente manera:

El código sube un archivo via HTTP POST, este se guarda automaticamente con un nombre y en una carpeta temporales del servidor mientras corre el codigo, despues el mismo servidor lo borra (por seguridad). La función is_uploaded_file() verifica que este procedimiento haya sido exitoso. Posteriormente el archivo es movido a su posición final con la función move_uploaded_file)


Notas:
  • Es necesario el atributo enctype="multipart/form-data" del formulario, es lo que indica que se están enviando archivos.
  • El primer key de $_FILES corresponde al name del filebox; En el ejemplo "fichero".
  • Si se quiere condicionar la carga del archivo según su peso y/o tipo se deberá hacer a través de los datos arrojados por la variable superglobal $_FILES antes de colocarlo en su posición final. Por ejemplo:
Código PHP:
If(is_uploaded_file($_FILE['fichero']['tmp_file']) {
    If(
$_FILES['fichero']['type']=="image/jpeg") {
        
// Proseguimos solo si se trata de un JPG
        
move_uploaded_file("...etc..."); 
    } else echo 
"El archivo no es una imágen JPG";
// bien puede condicionarse $_FILES['fichero']['size'] > XXXX
// donde 'XXXX' es un número entero representando los bytes máximos del archivo 
  • En el ejemplo el archivo es guardado en la misma carpeta, si se quiere modicar esto ha de cambiarse el parámetro correspondiente de la función move_uploaded_file(). Por ejemplo:
Código PHP:
$ruta"carpeta/".$_FILES['fichero']['name']; // Se guardaría dentro de "carpeta" con el nombre original
// $ruta= "carpeta/nuevo_nombre.jpg"; si también se quiere renombrar
move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta);

// Puede guardarse $ruta en una Base de Datos para su uso posterior 
  • El ejemplo funciona con versiones PHP 4.1.x ó superior y con register_globals en OFF.
  • La carga de archivos es dependiente de la configuración del servidor: disponer de permisos, no exeder el tamaño límite, el nombre de la carpeta personal, etc.

Espero les sea de utilidad.