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 está disponible en línea en el sitio www.php.net.
![images/01RIT8PHP01.png](https://www.eni-training.com/download/74e1440d-6b0e-4af9-a157-0d3a7851889f/images/01RIT8PHP01.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
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 funcionalidad se presenta en el capítulo Escribir funciones y clases PHP, pero puede utilizarse para las funciones propias del lenguaje PHP y, por tanto, para 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 version 8.1, pasar el valor NULL en un parámetro que no es explícitamente opcional es obsoleto, y por lo tanto, genera una alerta 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 una serie de funciones útiles sobre las constantes:
Nombre |
Función |
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
// Probar 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 la CONSTANTE');
// Probar 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 pasa como parámetro.
Sintaxis
mixto constant(cadena nombre)
Donde
nombre |
Nombre de la constante. |
Esta función es útil para recuperar el valor de una constante cuyo nombre no se conoce a priori.
Ejemplo
<?php
// definir el nombre de la constante en una variable
$nombreConstante = 'OTRA CONSTANTE';
// definir el valor de la constante
define($nombreConstante,'valor de la OTRA CONSTANTE');
// mostrar el valor de la constante
echo $nombreConstante,' = ',constant($nombreConstante);
?>
Resultado
OTRA CONSTANTE = valor de la OTRA CONSTANTE
Otras funciones permiten conocer el tipo de una constante (véase la sección Manipular las constantes, las variables y los tipos de datos - Tipos de datos).
2. Variables
PHP ofrece una serie de funciones útiles en las variables:
Nombre |
Función |
empty |
Indica si una variable está vacía o no. |
isset |
Indica... |
Manipular las matrices
PHP ofrece un gran número de funciones que permiten manipular las matrices.
Las funciones utilizadas con mayor frecuencia son:
Nombre |
Función |
count |
Cuenta el número de elementos de una matriz. |
in_array |
Comprueba si un valor está presente en una matriz. |
array_search |
Busca un valor en una matriz. |
array_replace |
Reemplaza valores de una matriz. |
[a|k][r]sort |
Ordena una matriz (diversas variantes posibles). |
explode |
Divide una cadena según un separador y almacena los elementos en una matriz. |
implode |
Reagrupa los elementos de una matriz en una cadena mediante un separador. |
max |
Devuelve el valor más alto almacenado en una matriz. |
min |
Devuelve el valor más bajo almacenado en una matriz. |
str_split |
Divide una cadena en fragmentos de longitud fija y almacena los elementos en una matriz. |
array_column |
Devuelve los valores de una columna de una matriz multidimensional. |
array_key_first |
Devuelve la primera clave de un array. |
array_key_last |
Devuelve la última clave de un array. |
Algunas funciones modifican el contenido de la matriz que se pasa como parámetro y, por lo tanto, no se pueden aplicar a una matriz constante, ya que se obtendría un error fatal:
Fatal error: Only variables can be passed by reference in...
La función is_array (véase la sección Manipular las constantes, las variables y los tipos de datos - Tipos de datos) permite conocer si una variable es de tipo matriz. Recuérdelo.
Existen muchas otras funciones y puede consultar la descripción de cada función en línea en www.php.net. Ahí encontrará, especialmente, funciones para:
-
realizar cálculos (suma...),
-
extraer una submatriz de una matriz,
-
fusionar matrices,
-
desduplicar una matriz...
count
La función count permite conocer el número de elementos en una matriz.
Sintaxis
entero count (matriz variable)
variable |
Variable en cuestión. |
Si la variable es una matriz, la función count devuelve el número de elementos presentes en la matriz (0 si la matriz está vacía).
![images/01RIT8PHP01.png](https://www.eni-training.com/download/74e1440d-6b0e-4af9-a157-0d3a7851889f/images/01RIT8PHP01.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Desde la versión 8, si la función se aplica a una variable que no es una matriz, 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 administra.
Ejemplo
<?php
$x = array();
echo...
Manipular los números
Las funciones más útiles para manipular los números son las siguientes:
Nombre |
Función |
abs |
Valor absoluto de un número. |
ceil |
Redondeo de un número al entero superior. |
floor |
Redondeo de un número al entero inferior. |
intdiv |
Cociente de la división entera de dos enteros. |
max |
El valor más grande de una lista de números. |
min |
El valor más pequeño de una lista de números. |
rand |
Generación de números aleatorios. |
round |
Redondeo de un número con punto flotante. |
abs
La función abs devuelve el valor absoluto de un número.
Sintaxis
número abs(número valor)
valor |
Número que se va a procesar. |
La función abs devuelve un número del mismo tipo que el número que se pasa como parámetro (entero o número con punto 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 («techo») redondea un número al entero superior.
Sintaxis
número ceil(número valor)
valor |
Número que se va a procesar. |
La función ceil devuelve un número entero, pero cuyo tipo de datos es un número con punto 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 («suelo») redondea un número al entero inferior.
Sintaxis
número floor(número valor)
valor |
Número que se va a procesar. |
La función floor devuelve un número entero, pero cuyo tipo de datos es un número con punto 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.... |
Manipular las cadenas de caracteres
Las funciones más útiles para la manipulación de cadenas de caracteres son las siguientes:
Nombre |
Función |
strlen |
Devuelve el número de caracteres de una cadena. |
strtolower strtoupper ucfirst ucwords lcfirst |
Las conversiones de minúsculas/mayúsculas pueden limitarse a la(s) primera(s) palabra(s). |
strcmp strcasecmp |
Comparación de cadenas (diferencia las mayúsculas de las minúsculas o no). |
[s]printf v[s]printf |
Formato de una cadena (idéntica a las funciones de C equivalentes). |
number_format |
Formato de un número. |
[l|r]trim |
Eliminación de caracteres «blancos». |
substr |
Extracción de una subcadena de una cadena. |
str_repeat |
Construcción de una cadena por repetición de caracteres. |
str[r][i]pos |
Búsqueda de la posición de una ocurrencia (carácter o cadena) dentro de una cadena. |
str[i]str strrchr |
Extracción de la subcadena dentro de una cadena a partir de una ocurrencia determinada de un carácter o una cadena. |
str_[i]replace |
Sustitución de las ocurrencias de una cadena por otra cadena. |
strtr |
Sustitución de las ocurrencias 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 empieza 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). |
Recuerde las funciones explode, implode y str_split anteriormente presentadas (véase la sección Manipular las matrices). Otras funciones más específicamente relacionadas con la gestión de formularios se estudian en el capítulo Gestionar formularios y enlaces.
![images/01RIT8PHP01.png](https://www.eni-training.com/download/74e1440d-6b0e-4af9-a157-0d3a7851889f/images/01RIT8PHP01.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Desde la versión 8.2, las funciones que realizan conversiones entre mayúsculas y minúsculas (strtolower, strtoupper, lcfirst, ucfirst, ucwords) o búsquedas/comparaciones que no tienen en cuenta mayúsculas y minúsculas (stristr, stripos, strripos, str_ireplace) ya no toman en cuenta las características lingüísticas locales definidas mediante la función setlocale (presentada más adelante en este capítulo) y solo trabajan en el rango de caracteres ASCII, lo que puede provocar diferencias en los resultados....
Utilizar expresiones regulares
1. Introducción
Una expresión regular es una cadena de caracteres que describe el modelo (también llamado patrón) que se busca en otra cadena de caracteres. Las expresiones regulares son muy útiles y eficaces para llevar a cabo verificaciones o manipulaciones complejas en cadenas de caracteres.
El término inglés «regular expresión» a menudo se traduce también como «expresión racional».
PHP ofrece una 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 de Perl debe estar delimitada por un carácter delimitador. Este delimitador puede ser cualquier carácter excepto la barra invertida (\); muy a menudo se utiliza la barra (/). También es posible utilizar los delimitadores (), {}, [] y <>.
Ejemplo (delimitador en negrita)
/http:\/\/(.*) /
{http://(.*)}
Como se muestra en el primer ejemplo anterior, si el carácter delimitador está presente en el patrón deseado, debe escaparse con una barra invertida (\). En este caso, utilizar un delimitador diferente a / (#, por ejemplo) permite obtener una expresión más fácil de leer.
Después del delimitador de cierre, es posible especificar las opciones que modifican el comportamiento de la búsqueda.
Ejemplo (opciones en negrita y utilización del carácter # como delimitador)
#http://(.*)#is
Las principales opciones se presentan a continuación.
En una expresión regular, la mayoría de los caracteres se representan ellos mismos. Así, la expresión /http/ permite buscar la cadena http.
Pero el poder de las expresiones regulares reside en la existencia de caracteres especiales (comodines), que se interpretan para describir el patrón buscado.
Barra invertida
El carácter de barra invertida tiene varios usos.
En primer lugar, permite escapar los caracteres especiales (^.[$()|*+?{\) o el delimitador de la expresión cuando se buscan como tales. Por ejemplo, el patrón #a\*{2,4}b# permite buscar las secuencias que comienzan...
Manipular las fechas
PHP no gestiona las fechas con un tipo de datos específico. Sin embargo, es posible manipular las fechas, ya sea en forma de una cadena de caracteres o bien en forma de un timestamp Unix (que corresponde al número de segundos transcurridos desde el 1.° de enero de 1970 01:00:00).
Hay varias clases que ofrecen funcionalidades avanzadas para la manipulación de fechas (clase DateTime) e intervalos (clase DateInterval) en una forma orientada a objetos (ver la documentación).
Varias funciones permiten manipular las fechas en una u otra de estas formas:
Nombre |
Función |
checkdate |
Comprueba que tres números enteros que representan el día, el mes y el año correspondan a una fecha válida. |
date |
Convierte en cadena una fecha determinada en forma de un timestamp Unix. |
strftime |
Convierte en cadena una fecha determinada en forma de un timestamp Unix, usando las características locales. |
datefmt_create |
Define un formato que puede utilizarse para convertir una fecha en una cadena utilizando la función datefmt_format. |
datefmt_format |
Formatea una fecha/hora como cadena utilizando un formato creado previamente con la función datefmt_create. |
getdate |
Almacena en una matriz los diferentes componentes de una fecha determinada en forma de un timestamp Unix. |
date_parse_from_format |
Almacena en una matriz los diferentes componentes de una fecha determinada en forma de una cadena de caracteres. |
time |
Proporciona el timestamp Unix actual. |
mktime |
Crea un timestamp Unix a partir de los distintos componentes de una fecha. |
microtime |
Proporciona el timestamp Unix actual acompañado del número de microsegundos transcurridos desde el último segundo. |
hrtime |
Devuelve un tiempo transcurrido a partir de un instante arbitrario con una gran precisión. |
idate |
Proporciona los componentes de una fecha dada en forma de un timestamp 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 el valor de esta directiva es Europe/Paris.
checkdate
La función checkdate comprueba que los tres números enteros que representan el día, el mes y el año correspondan a una fecha válida.
Sintaxis
booleano checkdate(entero mes, entero...
Generar un identificador único
En algunas situaciones, puede ser necesario generar identificadores únicos.
PHP ofrece la función uniqid para generar estos identificadores únicos.
Sintaxis
cadena uniqid()([cadena prefijo [, booleano más_único]])
prefijo |
Prefijo que se va a añadir al identificador. Añada una cadena vacía o nada si no desea ningún prefijo. |
más_único |
Si este parámetro se coloca en TRUE, se añaden datos adicionales 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 es TRUE (sin contar el prefijo), calculado a partir de la hora actual en milisegundos.
Ejemplo
<?php
echo uniqid(),'<br />';
echo uniqid (),'<br />';
echo uniqid('abc'),'<br />';
echo uniqid('',TRUE) ,'<br />';
?>
Resultado
603e17c1be84f
603e17c1be861
abc603e17c1be862
603e17c1be8635.27083137
Este ejemplo muestra que el identificador generado es único, incluso si la diferencia entre dos llamadas sucesivas es baja. De pronto, el identificador generado puede considerarse insuficientemente aleatorio y un poco demasiado determinista.
Una técnica...
Manipular los archivos en el servidor
1. Funciones útiles
PHP ofrece un gran número de funciones que permiten manipular los archivos en el servidor.
Las funciones utilizadas con mayor frecuencia son las siguientes:
Nombre |
Función |
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 matriz) |
readfile |
Leer el contenido de un archivo y enviarlo directamente a la salida |
fwrite |
Escribir en un archivo |
file_get_contents |
Abrir, leer y cerrar un archivo |
file_put_contents |
Abrir, escribir y cerrar en un archivo |
copy |
Copiar un archivo |
unlink |
Eliminar un archivo |
rename |
Cambiar el nombre de un archivo |
file_exists |
Probar la existencia de un archivo |
filesize |
Obtener el tamaño de un archivo |
chdir |
Cambiar el directorio actual |
opendir |
Abrir un directorio |
closedir |
Cerrar un directorio |
readdir |
Leer el contenido de un directorio |
scandir |
Listar el contenido de un directorio (en una matriz) |
Algunas de estas funciones tomarán como parámetro un nombre de archivo o de directorio. En una plataforma de 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 usar una notación tipo «Unix», con barras (/). Por ejemplo, la ruta c:\temp\info.txt se puede escribir «c:\\temp\\info.txt» o «c:/temp/info.txt». Si no se ha especificado ninguna ruta, se utiliza el directorio actual. Se pueden especificar nombres relativos 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 separador 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.
Además, varias funciones tienen 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ía 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 sentido, las funciones aceptan un argumento adicional...
Manipular los encabezados HTTP
La función header permite enviar encabezados HTTP con la página HTML.
Sintaxis simplificada
header(cadena encabezado[, booleano reemplazar[, entero código_respuesta]])
encabezado |
Cadena que se va a enviar como encabezado HTTP con la página HTML. |
reemplazar |
Indica si la función debe reemplazar un encabezado previamente emitido (por defecto, el valor TRUE) o bien añadir un nuevo encabezado (valor FALSE). |
código_respuesta |
Código de respuesta HTTP. |
Los diferentes encabezados HTTP se describen en RFC 2616.
Por ejemplo, la función header puede utilizarse para enviar un encabezado que prohíba el almacenamiento en caché de la página por parte del cliente o por un proxy. Esta necesidad es bastante común en los scripts 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 este libro, vamos a tener la oportunidad de utilizar la función header en varias situaciones:
-
redirección HTTP (véase el capítulo Gestionar formularios y enlaces);
-
identificación HTTP (véase el capítulo Gestionar sesiones, sección Autenticar);
-
descarga (download) de un documento (véase el capítulo Gestionar formularios y enlaces, apartado...
Ejercicios
1. Ejercicio 3: manipular los datos
Ahora que hemos estudiado un gran número de funciones PHP, podemos simplificar el código que habíamos escrito en el ejercicio 2, ver la información adicional y modificar la presentación de algunos datos.
Paso 1
Para empezar, vamos a mostrar un nuevo mensaje que da la fecha del día, simplifica el código que cuenta el número de letras del nombre y determina si el nombre empieza por una vocal.
Indicaciones:
-
En un nuevo directorio, copie los scripts inicio.php y commun.inc.php desarrollados en el ejercicio 2.
-
En el script inicio.php, después del mensaje de bienvenida, muestre un nuevo mensaje con la fecha del día con la forma «Hoy es ....». La fecha tendrá el formato DD/MM/AAAA.
-
Simplifique el código que cuenta el número de caracteres del nombre, utilizando una función PHP en lugar del bucle while.
-
Simplifique el código que determina si el nombre empieza por una vocal o una consonante, utilizando funciones PHP en lugar de la estructura de control if o switch. Por ejemplo, puede definir una tabla (o una cadena), que contenga la lista de vocales y probar si la primera letra del nombre está en ella (o en esta cadena). De esta manera, se gestiona el caso en que el nombre no empiece por una letra mayúscula como se supone inicialmente.
Resultado esperado (sin visualización del tabla de autores)
Hola Olivier.
Bienvenido a miSitio.com.
Hoy es jueves 08 de febrero de 2024.
Su nombre tiene 7 letras.
Su nombre empieza por una vocal.
Solución (código PHP modificado)
<?php
// Ver los mensajes
echo "Hola $nombre.<br />";
echo 'Bienvenido a ',MI_SITIO,'.<br />';
// Ver la fecha
echo 'Hoy es ',date('d/m/Y'),'.<br />';
// Contar el número de letras del nombre.
echo 'Su nombre tiene ',strlen($nombre),' letras.<br />';
// Determinar si el nombre empieza por una vocal o consonante.
$vocales = ['A','E','I','O','U'];
if (in_array(strtoupper($nombre[0]),$vocales)) {
echo 'Su nombre empieza por una vocal.<br />'; ...