lunes, 23 de abril de 2012

Cómo realizar una copia de seguridad de los elementos de Outlook Express

Paso 1: copie los archivos de mensajes en una carpeta de copia de seguridad

Paso A: busque la carpeta Almacén
  1. Inicie Outlook Express.
  2. Haga clic en Herramientas y, a continuación, haga clic en Opciones.
  3. En la ficha Mantenimiento, haga clic en Carpeta de almacén.
  4. En el cuadro de diálogo Ubicación del almacén, copie la ubicación del almacén. Para ello, siga estos pasos:
    1. Coloque el puntero del mouse al final del cuadro, debajo del cuadro Su almacén de mensajes personal está situado en la carpeta siguiente.
    2. Mantenga presionado el botón primario del mouse y, a continuación, arrastre el puntero del mouse por el cuadro Su almacén de mensajes personal está situado en la carpeta siguiente.
    3. Presione CTRL+C para copiar la ubicación.
  5. Haga clic en Cancelar y, a continuación, haga clic de nuevo en Cancelar para cerrar el cuadro de diálogo.
Paso B: copie el contenido de la carpeta Almacén
  1. Haga clic en Inicio y en Ejecutar, presione CTRL+V y haga clic en Aceptar.
  2. En el menú Edición, haga clic en Seleccionar todo.
  3. En el menú Edición, haga clic en Copiar y, a continuación, cierre la ventana.
Paso C: cree una carpeta para copias de seguridad
  1. Haga clic con el botón secundario del mouse en el escritorio, haga clic en Nuevo y, a continuación, haga clic en Carpeta.
  2. Escriba Copia de seguridad de correo como nombre de la carpeta y presione ENTRAR.
Paso D: pegue el contenido de la carpeta Almacén en la carpeta para copias de seguridad
  1. Haga doble clic en la carpeta Copia de seguridad de correo para abrirla.
  2. Haga clic con el botón secundario del mouse dentro de la ventana de la carpeta Copia de seguridad de correo y, a continuación, haga clic en Pegar.

Paso 2: exporte la libreta de direcciones a un archivo .csv

Importante Asegúrese de seguir este paso si utiliza varias identidades en Outlook Express.

Microsoft Outlook Express 5.x y Microsoft Outlook Express 6.0 utilizan un archivo Libreta de direcciones de Windows (.wab) para almacenar los datos de la libreta de direcciones. Los datos individuales de cada identidad se almacenan en una carpeta, ordenados por nombre de usuario, dentro del archivo .WAB que se utiliza.

La única manera de separar los datos de la libreta de direcciones para las identidades diferentes es exportar los datos a un archivo .csv mientras tiene iniciada una sesión con una identidad concreta. Si se cambia la asociación del archivo .wab con las identidades de los usuarios, los datos sólo se pueden exportar totalmente, no carpeta por carpeta. En este caso, los datos no se pueden exportar carpeta por carpeta.

Hay otra razón para exportar el archivo .wab a un archivo .csv. Este motivo es que si el archivo .wab no se exporta a un archivo .csv, sino que se comparte con Microsoft Outlook, las direcciones se almacenan en el archivo de carpetas personales (.pst) de Outlook. Al exportar el archivo a un archivo .csv con el menú Archivo de Outlook Express, se exportan los contactos correctos. Sin embargo, si la libreta de direcciones se comparte con Outlook, no puede utilizar la opción de menú Archivo para exportarla. Esta opción no está disponible.

Para exportar la libreta de direcciones a un archivo .csv, siga estos pasos:
  1. En el menú Archivo, haga clic en Exportar y, a continuación, haga clic en Libreta de direcciones.
  2. Haga clic en Archivo de texto (valores separados por coma) y, después, haga clic en Exportar.
  3. Haga clic en Examinar.
  4. Seleccione la carpeta Copia de seguridad de correo que creó.
  5. En el cuadro Nombre de archivo, escriba copia de seguridad de libreta de direcciones y haga clic en Guardar.
  6. Haga clic en Siguiente.
  7. Haga clic para activar las casillas situadas junto a los campos que desee exportar y, después, haga clic en Finalizar.
  8. Haga clic en Aceptar y, después, haga clic en Cerrar.
Paso 3: exporte la cuenta de correo a un archivo
  1. En el menú Herramientas, haga clic en Cuentas.
  2. En la ficha Correo, haga clic en la cuenta de correo que desee exportar y, a continuación, haga clic en Exportar.
  3. En el cuadro Guardar en, seleccione la carpeta Copia de seguridad de correo y, a continuación, haga clic en Guardar.
  4. Repita estos pasos con cada cuenta de correo que desee exportar.
  5. Haga clic en Cerrar.
Paso 4: exporte la cuenta de grupos de noticias a un archivo
  1. En el menú Herramientas, haga clic en Cuentas.
  2. En la ficha Noticias, haga clic en la cuenta de noticias que desee exportar y, a continuación, haga clic en Exportar.
  3. En el cuadro Guardar en, seleccione la carpeta Copia de seguridad de correo y, a continuación, haga clic en Guardar.
  4. Repita estos pasos con cada cuenta de noticias que desee exportar.
  5. Haga clic en Cerrar.

Cómo restaurar elementos de Outlook Express

Nota: para restaurar elementos cuando utiliza varias identidades en Outlook Express, es posible que tenga que volver a crear las identidades antes de seguir estos pasos. Repita cada paso según convenga para cada identidad.

Paso 1: importe los mensajes de la carpeta de copia de seguridad

  1. En el menú Archivo, seleccione Importar y haga clic en Mensajes.
  2. En el cuadro Seleccione el programa de correo desde el que desea importar, haga clic en Microsoft Outlook Express 5 o Microsoft Outlook Express 6 y, a continuación, haga clic en Siguiente.
  3. Haga clic en Importar correo de un directorio de almacenamiento de OE5 o en Importar correo de un directorio de almacenamiento de OE6, y haga clic en Aceptar.
  4. Haga clic en Examinar y, a continuación, en Copia de seguridad de correo.
  5. Haga clic en Aceptar y, a continuación, en Siguiente.
  6. Haga clic en Todas las carpetas, en Siguiente y, a continuación, en Finalizar.
Paso 2: importe el archivo de libreta de direcciones
  1. En el menú Archivo, haga clic en Importar y, a continuación, haga clic en Otra libreta de direcciones.
  2. Haga clic en Archivo de texto (valores separados por coma) y, después, haga clic en Importar.
  3. Haga clic en Examinar.
  4. Seleccione la carpeta Copia de seguridad de correo, haga clic en el archivo copia de seguridad de libreta de direcciones.csv y, a continuación, haga clic en Abrir.
  5. Haga clic en Siguiente y, después, en Finalizar.
  6. Haga clic en Aceptar y, después, haga clic en Cerrar.
Paso 3: importe el archivo de cuenta de correo
  1. En el menú Herramientas, haga clic en Cuentas.
  2. En la ficha Correo, haga clic en Importar.
  3. En el cuadro Buscar en, seleccione la carpeta Copia de seguridad de correo.
  4. Haga clic en la cuenta de correo que desee importar y, después, haga clic en Abrir.
  5. Repita estos pasos con cada cuenta de correo que desee importar.
  6. Haga clic en Cerrar.
Paso 4: importe el archivo de cuentas de grupos de noticias
  1. En el menú Herramientas, haga clic en Cuentas.
  2. En la ficha Noticias, haga clic en Importar.
  3. En el cuadro Buscar en, seleccione la carpeta Copia de seguridad de correo.
  4. Haga clic en la cuenta de noticias que desee importar y, después, haga clic en Abrir.
  5. Repita estos pasos con cada cuenta de noticias que desee importar.
  6. Haga clic en Cerrar.

martes, 10 de abril de 2012

Ventana emergente en boton de form

Abrir una ventana emergente al pulsar el boton submit de un formulario html.

<form action="blablá" method="post" target="ventanita" onsubmit="ventanita=window.open('','ventanita','wi dth=300,height=300')">

Propiedades de window.open

Syntax

window.open(URL,name,specs,replace)

Parameter Description
URL Optional. Specifies the URL of the page to open. If no URL is specified, a new window with about:blank is opened
name Optional. Specifies the target attribute or the name of the window. The following values are supported:
  • _blank - URL is loaded into a new window. This is default
  • _parent - URL is loaded into the parent frame
  • _self - URL replaces the current page
  • _top - URL replaces any framesets that may be loaded
  • name - The name of the window
specs Optional. A comma-separated list of items. The following values are supported:

channelmode=yes|no|1|0 Whether or not to display the window in theater mode. Default is no. IE only
directories=yes|no|1|0 Whether or not to add directory buttons. Default is yes. IE only
fullscreen=yes|no|1|0 Whether or not to display the browser in full-screen mode. Default is no. A window in full-screen mode must also be in theater mode. IE only
height=pixels The height of the window. Min. value is 100
left=pixels The left position of the window
location=yes|no|1|0 Whether or not to display the address field. Default is yes
menubar=yes|no|1|0 Whether or not to display the menu bar. Default is yes
resizable=yes|no|1|0 Whether or not the window is resizable. Default is yes
scrollbars=yes|no|1|0 Whether or not to display scroll bars. Default is yes
status=yes|no|1|0 Whether or not to add a status bar. Default is yes
titlebar=yes|no|1|0 Whether or not to display the title bar. Ignored unless the calling application is an HTML Application or a trusted dialog box. Default is yes
toolbar=yes|no|1|0 Whether or not to display the browser toolbar. Default is yes
top=pixels The top position of the window. IE only
width=pixels The width of the window. Min. value is 100

replace Optional.Specifies whether the URL creates a new entry or replaces the current entry in the history list. The following values are supported:
  • true - URL replaces the current document in the history list
  • false - URL creates a new entry in the history list

lunes, 9 de abril de 2012

Trabajar con ficheros en php

En este nuevo tutorial, voy a tratar el tema de los ficheros y como se trabaja en ellos desde PHP. No va a ser exhaustivo ni mucho menos, pretende proporcionaros las bases para que experimentéis por vuestra cuenta y riesgo. Vamos a aprender unas cuantas cosas útiles al respecto de los ficheros, así que, si estáis listos, empezamos. Para este tutorial solo váis a necesitar PHP, nada más (ni MySQL ni otra cosa).

Abriendo un fichero de texto, lectura, escritura y añadido

Lo primero que vamos a hacer es escribir un sencillo fichero de texto. Lo abriremos, escribiremos un par de líneas dentro de él y luego lo cerraremos. El código que realiza esto se puede ver a continuación.
<?   #Abrimos el fichero en modo de escritura  $DescriptorFichero = fopen("fichero_prueba.txt","w");   #Escribimos la primera línea dentro de él  $string1 = "Esta es la primera línea de texto ";  fputs($DescriptorFichero,$string1);   #Escribimos la segunda línea de texto  $string2 = "Y esta es la segunda línea de texto ";  fputs($DescriptorFichero,$string2);   #Cerramos el fichero  fclose($DescriptorFichero);   ?>  
Así pues, el script anterior lo único que hace es abrir un fichero llamado fichero_prueba.txt, y escribe dentro de él dos líneas de texto. Os habréis fijado en el de detrás de las líneas de texto, en las variables $string1 y $string2. Esto se debe a que, si no estuviese puesto, el programa escribiría todo seguido. Para comprobarlo, quitadlo y ejecutad de nuevo el programa. Con solo no sirva, al menos en mi sistema Windows 2000. :-) En Linux, basta con un .
Otra de las cosas importantes del anterior script es algo que quizás no hayamos visto de cerca. Fijémonos en la siguiente línea:
$DescriptorFichero = fopen("fichero_prueba.txt","w");
La función fopen sirve para abrir un fichero en un modo. Los modos pueden ser seis y son los siguientes. Además de listarlos, explicaré las diferencias (no siempre tan obvias), al respecto de ellos.
Modo de apertura Qué significa
r Modo de solo lectura. Se abre el fichero y el cursor se coloca al principio del mismo, permitiendo leerlo hasta el final.
r+ Modo de lectura/escritura. Se abre el fichero y el cursor se coloca al principio del mismo,permitiendo leer o escribir en el fichero.
w Modo de solo escritura. Se crea el fichero si no existiese, y, si existe, se borra todo su contenido, se sitúa el cursor al principio del fichero permitiendonos escribir.
w+ Modo de escritura/lectura. Si el fichero no existe, se crea, y, si existiese, se borra todo su contenido, se sitúa el cursor al principio del fichero permitiéndonos escribir y leer.
a Modo de añadido. Abre el fichero, sitúa el cursor al final del mismo y permite escribir. Si el fichero no existe, lo crea, pero, en caso de existir, no borra su contenido.
a+ Modo de añadido/lectura. Sitúa el cursor al final del fichero y permite escribir y leer. Si el fichero no existe, lo crea, pero, si existe, no borra su contenido.
Así pues, estos son los seis modos de abrir un fichero. Vamos ahora a ver un ejemplo en código del uso de los mismos. El siguiente script va a hacer las siguientes tareas:
  • Crear un fichero y escribir en él dos líneas de texto.
  • Abrir el fichero de nuevo, esta vez en modo añadido, y escribir otras dos líneas.
Es poco, pero la lectura de ficheros la veremos al final de esta parte del tutorial. De momento, aquí está el código del script de PHP.
escribir2.php
<?   #Abrimos el fichero en modo de escritura  $DescriptorFichero = fopen("fichero_prueba.txt","w");   #Escribimos la primera línea dentro de él  $string1 = "Esta es la primera línea de texto ";  fputs($DescriptorFichero,$string1);   #Escribimos la segunda línea de texto  $string2 = "Y esta es la segunda línea de texto ";  fputs($DescriptorFichero,$string2);   #Cerramos el fichero  fclose($DescriptorFichero);   #Volvemos a abrir el fichero, esta vez en modo de añadir  $Descriptor2 = fopen("fichero_prueba.txt","a");   #Añadimos la tercera línea de texto  fputs($Descriptor2,"Esta es la tercera línea, añadida con modo "a" ");   #Añadimos la cuarta línea de texto  fputs($Descriptor2,"Esta es la cuarta línea, añadida con modo "a" ");   #Cerramos el fichero  fclose($Descriptor2);   ?> 
Como podéis comprobar si abrís el fichero recién creado, éste contiene cuatro líneas, dos de ellas escritas con modo "w" y otras dos con modo "a". Si ya tenéis más o menos claro como funciona, vamos a pasar a ver dos funciones muy útiles para leer ficheros de texto: fgets() y feof(). A través de fgets() podemos leer una línea del fichero de texto cada vez. feof() sirva para saber si hemos llegado al final del fichero. Para ver como funcionan, crearemos un script que leerá el fichero que hemos creado con los dos scripts anteriores.
leer.php
<?   #Abrimos el fichero en modo lectura  $DescriptorFichero = fopen("fichero_prueba.txt","r");   #Hasta que no lleguemos al final del fichero  while(!feof($DescriptorFichero)){       #Capturamos 4096 caracteres dentro de la línea,      #o menos si hay un retorno de carro antes      #(  en Win32,   en UNIX)      $buffer = fgets($DescriptorFichero,4096);       #Soltamos el texto, añadiendo <BR> detrás      echo $buffer."<BR>";  }   ?> 
Como véis, este script lee el fichero de texto línea a línea y lo va mostrando en el navegador. La función feof() devuelve TRUE cuando ha llegado al final del fichero. fgets(), va, pues, leyendo linea a linea y almacenándolo en una varible llamada $buffer.
Ahora vamos a ver como funcionan los modos w+, r+ y a+. Veréis que son diferentes de los anteriores en el sentido de que permiten dos operaciones, y tambien en el sentido de como tratan los ficheros. Empezaremos con w+. El siguiente script explica qué es lo que hace este modo con los ficheros.
leer_wplus.php
<?   #Abrimos el fichero en modo w+  $Descriptor1 = fopen("nuevo_fichero.txt","w+");   #Vamos a escribir un par de líneas en el fichero  fputs($Descriptor1,"Esta es la primera línea de texto ");  fputs($Descriptor1,"Esta es la segunda línea de texto ");   #Ahora cerraremos el fichero  fclose($Descriptor1);   #Volvemos a abrirlo en modo w+  $Descriptor2 = fopen("nuevo_fichero.txt","w+");   #Escribimos un par de líneas  fputs($Descriptor2,"Esta es la tercera línea de texto ");  fputs($Descriptor2,"Esta es la cuarta línea de texto ");   #Volvemos al principio del fichero  rewind($Descriptor2);   #Vamos leyendo líneas y mostrándolas  while(!feof($Descriptor2)){       $buffer = fgets($Descriptor2,4096);      echo $buffer."<BR>";   }   #Cerramos el fichero  fclose($Descriptor2);   ?> 
Como véis, al ejecutarlo, el resultado es el siguiente:
Esta es la tercera línea de texto Esta es la cuarta línea de texto 
¿Por qué no aparecen la primera y la segunda línea escritas? Observemos lo que hemos hecho. Primero abrimos el fichero y escribimos dentro de él dos líneas de texto. Tras esto, lo cerramos y lo volvemos a abrir, en modo w+. Este modo BORRA EL CONTENIDO ANTERIOR del fichero, por lo que en este solo aparecen las dos últimas líneas. Como véis, se puede utilizar este modo para leer desde el fichero con fgets().
Ahora vamos a ver un ejemplo con r+. Vamos a crear un script que haga lo mismo que el anteriro, pero en vez de abrir los ficheros con w+, los abrirá con r+.
leer_rplus.php
<?   #Abrimos el fichero en modo w+  $Descriptor1 = fopen("nuevo_fichero.txt","w");   #Vamos a escribir un par de líneas en el fichero  fputs($Descriptor1,"Esta es la primera línea de texto ");  fputs($Descriptor1,"Esta es la segunda línea de texto ");   #Ahora cerraremos el fichero  fclose($Descriptor1);   #Volvemos a abrirlo en modo w+  $Descriptor2 = fopen("nuevo_fichero.txt","r+");   #Escribimos un par de líneas  fputs($Descriptor2,"Esta es la tercera línea de texto ");  fputs($Descriptor2,"Esta es la cuarta línea de texto ");   #Volvemos al principio del fichero  rewind($Descriptor2);   #Vamos leyendo líneas y mostrándolas  while(!feof($Descriptor2)){       $buffer = fgets($Descriptor2,4096);      echo $buffer."<BR>";   }   #Cerramos el fichero  fclose($Descriptor2);   ?> 
Si ejecutáis el script, quizás observéis, sorprendidos, que el resultado es el mismo que en el anterior. Pero lo que ha sucedido, en cambio, no es lo mismo. Vamos a anlizarlo por partes. Primero, hemos abierto el fichero en modo w (escritura), para meter dos líneas en el fichero. Tras esto, lo cerramos, y lo abrimos en modo r+ (lectura/escritura). Al abrirlo de este modo, el cursor se sitúa al principio del fichero, por lo que al escribir las siguientes dos líneas, borra el contenido de las dos líneas anteriroes.. Antes de mostrar el contenido del fichero usamos la función rewind(), que rebobina el cursor hasta el principio del fichero. Para añadir al final de fichero, necesitamos el modo a+, como veremos en el siguiente ejemplo.
leer_aplus.php
<?  #Abrimos el fichero en modo w+  $Descriptor1 = fopen("nuevo_fichero.txt","w+");   #Vamos a escribir un par de líneas en el fichero  fputs($Descriptor1,"Esta es la primera línea de texto ");  fputs($Descriptor1,"Esta es la segunda línea de texto ");   #Ahora cerraremos el fichero  fclose($Descriptor1);   #Volvemos a abrirlo en modo w+  $Descriptor2 = fopen("nuevo_fichero.txt","a+");   #Escribimos un par de líneas  fputs($Descriptor2,"Esta es la tercera línea de texto ");  fputs($Descriptor2,"Esta es la cuarta línea de texto ");   #Volvemos al principio del fichero  rewind($Descriptor2);   #Vamos leyendo líneas y mostrándolas  while(!feof($Descriptor2)){       $buffer = fgets($Descriptor2,4096);      echo $buffer."<BR>";   }   #Cerramos el fichero  fclose($Descriptor2);   ?> 
El resultado de este método es el esperado. Se abre el fichero en modo escritura y se insertan las dos líneas de texto. Se cierra este descriptor, y se abre otro en modo a+. El cursor se sitúa al final del fichero, y comienza a añadir el texto. El resultado son las cuatro líneas dentro del fichero de texto.
Esto es todo en cuanto a modos de apertura. En la siguiente sección vamos a ver como subir ficheros al servidor, algo muy útil cuando se trata de páginas web.

Subir ficheros al servidor

Para ejemplificar la subida de archivos al servidor, vamos a ver un script de ejemplo. El script tiene dos partes; la primera, el formulario, en el que se introduce el fichero a cargar, y la segunda parte, en la que se procesa la subida y se informa al usuario del éxito o fracaso de la carga.
upload.php
<?   if(!isset($cargar)){   ?>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  <HTML>  <HEAD>  <TITLE>:: Formulario de carga de ficheros ::</TITLE>  </HEAD>   <BODY>   <FORM NAME="elForm" METHOD="POST"        ACTION="<? echo $PHP_SELF; ?>?cargar=1"        ENCTYPE="multipart/form-data">       <TABLE WIDTH="80%" STYLE="font-family:Arial;font-size:9pt;">       <TR>          <TD ALIGN="LEFT"><INPUT TYPE="FILE" NAME="elFichero"></INPUT></TD>      </TR>       <TR>          <TD ALIGN="LEFT"><INPUT TYPE="SUBMIT" VALUE="Subir el fichero">      </TR>       </TABLE>   </FORM></BODY></HTML>   <?   }   #Aquí realizamos la carga del fichero  if(isset($cargar)){       #Le damos al fichero un nuevo nombre      $nuevositio = "nuevo_fichero_caragado.000";       #Lo copiamos      if(!copy($elFichero,$nuevositio)){          echo "NO SE HA PODIDO SUBIR EL FICHERO";      }      else{          echo "FICHERO SUBIDO CON ÉXITO";      }        }   ?> 
Como vemos, el script realiza la carga del fichero. Para rizar un poco más el rizo os propongo lo siguiente: un script que suba un número de ficheros introducido por el usuario. Se compondrá de tres partes. La primera, en la que se pregunta al usuario el número de ficheros que desea introducir. La segunda, en la que aparecen todos los campos de tipo fichero, y la tercera, en la que se procesa la carga. El código es como sigue:
upload_multiple.php
<?   /* Este script se encarga de subir múltiples ficheros al servidor. */   #Formulario en el que se pregunta el número de ficheros  if(!isset($fich) && !isset($cargar)){       $txt ="<HTML><HEAD> ";      $txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE> ";      $txt.="</HEAD><BODY> ";      $txt.="<FORM NAME="frmNumFicheros"                   METHOD="POST"                   ACTION="".$PHP_SELF."?fich=1"> ";            $txt.="<BR><BR><BR><BR> ";      $txt.="<DIV ALIGN="CENTER"> ";      $txt.="<INPUT TYPE="TEXT" NAME="numFicheros"> ";      $txt.="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";      $txt.="<B>Introduce el número de ficheros</B> ";      $txt.="<BR><BR> ";      $txt.="<INPUT TYPE="SUBMIT"                    VALUE="Mostrar campos para subir ficheros"> ";      $txt.="<BR></DIV> ";       $txt.="</FORM></BODY></HTML> ";       echo $txt;  }   #Formulario en el que se muestran los campos tipo fichero  if(isset($fich)){       $txt ="<HTML><HEAD> ";      $txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE> ";      $txt.="</HEAD><BODY> ";      $txt.="<FORM ENCTYPE="multipart-form/data"                   NAME="frmCargaFicheros"                   METHOD="POST" ACTION="".$PHP_SELF."?cargar=1&cantidad=".$HTTP_POST_VARS["numFicheros"].""> ";       for($i=0;$i<$HTTP_POST_VARS["numFicheros"];$i++){                    $txt.="<INPUT TYPE="FILE" NAME="fichero_$i"><BR> ";       }       $txt.="<INPUT TYPE="SUBMIT" VALUE="cargar"> ";       $txt.="</FORM></BODY></HTML> ";             echo $txt;  }   #Parte que gestiona el proceso de carga  if(isset($cargar)){             for($n=0;$n<$cantidad;$n++){           #Creamos la "variable variable"          $nomvar = "fichero_$n";          $valvar = ${$nomvar};           #Extraemos el nombre del fichero sin la ruta          $nomfichero = basename($valvar);           #Le damos al fichero su nombre, metiéndolo dentro del directorio /subidas          $nuevositio = "subidas/".$nomfichero."";           #Lo copiamos          if(!copy($valvar,$nuevositio)){              echo "NO SE HA PODIDO SUBIR EL FICHERO";          }          else{              echo "FICHERO SUBIDO CON ÉXITO";          }      }    }   ?> 
De este modo podemos cargar varios ficheros al mismo tiempo. Tendrás que crear el directorio /subidas manualmente. Vamos a termnar con esta sección y pasar a la siguiente, en la que se explica como forzar al cliente a descargarse el fichero en vez de verlo on-line.

Forzar descarga de ficheros al navegador

A veces puede ser interesante que el usuario se descargue el fichero en vez de verlo on-line. Para realizar esta operación, solo necesitamos utilizar el siguiente código que voy a explicar a continuación. El script consta de una sola parte. Vamos a descargarnos un fichero .html, en vez de verlo en el navegador. El nombre del fichero será prueba_descarga.html. El código es como sigue:
descargar.php
<?   function Descargar($ElFichero){       $TheFile = basename($ElFichero);                header( "Content-Type: application/octet-stream");       header( "Content-Length: ".filesize($ElFichero));       header( "Content-Disposition: attachment; filename=".$TheFile."");       readfile($ElFichero);   }   Descargar("prueba_descarga.html");   ?> 
Como ves, el script se ejecuta y el fichero, pese a ser HTML, e interpretable por el navegador, es forzado a ser descargado, igual que si hubiéramos pulsado el botón derecho.
Y con esto termino este tutorial. Espero que os sea útil, aunque se que es corto. Es posible que en otro tutorial próximo me extienda más sobre este tem

Procesamiento de un formulario con dos botones en PHP

Este es un artículo que trata sobre algo de una muy simple solución pero que no siempre se puede ver a simple vista. Aquí voy a procesar un único formulario que consta de un texto el caul tenemos que ingresar, y dos botones que, según sea el que seleccionemos, redirigirá la página a otra según corresponda con el valor del texto ingresado.
Aquí les muestro la página principal index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1″ />
<title>Procesamiento de un formulario con dos botones en PHP</title>
</head>
<body>
<form action="procesamiento.php" method="post">
<p>Ingrese un texto</p>
<p><input type="text" name="texto"/></p>
<p><input type="submit" name="cmdForm" value="Procesar texto con el boton 1″ /></p>
<p><input type="submit" name="cmdForm" value="Procesar texto con el boton 2″ /></p>
</form>
</body>
</html>

Como habrán visto, es sólo un formulario, con un campo texto y dos botones submit dentro. El detalle está en que, si bien son dos botones, los dos llevan el mismo nombre (name="cmdForm"), solo cambia el valor de esos botones según sea el que seleccionemos: value="Procesar texto con el boton 1″, para el boton1 y value="Procesar texto con el boton 2″ para el boton 2. Al seleccionar uno de esos botones, el formulario nos manda a procesamiento.php, independientemente de cual botón presionamos. Será allí donde se procesará el texto según sea el botón seleccionado.
Aqui el segundo archivo: procesamiento.php
<?php
switch( $_POST['cmdForm'] ) {
case "Procesar texto con el boton 1″: header ("location:boton1.php?texto=".$_POST['texto']);
break;
case "Procesar texto con el boton 2″: header ("location:boton2.php?texto=".$_POST['texto']);
break;
}
?>

Aquí está todo el tratamiento de nuestro formulario con los dos botones: hago un switch (o un case, para otros lenguajes) con el valor del botón cmdForm (recordemos que al llamar a los dos botones con el mismo nombre, es como si fuera un sólo botón que admite dos valores!). Según sea el valor del botón, nos vamos a una página correspondiente al botón1 y a otra correspondiente al botón2. En ambos casos, me voy a esas dos paginas con el valor del texto ingresado para tratarlo según sea la utilidad que le demos.
Aquí estan las dos páginas, una para cada botón:
boton1.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1″ />
<title>Se procesó el formulario con el boton 1</title>
</head>
<?php
echo "Se procesó el formulario con el boton 1, y el texto de entrada es: <strong>".$_GET['texto']."</strong> ";
?>
<a href="index.php">Volver</a>
<body>
</body>
</html>

boton2.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1″ />
<title>Se procesó el formulario con el boton 2</title>
</head>
<?php
echo "Se procesó el formulario con el boton 2, y el texto de entrada es: <strong>".$_GET['texto']."</strong> ";
?>
<a href="index.php">Volver</a>
<body>
</body>
</html>

Estos dos scripts son prácticamente iguales, sólo cambian algunos detalles de nombre para cada botón. Podemos ver que aquí recupero la variable con el valor del texto que ingresamos inicialmente. Aquí utilizo GET y no POST, puesto que en el archivo procesamiento.php pasé la variable texto en el prompt (location:boton1.php?texto=".$_POST['texto']) y luego muestro esa misma variable al final de un echo como para personalizar el resultado.
Eso es todo, espero que les sirva.

Trabajar con fechas y horas en PHP y MySQL

Trabajar con horas y fechas en PHP es muy importante, ya que con ello podemos llevar a cabo tareas tan trascendentales como controlar a qué hora ha sido introducido o modificado un registro en una base de datos o imprimir la fecha y/u hora variando su formato en nuestras páginas web.
Lo más adecuado en todos los casos suele ser almacenar la fecha en formato unix en una variable:
$fecha = time();
De este modo guardamos en la variable $fecha todos los segundos que han transcurrido desde las doce de la noche del 1 de enero de 1970. $fecha será, por tanto, un número entero al que podremos sacar partido con la función "date()" para que muestre la fecha u hora en el formato que nos interese:
$fecha_con_formato = date("formato",$fecha);
Los parámetros más importantes que podemos introducir en "formato" son los siguientes:
Parámetro Descripción Parámetro Descripción
d Día del mes con ceros iniciales (De 01 a 31).  h Hora en formato 12-horas con ceros iniciales.
j Día del mes sin ceros iniciales (De 1 a 31).  H Hora en formato 24-horas con ceros iniciales.
 m Número del mes con ceros iniciales (De 01 a 12).  i Minutos con ceros iniciales.
 n Número del mes sin ceros iniciales (De 1 a 12). s Segundos con ceros iniciales.
Y Año con cuatro dígitos (Ejemplo: 2007). A AM o PM.
y Año con dos dígitos (Ejemplo: 07).  T Configuración de zona horaria del servidor.

Ejemplo: Si es el 19 de octubre de 2007 y son las 12:25, el siguiente código:
$fecha_con_formato = date("d/m/Y -- H:i:s",$fecha);
nos devolverá:
19/10/2007 -- 12:25:33
Si vamos a introducir la fecha en una base de datos (por ejemplo MySQL), lo más apropiado - a mi juicio - es guardar la fecha en formato unix, es decir, en un campo de tipo BigINT(11), ya que así tendremos una mayor versatilidad a la hora de mostrarla respecto a si lo hacemos en un campo DATE, DATETIME o TIMESTAMP (enlace en inglés).
Es posible pasar a formato unix una fecha determinada utilizando la función mktime(hora, min, seg, mes, día, año) o comprobar si una determinada fecha es válida, mediante la función checkdate(mes, día, año). Puedes ver aquí un ejemplo de uso de cada una de ellas.

Meta tags en HTML

Para "refrescar" una página o redirigirla a otra, transcurrido un cierto tiempo:
<meta http-equiv="refresh" content="20;URL=./indice.htm" >
El tipo es http-equiv="refresh", en content le decimos el número de segundos (si indicamos CERO será inmediato) y a continuación indicamos la página a la que debe dirigirse, para ello usamos URL=nombre de la página.
En este ejemplo, se cargará la página indice.htm que esté en el directorio actual transcurridos 20 segundos.
Las palabras claves que los "robots" usarán:
<meta name="Keywords" content="las palabras separadas por comas" >
Este tag lo usarán los "robots" enviados por los buscadores y se usará para indicar las palabras claves relacionadas con la página en cuestión.
La descripción de la página:
<meta name="Description" content="descripción de la página" >
Este tag lo usan los buscadores para dar una descripción del contenido de la página.
Si los "Robots" deben tener en cuenta esta página o no:
<meta name="Robots" content="ver los valores" >
El valor de content puede ser:
all para que el robot tenga en cuenta esta página y pueda seguir los links contenidos en la misma (este es el valor predeterminado)
noindex para que no la tenga en cuenta.
none que es lo mismo que noindex, nofollow
index para que la tenga en cuenta
follow para que pueda seguir los links que haya en la página
nofollow lo contrario de follow.

Si quieres saber más sobre el tema este de los robots, mira lo que cuento sobre el fichero robots.txt.
La fecha en la que expira una página:
<meta http-equiv="expires" content="fecha en formato GMT" >
La fecha en la que dicha página expira y por tanto el navegador "refrescará" el contenido después de esa fecha. El formato de la fecha es algo como: Sat, 16 Nov 2002 16:05:00 GMT, también se puede indicar un CERO para que expire inmediatamente.
En el caso de que el valor de content sea -1, no se guardará en el caché, e teoría lo mismo que si fuese 0.
Si se usan páginas ASP, se puede usar también: Response.Expires = -1
Para que no se guarde la página en el caché:
<meta http-equiv="Pragma" content="no-cache" >
Esto le indica al navegador que no guarde la página en el caché.
Este meta-tag no es válido para el Internet Explorer y según la Knowledge Base, es preferible usar el método indicado arriba, es decir usar "expires" y en content -1:
<meta http-equiv="expires" content="-1" >
A ver si es cierto... ya que esto es el que yo necesito para evitar los problemillas que algunas veces me contáis de que no se ve la página correcta...
Evitar que una página se muestre dentro de un frame:
<meta http-equiv="Window-target" content="_top" >
En Content podemos usar:
_top para indicar que se muestre en la página completa, no dentro de un frame,
_blank para que se muestre en una nueva ventana

miércoles, 4 de abril de 2012

Zona horaria en php

A veces, el servidor que contiene nuestras paginas web está situado en la otra punta del mundo, lo que, entre otras cosas, hace que todo lo relacionado con la hora y la fecha se vea afectado por los diferentes husos horarios.




Para que su página web no ponga que escribes los post de madrugada cuando en realidad los mandas desde el trabajo, aquí tienes un ejemplo en PHP de como corregir el huso horario sobre el que nuestra página debe trabajar. Si se fijan, usamos la función date_default_timezone_set() para indicarle al servidor la zona horaria, y trabajamos con las funciones date() y time() para mostrar la hora.


<?php
date_default_timezone_set("Chile/Continental");
echo "La hora en Chile es: " . date ("H:i",time()) . "<br />";
?>

Aquí les dejo las zonas horarias que encontré recopilando en la red. Seleccionen la que se acomode a su país e impleméntenla. Sería una buena idea detectar el país del visitante y definir la zona horaria dinámicamente. Suerte!!!


  • Africa/Abidjan
  • Africa/Accra
  • Africa/Addis_Ababa
  • Africa/Algiers
  • Africa/Asmara
  • Africa/Asmera
  • Africa/Bamako
  • Africa/Bangui
  • Africa/Banjul
  • Africa/Bissau
  • Africa/Blantyre
  • Africa/Brazzaville
  • Africa/Bujumbura
  • Africa/Cairo
  • Africa/Casablanca
  • Africa/Ceuta
  • Africa/Conakry
  • Africa/Dakar
  • Africa/Dar_es_Salaam
  • Africa/Djibouti
  • Africa/Douala
  • Africa/El_Aaiun
  • Africa/Freetown
  • Africa/Gaborone
  • Africa/Harare
  • Africa/Johannesburg
  • Africa/Kampala
  • Africa/Khartoum
  • Africa/Kigali
  • Africa/Kinshasa
  • Africa/Lagos
  • Africa/Libreville
  • Africa/Lome
  • Africa/Luanda
  • Africa/Lubumbashi
  • Africa/Lusaka
  • Africa/Malabo
  • Africa/Maputo
  • Africa/Maseru
  • Africa/Mbabane
  • Africa/Mogadishu
  • Africa/Monrovia
  • Africa/Nairobi
  • Africa/Ndjamena
  • Africa/Niamey
  • Africa/Nouakchott
  • Africa/Ouagadougou
  • Africa/Porto-Novo
  • Africa/Sao_Tome
  • Africa/Timbuktu
  • Africa/Tripoli
  • Africa/Tunis
  • Africa/Windhoek
  • America/Adak
  • America/Anchorage
  • America/Anguilla
  • America/Antigua
  • America/Araguaina
  • America/Argentina/Buenos_Aires
  • America/Argentina/Catamarca
  • America/Argentina/ComodRivadavia
  • America/Argentina/Cordoba
  • America/Argentina/Jujuy
  • America/Argentina/La_Rioja
  • America/Argentina/Mendoza
  • America/Argentina/Rio_Gallegos
  • America/Argentina/San_Juan
  • America/Argentina/Tucuman
  • America/Argentina/Ushuaia
  • America/Aruba
  • America/Asuncion
  • America/Atikokan
  • America/Atka
  • America/Bahia
  • America/Barbados
  • America/Belem
  • America/Belize
  • America/Blanc-Sablon
  • America/Boa_Vista
  • America/Bogota
  • America/Boise
  • America/Buenos_Aires
  • America/Cambridge_Bay
  • America/Campo_Grande
  • America/Cancun
  • America/Caracas
  • America/Catamarca
  • America/Cayenne
  • America/Cayman
  • America/Chicago
  • America/Chihuahua
  • America/Coral_Harbour
  • America/Cordoba
  • America/Costa_Rica
  • America/Cuiaba
  • America/Curacao
  • America/Danmarkshavn
  • America/Dawson
  • America/Dawson_Creek
  • America/Denver
  • America/Detroit
  • America/Dominica
  • America/Edmonton
  • America/Eirunepe
  • America/El_Salvador
  • America/Ensenada
  • America/Fort_Wayne
  • America/Fortaleza
  • America/Glace_Bay
  • America/Godthab
  • America/Goose_Bay
  • America/Grand_Turk
  • America/Grenada
  • America/Guadeloupe
  • America/Guatemala
  • America/Guayaquil
  • America/Guyana
  • America/Halifax
  • America/Havana
  • America/Hermosillo
  • America/Indiana/Indianapolis
  • America/Indiana/Knox
  • America/Indiana/Marengo
  • America/Indiana/Petersburg
  • America/Indiana/Vevay
  • America/Indiana/Vincennes
  • America/Indiana/Winamac
  • America/Indianapolis
  • America/Inuvik
  • America/Iqaluit
  • America/Jamaica
  • America/Jujuy
  • America/Juneau
  • America/Kentucky/Louisville
  • America/Kentucky/Monticello
  • America/Knox_IN
  • America/La_Paz
  • America/Lima
  • America/Los_Angeles
  • America/Louisville
  • America/Maceio
  • America/Managua
  • America/Manaus
  • America/Martinique
  • America/Mazatlan
  • America/Mendoza
  • America/Menominee
  • America/Merida
  • America/Mexico_City
  • America/Miquelon
  • America/Moncton
  • America/Monterrey
  • America/Montevideo
  • America/Montreal
  • America/Montserrat
  • America/Nassau
  • America/New_York
  • America/Nipigon
  • America/Nome
  • America/Noronha
  • America/North_Dakota/Center
  • America/North_Dakota/New_Salem
  • America/Panama
  • America/Pangnirtung
  • America/Paramaribo
  • America/Phoenix
  • America/Port-au-Prince
  • America/Port_of_Spain
  • America/Porto_Acre
  • America/Porto_Velho
  • America/Puerto_Rico
  • America/Rainy_River
  • America/Rankin_Inlet
  • America/Recife
  • America/Regina
  • America/Resolute
  • America/Rio_Branco
  • America/Rosario
  • America/Santiago
  • America/Santo_Domingo
  • America/Sao_Paulo
  • America/Scoresbysund
  • America/Shiprock
  • America/St_Johns
  • America/St_Kitts
  • America/St_Lucia
  • America/St_Thomas
  • America/St_Vincent
  • America/Swift_Current
  • America/Tegucigalpa
  • America/Thule
  • America/Thunder_Bay
  • America/Tijuana
  • America/Toronto
  • America/Tortola
  • America/Vancouver
  • America/Virgin
  • America/Whitehorse
  • America/Winnipeg
  • America/Yakutat
  • America/Yellowknife
  • Antarctica/Casey
  • Antarctica/Davis
  • Antarctica/DumontDUrville
  • Antarctica/Mawson
  • Antarctica/McMurdo
  • Antarctica/Palmer
  • Antarctica/Rothera
  • Antarctica/South_Pole
  • Antarctica/Syowa
  • Antarctica/Vostok
  • Arctic/Longyearbyen
  • Asia/Aden
  • Asia/Almaty
  • Asia/Amman
  • Asia/Anadyr
  • Asia/Aqtau
  • Asia/Aqtobe
  • Asia/Ashgabat
  • Asia/Ashkhabad
  • Asia/Baghdad
  • Asia/Bahrain
  • Asia/Baku
  • Asia/Bangkok
  • Asia/Beirut
  • Asia/Bishkek
  • Asia/Brunei
  • Asia/Calcutta
  • Asia/Choibalsan
  • Asia/Chongqing
  • Asia/Chungking
  • Asia/Colombo
  • Asia/Dacca
  • Asia/Damascus
  • Asia/Dhaka
  • Asia/Dili
  • Asia/Dubai
  • Asia/Dushanbe
  • Asia/Gaza
  • Asia/Harbin
  • Asia/Hong_Kong
  • Asia/Hovd
  • Asia/Irkutsk
  • Asia/Istanbul
  • Asia/Jakarta
  • Asia/Jayapura
  • Asia/Jerusalem
  • Asia/Kabul
  • Asia/Kamchatka
  • Asia/Karachi
  • Asia/Kashgar
  • Asia/Katmandu
  • Asia/Krasnoyarsk
  • Asia/Kuala_Lumpur
  • Asia/Kuching
  • Asia/Kuwait
  • Asia/Macao
  • Asia/Macau
  • Asia/Magadan
  • Asia/Makassar
  • Asia/Manila
  • Asia/Muscat
  • Asia/Nicosia
  • Asia/Novosibirsk
  • Asia/Omsk
  • Asia/Oral
  • Asia/Phnom_Penh
  • Asia/Pontianak
  • Asia/Pyongyang
  • Asia/Qatar
  • Asia/Qyzylorda
  • Asia/Rangoon
  • Asia/Riyadh
  • Asia/Riyadh87
  • Asia/Riyadh88
  • Asia/Riyadh89
  • Asia/Saigon
  • Asia/Sakhalin
  • Asia/Samarkand
  • Asia/Seoul
  • Asia/Shanghai
  • Asia/Singapore
  • Asia/Taipei
  • Asia/Tashkent
  • Asia/Tbilisi
  • Asia/Tehran
  • Asia/Tel_Aviv
  • Asia/Thimbu
  • Asia/Thimphu
  • Asia/Tokyo
  • Asia/Ujung_Pandang
  • Asia/Ulaanbaatar
  • Asia/Ulan_Bator
  • Asia/Urumqi
  • Asia/Vientiane
  • Asia/Vladivostok
  • Asia/Yakutsk
  • Asia/Yekaterinburg
  • Asia/Yerevan
  • Atlantic/Azores
  • Atlantic/Bermuda
  • Atlantic/Canary
  • Atlantic/Cape_Verde
  • Atlantic/Faeroe
  • Atlantic/Faroe
  • Atlantic/Jan_Mayen
  • Atlantic/Madeira
  • Atlantic/Reykjavik
  • Atlantic/South_Georgia
  • Atlantic/St_Helena
  • Atlantic/Stanley
  • Australia/ACT
  • Australia/Adelaide
  • Australia/Brisbane
  • Australia/Broken_Hill
  • Australia/Canberra
  • Australia/Currie
  • Australia/Darwin
  • Australia/Eucla
  • Australia/Hobart
  • Australia/LHI
  • Australia/Lindeman
  • Australia/Lord_Howe
  • Australia/Melbourne
  • Australia/NSW
  • Australia/North
  • Australia/Perth
  • Australia/Queensland
  • Australia/South
  • Australia/Sydney
  • Australia/Tasmania
  • Australia/Victoria
  • Australia/West
  • Australia/Yancowinna
  • Brazil/Acre
  • Brazil/DeNoronha
  • Brazil/East
  • Brazil/West
  • CET
  • CST6CDT
  • Canada/Atlantic
  • Canada/Central
  • Canada/East-Saskatchewan
  • Canada/Eastern
  • Canada/Mountain
  • Canada/Newfoundland
  • Canada/Pacific
  • Canada/Saskatchewan
  • Canada/Yukon
  • Chile/Continental
  • Chile/EasterIsland
  • Cuba
  • EET
  • EST
  • EST5EDT
  • Egypt
  • Eire
  • Etc/GMT
  • Etc/GMT+0
  • Etc/GMT+1
  • Etc/GMT+10
  • Etc/GMT+11
  • Etc/GMT+12
  • Etc/GMT+2
  • Etc/GMT+3
  • Etc/GMT+4
  • Etc/GMT+5
  • Etc/GMT+6
  • Etc/GMT+7
  • Etc/GMT+8
  • Etc/GMT+9
  • Etc/GMT-0
  • Etc/GMT-1
  • Etc/GMT-10
  • Etc/GMT-11
  • Etc/GMT-12
  • Etc/GMT-13
  • Etc/GMT-14
  • Etc/GMT-2
  • Etc/GMT-3
  • Etc/GMT-4
  • Etc/GMT-5
  • Etc/GMT-6
  • Etc/GMT-7
  • Etc/GMT-8
  • Etc/GMT-9
  • Etc/GMT0
  • Etc/Greenwich
  • Etc/UCT
  • Etc/UTC
  • Etc/Universal
  • Etc/Zulu
  • Europe/Amsterdam
  • Europe/Andorra
  • Europe/Athens
  • Europe/Belfast
  • Europe/Belgrade
  • Europe/Berlin
  • Europe/Bratislava
  • Europe/Brussels
  • Europe/Bucharest
  • Europe/Budapest
  • Europe/Chisinau
  • Europe/Copenhagen
  • Europe/Dublin
  • Europe/Gibraltar
  • Europe/Guernsey
  • Europe/Helsinki
  • Europe/Isle_of_Man
  • Europe/Istanbul
  • Europe/Jersey
  • Europe/Kaliningrad
  • Europe/Kiev
  • Europe/Lisbon
  • Europe/Ljubljana
  • Europe/London
  • Europe/Luxembourg
  • Europe/Madrid
  • Europe/Malta
  • Europe/Mariehamn
  • Europe/Minsk
  • Europe/Monaco
  • Europe/Moscow
  • Europe/Nicosia
  • Europe/Oslo
  • Europe/Paris
  • Europe/Podgorica
  • Europe/Prague
  • Europe/Riga
  • Europe/Rome
  • Europe/Samara
  • Europe/San_Marino
  • Europe/Sarajevo
  • Europe/Simferopol
  • Europe/Skopje
  • Europe/Sofia
  • Europe/Stockholm
  • Europe/Tallinn
  • Europe/Tirane
  • Europe/Tiraspol
  • Europe/Uzhgorod
  • Europe/Vaduz
  • Europe/Vatican
  • Europe/Vienna
  • Europe/Vilnius
  • Europe/Volgograd
  • Europe/Warsaw
  • Europe/Zagreb
  • Europe/Zaporozhye
  • Europe/Zurich
  • Factory
  • GB
  • GB-Eire
  • GMT
  • GMT+0
  • GMT-0
  • GMT0
  • Greenwich
  • HST
  • Hongkong
  • Iceland
  • Indian/Antananarivo
  • Indian/Chagos
  • Indian/Christmas
  • Indian/Cocos
  • Indian/Comoro
  • Indian/Kerguelen
  • Indian/Mahe
  • Indian/Maldives
  • Indian/Mauritius
  • Indian/Mayotte
  • Indian/Reunion
  • Iran
  • Israel
  • Jamaica
  • Japan
  • Kwajalein
  • Libya
  • MET
  • MST
  • MST7MDT
  • Mexico/BajaNorte
  • Mexico/BajaSur
  • Mexico/General
  • Mideast/Riyadh87
  • Mideast/Riyadh88
  • Mideast/Riyadh89
  • NZ
  • NZ-CHAT
  • Navajo
  • PRC
  • PST8PDT
  • Pacific/Apia
  • Pacific/Auckland
  • Pacific/Chatham
  • Pacific/Easter
  • Pacific/Efate
  • Pacific/Enderbury
  • Pacific/Fakaofo
  • Pacific/Fiji
  • Pacific/Funafuti
  • Pacific/Galapagos
  • Pacific/Gambier
  • Pacific/Guadalcanal
  • Pacific/Guam
  • Pacific/Honolulu
  • Pacific/Johnston
  • Pacific/Kiritimati
  • Pacific/Kosrae
  • Pacific/Kwajalein
  • Pacific/Majuro
  • Pacific/Marquesas
  • Pacific/Midway
  • Pacific/Nauru
  • Pacific/Niue
  • Pacific/Norfolk
  • Pacific/Noumea
  • Pacific/Pago_Pago
  • Pacific/Palau
  • Pacific/Pitcairn
  • Pacific/Ponape
  • Pacific/Port_Moresby
  • Pacific/Rarotonga
  • Pacific/Saipan
  • Pacific/Samoa
  • Pacific/Tahiti
  • Pacific/Tarawa
  • Pacific/Tongatapu
  • Pacific/Truk
  • Pacific/Wake
  • Pacific/Wallis
  • Pacific/Yap
  • Poland
  • Portugal
  • ROC
  • ROK
  • Singapore
  • Turkey
  • UCT
  • US/Alaska
  • US/Aleutian
  • US/Arizona
  • US/Central
  • US/East-Indiana
  • US/Eastern
  • US/Hawaii
  • US/Indiana-Starke
  • US/Michigan
  • US/Mountain
  • US/Pacific
  • US/Pacific-New
  • US/Samoa
  • UTC
  • Universal
  • W-SU
  • WET
  • Zulu

Cambiar tamaño de fuente al reducir la ventana (HTML / CSS)

Cambiar el tamaño del texto a medida que se reduce el tamaño de la ventana (HTML5 / CSS3)   . container { border : solid 1px blue ; ...