Curso de PHP. Volumen XXI : Manejo básico de ficheros 2

Escrito por Jalths
Manuales
0

Como casi todos los miércoles, os presentamos oso volumen más de nuestro particular Curso de PHP Online.

Si os habéis perdido y no sabéis por donde váis, os recomendamos leer el índice: Índice Curso PHP

En el volumen de hoy, vamos a seguir hablando de ficheros, una parte muy importante para cualquier programador en PHP y otros lenguajes.

Lo primero que vamos a tratar en este volumen es la solución al ejercicio que planteamos la semana pasada.

Aquí tenéis la solución del ejercicio:

<?php
  $fd = fopen("fichero","r");
  fseek($fd,16,SEEK_SET);#Mueve el puntero a la posición 16 desde el inicio.
  echo "Lectura1:";
  echo fread($fd,5); #Lee 5 posiciones
  echo "<br>";
  echo "Lectura2:";
  fseek($fd,20,SEEK_SET);#Mueve el puntero a la posición 20 desde el inicio.
  echo fread($fd,1); #Lee 5 posiciones
  echo "<br>";
  fclose($fd);
?>

Como véis vamos moviéndonos por el fichero con el fseek(), y vamos leyendo con fread().

Ahora vamos a ver un tema bastante importante en cuanto al tratamiento de ficheros se refiere, el envío de ficheros.

Envío de ficheros

Seguramente como todos los que leéis este curso navegáis habitualmente, habréis visto al menos uno , un campo en un formulario HTML que nos permite enviar un fichero al servidor, resumiendo en una palabra, un uploader.

Pues bien hoy, vamos a ver como se crean esos uploader, y como se gestionan los archivos enviados al servidor, como estaréis pensando, vamos a verlo desde el lado del servidor en vez de como lo vemos usualmente al navegar (lado del cliente).

Lo primero deberemos crear un formulario HTML con un campo de tipo file, que será el encargado de solicitar el fichero. Por supuesto, el destino del formulario será el script.php que va a gestionar el archivo enviado.

<!DOCTYPE >

<html>

<body>

<?php
echo "Uploader Redeszone-Cliente";
?>

<form action="script.php" method="post" enctype="multipart/form-data">
      <input name="file" type="file" size="40" />
      <input name="enviar" type="submit" value="UF" />
</form>

</body>

</html>

Nota: Si investigáis por vuestra cuenta sobre uploaders, veréis que en muchos sitios hablan de un campo para limitar el tamaño del fichero que se sube. Realmente nuestro consejo es que uséis otros modos (como controlarlo en el script.php) para controlar el tamaño del archivo porque realmente ese campo en infinidad de navegadores no funciona,ya que no es interpretado.

Ahora vamos a crear el código del script para gestionar el archivo recibido y guardarlo donde nosotros queramos.

Para almacenar los archivos que se han subido PHP usa una array global llamada $_FILES, en la cual deberemos usar dos índices, el primero es el archivo (tal y como nos hemos referido a él en el formulario HTML) y el segundo, la información a la que queremos acceder.

$_FILES [“file”][“size”]
$_FILES [“file”][“name”]
$_FILES [“file”][“type”]

A pesar de poder acceder a esos campos, el fichero no está aún completamente subido, está en un directorio de archivos temporales, hay que copiarlo al directorio de destino que queramos.

Para ver el archivo almacenado en el directorio temporal podemos usar:

$_FILES [“file”][“tmp_name”] #Ruta+nombre en el almacenamiento temporal
Y para copiarlo podemos usar la función copy.

Ejemplo:

<!DOCTYPE >

<html>

<body>

<?php

$size = $_FILES["file"]['size'];  #Almacenamos el tamaño del fichero subido
$file = $_FILES["file"]['name'];  #almacenamos el nombre del fichero

echo $file; #Imprimimos el nombre del fichero
echo "<br>";
echo $size;#Imprimimos el tamaño del fichero
echo "<br";

$path = "./".basename($_FILES["file"]['name']); #Guardamos en path la ruta completa de donde vamos a guardar el fichero
#lo hacemos selecionando el directorio donde vamos a guardar(en nuestro caso el actual ./) y le concatenamos el nombre del fichero pasado por
#basename

copy($_FILES['file']['tmp_name'],$path) #Copiamos el fichero temporal al directorio final.

?>

</body>

</html>

Nota: Basename, extrae de una cadena de texto una posible ruta (si existe).

No hemos metido en el ejemplo muchas florituras, ni comprobaciones para se entienda bien el concepto, pero en una aplicación real serían necesarias. Antes de guardar un archivo en el servidor, habría que realizar comprobaciones de seguridad (limitar los directorios accesibles, requerir extensión específica a los archivos, protección contra bytes nulos…), también habría que comprobar si copy da error o si se ha guardado bien el fichero, entre otras cosas, pero si nos ponemos con esto no avanzamos y como este es un curso básico, os invitamos a que investigues sobre esto por vuestra cuenta,

Nos vemos en el siguiente volumen!!


Noticias relacionadas