Академический Документы
Профессиональный Документы
Культура Документы
CEFIRE
ndice de contenidos
1 - Presentacin de la Sesin.......................................................................................5 2 - Crear funciones y reutilizar cdigo...........................................................................6 2.1 - Definicin de funciones.....................................................................................6 2.2 - Paso De Parmetros Por Referencia................................................................7 2.3 - Parmetros Por Defecto....................................................................................8 2.4 - Reutilizar Cdigo...............................................................................................8 3 - Funciones de manejo de cadenas.........................................................................11 3.1 - Formato De Cadenas......................................................................................11 3.1.1 - Limpiar cadenas......................................................................................11 3.1.2 - Aplicar formato a cadenas para presentaciones.....................................11 3.1.3 - Cambiar mayscula y minsculas...........................................................12 3.1.4 - Formato para almacenamiento...............................................................12 3.2 - Combinar Y Dividir Cadenas...........................................................................13 3.3 - Comparar Cadenas.........................................................................................14 3.4 - Buscar subcadenas y reemplazarlas con funciones de cadena.....................15 3.4.1 - Buscar cadenas en cadenas...................................................................15 3.4.2 - Buscar la posicin de una subcadena.....................................................16 3.4.3 - Sustituir subcadenas...............................................................................16 3.5 - Expresiones Regulares...................................................................................17 3.5.1 - Buscar subcadenas con expresiones regulares.....................................18 3.5.2 - Sustituir cadenas con expresiones regulares.........................................18 3.5.3 - Dividir cadenas con expresiones regulares............................................18 4 - Funciones de gestin de archivos y flujos.............................................................19 4.1 - Apertura y cerrado de un fichero.....................................................................19 4.1.1 - Problemas al abrir un archivo..................................................................21 4.2 - Funciones de escritura y lectura.....................................................................21 4.3 - Funciones de utilidad.......................................................................................24 4.4 - Funciones de desplazamiento dentro del flujo................................................24 4.5 - Bloquear archivos............................................................................................25 5 - Funciones De Gestin De Fecha y Hora...............................................................27 6 - Resto de la Biblioteca De Funciones.....................................................................29 7 - Gestin de errores procedural...............................................................................30
CEFIRE
7.1 - Configuracin de errores.................................................................................30 7.2 - Captura de errores..........................................................................................30 7.3 - Sistema de abandono de la ejecucin............................................................31 7.4 - Generacin de asertos para depuracin.........................................................31 7.5 - Funciones de traza y depuracin....................................................................32 8 - Bibliografa.............................................................................................................33
-4-
1 - PRESENTACIN DE LA SESIN
En este bloque se presenta la forma que PHP tiene de modularizar el cdigo mediante el uso de procedimientos y funciones. Adems se abordarn tres de las principales bibliotecas de funciones que el lenguaje tiene como son el manejo de cadenas, ficheros y tiempo.
-5-
CEFIRE
La declaracin comenzar con la palabra clave function seguida de nombre_funcion que ser el identificador o nombre escogido por el programador para la misma. Los parmetros formales sern los representados por las variables $arg_1, $arg_2, Tambin se puede declarar funciones que acepten un nmero de parmetros variable. Por medio de las funciones de ayuda func_num_args(), func_get_arg() y func_get_arcgs() se puede saber cuntos parmetros se han pasado y qu valores tienen. http://docs.php.net/manual/es/function.funcget-args.php Cualquier instruccin vlida de PHP puede aparecer en el cuerpo de la funcin, que estar comprendido entre las llaves, incluso otras funciones y definiciones de clases. Los valores se retornarn usando la palabra reservada opcional return esta interrumpir la ejecucin de las instrucciones dentro de la funcin, finalizando la misma, pudiendo devolverse cualquier tipo de valor incluso matrices y objetos. Si nos fijamos bien no hace falta definir como en otros lenguajes el tipo de retorno, este ser igual al de la variable o el literal que se retorne, por tanto si ponemos ms de un retorno conviene que siempre retornemos el mismo tipo.
Si la funcin tiene excesiva carga lgica, salvo en casos muy claros, evitaremos usar retornos en medio de la lgica de la funcin. Esta prctica adems de liar puede conducir a errores por no cerrar descriptores de fichero, no cerrar conexiones a bases de datos, etc
-6-
El Lenguaje PHP Funciones y bibliotecas. Una llamada a funcin tendr el siente aspecto:
Si la funcin retorna algn valor este debera ser asignado a alguna variable. val_1, val_2, sern los parmetros reales y podrn ser literales, constantes, variables e incluso otras llamadas a funciones, aunque esto ltimo no es una buena prctica. Los nombres de funcin, al contrario que las variables, no discriminan entre maysculas y minsculas, a la hora de ser llamada.
-7-
CEFIRE
Estos se definirn al estilo de C++ donde valor por defecto tiene que ser una expresin constante, y no una variable, miembro de una clase o llamada a una funcin. Destacar que cuando se usan parmetros por defecto, estos tienen que estar a la derecha de cualquier parmetro sin valor por defecto.
function DibujaMenuBotones($menu_botones_enlace, $estilo = 'st_menu') { echo '<div class="'.$estilo.'">'; foreach ($menu_botones_enlace as $descripcion => $enlace) echo '<a href="'.$enlace.'"><span>'.$descripcion.'</span></a>'; echo '</div>'; } $menu_botones_enlace = array( 'Listado altas' => 'listado_altas.php'); 'Listado bajas' => 'listado_bajas.php'); DibujaMenuBotonesEnlace($menu_botones_enlace); DibujaMenuBotonesEnlace($menu_botones_enlace, 'st_menu_listado');
Si la inclusin ocurre dentro de una funcin en el fichero donde se incluye, todo el cdigo contenido en el fichero incluido se comportar como si hubiese sido definido dentro de esta funcin. PHP antes de hacer include() o require() cierra la secuencia de comandos con ?> y tras incluir el fichero la vuelve a abrir <?php PHP no examina la extensin del archivo a incluir, aunque normalmente suelen usarse las siguientes: .inc EL archivo contiene una librera de funciones o secuencia de comandos en PHP. .html Si el archivo slo contiene cdigo HTML. .php Si el archivo contiene una secuencia de comandos PHP que tenga sentido por si sola adems de incluirse en otro.php. Los archivos incluidos se buscarn en: Una ruta absoluta si esta se especifica (poco recomendable). SI no se especifica ruta se buscarn en la ubicacin donde se encuentra el script que los incluye o en las rutas especificadas en la opcin de configuracin de PHP.INI include_path. Si esta a on la opcin del configuracin de PHP.INI allow_url_fopen, podremos referenciar los archivos a incluir a travs de una URL. Dispondremos tambin de require_once() e include_once() que me garantizarn que un archivo slo es incluido una vez, de esta forma evitaremos errores por doble definicin de una funcin por ejemplo. A continuacin podemos ver un ejemplo donde en el archivo principal.php se incluyen archivos con cdigo HTML y PHP que pueden ser reutilizados en otra pginas web.
-9-
CEFIRE
-------------------------estilo.css------------------------------.texto_cabeceras { background-color: #000099; font-family: Verdana, Arial; font-size: medium; color: #FFFFFF; font-weight: bold; } .menu_botones_enlace a { font-size: 90%; font-weight: normal; font-family: Arial, Helvetica, sans-serif; margin-top: 2mm; margin-right: 1mm; margin-bottom: 2mm; margin-left: auto; border:1px solid #111111; padding:3px; width: 15%; color: #0066CC; background-color: #FFFFFF; text-align: center; text-decoration: none; } .menu_botones_enlace a:hover { border:1px ridge #0066CC; color: #FFFFFF; background-color: #0066CC; } -------------------------cabecera.html-----------------------------<html> <head> <title> IES Inventado </title> <link href="estilo.css" rel="stylesheet"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td class="texto_cabeceras" width="100%"> I.E.S. DOCTOR BALMIS </td> </tr> </table> -------------------------pie.html-----------------------------------<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td class="texto_cabeceras" width="100%">php powered</td> </tr> </table> </body> </html> -------------------------libreria.inc-------------------------------<?php function EscribeParrafo($texto, $estilo='texto_normal') { echo '<div class='.$estilo.'>'.$texto.'</div>'; } function DibujaMenuBotones($menu_botones_enlace) { echo '<div class="menu_botones_enlace">'; foreach ($menu_botones_enlace as $descripcion => $enlace) echo '<a href="'.$enlace.'"><span>'.$descripcion.'</span></a>'; echo '</div>'; } ?> -------------------------principal.php-----------------------------<?php // Inclusin de la cabecera comn a todas las pginas. include('cabecera.html'); // Inclusin libreria de funciones. require('libreria.inc'); $menu = array('Inicio'=>'inicio.php','Secretaria' =>'secretaria.php', 'Oferta educativa'=>'oferta.php', 'Departamentos'=>'dep.php'); DibujaMenuBotones($menu); EscribeParrafo('Fechas exmenes de septiembre...'); // Inclusin del pie comn a todas las pginas. include('pie.html'); ?>
- 10 -
string sprintf ( string formato [, mixed args]) y int printf ( string formato [, mixed args]) Equivalente en PHP de las funciones de ANSI C y se pueden usar por ejemplo para mostrar datos numricos con un formato determinado. Ms informacin sobre esta funcin y las opciones de formato se puede encontrar en esta URL: http://docs.php.net/manual/es/function.sprintf.php mixed sscanf ( string cad, string formato [, string var1]) de funcionamiento idntico a su equivalente en C la cual me permite extraer valores de una cadena a variables a partir de un formato dado (Ver referencia en manual). Quiz el formato no tenga mucho sentido en HTML que ignora los espacios pero puede servirnos para serializar a algn tipo de fichero de texto.
- 11 -
CEFIRE
string number_format ( float numero [, int decimales [, string punto_dec, string sep_miles]] ) Esta funcin puede evitarnos usar sprintf si queremos formatear un determinado valor numrico. Nos permitir indicar el nmero de decimales, el carcter de punto decimal y el carcter de separacin de miles.
// Extrae los valores de cdigo y precio de la cadena $texto $texto = 'Codigo: ACE y Precio: 80'; sscanf($texto, "Codigo: %s y Precio: %f", $codigo, $precio); // Imprime la cadena cdigo (%-6s) alineado a la // izquierda 6 caracteres y rellenado con espacios a la // derecha (%-6s). // Imprime el precio de tipo float (%10.2f) con dos // decimales (%10.2f) alinendolo a la derecha 10 posiciones // rellenando con espacios por la izquierda ( %10.2f) // $textoFormateado = 'ACE 80.00' $textoFormateado = sprintf("%-6s%10.2f", $codigo, $precio);
- 12 -
string addslashes ( string cad) Aade caracteres de marcado para almacenamiento en Bases de Datos y evitar ataques SQL Injection. string stripslashes ( string cad)
Existe una opcin en el PHP.INI denominada magic_quotes_gpc si esta a on PHP escapara de forma automtica cualquier cadena proveniente de un GET, un POST o una cookie, como si llamramos a addslashes, por tanto para poder verlas correctamente deberemos llamar a stirpslashes. Adems PHP nos proporciona la funcin long get_magic_quotes_gpc ( void ) que me devolver 1 si la opcin esta habilitada y 0 si no lo est, de esta forma podremos controlar condicionalmente por cdigo si tenemos que llamar a addslashes o stripslashes.
string implode ( string cola, array piezas) igual que la funcin join Funcin contraria a explode y une elementos de una matriz en una cadena separados por la cadena cola. string strtok ( string arg1, string arg2) Divide una cadena en elementos. Equivalente a so homnima en ANSI C. En el ejemplo dividimos la cadena Una cadena de ejemplo, proponiendo como divisor el carcter espacio. Slo la primera llamada a strtok utiliza el argumento cadena. Cada llamada subsiguiente necesita slo el divisor a utilizar, puesto que ella guarda la posicin actual en la cadena. Para comenzar de nuevo o para dividir otra cadena, simplemente llame a strtok con el argumento de cadena y se inicializar.
- 13 -
CEFIRE
$cadena = "Una cadena de ejemplo"; $tok = strtok ($cadena, ' '); while ($tok) { echo "Palabra=$tok<br>"; $tok = strtok (' '); }
string substr ( string cadena, int comienzo [, int largo]) Devuelve la porcin de cadena especificada por los parmetros comienzo y largo. Si comienzo es positivo, la cadena devuelta comenzar en dicho caracter de cadena. Si comienzo es negativo, la cadena devuelta comenzar en dicha posicin desde el final de cadena. Si se especifica largo y es positivo, la cadena devuelta terminar largo caracteres tras el comienzo. Si esto resulta en una cadena con longitud negativa (porque el comienzo est pasado el final de la cadena), la cadena devuelta contendr nicamente el caracter que haya en comienzo. Si se especifica largo y es negativo, la cadena devuelta terminar a largo caracteres desde el final de cadena. Si esto resulta en una cadena con longitud negativa, la cadena devuelta contendr nicamente el caracter que haya en comienzo.
$resto $resto $resto $resto $resto $resto = = = = = = substr substr substr substr substr substr ("abcdef", ("abcdef", ("abcdef", ("abcdef", ("abcdef", ("abcdef", 1); 1, 3); -1); -2); -3, 1); 1, -1); // // // // // // devuelve devuelve devuelve devuelve devuelve devuelve "bcdef" "bcd" "f" "ef" "d" "bcde"
- 14 -
int strnatcmp ( string cad1, string cad2) Esta funcin implementa un algoritmo de comparacin que ordena las cadenas alfanumricas como lo hara un ser humano, que es lo que se denomina "orden natural". (http://www.naturalordersort.org/)
$matriz1 = $matriz2 = array ("i12.png","i10.png","i2.png","i1.png"); echo "Comparacion de cadenas estandar<br>"; usort($matriz1,"strcmp"); // Imprime: i1.png i10.png i12.png i2.png foreach ($matriz1 as $archivo) echo $archivo.' '; echo "<br>Comparacion de cadenas en orden natural<br>"; usort($matriz2,"strnatcmp"); // Imprime: i1.png i2.png i10.png i12.png foreach ($matriz2 as $archivo) echo $archivo.' ';
int strncasecmp ( string cad1, string cad2, int longitud) Igual que strnatcmp pero no es sensible a maysculas ni minsculas. int strlen ( string cad) Devuelve la longitud de la cadena. Equivalente a so homnima en ANSI C
Si la aguja no es una cadena, se convierte a entero y se aplica como el valor ordinal de un caracter. Podemos utilizarla para buscar una cadena dentro de otra o un carcter dentro de una cadena. string stristr ( string pajar, string aguja) Igual que strstr pero no es sensible a maysculas ni minsculas. string strrchr ( string pajar, string aguja) Encuentra la ltima aparicin de un carcter o cadena (aguja) en pajar. Por lo dems es idntica a strstr. - 15 -
CEFIRE
Como ya se adverta al explicar la estructura if, usamos el operador ! == en lugar de !=, puesto que al encontrar stripos la cadena 'nota' en la posicin 0, cuando haga 0 != false se evaluar a falso, no mostrando el mensaje.
El parmetro opcional desplazamiento le permite especificar a partir de qu caracter del pajar comenzar a buscar. La posicin devuelta es an relativa al comienzo de pajar. int strrpos ( string pajar, char aguja) Idntica a strpos salvo que en lugar de devolver la primera aparicin, devuelve la ltima aparicin de la cadena aguja en pajar
Si cadena_buscada y cadena_sustituta son matrices, la funcin str_replace() selecciona cada vez un valor de ambas matrices y realiza la bsqueda/sustitucin. Si cadena_buscada tiene menos elementos que cadena_sustituta, se emplea una cadena vaca para realizar el resto de sustituciones. Si cadena_buscada es una matriz y cadena_sustituta es una cadena, se emplea esta cadena para realizar la sustitucin de todos los valores de cadena_buscada.
$texto1[0] = 'Lanz el cuchillo con fuerza.'; $texto1[1] = 'No tenia fuerza para levantar el cuchillo.'; $texto2 = str_replace( array('cuchillo','fuerza'), array('machete','energa'), $texto1); print_r($texto2); //$texto2[0] = 'Lanz el machete con energa.' //$texto2[1] = 'No tenia energa para levantar el machete.'
Tras ver diversos casos de operaciones con cadenas, podemos deducir que uno de los principales potenciales de PHP es el manejo de las mismas, con el fin de renderizar cdigo interpretable por el cliente. Podemos ver ms funciones relacionadas con cadenas en: http://docs.php.net/manual/es/ref.strings.php
- 17 -
CEFIRE
Fijmonos que hemos usa do la barra estndar de UNIX '/', esta funciona tambin en Windows y hace compatible el cdigo entre sistemas.
- 18 -
Si se trata de una URL deberemos tener presente que: Deberemos tener a on la opcin de configuracin de PHP.INI allow_url_fopen. Lo ms normal es abrir el fichero en modo lectura, ya que de lo contrario deberemos autenticarnos en la URL y el servidor debe soportar escritura.
$fp = fopen(ftp://user:pass@localhost/notas.txt,'r');
Las rutas no son sensibles a maysculas y minsculas. Si especificamos un directorio deberemos poner una '/' al final de la URL.
$fp = fopen('http://localhost:8080/','r');
Si abrimos sobre SSL (https://...) deberemos asegurarnos que tenemos habilitada la compatibilidad para OpenSSL.
modo: Este parmetro especifica el tipo de acceso que requiere para la secuencia. Puede ser cualquiera de los siguientes valores: 'r' Apertura para slo lectura; ubica el apuntador de archivo al comienzo del mismo. 'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo. 'w' Apertura para slo escritura; ubica el apuntador de archivo al comienzo de ste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo. 'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de ste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo. 'a' Apertura para slo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo. 'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo. Windows ofrece una bandera de traduccin de modo-texto ('t') la cual traducir transparentemente \n a \r\n cuando trabaje con el archivo. En contraste, tambin puede usar 'b' para forzar el modo binario, el cual no traduce sus datos. Para usar stas banderas, indique 'b' o 't' como el ltimo caracter del parmetro modo. Debe tener en cuenta esto si desea portabilidad. Por defecto si no especificamos ningn modo se supone binario b
- 19 -
CEFIRE
Somos nosotros quienes gestionamos el error con if ($fp === false) int fclose (int handle) Cierra un archivo valindose de su referencia en la apertura. Devuelve TRUE si el fichero se cerr correctamente, FALSE en caso contrario.
int file_put_contents ( string nombre_archivo, mixed datos [, int banderas [, resource contexto]] ) int feof ( int handle ) Funcin necesaria para saber cuando dejar de leer una rachivo. Un esquema tpico de lectura puede ser un bucle while del tipo.
while(feof($fp) === FALSE) { // Lectura de datos }
feof() evuelve TRUE si el apuntador del fichero est en EOF o si ocurre un error (incluyendo tiempo de espera agotado); en otro caso devuelve FALSE.
- 20 -
string fread ( resource gestor, int longitud ) Funcin contraria a fwrite. fread() lee hasta longitud bytes desde el apuntador de archivo indicado por gestor. La lectura se detiene cuando se han ledo hasta longitud bytes, se alcanza EOF (el final de archivo), (en el caso de secuencias de red) cuando un paquete se encuentra disponible, o (despus de abrir una secuencia de espacio de usuario) cuando se han ledo 8192 bytes, aquello que ocurra primero. Devuelve la cadena leda o FALSE en caso de error. string fgets ( resource gestor [, int longitud] ) Devuelve una cadena de hasta longitud - 1 bytes ledos desde el archivo apuntado por gestor. La lectura termina cuando se han ledo longitud - 1 bytes, se alcanza un salto de lnea (el cual se incluye en el valor devuelto), o en EOF (lo que ocurra primero). Si no se especifica una longitud, el valor predeterminado es de 1k, o 1024 bytes. Si ocurre un error, devuelve FALSE. array fgetcsv ( resource handle, int length [, string delimiter [, string enclosure]]] ) Se utiliza para dividir lneas de archivo se ha utilizado un carcter de delimitacin, como por ejemplo el carcter de tabulacin '\t' del ejemplo u otros como ',', ';' como se suele hacer en hojas de clculo u otras aplicaciones. Suelen tener extensin CSV (http://es.wikipedia.org/wiki/CS) handle: Un apuntador de archivo vlido abierto exitosamente por fopen(), popen(), o fsockopen(). lenght: Debe ser mayor que la lnea ms grande (en caracteres) a ser encontrada en el archivo CSV (permitiendo los caracteres de fin de lnea). delimiter (Opcional): Fija el delimitador del campo (slo un caracter). El valor por defecto es la coma. enclosure (Opcional): Fija el caracter de delimitacin (slo un caracter). El caracter por defecto son las dobles comillas.
<?php @ $fp = fopen('notas.cvs','rt'); if ($fp !== false) { // Leo los ttulos de las columnas, que se corresponde con // la primera lnea del CSV. $columnas = fgetcsv($fp, 1024, ','); // Mientras no sea final del fichero leo datos de alumnos // y lo metro en un array de notas, que a su vez contendr // el array con los datos del alumno devuelto por fgetcsv $i = 0; while (feof($fp) === false) $notas[$i++] = fgetcsv($fp, 1024, ','); fclose($fp); echo '<table width="100%" border="1" cellspacing="0">'; // Visualizo los ttulos de las columnas. echo'<tr>'; foreach ($columnas as $columna) echo'<th scope="col">'.$columna.'</th>'; echo'</tr>';
- 21 -
CEFIRE
// Visualizo los la matriz notas. foreach ($notas as $alumno) { echo '<tr>'; for ($i = 0; $i < count($alumno); ++$i) echo '<td width="8%" >'.$alumno[$i].'</td>'; echo '</tr>'; } echo '</table>'; } else echo 'Error abriendo el fichero.'; ?>
int readfile ( string nombre_archivo [, bool usar_ruta_inclusion] ) Lee un archivo y lo escribe al bfer de salida. Devuelve el nmero de bytes ledos desde el archivo. Si ocurre un error, FALSE es devuelto y a menos que la funcin sea llamada como @ readfile(), se genera un mensaje de error. int fpassthru ( resource gestor ) Lee hasta EOF en el apuntador de archivo dado a partir de la posicin actual y escribe los resultados en el bfer de salida. Si ocurre un error, fpassthru() devuelve FALSE. De lo contrario, fpassthru() devuelve el nmero de caracteres ledos desde gestor y pasados a la salida. array file ( string nombre_archivo [, int usar_ruta_inclusion ] ) Funcin idntica a file_get_contents(), excepto que file() devuelve el archivo en una matriz. Cada elemento de la matriz corresponde a una lnea en el archivo, con el salto de lnea incluido (usaremos pues rtrim si no queremos conservar el final de lnea). Si ocurre un fallo, file() devuelve FALSE. Es posible usar el parmetro opcional usar_ruta_inclusion, y definirlo como "1", si desea buscar por el archivo en include_path. string file_get_contents ( string nombre_archivo [, bool usar_ruta_inclusion [, resource contexto [, int desplazamiento [, int long_max]]]] ) Funcin idntica a file(), con la excepcin de que file_get_contents() devuelve el archivo en una cadena, comenzando en el desplazamiento especificado y hasta long_max bytes. En caso de fallo, file_get_contents() devolver FALSE. file_get_contents() es el mtodo ms eficiente para leer los contenidos de un archivo en una cadena y podemos utilizarla por ejemplo para cargar una plantilla y posteriormente con funciones de cadena rellenarla y mostrarla.
- 22 -
Para tamaos de archivo superiores a 2Gb el valor retornado puede ser inesperado. bool unlink ( string nombre_archivo [, resource contexto] ) Elimina nombre_archivo. Es similar a la funcin unlink() de C en Unix. Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo.
- 23 -
CEFIRE
Si no se especifica desde, se asume que sea SEEK_SET. De tener xito, la funcin devuelve 0; de lo contrario devuelve -1. Note que realizar una reubicacin ms all del final de archivo no se considera un error. bool rewind ( resource gestor ) Lleva el puntero del archivo al comienzo de la secuencia o flujo. Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo.
Tanto para rewind como para fseek, si ha abierto el archivo en modo de adicin ("a" o "a+"), cualquier informacin que escriba al archivo ser siempre agregada al final de ste, independientemente de la posicin del archivo.
El tercer argumento opcional recibe el valor TRUE si el aviso producira un bloqueo. El bloqueo es liberado tambin por fclose() o al finalizar el script. Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo.
flock() no funcionar en los sistemas de archivos FAT o NFS (Net File System).
En la siguiente pgina podemos ver un ejemplo donde se implementa un contador de visitas, almacenando la cuenta en un fichero con acceso bloqueado en exclusin. - 24 -
// Compruebo si existe el fichero donde llevo la cuenta por si tengo // que iniciar esta y crearlo. if (file_exists(FICH_CUENTA) === false) { $contador = 1; $modo ='w'; } else $modo ='r+'; // Interruptor que se pondr a cierto si hemos podido actualizar el // valor de la cuenta. $cuenta_disponible = false; @ $fp = fopen(FICH_CUENTA, $modo); if ($fp !== false) { // Bloqueamos el archivo en modo exclusivo. if (flock($fp, LOCK_EX) === true) { // Si el fichero ya exista leemos el ltimo valor de la // cuenta y la incrementamos. if ($modo == 'r+') { $contador = intval(fgets($fp)); $contador++; } // En cualquier caso situamos el puntero al principio de // la secuencia y almacenamos el valor del contador. // OJO !! esto no funciona si abrimos en modo a o a+ rewind($fp); fputs($fp, strval($contador)); // Liberamos el bloqueo y cerramos el fichero. flock($fp, LOCK_UN); $cuenta_disponible = true; } fclose($fp); } if ($cuenta_disponible === true) echo 'Visita nmero: '.$contador; else echo 'Nmero de visitas no disponible..'; ?>
- 25 -
CEFIRE
- 26 -
bool checkdate ( int mes, int dia, int anyo ) Devuelve TRUE si la fecha dada es vlida segn el calendario gregoriano; de lo contrario devuelve FALSE. bool date_default_timezone_set ( string $timezone_identifier ) Establece la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script. En la siguiente URL: http://es.php.net/manual/es/timezones.php podemos encontrar un listado de los timezones soportados como primer parmetro de la funcin,
A partir de PHP 5.1.0 (cuando las funciones de fecha/hora fueron reescritas), cada llamada a la funcin de fecha/hora generar un E_WARNING si se usa la configuracin del sistema.
string date ( string formato [, int marca_de_tiempo] ) Como hemos mencionado, su llamada debe ser precedida de date_default_timezone_set y devuelve una cadena con formato de acuerdo a la cadena de formato dada usando el entero marca_de_tiempo entregado o la hora local si no se da una marca de tiempo. En otras palabras, marca_de_tiempo es opcional y su valor predeterminado es el valor de time(). Debido a la gran cantidad de formatos posibles, algunos disponibles segn la versin de PHP, lo mejor es consultaros en la tabla de manual oficial que podemos encontrar en http://docs.php.net/manual/es/function.date.php
$fecha_hora = date("Y-m-d H:i:s"); // Ej. formato ISO 8601 para MySQL <?php date_default_timezone_set('Europe/Madrid'); $aMeses = array('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'); $aDias = array('Domingo', 'Lunes', 'Martes', 'Mircoles', 'Jueves', 'Viernes', 'Sbado'); $indDia = (int)date("w"); $indMes = (int)date("m") - 1; $sFecha = $aDias[$indDia].', '.date("d").' de '. $aMeses[$indMes].' de '.date("Y"); echo '<p>'.$sFecha.'</p>' ?>
- 27 -
CEFIRE
- 28 -
Las funciones cuando producen un error devolvern algo indicndome el mismo, propagndose estos hacia arriba en la jerarqua de mdulos normalmente hasta algn mdulo de gestin de errores. Por esta razn muchas de las funciones vistas hasta ahora retornan false ante cualquier error.
- 29 -
CEFIRE
- 30 -
- 31 -
CEFIRE
8 - BIBLIOGRAFA
DIVERSOS AUTORES Manual PHP Oficial Versin web 17/08/2010 desde RedIris http://docs.php.net/manual/es/ Editor principal Philip Olson. Copyright 1997-2010 por el Grupo de documentacin de PHP Bajo Licencia http://creativecommons.org/licenses/by/3.0/
- 32 -