- $cadena = 'La Región de León, Región Leonesa o Reino de León, es una región histórica española definida tras la división territorial de España en 1833. Agrupa las provincias de León, Salamanca y Zamora. El término Reino deviene de dicho documento estatal, con lo que a efectos legales y administrativos, ese sería su nombre oficial, al igual que lo son el de Reino de Murcia y el Reino de Valencia';
- $caracteres = 50;
- //Modo de uso:
- echo substr($cadena, 0, $caracteres).'...'; // Imprimirá: La Región de León, Región Leonesa o Reino de León, es una región histórica española definida...
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
viernes, 8 de noviembre de 2019
PHP: Reducir texto con puntos suspensivos
Este es el método más rápido si quieres recortar una cadena para que se muestre solo un nº total de caracteres.
lunes, 9 de abril de 2012
Trabajar con ficheros en php
1 . Abriendo un fichero de texto, lectura, escritura y añadido
2 . Subir ficheros al servidor
3 . Forzar descarga de ficheros al navegador
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).2 . Subir ficheros al servidor
3 . Forzar descarga de ficheros al navegador
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. |
- 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.
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.=" "; $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.
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:
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.
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.
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!!!
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 />";
?>
- 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
Suscribirse a:
Entradas (Atom)
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 ; ...
-
Para solucionar este error " El servidor envió una respuesta pasiva con una dirección no enrutable. Usando en su lugar la dirección de...
-
Seguro que alguna vez has pensado que si por casualidad tuvieses un percance con tu ordenador y perdieses todos los correos que tienes en...
-
Desactivar las comprobaciones de CHKDSK es sencillo. Debemos abrir el editor de registro escribiendo en el cuadro de ejecutar del sistema ...