¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP y MySQL
  3. Utilizar las funciones PHP
Extrait - PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición)
Extractos del libro
PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición) Volver a la página de compra del libro

Utilizar las funciones PHP

Preámbulo

El objetivo de este capítulo es presentar las funciones más útiles para el desarrollo de un sitio web.

PHP ofrece numerosas funciones; la descripción de cada función puede encontrarse en www.php.net.

Desde la versión 8, es posible pasar parámetros a una función utilizando el nombre del parámetro en lugar de su posición. Esta característica se presenta en el capítulo Escribir funciones y clases PHP, pero puede utilizarse en las funciones nativas del lenguaje PHP y, por lo tanto, en las funciones que se presentan en este capítulo. Sin embargo, en este capítulo, los nombres reales de los parámetros de las funciones no se presentan (están traducidos); para conocerlos, consulte la documentación en línea de las funciones.

Desde la versión 8.1, ha quedado obsoleto pasar el valor NULL a un parámetro que es explícitamente opcional y produce una alerta de nivel E_DEPRECATED.

Ejemplo

<?php 
$x = null; 
$n = strlen($x); 
?> 

Resultado

Deprecated: strlen(): Passing null to parameter #1 ($string) of type 
string is deprecated in /app/scripts/index.php on line 3 

Manipular las constantes, las variables y los tipos de datos

1. Constantes

PHP ofrece un cierto número de funciones útiles para el trabajo con constantes:

Nombre

Rol

defined

Indica si una constante está definida o no.

constant

Devuelve el valor de una constante.

defined

La función defined permite saber si una constante está definida o no.

Sintaxis

booleano defined(cadena nombre) 

nombre

Nombre de la constante.

La función defined devuelve TRUE si la constante está definida y FALSE en caso contrario.

Ejemplo

<?php 
// Evaluar si la constante CONSTANTE está definida. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE está definida.<br />'; 
} else { 
  echo 'CONSTANTE no está definida.<br />'; 
}; 
// Definir la constante CONSTANTE 
define('CONSTANTE','valor de CONSTANTE'); 
// Evaluar si la constante CONSTANTE está definida. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE está definida.<br />'; 
} else { 
  echo 'CONSTANTE no está definida.<br />'; 
}; 
?> 

Resultado

CONSTANTE no está definida. 
CONSTANTE está definida. 

constant

La función constant devuelve el valor de una constante cuyo nombre se ha pasado como parámetro.

Sintaxis

mixto constant(cadena nombre) 

nombre

Nombre de la constante.

Esta función es útil para recuperar el valor de una constante cuyo nombre no se conoce en principio.

Ejemplo

<?php 
// Definir el nombre de la constante en una variable. 
$nombreConstante = 'OTRA CONSTANTE'; 
// Definir el valor de la constante. 
define($nombreConstante,'valor de OTRA CONSTANTE'); 
// Mostrar el valor de la constante. 
echo $nombreConstante,' = ',constant($nombreConstante) 
?> 

Resultado

OTRA CONSTANTE = valor de OTRA CONSTANTE 

Otras funciones permiten conocer el tipo de una constante (véase en este capítulo Manipular las constantes, las variables y los tipos de datos - Tipos de datos).

2. Variables

PHP ofrece un cierto número de funciones útiles para el trabajo con variables:

Nombre

Rol

empty

Indica si una variable está vacía o no.

isset

Indica...

Manipular las tablas

PHP ofrece un gran número de funciones para trabajar con tablas.

Las funciones más utilizadas son las siguientes:

Nombre

Rol

count

Cuenta el número de elementos en una tabla.

in_arrays

Evalúa si existe un valor en una tabla.

array_search

Busca un valor en una tabla.

array_replace

Reemplaza los valores de una tabla.

[a|k][r]sort

Ordena una tabla (varias posibilidades).

str_split

Recorta una cadena en fragmentos de longitud fija y almacena los elementos en una tabla.

explode

Recorta una cadena según un separador y almacena los elementos en una tabla.

implode

Agrupa los elementos de una tabla en una cadena mediante un separador.

array_column

Devuelve todos los valores de una columna de una tabla multidimensional.

max

Devuelve el valor más grande almacenado en una tabla.

min

Devuelve el valor más pequeño almacenado en una tabla.

No olvide la función is_array, que permite saber si una variable es de tipo tabla (véase en este capítulo Manipular las constantes, las variables y los tipos de datos - Tipos de datos).

Algunas funciones modifican el contenido de la tabla que se considera argumento y por lo tanto, no se pueden aplicar a una tabla constante si no se quiere obtener un error fatal:

Fatal error: Only variables can be passed by reference in ... 

Existen muchas otras funciones. La descripción de cada función está disponible en www.php.net. Principalmente encontrará funciones para:

  • realizar cálculos;

  • extraer una subtabla de una tabla;

  • fusionar tablas;

  • devolver la primera o la última clave de una tabla;

  • desduplicar una tabla, etc.

count

La función count permite conocer el número de elementos en una tabla.

Sintaxis

entero count (tabla variable) 

variable

Variable en cuestión

Si la variable es una tabla, count devuelve el número de elementos presentes en la tabla (0 si la tabla está vacía).

Desde la versión 8, si la función se aplica a una variable que no es una tabla, se produce una excepción TypeError (simple error de nivel E_WARNING en la versión 7); este error interrumpe el script si no se gestiona.

Ejemplo

<?php 
$x = array(); 
echo '$x tabla vacía => ',count($x),'<br />'; 
$x = array(1,2); 
echo '$x tabla de 2 elementos => ',count($x),'<br />'; 
?> 

Resultado...

Manipular los números

Las funciones más útiles para manipular números son las siguientes:

Nombre

Papel

abs

Valor absoluto de un número.

ceil

Redondea un número al entero superior.

floor

Redondea un número al entero inferior.

intdiv

Cociente de la división entera de dos enteros.

max

Mayor valor de una lista de números.

min

Menor valor de una lista de números.

rand

Generación de números aleatorios

round

Redondea un número a coma flotante.

abs

La función abs devuelve el valor absoluto de un número.

Sintaxis

numero abs(numero valor) 

valor

Número que se va a tratar.

La función abs devuelve un número del mismo tipo que el que se pasa como argumento (entero o número en coma flotante).

Ejemplo

<?php 
echo 'abs(123) =',abs(123),'<br />'; 
echo 'abs(-321) =',abs(-321); 
?> 

Resultado

abs(123) = 123 
abs(-321) = 321 

ceil

La función ceil («límite superior») redondea un número al entero superior.

Sintaxis

numero ceil(numero valor) 

valor

Número que se va a tratar.

La función ceil devuelve un número en coma flotante (float).

Ejemplo

<?php 
echo 'ceil(123.45) =',ceil(123.45),'<br />'; 
echo 'ceil(-123.45) =',ceil (-123.45); 
?> 

Resultado

ceil(123.45) = 124 
ceil(-123.45) = -123 

floor

La función floor («límite inferior») redondea un número al entero inferior.

Sintaxis

numero floor(numero valor) 

valor

Número que se va a tratar.

La función floor devuelve un número en coma flotante (float).

Ejemplo

<?php 
echo 'floor(1234.56) =',floor(1234.56),'<br />'; 
echo 'floor(-1234.56) =',floor (-1234.56); 
?> 

Resultado

floor(1234.56) = 1234  
floor(-1234.56) = -1235 

intdiv

La función intdiv devuelve el cociente de la división entera de dos enteros.

Sintaxis

entero intdiv(entero dividendo, entero divisor) 

Dividendo

Dividendo.

divisor

Divisor.

Si los dos argumentos no son de tipo entero, se convierten a enteros antes del cálculo, usando las reglas presentadas en el capítulo Introducción a PHP - Las bases del lenguaje PHP - Tipos de datos. Fundamentalmente, recuerde que en este caso un número en coma flotante siempre...

Manipular las cadenas de caracteres

Las funciones más útiles para manipular las cadenas de caracteres son las siguientes:

Nombre

Rol

strlen

Devuelve el número de caracteres de una cadena.

strtolower

strtoupper

ucfirst

lcfirst

ucwords

Conversiones mayúsculas/minúsculas

strcmp

strcasecmp

Comparación de cadenas (distingue o no mayúsculas/minúsculas).

[s]printf

v[s]printf

Formato de una cadena (idéntica a las funciones C equivalentes).

number_format

Formato de un número.

[l|r]trim

Eliminación de caracteres «vacíos».

substr

Extracción de una parte de cadena.

str_repeat

Construcción de una cadena por repetición de caracteres.

str[r][i]pos

Busca la posición de una coincidencia (carácter o cadena) dentro de una cadena.

str[i]str

strrchr

Extracción de la subcadena que comienza a partir de una cierta coincidencia de un carácter o de una cadena.

str_[i]replace

Sustitución de las coincidencias de una cadena por otra.

strtr

Sustitución de las coincidencias de un carácter por otro carácter o de una cadena por otra cadena.

str contains

Determina si una cadena contiene otra cadena (novedad de la versión 8).

str starts with

Determina si una cadena comienza por otra cadena (novedad de la versión 8).

str ends with

Determina si una cadena termina por otra cadena (novedad de la versión 8).

No olvide las funciones explode e implode presentadas anteriormente (véase en este capítulo Manipular las tablas). En el capítulo Gestionar los formularios y los vínculos con PHP, se estudian otras funciones más específicamente relacionadas con la gestión de los formularios.

En la siguiente sección, también veremos cómo realizar búsquedas y sustituciones con ayuda de expresiones racionales.

strlen

La función strlen devuelve el número de caracteres de una cadena.

Sintaxis

entero strlen(cadena cadena) 

cadena

Cadena en cuestión.

Ejemplo

<?php 
$x = 'Olivier Heurtel'; 
echo "strlen('$x') = ",strlen($x); 
?> 

Resultado

strlen('Olivier Heurtel') = 15 

strtolower - strtoupper - ucfirst - lcfirst - ucwords

Estas funciones permiten hacer conversiones de mayúsculas/minúsculas.

Sintaxis

cadena strtolower(cadena...

Utilizar expresiones regulares

1. Introducción

Una expresión regular es una cadena de caracteres que describe el modelo (o patrón) buscado en otra cadena de caracteres. Las expresiones regulares son muy útiles y muy eficaces para realizar comprobaciones u operaciones a veces complejas en cadenas de caracteres.

PHP solo ofrece una única extensión para utilizar expresiones regulares: PCRE (Perl Compatible Regular Expression). Esta extensión (funciones preg_*) utiliza prácticamente la misma sintaxis que el lenguaje Perl para escribir la expresión regular.

2. Estructura de una expresión regular

Una expresión regular Perl debe enmarcarse por un carácter delimitador. Este delimitador puede ser cualquier carácter a excepción de la barra invertida (\); muy a menudo se utiliza el carácter barra (/). También se puede utilizar los delimitadores (), {}, [] y <>.

Ejemplos (delimitador en negrita)

/http:\/\/(.*)/ 
{http://(.*)} 

Tal y como muestra el primer ejemplo, si el carácter delimitador está presente en el patrón de búsqueda, debe escaparse con una barra invertida (\). En este caso, se puede utilizar otro delimitador distinto a / (#, por ejemplo) para obtener una expresión más legible.

Después del delimitador de cierre, se pueden detallar opciones que modificarán el comportamiento de la búsqueda.

Ejemplo (opción en negrita y utilización del carácter # como delimitador)

#http://(.*)#is 

A continuación se presentan las opciones principales.

En una expresión regular, la mayoría de los caracteres se representan a sí mismos. De este modo, la expresión /http/ permite buscar la cadena http.

Pero la potencia de las expresiones regulares reside en la existencia de caracteres especiales (metacaracteres) que se interpretan para describir el patrón buscado.

Contrabarra

El carácter barra invertida tiene varios usos.

En primer lugar, permite escapar los caracteres especiales (^.[$()|*+?{\) o el delimitador de búsqueda cuando este está siendo buscado como tal. Por ejemplo, el patrón #a\*{2,4}b# permite buscar las secuencias comenzando con una a seguida de 2 a 4 asteriscos seguidos a su vez de una b (nótese el \*).

Para buscar una barra invertida, hay que duplicarla...

Manipular las fechas

PHP no gestiona las fechas con un tipo de datos específico. No obstante, pueden manipularse las fechas, bien en forma de una cadena de caracteres, bien en forma de un timestamp de Unix (correspondiente al número de segundos transcurridos desde el 1 de enero de 1970 a las 01:00:00). Hay varias clases que ofrecen funcionalidades avanzadas para la manipulación de las fechas (clase DateTime) e intervalos (clase DateInterval) orientados a objetos (ver la documentación).

Varias funciones permiten manipular las fechas bajo una de estas formas:

Nombre

Rol

checkdate

Comprueba que los tres enteros correspondientes al día, el mes y el año se ajustan a una fecha válida.

date

Convierte en cadena una fecha dada en forma de timestamp de Unix.

strftime

Convierte en cadena una fecha dada en forma de timestamp de Unix, utilizando las características locales.

getdate

Almacena en una tabla los diferentes componentes de una fecha dada en forma de timestamp de Unix.

date_parse_from_ format

Almacena en una tabla los diferentes componentes de una fecha facilitada en forma de cadena de caracteres.

time

Da el timestamp de Unix actual.

mktime

Crea un timestamp de Unix a partir de los diferentes componentes de una fecha.

microtime

Da el timestamp de Unix actual acompañado del número de microsegundos transcurridos desde el último segundo.

idate

Da los componentes de una fecha facilitada en forma de timestamp de Unix.

La llamada a algunas funciones puede generar una alerta de nivel E_NOTICE si el huso horario no se define correctamente (ver la directiva de configuración date.timezone del archivo de configuración de PHP). En este libro, suponemos que esta directiva vale Europe/Madrid.

checkdate

La función checkdate comprueba que los tres enteros correspondientes al día, el mes y el año se ajustan a una fecha válida.

Sintaxis

booleano checkdate(entero mes, entero día, entero año) 

mes

Número del mes (de 1 a 12).

día

Número del día (de 1 a 31).

año

Año (de 1 a 32767).

La función checkdate devuelve TRUE si la fecha constituida con los tres componentes es válida y FALSE en caso contrario. Esta función tiene en cuenta los bisiestos.

Ejemplo

<?php 
$día = 26; $mes = 8; $año = 1966; 
echo "$día/$mes/$año => ", ...

Generar un identificador único

En ciertas situaciones, puede ser necesario generar identificadores únicos.

PHP ofrece la función uniqid para generar identificadores únicos.

Sintaxis

cadena uniqid()([cadena prefijo [, booleano más_único]]) 

prefijo

Prefijo del identificador. Ponga una cadena vacía o no ponga nada si no desea prefijo.

más_único

Si este parámetro se establece en TRUE, se añaden datos suplementarios al final del valor devuelto para obtener un identificador más largo y más difícilmente identificable.

La función uniqid devuelve una cadena de trece caracteres o veintitrés si el parámetro más_único se establece en TRUE (sin contar el prefijo), calculado a partir de la hora actual en microsegundos.

Ejemplo

<?php 
echo uniqid(),'<br />'; 
echo uniqid(),'<br />'; 
echo uniqid('abc'),'<br />'; 
echo uniqid('',TRUE) ,'<br />'; 
?> 

Resultado

62583b776e886 
62583b776e887 
abc62583b776e888 
62583b776e8894.21626890 

Este ejemplo muestra que el identificador generado es realmente único, aunque no haya gran diferencia entre dos llamadas sucesivas. Así, el identificador generado puede considerarse insuficientemente aleatorio y, en cierto sentido, determinista.

Una técnica clásica consiste en utilizar...

Trabajar con archivos en el servidor

1. Funciones útiles

PHP ofrece un gran número de funciones para trabajar con archivos en el servidor.

Las funciones más útiles son las siguientes:

Nombre

Rol

fopen

Abrir un archivo

fclose

Cerrar un archivo

fread

Leer el contenido de un archivo (en una cadena)

file

Leer el contenido de un archivo (en una tabla)

fwrite

Escribir en un archivo

file_get_contents

Abrir, leer y cerrar un archivo

file_put_contents

Abrir, escribir y cerrar un archivo

readfile

Muestra el contenido de un archivo directamente en la salida

copy

Copiar un archivo

unlink

Eliminar un archivo

rename

Cambiar el nombre de un archivo

file_exists

Comprobar la existencia de un archivo

filesize

Leer el tamaño de un archivo

También existen funciones que permiten leer el contenido de un directorio (opendir, readdir, closedir, scandir, etc.). Para más información, consulte la documentación PHP.

Algunas de estas funciones tomarán como parámetro un nombre de archivo o de directorio. En Windows, para especificar una ruta de acceso en una cadena de caracteres delimitada por comillas, debe escapar la barra invertida (con una barra invertida = \\) o puede utilizar una notación de tipo «Unix», con barras (/). Por ejemplo, la ruta c:\temp\info.txt puede escribirse «c:\\temp\\info.txt» o «c:/temp/info.txt». Si no se indica ninguna ruta, se utiliza el directorio actual. Pueden especificarse rutas relativas utilizando el carácter . (punto) para designar el directorio actual y .. (dos puntos) para designar el directorio superior.

La constante predefinida DIRECTORY_SEPARATOR da el carácter de separación utilizado en los nombres de directorio para la plataforma en la que está instalado PHP. La constante predefinida PHP_EOL da la secuencia de caracteres utilizada por la plataforma para representar una nueva línea.

Por otro lado, varias funciones poseen un parámetro (llamado utilizar_inclusión en las sintaxis de este libro) que permite buscar el archivo en los directorios especificados por la directiva de configuración include_path.

La mayor parte de las funciones de manipulación de archivos permiten acceder de manera más general a los flujos de datos (HTTP, FTP, etc.). En este marco, las funciones aceptan un argumento adicional de contexto que permite especificar los argumentos específicos...

Enviar un correo electrónico

1. Visión de conjunto

Un sitio web interactivo a menudo necesita enviar mensajes electrónicos a los usuarios, por ejemplo para confirmar una compra, una inscripción o enviar un boletín informativo.

La función mail que ofrece PHP permite responder simplemente a este tipo de necesidad. Esta función se detalla en este capítulo, en primer lugar, para enviar mensajes de texto (sin adjuntos), y luego, para enviar mensajes en formato MIME (Multipurpose Internet Mail Extensions).

Además, PHP ofrece una potente biblioteca, pero más compleja de utilización, para gestionar mensajes según el protocolo IMAP (Internet Message Access Protocol). No trataremos esta biblioteca en este libro, ya que no es indispensable para responder a la necesidad mencionada anteriormente.

2. Enviar un mensaje de texto sin adjunto

La función mail permite enviar un mensaje electrónico.

Sintaxis

booleano mail(cadena destinatario, cadena asunto,  
cadena mensaje[, cadena encabezado]) 

destinatario

Dirección electrónica del destinatario. Pueden indicarse varios destinatarios separándolos mediante comas.

asunto

Asunto del mensaje.

mensaje

Texto del mensaje.

encabezado

Encabezados suplementarios, en forma de cadena de caracteres o de tabla.

La función mail envía el mensaje indicado por los diferentes parámetros a un servidor de correo electrónico definido por las directivas de configuración siguientes:

Win32

SMTP

Dirección del servidor SMTP al que enviar el mensaje. Ejemplo: smtp.gmail.com

sendmail_from

Dirección electrónica del emisor.

Ejemplo:webmaster@misitio.com

Esta directiva debe estar presente, aunque esté vacía.

Unix

sendmail_path

Ruta de acceso hacia el ejecutable del servidor de correo electrónico (puede incluir parámetros). Ejemplo: sendmail -t -i

La función mail devuelve TRUE si el mensaje ha podido enviarse al servidor (lo que no garantiza que este haya podido enviarlo con éxito) y FALSE en caso contrario. No hay ninguna manera de saber si el mensaje ha sido enviado correctamente; esta comprobación debe realizarse fuera de PHP.

El cuarto parámetro permite especificar información adicional que será enviada en el encabezado del mensaje (From, Reply-To, etc.). En caso de uso de una cadena de caracteres...

Manipular los encabezados HTTP

La función header permite enviar encabezados HTTP con la página HTML.

Sintaxis simplificada

header(cadena encabezado [, booleano sustituir [, 
entero código_respuesta]]) 

encabezado

Cadena para enviar como encabezado HTTP con la página HTML. 

sustituir

Indica si la función debe sustituir un encabezado previamente emitido (valor TRUE, de manera predeterminada) o bien añadir un nuevo encabezado (valor FALSE).

codigo_respuesta

Código de respuesta HTTP.

Los diferentes encabezados HTTP se describen en la RFC 2616.

Por ejemplo, la función header puede utilizarse para enviar un encabezado que prohíbe el almacenamiento en caché de la página por el cliente o por un proxy. Esta necesidad es bastante frecuente en los scripts de PHP que generan HTML dinámico cuyo contenido cambia en función del usuario.

Ejemplo

// HTTP 1.0 
header("Pragma: no-cache"); 
// HTTP 1,1 
header("Cache-Control: no-cache, must-revalidate"); 

En la continuación de este libro, tendremos la ocasión de utilizar la función header en varias situaciones:

  • redirección HTTP (véase el capítulo Gestionar los formularios y los vínculos con PHP - Ir a otra página);

  • identificación HTTP (véase el capítulo Gestionar las sesiones - Autenticación);

  • descarga (download) de un documento (véase...