sábado, 23 de agosto de 2014

Las variables superglobales en PHP - 2 de 2



5. $_COOKIE

Una cookie es un archivo que contiene información que se almacena en el equipo del visitante. Cada navegador utiliza sus propias cookies. Se pueden almacenar durante varios meses y, por ejemplo, permite mostrar automáticamente su nombre de usuario cuando vuelve a un sitio Web. No almacene información crítica ya que el usuario puede acceder fácilmente a una parte de estos archivos. Por otro lado, si una persona prohíbe las cookies en su navegador, su sitio Web no le funcionará.

$_COOKIE también es una tabla global; por lo tanto, es válido en todas las páginas de su sitio Web.

Por ejemplo, el siguiente código en la página prueba.php:

<?php
$_COOKIE[’nombre’] = ’Juan’;
echo "El nombre en cookie es:".$_COOKIE[’nombre’];
?>

Da como resultado:

El nombre en cookie es:Juan

La página prueba.php contiene un botón que envía a la página mostrar_cookie.php. En esta página el código es:

<?php
echo "El nombre en cookie siempre es:".$_cookie[’nombre’];
?>

Da como resultado:

El nombre en cookie siempre es:Juan

También puede utilizar la siguiente sintaxis para crear una cookie:

<?php
setcookie("nombre","Juan");
//¡Recargar la página!
if (isset($_COOKIE[’nombre’])) { //comprueba si la cookie está
presente
echo "El nombre en cookie es:".$_COOKIE[’nombre’];
}
?>

Da como resultado:

El nombre en cookie es:Juan

Tenga cuidado al recargar la página para que aparezca la cookie.

La instrucción setcookie() permite pasar como argumento el tiempo de expiración de la cookie, es decir, el tiempo necesario antes de que desaparezca de su equipo.

Este tiempo se expresa en segundos con la función time(), que reenvía el tiempo actual en segundos y el tiempo en segundos tras el cual su cookie se eliminará. Si no marca un tiempo de expiración, la cookie se destruirá cuando se cierre el navegador.

Por ejemplo:

<?php
$tiempo_expiracion = 365 * 24 * 3600; //tiempo en segundos relativo
a 1 año
setcookie("nombre","Juan",time()+$tiempo_expiracion);
//¡Recargar la página!
if (isset($_COOKIE[’nombre’])) { //comprueba si la cookie está
presente
echo "El nombre en cookie es:".$_COOKIE[’nombre’];
}
?>

Da como resultado:

El nombre en cookie es:Juan

Esta cookie es válida durante un año en su navegador, salvo que decida eliminar manualmente todas las cookies de su navegador.

De momento hemos visto cómo se almacena una cadena de caracteres o un número. También puede almacenar una cookie en una tabla. Solo tiene que serializar, es decir, transformar la tabla en una cadena de caracteres. Para mostrar los valores nuevamente, deberá deserializar.

Por ejemplo:

<?php
$tabla = array(’Juan’,’Roberto’,Ana);
$tiempo_expiracion = 365 * 24 * 3600; //tiempo en segundos relativo
a 1 año
$cadena_serializada = serialize($tabla); //serialización de la tabla
setcookie("serializa",$cadena_serializada,time()+$tiempo_expiracion);
//¡Recargar la página!
if (isset($_COOKIE["serializa"])) { //comprueba si la cookie está
presente
$nueva_tabla = unserialize($_COOKIE["serializa"]);//deserializa
print_r($nueva_tabla); //muestra los valores de la tabla
}
?>

Da como resultado:

Array ( [0] => Juan [1] => Roberto [2] => Ana )


6. $_FILES

$_FILES es una tabla asociativa que contiene información de archivos que se han transmitido al servidor Web.

Esta tabla contiene el nombre, el tipo, el nombre temporal, el error y el tamaño del archivo que se ha enviado.

Por ejemplo:

Veamos una página elección_imagen.php que permite elegir una imagen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Ejercicio sobre archivos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
</head>
<body>
<form action="upload.php" method="POST"
enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<p>Seleccione una foto con un tamaño inferior a 2 MB.</p>
<input type="file" name="photo">
<br />
<input type="submit" name="ok" value="Enviar">
</form>
</body>
</html>

Da como resultado:


No olvide el código enctype="multipart/form-data" en el formulario; de lo contrario, no se transmitirá el archivo.

Observe también el campo oculto cuyo nombre es MAX_FILE_SIZE. Este campo sirve para definir el tamaño máximo del archivo que va a transmitir. Pero tenga cuidado, ya que no todos los navegadores tienen en cuenta este campo; por lo tanto, por seguridad se recomienda configurar este tamaño máximo en el archivo PHP.ini introduciendo upload_max_file-size = 2M. Si supera este límite, el servidor Web devuelve un error. El archivo PHP.ini también permite configurar otras opciones relativas a archivos que se han transmitido. La propiedad file_uploads permite autorizar o no el envío de archivos. La propiedad upload_tmp_dir permite definir el directorio temporal que almacena el archivo que se ha transmitido. La propiedad post_max_size permite definir el tamaño máximo de los datos que ha enviado el formulario (imagen + texto). La propiedad post_max_size siempre tiene que ser mayor que upload_max_filesize.

Observe el código de la página upload.php a la que se llama en la acción del formulario y que permite recibir toda la información sobre el archivo que se transmite.

<pre><?php print_r($_FILES); ?></pre>

En el siguiente ejemplo, supongamos que elige la imagen Hydrangeas.jpg:

Array
(
[photo] => Array
(
[name] => Hydrangeas.jpg
[type] => imagen/pjpeg
[tmp_name] => C:\Program Files\EasyPHP-DevServer-13.1VC11\
binarias\tmp\php2AO.tmp
[error] => 0
[size] => 595284
)
)

Si se produce un error y desea mostrar el tipo de error y a continuación mover el archivo a un directorio específico:

<?php
if ($_FILES[’photo’][’error’]) {
switch ($_FILES[’photo’][’error’]){
case 1: // UPLOAD_ERR_INI_SIZE
echo "El tamaño del archivo supera el límite permitido
por el servidor (argumento upload_max_filesize del archivo
php.ini).";
break;
case 2: // UPLOAD_ERR_FORM_SIZE
echo " El tamaño del archivo supera el límite permitido
por el formulario (argumento post_max_size del archivo php.ini).";
break;
case 3: // UPLOAD_ERR_PARTIAL
echo "El envío del archivo se ha interrumpido durante
la transferencia.";
break;
case 4: // UPLOAD_ERR_NO_FILE
echo "El tamaño del archivo que ha enviado es nulo.";
break;
}
}
else {
//si no hay error entonces $_FILES[’nombre del_archivo’][’error’] es 0
echo "No hay error en la carga del archivo.<br />";
if ((isset($_FILES[’photo’][’name’])&&($_FILES[’photo’][’error’] ==
UPLOAD_ERR_OK))) {
$ruta destino = ’archivos/’;
//desplazamiento del archivo del directorio temporal (almacenado
//por defecto) al directorio de destino con la función
//move_uploaded_file($archivo_uploaded,
$carpeta_nombre_archivo_destino)
move_uploaded_file($_FILES[’photo’][’tmp_name’],
$ruta_destino.$_FILES[’photo’][’name’]);
echo "El archivo ".$_FILES[’photo’][’name’]." se ha copiado
en el directorio archivos";
}
else {
echo "El archivo no se ha podido copiar en el directorio
archivos.";
}
}
?>

Da como resultado:

No hay error en la carga del archivo
El archivo Hydrangeas.jpg se ha copiado en el directorio archivos



Espero haber ayudado en algo. Hasta la próxima oportunidad!







No hay comentarios:

Publicar un comentario en la entrada