Compartiendo el conocimiento
RSS icon Email icon Bullet (black)
  • Taller. Subir ficheros al servidor con PHP

    Posted on febrero 4th, 2009 admin 2 comments

    Hola amigos,

    En esta entrega vamos a enseñaros como es posible subir ficheros desde el equipo del cliente hasta nuestro servidor utilizando PHP.

    Este ejemplo podemos ejecutarlo en nuestro servidor local o si tenemos un servicio de Hosting podemos subirlo para realizar nuestras propias pruebas.

    Descripción del ejemplo:

    Vamos a crear una nueva página web en PHP la cual va a posibilitar la subida de un fichero de imagen (jpeg, bmp, png, gif) siempre que el fichero pese (ocupe) menos de 500Kb.

    Dicha página va a constar de un formulario con los siguientes campos:

    • Una caja de texto donde saldrá reflejada la ruta y el nombre del fichero que queremos subir (upload).
    • Un botón para indicar que queremos subir el archivo hasta nuestro servidor.

    Fuera ya del formulario, mostraremos la imagen que hemos subido a nuetro servidor.

    ¡Subiros todos al tren, que empezamos!

    Dentro de las etiquetas "body" de nuestra nueva página, insertaremos el siguiente código, que corresponde a la creación del formulario necesario para poder subir los ficheros hasta nuestro servidor.

    <!-- Creamos un formulario recursivo (Se va a llamr a si mismo cuando se procese)-->
    <form action="upload.php" method="post" name="frmUploadFile" enctype="multipart/form-data">
       
        Fichero:

        <!-- Nos proporciona una caja de texto donde se mostrará la ruta del fichero
             y un botón para "examinar/seleccionar" el fichero que queremos subir -->

        <input name="fileUpload" type="file" id="file" size="50"  />

        <!-- Botón submit que enviará los datos del formulario al servidor para ser procesados y volverá
             a cargar la misma página (daros cuenta que el atributo "action" de la etiqueta "form"
             apunta a si mismo, es decir, es recursivo
        -->

        <input name="submit" type="submit" value="Subir" />
    </form>

    Bien, ahora ya tenemos nuestro formulario listo para poder seleccionar un fichero de nuestro equipo. Ahora nos hace falta el código PHP para poder filtrar el tipo y tamaño máximo del fichero que deseamos poder subir hacia nuestro servidor.

    Cuando desde PHP se desea subir un fichero al servidor, se inicializa la variable global $_FILES. Es una matriz asociativa, que contiene las características del fichero que estamos intentando subir. Examinemos el siguiente código:

    <?
        // Compruebo que la matris $_FILES[nombreFormulario]['name'] (contiene el nombre del fichero a subir) no esté vacia
        if (!empty($_FILES['fileUpload']['name'])){
            $fileName =$_FILES['fileUpload']['name']; // Nombre del fichero
            $fileTmp  =$_FILES['fileUpload']['tmp_name']; // Nombre del fichero temporal que se crea
            $fileType =$_FILES['fileUpload']['type']; // Tipo de fichero
            $fileSize =$_FILES['fileUpload']['size']; // Tamaño del fichero
           
            // Inicializo una matriz con los tipos de ficheros permitidos.
            $filesAlowed=array("image/jpeg","image/bmp","image/png","image/gif");

            // Compruebo que el fichero sea del tipo deseado y que pese menos de 500kb
            if (in_array($fileType,$filesAlowed) and $fileSize<512000){
                if (copy($fileTmp, 'UploadFiles/'.$fileName)){ // Copio de la ruta temporal a la carpeta destino
                    $lcMensaje="<br>El fichero <strong>$fileName</strong> se ha subido al servidor.<br><br>";
                    unlink($fileTmp); // Borro el fichero temporal
                }else{
                    $lcMensaje="<br>No se ha podido completar la acción.<br>";
                }
            }else{
                $lcMensaje="<br>Solo se admiten ficheros planos y de imagen (jpeg, bmp, png) inferiores a 500K de texto.<br>";
            }
        }
    ?>

    Como hemos podido observar, a la hora de subir un fichero al servidor, primero se crea en una carpeta temporal que está definida en el archivo php.ini. La variable que almacena esta ruta es upload_tmp_dir.

    Ahora ya nos queda solo mostrar la imagen subida o mostrar el mensaje de error, si es que procede.

    <?
       // Inicializo la variable $fileName si esta está vacia. Puede suceder en la primera carga del formulario o si no se sube ningún fichero
       if (!isset($fileName) ){
          $fileName='';
       }        
    ?>

    Mostramos la imagen....

    <img src="<? echo 'UploadFiles/'.$fileName; ?>" alt="Usuario" width="120" height="120" border="2" title="Usuario" />

    ...y la descripción del fichero subido o la descripción de un posible error.

    <?
        if (isset($lcMensaje)){
            echo $lcMensaje;
        }
    ?>

    Podeis probar como quedaría el ejemplo final.

 

2 Respuestas to “Taller. Subir ficheros al servidor con PHP”

  1. hola amigos: esta bueno el taller, lo que queria preguntar es donde le agrego si quiero guardar en un lugar especifico de mi servidor o sea una carpeta, y que niveles de seguridad puedo hacer???. Gracias y cuenten con migo si quieren que comparta algo de mis experiencias.-

    Raquel

  2. Me gusta la valiosa información que se ofrece a sus artículos. Puedo marcar sus http://www.weblogica.es y cuentan con mis hijos de prueba hasta aquí en general. Estoy un poco positivas que van a ser informado bastante un montón de cosas nuevas aquí que nadie!