Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/11/2007, 03:57
dualklip
 
Fecha de Ingreso: octubre-2007
Ubicación: Madrid, España
Mensajes: 221
Antigüedad: 16 años, 6 meses
Puntos: 5
Re: Sobre subri archivos

Yo no conozco ningún tutorial pero básicamente consiste en utilizar un formulario con el objeto:
Código HTML:
<input name="archivo" type="file" id="archivo" /> 
el formulario debe ser tipo "multipart/form-data" para que pueda enviar archivos. El formulario más simple para hacer estas cosas sería así:
Código HTML:
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
<input name="archivo" type="file" id="archivo" />
<input type="submit" value="Enviar">
</form> 
Luego hay que hacer la parte en la que se verifica que el archivo esta subido al servidor (inicialmente se sube a la carpeta temporal) y moverlo allí donde quieras guardarlo.

Yo lo hago con PHP de la siguiente forma:

1. Añado una variable de PHP en la propiedad action del formulario que vuelve a cargar esta misma web y añado un objeto oculto en el formulario llamado "enviarArchivo" con el valor "form1" (explicaré su función en el siguiente paso):
Código HTML:
<?php
$enviarForm = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $enviarForm .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
?>
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="<?php echo $enviarForm; ?>">
<input name="archivo" type="file" id="archivo" />
<input type="submit" value="Enviar">
<input type="hidden" name="enviarArchivo" value="form1">
</form> 
2. Al pulsar en el boton enviar del formulario se vuelve a cargar esta página con la peculiaridad de que el formulario a enviado la información por el sistema "POST". Así que añadimos a la parte de PHP un nuevo código.

Si esta entrando por "POST" una variable llamada "enviarArchivo" y esta variable tiene como valor "form1" entonces es que la información que esta entrando es nuestro formulario ya rellenado, así que procedemos a verificar que el archivo ha subido correctamente
Código PHP:
"is_uploaded_file($nombre_tmp)" 
Si ha subido correctamente lo movemos a la carpeta que queremos mover
Código PHP:
move_uploaded_file($nombre_tmp$target_path); 
Para realizar este último paso hemos escrito en una variable la raíz deseada, es decir, el lugar donde esta este archivo "getcwd()" más la carpeta en la que queremos guardarlo más la variable $nuevo_nombre que es un nuevo nombre para el archivo sacado de un código de fecha y tiempo codificado que nunca puede repetirse
Código HTML:
<?php
$enviarForm = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $enviarForm .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["enviarArchivo"])) && ($_POST["enviarArchivo"] == "form1")) {
    $nombre = $_FILES['archivo']['name'];
    $nombre_arrai = explode(".", $nombre);
    $nuevo_nombre = md5(uniqid(rand(), true)).".".$nombre_arrai[1];

    $tipo = $_FILES['archivo']['type'];
    $tam = $_FILES['archivo']['size'];
    $nombre_tmp = $_FILES['archivo']['tmp_name'];
    $target_path = getcwd()."/imagenes/";
    $target_path = $target_path . $nuevo_nombre;
    if(is_uploaded_file($nombre_tmp)){
        move_uploaded_file($nombre_tmp, $target_path);
        } else {
            echo "Ha ocurrido un error al subir el archivo";
        }
}

?>
 <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="<?php echo $enviarForm; ?>">
 <input name="archivo" type="file" id="archivo" />
 <input type="submit" value="Enviar">
<input type="hidden" name="enviarArchivo" value="form1">
 </form> 
No se si se me queda algo, si es así comentamelo