Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PHP
HP, "hijo" del Código Abierto (Open Características del lenguaje
Source), es en la actualidad uno de
los lenguajes de programación que Como todo lenguaje, PHP dispone de sus
cuenta con más adeptos en la Red, propias especificaciones, sintaxis, variables,
que crecen cada día por su sencillez a la hora uso de éstas dentro y fuera de funciones,
de ser programado, su solidez y su constante funciones predefinidas, etc. En este apartado
innovación.
estudiaremos las de mayor relevancia, inten-
tando darle un enfoque práctico a la explica-
ción, por lo que antes de comenzar cree en la
¿Qué es PHP? raíz de su servidor una nueva carpeta con el
nombre phpBasicos. En esta carpeta (que será
PHP son las siglas de PHP Hypertext wwwroot de AppServ o htdocs de Apache, depen-
Preprocessor (Preprocesador de Hipertexto), un diendo de su instalación) alojaremos los
lenguaje interpretado de alto nivel que se distintos documentos .php que iremos crean-
inserta en documentos .html y que se ejecuta do a medida que avanzamos en los conteni-
en el lado del servidor, a diferencia de otros dos de este capítulo.
lenguajes como JavaScript que son interpreta-
dos en el lado del cliente (el navegador del
usuario) Cuando el código de las páginas se Nota: Si en un determinado mo-
interpreta en el servidor el usuario recibe en mento sus documentos PHP no
su navegador el producto de esos procesos sin funcionan o no lo hacen como
poder determinar qué código lo ha producido. debieran puede encontrar los archi-
vos correspondientes a este capítulo
PHP se inserta en los documentos mediante el
del libro en la carpeta material/cap3/
uso de etiquetas especiales, como "<7php", o php/ del CD. Además, tras cada
simplemente "<7"y "7>"para indicar el co- apartado de esta sección que tenga
mienzo y final del código PHP, respectivamen- disponible un archivo de práctica
te. Por ejemplo: encontrará referenciado el nombre
<?php con el que puede encontrarlo en
echo "hola desde PHP"; dicha carpeta.
?>
o bien:
PHP 109
hola mundo
Esta expresión es incorrecta y generará un
error. En cambio, la expresión:
tal y como puede ver en la figura 3.1. Puede
$miVariable ~ 5; encontrar el documento holaMundo.php en la
I I
carpeta material! capitul03 php del CD.
sí es correcta. A medida que escriba sus
scripts de PHP puede que desee añadir co-
mentarios para una mejor comprensión del
código. Esto puede realizarlo anteponiendo la
cadena de texto "11" al comentario si esté es hola mundo
Utilización de variables
Impresión de datos en PHP
Por "impresión de datos" hacemos referencia a
los datos que, mediante PHP, mostramos por Para crear variables en PHP anteponga el
pantalla, y no a un resultado impreso utili- carácter "$" al nombre de la variable que usted
zando un dispositivo externo. En PHP existen haya elegido:
varias formas de impresión de datos, siendo la $miVariable
más utilizada aquella en la que se utiliza la $GET['miVariable']
función echo, cuya sintaxis es la siguiente:
PHP es un lenguaje case-sensítive, esto es,
<?
echo Hhola mundo 11 ;
sensible a la diferencia entre mayúsculas y
?> minúsculas, por lo que habrá de prestar aten-
ción, puesto que, por ejemplo, $miVariabley
Este código nos mostrará la frase "hola mun- $mívariable son dos variables distintas.
do" en la pantalla. Escriba el código utilizan-
do el editor de texto que desee y guárdelo con
el nombre holaMundo.php. Posteriormente Variables predefinidas
ábralo en su navegador tecleando la dirección
PHP proporciona una enorme cantidad de
http://localhost/flashphp Iphp Basicosl
variables predefinidas que están disponibles
holaMundo.php para comprobar que el texto
para cualquier script de código que se ejecute.
que se muestra en su navegador es:
Muchas de estas variables dependen de la
110 Capítulo 3
function sumar ($n,$m)(
configuración del servidor, pudiendo encon- $resultado = $n + $m;
trar las que vamos a utilizar dentro de matri- return $resultado;
ces y variables almacenadas en cookies y
echo sumar(5,6);
sesiones o enviadas vía POST o GET. La sin-
taxis para acceder a estas variables que se En este ejemplo la variable $resultado es local
encuentran dentro de las matrices es la si-
para la función sumar.
guiente:
Si desea utilizar variables externas a la fun-
$ GET['miVariable'];
ción ha de hacerlas globales previamente,
Donde miVariable es una variable pasada a un para informar a la función de que va a necesi-
script en forma GET. tar valores que están alojados fuera de ella:
$_POST['miVariable'] ; $n = 5;
function sumar ($m){
global $n;
Donde miVariable es una variable pasada a un $resultado = $n + $m;
script en forma POST. return $resultado;
echo sumar(6);
$_COOKIE['miVariable'] ;
Donde miVariable es una variable almacenada En este otro ejemplo, la función sumar toma el
en una cookie. valor de una variable externa ($n) para reali-
zar las operaciones correspondientes.
$ SESSION['miVariable'];
Las variables autoglobales o superglobales
Donde mi Variable es una variable almacenada
son aquellas para las que no es necesario
en una sesión de usuario.
hacer referencia alguna en el interior de la
$_GLOBALS['miVariable'] ;
función puesto que dicho proceso se ha reali-
zado ya de una forma podríamos denominar
Donde miVariable es una variable almacenada "automática". Estas variables son $_GET,
por nosotros en la matriz de variables S_POST, $_COOKIE, $_SESSION Y
globales. $ GLOBALS.
$_GLOBALS['n'] = 5;
function sumar ($m){
Variables locales, globales $resultado = $n + $m;
y superglobales return $resultado;
PHP 111
Concatenación de cadenas concatenacionCadenas.php en la carpeta mate-
de texto rial/capítul03/php/ del eD.
ya que además de los contenidos de las dos por lo que finalmente el contenido de la varia-
variables el script contiene el texto "<br>", que ble $variablel es "esto es algo de texto ahora
es un tag HTML utilizado para generar un variablel también tiene este texto", lo que
salto de línea. Puede encontrar el documento puede comprobar copiando el código en su
112 Capítulo3
editor de texto, guardarlo con el nombre que Para añadir más elementos al final del array
desee y añadirlo a la carpeta phpBasicos de su utilice la función array-push siguiendo la
servidor para poder posteriormente abrirlo en sintaxis:
su navegador y ver el resultado.
array_push(nombre_del_array,
nuevo_valorl, .oo, nuevo_valorN);
Utilización y manipulación
Por ejemplo, para añadir dos nuevos elemen-
de arrays tos al final del array $miArray utilizaríamos:
Al igual que vimos en el capítulo dedicado a array_push($miArray, 7, 8) ;
Flash las variables tienen el inconveniente de
que sólo pueden almacenar un valor en un Recorriendo los elementos
momento determinado, por lo que PHP tam- de un array
bién dispone de arrays como estructura para
Utilizaremos bucles para recorrer un array,
almacenar datos. Para crear un nuevo array
extrayendo los valores que tiene almacenados
en PHP usaremos la palabra reservada array mediante uno de los dos métodos a nuestra
siguiendo la sintaxis:
disposición. El primero de ellos consiste en
$miArray = array(elementol, utilizar como índice el valor de una variable
elemento2, .. , elementoN);
que se incrementa en cada iteración del bucle,
mientras que el segundo consiste en utilizar
Por ejemplo:
funciones predefinidas de PHP (each, next)
$miArray array(O,1,2,3,4,5,6) ; que extraen los valores mientras incrementan
el apuntador del array.
sirve para crear un array de siete elementos,
en el que el acceso a cada posición se realiza
utilizando un índice cuyo valor está entre O y Nota: Elapuntador de un array en
el número de elementos menos uno, es decir, PHP almacena la posición del
entre O y 6, por lo que registro siguiente al último del que
$miArray[6] almacena el valor 6.
se extrajeron datos.
donde los contenidos del array ("Juan" y El cómo recorrer un array utilizando un bucle
"Pérez") se referencian por $miArray["nom- for puede encontrarlo en el documento mate-
bre"] y $miArray["apellido"], respectivamente. rial/ capitul03 / php / recorrerArregloFor. php
delCO:
PHP 113
for ($n=O; $n <sizeOf($myArray); $n++) {
echo $n. ":" . $myArray [$n] . "<br>";
?>
114 Capítulo 3
<7
$myArray = array(1,2,3,4,5,6,7);
while($temp = each($myArray)) (
echo $temp['key'J. ":".$temp['value'] ."<br>";
7 >
<7
$myArray = array(1,2,3,4,5,6,7);
while($temp = each($myArray)) (
echo $temp['key']. ":".$temp['value'] ."<br>";
reset ($myArray) ;
while($temp = each($myArray)) {
echo $temp['key']. ":".$temp['value'] ."<br>";
7 >
PHP 115
segunda vez con each
~dit yjew !io !lookmarks 100Is t!e1p Ó
..$ - & lO 8':l ~LJ http:/"'ocalhost/php8asicosfrecorrerArregjoEach,~p El @ Go
0:1
0:1
1:2
1:2 2:3
2:3 3:4
3:4
4:5
4:5
5:6
5:6
6:7 6:7
o: 1
Figura 3.5. 1:2
2.3
Extrayendo datos de un arreglo usando each y 3 -4
4 5
reiniciando el apuntador. 5:6
6: 7
0:1
1:2
2:3
Figura 3.6.
3:4
4:5 Extrayendo datos de un arreglo usando each
5:6
6:7
y list.
116 Capítulo 3
0:1
Este código divide la cadena de texto contenida
1:2
2:3 en la variable $fecha por el carácter especificado
3:4 como separador ("-"),con lo que se obtienen tres
4:S
S:6 elementos ("2003","05 Y"25") que se almacenan
6:7 en el array $arrayFecha. Posteriormente se
muestra por pantalla el contenido de la posi-
Transformaciones de cadenas ción 1 del array, en la que se ha almacenado el
de texto en arrays y viceversa texto correspondiente al mes, por lo que si crea
un documento PHP de nombre explode.php con
En numerosas ocasiones habrá de extraer
este código; para abrirlo posteriormente en su
fragmentos de cadenas de texto para conver- navegador debe obtener el mensaje:
tirlas en números y viceversa, como puede
el mes es OS
ocurrirle cada vez que haya de utilizar fechas
habiendo extraído la información de una base
Puede encontrar el documento explode.php en
de datos. En estos casos el formato de los
la carpeta material!capitul03/php/ del CD.
datos puede ser aaaa-mm-dd (por ejemplo,
"2003-07-25") y tal vez usted desee trabajar La sintaxis para usar la función implode es la
con el mes. También puede ocurrir que dis- siguiente:
ponga de un array y quiera convertirlo en una
$cadena;implode(separador,
cadena, uniendo los elementos contenidos con &nombre array);
algún carácter que usted determine.
Por ejemplo:
Las funciones que vamos a utilizar para realizar
<?php
las conversiones serán explode (para convertir $arrayFecha ; array
un array en una cadena de texto) e implode (para (1I200311[110511{ 112511) i
$fecha ; implode("-",$arrayFecha);
convertir una cadena de texto en un array) echo "esta es la fecha" $fecha;
Veamos un ejemplo de uso de cada una de ellas. ?>
La sintaxis para usar la función explode es la El código, que puede encontrar en el documen-
siguiente: to material! capitul03 /php / implode.php del
CD, realiza el proceso inverso al del ejemplo de
$nombre array;explode(separador,
cadena texto); uso de explode. Disponemos de un array con
tres posiciones cuyos contenidos vamos a
Puede encontrar un ejemplo en el documento concatenar mediante el carácter especificado en
material!capitul03/php/explode.php del el separador, por lo que generaremos una
CD, en el que encontrará el siguiente código: nueva cadena de texto almacenada en la varia-
PHP
Función para manejar fechas (date) Copie este código en un nuevo archivo y
guárdelo con el nombre jechaSimple.php. Cuan-
La función date retorna una cadena de texto
do lo abra en su navegador verá en su panta-
con un formato que se asigna según los lla la fecha en el formato aaaa-mm-dd
parámetros que se especifiquen y que pueden hh:mm:ss am/pm. Puede encontrar el docu-
ser los mostrados en la tabla 3.1. Por ejemplo: mento jechaSimple.php en la carpeta material!
<?php capitul03/php/ del CD.
echo date("Y-m-d h:m:s a");
?>
Tabla 3.1.
Parámetros para formatear las cadenas de texto generadas con la función date
Parámetro Descripción
a "amI! o "pm"
A "AM" o "PM"
d Día del mes, usando dos dígitos con un cero a la izquierda, desde "01" a "31"
D Día de la semana, usando un texto de tres letras, por ejemplo "Fri" para indicar
Viernes
F Mes del año, usando un texto, por ejemplo "January" para indicar Enero
h Hora, usando dos dígitos con un cero a la izquierda, desde "01" a "12"
H Hora, usando dos dígitos con un cero a la izquierda, desde "00" a "23"
Número de minutos, usando dos dígitos con un cero a la izquierda, desde "00" a
"59"
Día de la semana, usando un texto, por ejemplo "Friday" para indicar Viernes
118 Capítulo 3
Parámetro Descripción
m Mes del año, usando dos dígitos con un cero a la izquierda, desde "01" a "12"
M Mes del año, usando un texto de tres letras, por ejemplo "Jan" para indicar Enero
s Número de segundos, usando dos dígitos con un cero a la izquierda, desde "00"
a "59"
s Sufijo ordinal en inglés, usando un texto de dos caracteres, por ejemplo "th" o "nd"
Número de días del mes especificado, usando dos dígitos, desde "28" a "31"
u Número de segundos desde el valor de la fecha Epoch (las 00:00:00 horas del día
01-01-1970)
PHP 119
Convertir los nombres de meses siendo éste día el que tenga asociado el núme-
y días a castellano ro de índice O:
<?php
$meses = array(O, IIEnero11, llFehreroll, "Marzo", "Abril!',
IIMayolt 1 flJunioll, llJulioll I IIAgostoll , "Septiembre" f llOctubrell¡
IINoviembre II f IlDiciembre n) ;
120 Capítulo 3
Copie el código en un nuevo documento de su Por ejemplo, vamos a hacer uso de mktime
editor de texto, guárdelo con el nombre para obtener el día siguiente (mañana):
fechaEsp.php y ábralo en su navegador teclean-
<?php
do http://localhostlflashphp/php Basicos/ $manana = mktime(O,O,O,date("m")
fechaEsp.php. El resultado debe ser similar al ,date ("d") +1, date ("y") ) ;
echo date ("Y-m-d", $manana) ;
que se muestra en la figura 3.7. ?>
PHP 121
Esta función retorna un valor booleano false si "C:\\carpeta\\archivos\\fichero.txt"¡
Tabla 3.2.
Parámetro Descripción
"r"
Abre el fichero únicamente para su lectura situando su apuntador al comienzo
del mismo
"r+" Abre el fichero para lectura y escritura situando su apuntador al comienzo del
mismo
"w"
Abre el fichero únicamente para su escritura situando su apuntador al comien-
zo del mismo y elimina los contenidos que el fichero tuviera almacenados. Si
el fichero no existe, trata de crearlo
"w+" Abre el fichero para lectura y escritura situando su apuntador al comienzo del
mismo y elimina los contenidos que el fichero tuviera almacenados. Si el
fichero no existe, trata de crearlo
"a" Abre el fichero sólo para añadir contenido situando su apuntador al final del
mismo. Si el fichero no existe, trata de crearlo
"a+"
Abre el fichero para lectura y escritura (añadiendo contenido) situando su
apuntador al final del mismo. Si el fichero no existe, trata de crearlo
122 Capítulo 3
Lectura de un fichero La diferencia de este modo de acceder a la
información con respecto a la anterior radica
Una vez que hemos abierto el fichero podemos en que file retorna el contenido del fichero
leer sus contenidos usando la función fread, como un array, en el que cada uno de los
cuya sintaxis es: elementos se corresponde con cada una de las
fread (referencia, largo); líneas del fichero.
PHP 123
~ ------- -------.----------
124 Capítulo 3
mail("pepe@pepe.net", "Sobre este tema", "Linea l\nLinea 2\n",
"From: webmaster@$SERVER NAME\nReply-To: webmaster@$SERVER NAME\nX-Mailer: PHP/"
phpversion()) ;
PHP 125
como la constante T_COMMENT. Sin constantes predefinidas mágicamente
embargo, los comentarios estilo PHPDoc / _CLASS_, _METHOD _, Y
** */, que son interpretados a partir de _FUNCTION_. Los valores son devuel-
PHP 5, se reconocen como tos exactamente igual que como son decla-
T_DOC_COMMENT. rados (sensibles a mayúsculas y minúscu-
las).
7. $_SERVER debe poblarse con argc y argv
si variables_order incluye "S". Si ha confi- 10. ip21ongO ahora devuelve FALSE cuando
gurado su sistema específicamente para una dirección IP inválida es pasada como
no crear $_SERVER, entonces dé por argumento a la función, y no -1.
seguro que no aparecerá. El cambio fue
hecho para lograr que argc y argv siempre 11. Si hay funciones definidas en el archivo
estuvieran disponibles en la versión CLI incluido, éstas pueden ser usadas en el
independientemente del parámetro archivo principal, sin importar que estén
variables_order. Es decir, ahora la versión antes de una sentencia returnO o después.
Si el archivo es incluido dos veces PHP 5
CLI define siempre las variables globales
$argc y $argv. produce un error fatal, ya que las funcio-
nes ya han sido declaradas, mientras que
8. Un objeto sin propiedades ya no es consi- PHP 4 no se queja al respecto. Se recomien-
derado "vacío". da usar include_onceO en lugar de revisar
si el archivo ya había sido incluido y
9. En algunos casos, las clases deben ser retornar condicionalmente al interior del
declaradas antes de ser utilizadas. Esto archivo incluido.
sólo ocurre si algunas de las nuevas ca-
racterísticas de PHP 5 son usadas. De otro 12. include_onceO y require_onceO normali-
modo el comportamiento antiguo se con- zan primero la ruta del archivo incluido
serva. en Windows de modo que incluir A.php y
a.php incluyen el archivo solo una vez.
geCclassO, getj)arenCclassO y get_
c1ass_methodsO devuelven ahora el nom- Migración de Archivos
bre de las clases / métodos como ellos
de Configuración
fueron declarados (siguiendo las mayús-
culas y minúsculas) lo cual puede llevar a Dado que los módulos ISAPI cambiaron sus
problemas en scripts viejos que dependían nombres, de php4xxx a php5xxx, es necesario
del comportamiento anterior (el nombre de hacer algunos cambios en los archivos de
la clase/método era devuelto en minúscu- configuración. También ocurrieron cambios
las siempre). Una posible solución es en los nombres de archivos CLI y CGI. Por
buscar las funciones mencionadas en favor refiérase a la sección correspondiente
todos sus scripts y usar strtolowerO. para más información.
126 Capítulo 3
nuación para verificar el cambio que necesita • array_diff-uassocO - Computa la diferencia
realizar: de matrices con un chequeo adicional de
índices, el cual es realizado con una lla-
Migración de archivos de configuración de mada de retorno entregada por el usuario.
Apache para PHP 5
• array_udiffO - Computa la diferencia de
# cambie esta linea: ma trices usando una llamada de retorno
LoadModule php4 module /php/sapi/
php4apache2.dll para la comparación de datos.
PHP 127
• ibase_backupO - Inicia una labor de respal- • ibase_server _infoO - Solicita estadísticas
do en el administrador de servicios y sobre una base de datos.
retorna inmediatamente.
• ibase_service_attachO - Conectarse al admi-
• ibaseJommitJet() - Aplica una transac- nistrador de servicios.
ción sin cerrada.
• ibase service_detachO - Desconectarse del
• ibase_db _infoO - Solicita estadísticas sobre administrador de servicios.
una base de datos.
• ibase_set_event_handlerO - Registrar una
• ibase_drop_dbO - Elimina una base de llamada de retorno a ser usada cuando se
datos.
publican eventos.
• ibaseJree_event_handlerO - Cancela un
iconv:
gestor de eventos registrado.
• lconv_mime_decodeO - Decodifica un cam-
• ibase--$en_idO - Incrementa el generador
po de cabecera MIME.
nombrado y devuelve su nuevo valor.
• iconv_mime_decode_headersO - Decodifica
• ibase_maintain_dbO - Ejecuta un comando
múltiples campos de cabecera MIME de
de mantenimiento en el servidor de bases
una vez.
de datos.
• iconv_mime_encodeO - Compone un campo
• ibase_nameJesult() - Asigna un nombre a de cabecera MIME.
un conjunto de resultados.
• iconv _strlenO - Devuelve el conteo de ca-
• ibase_num-paramsO - Devuelve el número racteres de la cadena.
de parámetros en una consulta preparada .
• iconv _strposO - Encuentra la posición de la
• ibase-param_infoO - Devuelve información
primera ocurrencia de una aguja al inte-
sobre un parámetro en una consulta pre- rior de un pajar.
parada .
• iconv_strrposO - Encuentra la última ocu-
• ibaseJestoreO - Inicia una labor de rescate rrencia de una aguja al interior del rango
en el administrador de servicios y retorna especificado del pajar.
inmediatamente .
• iconv _substrO - Recorta parte de una cade-
• ibase_rollback_retO - Revierte una transac- na.
ción y conserva su contexto.
128 Capítulo 3
Secuencias: Cadenas:
• stream~et_IineO - Obtiene una línea de un • strpbrkO - Busca una cadena por un con-
recurso tipo secuencia hasta cierto límite junto cualquiera de caracteres.
indicado.
• substr _compareO - Comparación segura con
• stream_socket_acceptO - Acepta una co- material binario, opcionalmente
nexión sobre un socket creado por insensitiva a mayúsculas y minúsculas,
stream _sockeCserverO. de dos cadenas a partir de un desplaza-
miento, y hasta un límite da caracteres.
• stream_socketJlientO - Abre una conexión
de socket de Internet Abierto o Dominio Otros:
Unix.
• convert_uudecodeO - decodificar una cade-
• stream_socket~et_nameO - Recupera el na con el algoritmo uuencode.
nombre de sockets locales o remotos.
• convert _uuencodeO - Codificar una cadena
• stream_socketJecvfromO - Recibe datos de con el algoritmo uuencode.
un socket, conectado o no.
• curCcopy_handleO - Copiar un gestor cURL
• stream_socket_sendtoO - Envia un mensaje a junto con todas sus preferencias.
un socket, esté conectado o no.
• dba_key_splitO - Separa una llave repre-
• stream_socket_serverO - Crea un socket de sentada como cadena a una representa-
servidor de Internet o de dominio Unix. ción de matriz.
PHP 129
• ftp_allocO - Reserva espacio para que el • php_check_syntaxO - Verifica la sintaxis del
archivo sea cargado. archivo especificado.
130 Capítulo 3
• session.hashJunction - selecciona rma En versiones previas de PHP, los objetos eran
frmción de resumen cripta gráfico (MD5 o manejados como tipos primitivos (por ejemplo,
SHA-l). enteros y cadenas). La desventaja de este méto-
do era que, semánticamente, el objeto completo
• session.hash_bits-per _character - define cuán- era copiado cuando rma variable era asignada,
tos bits deben almacenarse en cada carácter
o pasada como parámetro a rm método. En el
cuando se convierten datos binarios de hash
nuevo enfoque, los objetos son referencia dos
a otro más legible (de 4 a 6). por gestor, y no por valor (puede pensarse en el
gestor como rm identificador de objeto).
• zend.ze1_compatibility_mode - Habilita el
modo de compatibilidad con el Motor Zend Muchos programadores de PHP no son cons-
1 (PHP4). cientes siquiera de los detalles que implican
las copias en el modelo antiguo de objetos y,
Bases de Datos por lo tanto, la mayoría de aplicaciones de
PHP frmcionarán sin problemas, o con muy
Hubo algrmos cambios en PHP 5 relacionados
pocas modificaciones.
con las bases de datos (MySQL y SQLite).
El nuevo Modelo de Objetos es documentado
En PHP 5 las bibliotecas de cliente MySQL no
en la Referencia del Lenguaje.
se incluyen, debido a problemas de licencia,
entre otros. Para más información, lea la
Vea también la directiva zend.ze1_compatibility
entrada del FAQ.
_mode para compatibilidad con PHP 4.
PHP 131