PHP5 Basico
PHP5 Basico
PHP5 Basico
EN PHP5
NIVEL BÁSIC
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
SL-INSTITUTE
3
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
INDICE
1. Introducción a PHP.............................................................................................................................. 9
6
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
10.1. Introducción ................................................................................................................ .......... 141
7
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
1. Introducción a PHP
Funcionamiento de un Servidor Web
Historia de PHP
PHP frente a otros lenguajes
Instalación de Apache
Instalación de PHP
Para resolver dicha petición, el navegador del usuario debe establecer una
conexión HTTP distinta para cada elemento que se desea solicitar al servidor web, es
decir, una conexión HTTP para la página HTML y 5 conexiones HTTP adicionales para
las imágenes (una por imagen).
Petición HTTP
Petición HTTP 1 imagen
5
5
CLIENTE SERVIDOR
CLIENTE SERVIDOR
9
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
máquina del cliente, con las consiguientes desventajas de acceso a recursos ubicados en
el servidor, y con la desventaja de que se tiene que ejecutar en una JVM (Java Virtual
Machine) que hay que tener instalada en la máquina en la que se sitúa el cliente.
CLIENTE SERVIDOR
Archivo HTML
Pero desde el punto de vista del servidor la cosa es un poco más compleja.
Cuando se solicita una pagina web que contiene código denominado script, es decir,
incluido dentro de la página HTML, escrito en PHP, ASP, JSP o cualquier otro lenguaje
similar, el servidor web antes de devolver dicha página HTML, solicita al interprete de
scripts que ejecute ese código como si de un programa se tratase y le devuelva un
resultado. Ese resultado incrustado en el documento HTML original constituye el
documento HTML devuelto al usuario. El interprete de scripts para ejecutar dicho
código script y devolver un resultado puede acceder a multitud de recursos del servidor
(bases de datos, ficheros, servicios de correo, ftp, news, ....) u de otros servidores. De
esta forma el esquema anterior se complica para quedar de la siguiente forma:
Petición HTTP Ejecutar Script Obtener recurso
10
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
permitía a los usuarios desarrollar sencillas aplicaciones Web dinámicas. Rasmus eligió
liberar el código fuente de PHP/FI para que cualquiera pudiese utilizarlo, así como
arreglar errores y mejorar el código.
PHP 3
PHP 3.0 era la primera versión que se parecía fielmente al PHP tal y como lo
conocemos hoy en día. Fue creado por Andi Gutmans y Zeev Zuraski en 1997
rescribiéndolo completamente, después de que encontraran que PHP/FI 2.0 tenía pocas
posibilidades para desarrollar una aplicación comercial que estaban desarrollando para
un proyecto universitario. En un esfuerzo para cooperar y empezar a construir sobre la
base de usuarios de PHP/FI existente, Andi, Rasmus y Zeev decidieron cooperar y
anunciar PHP 3.0 como el sucesor oficial de PHP/FI 2.0, interrumpiéndose en su mayor
parte el desarrollo de PHP/FI 2.0.
Todo el nuevo lenguaje fue liberado bajo un nuevo nombre, que borraba la
implicación de uso personal limitado que tenía el nombre PHP/FI 2.0. Se llamó 'PHP' a
secas, con el significado de ser un acrónimo recursivo - PHP: Hypertext Preprocessor.
PHP 3.0 se liberó oficialmente en Junio de 1998, después de haber gastado unos
9 meses en pruebas públicas.
11
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
PHP 4
En el invierno de 1998, poco después del lanzamiento oficial de PHP 3.0, Andi
Gutmans y Zeev Suraski comenzaron a trabajar en la reescritura del núcleo de PHP. Los
objetivos de diseño fueron mejorar la ejecución de aplicaciones complejas, y mejorar la
modularidad del código base de PHP. Estas aplicaciones se hicieron posibles por las
nuevas características de PHP 3.0 y el apoyo de una gran variedad de bases de datos y
APIs de terceros, pero PHP 3.0 no fue diseñado para el mantenimiento tan complejo de
aplicaciones eficientemente.
PHP 5
El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine II (o
Zend Engine 2). La versión más reciente de PHP es la 5.2.6 (1 de Mayo de 2008), que
incluye todas las ventajas que provee el nuevo Zend Engine 2 como:
PHP 6
Está previsto el lanzamiento en breve de la rama 6 de PHP. Cuando se lance esta
nueva versión quedarán solo dos ramas activas en desarrollo (PHP 5 y 6), pues se
abandonó el desarrollo y soporte de PHP 4 el 13 de julio de 2007.
- Soportará Unicode.
- Limpieza de funcionalidades obsoletas como register_globals, safe_mode...
- PECL.
- Mejoras en orientación a objetos.
12
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
13
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
las que ya vienen implementadas permiten manejo de gráficos, archivos PDF, Flash,
Cybercash, calendarios, XML, IMAP, POP, etc.
• Rapidez. PHP generalmente es utilizado como modulo de Apache, lo que lo hace
extremadamente veloz. Esta completamente escrito en C, así que se ejecuta
rápidamente utilizando poca memoria.
• PHP es Open Source, lo cual significa que el usuario no depende de una compañía
específica para arreglar cosas que no funcionan, además no estás forzado a pagar
actualizaciones anuales para tener una versión que funcione.
Algunas desventajas
Obteniendo el software
Apache es un proyecto Open Source de la fundación apache.org. Puedes obtener
el programa en su sitio web, http://www.apache.org/.
14
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
específicos que se le exijan al servidor web, en nuestro caso podemos usar un servidor
de cualquiera de las dos líneas: Apache 2.0 o Apache 2.2.
Para otros sistemas operativos Windows, hay que bajarse previamente el MSI
INSTALLER. Por ejemplo, para Windows 95 o 98 se puede obtener (gratis) en esta
dirección:
http://download.microsoft.com/download/platformsdk/wininst/1.1/W9X/EN-US/InstMsi.exe
15
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
• ServerRoot es el directorio donde están los programas que ejecutan el servidor. Por
defecto se instala en C:\Archivos de programa\Apache Group\Apache, con sus
subdirectorios correspondientes. En nuestro curso C:\WAMP\Apache22
• DocumentRoot es el directorio donde se instalan los archivos que serán servidos a
los visitantes; las páginas web. Por defecto está en C:\Archivos de
programa\Apache Group\Apache\htdocs. En nuestro curso
C:\WAMP\Apache22\htdocs
• Source tree es el directorio donde está el código fuente del servidor, si lo hemos
instalado (en C:\Archivos de programa\Apache Group\Apache\src ). Nosotros no lo
hemos instalado.
Prueba de funcionamiento
Apache se instala por defecto como un servicio denominado Apache2.2 , de
modo que podemos comenzar a operar directamente con él, aunque luego veremos
alguna configuración básica.
Apache se ejecuta y controla en modo dos, por lo que abriremos una sesion
MSDOS y nos movemos al directorio de apache, y escribimos httpd -t:
C:\WAMP\Apache22\bin>httpd -t
Syntax OK
Bueno, y esto esta muy bien, pero no nos dice nada. Hagamos para asegurarnos
de que todo está bien, una prueba con el navegador: iniciamos el servidor. Hay distintas
formas de hacerlo, pero ya que estamos en una sesión DOS, escribimos
C:\Archivos de programa\Apache Group\Apache>apache –k start
y deberemos visualizar una página que nos informa que la instalación funciona
(mostrará el mensaje It Works!).
¿Que cual es esa dirección que hemos dado? es el nombre por defecto de nuestro
ordenador, lo que nos permite usar el servidor para testear páginas incluso
desconectados de internet.
Configurando el servidor
Apache crea al instalarse un directorio llamado conf (ruta completa C:\Archivos
de programa\Apache Group\Apache\conf en una instalación por defecto y
C:\WAMP\Apache22\conf en nuestro curso), dentro del cual están los archivos de
16
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
configuración del servidor, archivos que tendremos que modificar para adecuar a
nuestro sistema.
Se trata de un archivo de texto, que podemos manejar con cualquier editor capaz
de guardar texto sin formato (notepad, por ejemplo). Veremos un montón de lineas.
Todas las que empiezan por el carácter # son comentarios orientadores de las distintas
opciones, o incluso opciones deshabilitadas (se activan "descomentándolas"). Las
directivas más importantes son:
ServerAdmin [email protected]
#ServerName new.host.name
DocumentRoot “C:/WAMP/Apache22/htdocs”
La carpeta raíz de los archivos del sitio web. Esta carpeta es donde se deben
colocar las páginas y archivos que queremos que sirva nuestro servidor web.
Cambiamos la ubicación de dicha carpeta, por ejemplo:
DocumentRoot “C:/WAMP/www”
17
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Indexes
Si incluimos esta opción, todo aquel que teclee solo nuestro nombre de dominio
obtendrá un listado de los archivos disponibles, en lugar de la página principal.
Por defecto Apache establece la opcion Indexes para el directorio htdocs, que
como sabemos es el raiz de nuestro servidor:
Options indexes FollowSymLinks MultiViews
DirectoryIndex
Con esta opción evitamos ese error, indicando al servidor la página que ha de
servir si el usuario no escribe ninguna. Por defecto es la siguiente:
DirectoryIndex index.html
Manejando el servidor
Como hemos dicho, Apache se ejecuta en modo consola, por lo que hemos de
teclear las instrucciones siguientes para controlar su funcionamiento si no se ha
configurado como un servicio.
18
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
sesion de DOS nueva para reiniciar o cerrar el servidor. En un momento dado, es fácil
que la barra de tareas de tu pantalla quede llena de ventanas de aplicaciones.
Con esto ya hemos cubierto los pasos básicos y tenemos el servidor operativo.
No olvides cambiar la página de bienvenida de apache en C:\Archivos de
programa\Apache Group\Apache\htdocs (C:\WAMP\Apache22\htdocs en nuestro curso)
por tu propio contenido.
Instalando PHP
Con un programa descompresor, como winzip, ejecutamos el archivo obtenido,
descomprimiendo su contenido a un nuevo directorio que podemos llamar, por ejemplo,
C:\WAMP\PHP526.
19
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Dado que Apache debe poder acceder al directorio donde se haya instalado PHP,
debemos dotar, en el archivo de configuración de Apache, a dicho directorio de los
permisos pertinentes. Para ello:
<Directory "C:/WAMP/PHP526">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Probando la instalación
Abrimos nuestro editor de texto y escribimos:
20
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Y por último para que se carge el fichero de configuración de PHP, al final del
archivo httpd.conf ponemos su ruta:
PHPIniDir "C:/wamp/php526"
Para verificar que todo esta correcto, ejecutamos de nuevo nuestro archivo de prueba
(phpinfo) y veremos al comienzo el nuevo dato: Server API Apache 2.0 Handler
Vamos a poner como ejemplo la extensión gd, que no viene instalada por
defecto, y es necesaria para que php pueda generar gráficos "al vuelo":
21
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
para que sirve cada una de sus instrucciones y cual es la mejor forma de configurarlo.
La explicación sigue el mismo orden interior de php.ini, aunque puede que haya ligeras
diferencias con tu copia, debidas a pequeños cambios entre versiones. La configuración
aqui contemplada es la que corresponde a las versiones php 5.2.x.
Este archivo sirve para indicar una serie de valores que determinan el
comportamiento del intérprete PHP. Lo encontramos dentro de la distribución php en el
directorio raiz bajo el nombre php.ini-recommended o php.ini-dist. Se trata de un
archivo de texto, que podemos abrir con cualquier editor que trabaje con texto simple
(*.txt).
Lo primero que debemos hacer es en efecto editar una de las dos versiones
disponibles, configurarla de acuerdo a nuestras necesidades, y guardarla con el nombre
php.ini. ¿Cual escoger? las dos son el mismo archivo, con distintos valores por defecto.
Otro dato más a tener en cuenta. En windows las rutas o paths se escriben con la
barra invertida (c:\windows) mientras que unix utiliza la barra (/usr/local/bin/...). En
php.ini deberas indicar algunas rutas. Los formatos admisibles son:
• C:\directorio\directorio
• \directorio\directorio
• /directorio/directorio/
Si tenemos PHP como módulo del servidor, el archivo php.ini se lee cada vez
que se reinicia. Por lo tanto tienes que reiniciar para que actualice los cambios. Si PHP
está instalado como CGI se leerá el php.ini en cada llamada a PHP. En ambos casos, lo
primero a tener en cuenta será, pues, donde archivar php.ini. El servidor lo buscará
sucesivamente -y por este orden - en el propio directorio php (c:/wamp/php526 si usas
la instalacion por defecto). Si no lo encuentra alli lo buscará en la ruta definida como
variable de entorno y finalmente en el directorio de sistema (c:/windows)
22
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Los problemas mas comunes que encontrarás con PHP pasan casi siempre por
una incorrecta configuración de php.ini, y en muchos casos, por tener el archivo mal
ubicado o duplicado, leyendose un archivo distinto del que tu estas configurando. Si
haces un cambio en php.ini y este no se refleja en el funcionamiento de PHP,
comprueba la sintaxis que has usado; que has reiniciado el servidor correctamente y que
este lee el php.ini deseado. Controla siempre tus copias de php.ini
Guarda esta página como info.php o como se te ocurra, y tenla a mano para
comprobar la configuración en cuanto tengas tu php listo.
Las directivas
Veremos a continuación cada una de las directivas y su significado, siguiendo el
orden que podriamos ver en nuestro php.ini. Muchas directivas vienen con valores por
defecto, o sin valor determinado, o comentadas (inactivas). Una buena política es
dejarlas como estan, salvo que sepas exactamente que estas haciendo.
Los valores que indicamos en esta página son indicativos. Lo que pretendemos
es explicar el valor de cada directiva (al menos las que conocemos), no proponer un
php.ini modélico.
Opciones de lenguaje
En esta primera sección encontramos algunas instrucciones generales sobre el
funcionamiento de PHP:
• engine = On - activa la interpretación de scripts php (si php está cargado como
módulo de apache). Esta directiva, en unión de httpd.conf, permite habilitar o
deshabilitar php en directorios determinados.
23
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
• short_open_tag = Off - Permite usar en tus scripts etiquetas php abreviadas <? ...
?>, y el atajo para imprimir variables <%= $valor %>. Si el valor es off, deberas
usar la forma <?php ... ?> o <script>. Se recomienda ponerlo a off para mayor
portabilidad del código
• asp_tags = Off - Permite usar etiquetas estilo asp <% ... %>. Deshabilitado por
defecto
Puedes deshabilitar esta función con carácter general aqui, y habilitarla en partes
concretas de tus scripts utilizando las funciones de buffer correspondientes (por
ejemplo ob_start() ).
Cuando output buffering esta activado, PHP no lanza las cabeceras HTTP al inicio
de la ejecución del script, sino que las almacena temporalmente en un buffer de
memoria, lo que te permitirá modificar o añadir instrucciones HTTP durante la
ejecución del script, que se enviarán solo cuando este finalice.
• output_handler = - Con esta directiva puedes redirigir toda la salida de tus scripts a
una función PHP. Es preferible no habilitar esta opción y establecerla si es preciso
en cada uno de tus scripts.
24
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
• safe_mode_gid = Off - Por defecto, con safe_mode On PHP hace un chequeo UID
del fichero al abrirlo. Con esta directiva puedes especificar en su lugar un chequeo
GID
• open_basedir = - Limita los archivos que se pueden abrir por PHP al árbol de
directorios especificado.
Cuando un script intenta abrir un archivo con, por ejemplo, fopen(), se comprueba
su localización. Si el fichero está fuera del árbol de directorios especificado, PHP se
negará a abrirlo. Todos los enlaces simbólicos son resueltos, de modo que no es
posible evitar esta limitación usando uno de ellos.
El valor especial indica que el directorio base será aquel en el que reside el script.
25
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
26
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Como cada nivel de informe de error está representado por un número, puedes
designar el nivel deseado sumando valores:
1 errores normales
2 avisos normales
4 errores del parser (error de sintaxis)
8 avisos de estilo no críticos
El valor por defecto para esta directiva es 7 (se muestran los errores normales,
avisos normales y errores de parser).
27
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
• ;error_log = filename - Nombre del fichero para registrar los errores de un script. Si
se utiliza el valor especial syslog, los errores se envían al registro de errores del
sistema. Como verás, esta comentado (inhabilitado) por defecto.
Gestion de datos
• track_vars - Esta directiva crea arrays $HTTP_GET_VARS, $HTTP_POST_VARS
y $HTTP_COOKIE_VARS con los datos introducidos con los métodos GET, POST
y con cookies. Desde PHP 4.0.3 está siempre activada.
• ;arg_separator.output =
generadas por PHP para "&" - El carácter que se empleará en las urls separar
separador por defecto. argumentos (valores pasados via url). & es el
• ;arg_separator.input = ";&" - separadores que usará PHP cuando analice una url
suministrada para almacenarla en variables
28
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Magic quotes
• magic_quotes_gpc = Off - Fija el estado magic_quotes para operaciones GPC
(Get/Post/Cookie). Si magic_quotes vale on, todas las ' (comilla sencilla), " (comilla
doble), \ (barra invertida) y los NUL son automáticamente marcados con una barra
invertida. Si además magic_quotes_sybase vale on, la comilla sencilla es marcada
con otra comilla sencilla en lugar de la barra invertida.
29
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Rutas y directorios
• include_path = ".;c:\php\includes" - Permite especificar una lista de directorios en
los que las funciones require(), include() y fopen_with_path() buscaran los archivos
requeridos. El formato es similar a la variable de entorno de sistema PATH: una
lista de directorios separados por dos puntos en UNIX o por punto y coma en
Windows. Ejemplo unix seria include_path=.:/home/httpd/php-lib y en windows
include_path=".;c:\www\phplib".
• user_dir = - El directorio raiz para los archivos PHP bajo el directorio inicial de un
usuario (/~usuario). Normalmente se deja vacio
• enable_dl = On - Esta directiva sólo es útil en la versión del PHP como módulo del
Apache. Puede habilitar o deshabilitar para un servidor virtual o para un directorio la
carga dinámica de extensiones de PHP mediante dl().
El valor por defecto es permitir la carga dinámica, excepto cuando se usa safe
_mode. En modo seguro, es imposible usar dl().
Subir ficheros
30
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Extensiones dinamicas
• extension= - Qué extensiones dinámicas debe cargar el PHP cuando arranca. Debes
elegir el archivo que corresponde a tu sistema operativo: por ejemplo
extension=msql.dll para windows, extension=msql.so para linux.
Ojo, aqui solo indicamos la extension de los archivos, no su ubicación. Los archivos
DEBEN estar en el directorio especificado mas arriba con extension_dir.
31
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
32
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques
de código PHP. De estas cuatro, sólo 2 (<?php ... ?> y <script language="php"> ...
</script>) están siempre disponibles; el resto pueden ser configuradas en el fichero de
php.ini para ser o no aceptadas por el intérprete. Mientras que el formato corto de
etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no
son portables como la versión de formato largo de etiquetas. Además, si se pretende
embeber código PHP en XML o XHTML, será obligatorio el uso del formato <?php ...
?> para la compatibilidad con XML.
El método primero, <?php ... ?>, es el más conveniente, ya que permite el uso
de PHP en código XML como XHTML.
33
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
El método cuarto sólo está disponible si se han activado las etiquetas ASP en el
fichero de configuración: asp_tags.
Nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4.
Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen
aplicaciones o librerías con intención de redistribuirlas, o cuando se
desarrolle para servidores que no están bajo nuestro control, porque puede
ser que el formato corto de etiquetas no esté soportado en el servidor. Para
generar código portable y redistribuíble, asegúrate de no usar el formato
corto de etiquetas.
La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna
presente. Además, la etiqueta de fin de bloque lleva implícito el punto y coma; no
necesitas por lo tanto añadir el punto y coma final de la última línea del bloque PHP.
<?php
if ($expression) {
?>
<strong>This is true.</strong>
<?php
} else
{ ?>
<strong>This is false.</strong>
<?php
}
?>
Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?>
de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra
etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para
escribir bloques grandes de texto generamente es más eficiente separalos del código
PHP que enviar todo el texto mediante las funciones echo(), print() o similares.
2.2. Comentarios
Una vez visto como se introduce código PHP dentro del código HTML, lo
siguiente es ver como se puede comentar el código PHP. PHP soporta el estilo de
comentarios de 'C', 'C++' y de la interfaz de comandos de Unix. Por ejemplo:
<?php
echo "Esto es una prueba"; // Comentario estilo c++
/* Comentario multi-linea
con varias lineas de comentario */
echo "Otra prueba";
echo "Prueba final"; # Comentario estilo shell de Unix
?>
34
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Hay que tener cuidado con no anidar comentarios de estilo 'C', algo que puede
ocurrir al comentar bloques largos de código.
<?php
/*
echo "Esto es una prueba"; /* Este comentario causa problemas*/
*/
?>
Los estilos de comentarios de una linea actualmente sólo comentan hasta el final
de la linea o del bloque actual de código PHP, lo primero que ocurra. Esto implica que
el código HTML tras // ?> será impreso: ?> sale del modo PHP, retornando al modo
HTML, el comentario // no le influye.
2.3. Instrucciones
Un fragmento de código PHP va a estar compuesto por una o varias
instrucciones. En PHP la separación de instrucciones se hace de la misma manera que
en C o Perl - terminando cada instrucción con un punto y coma.
35
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
3. Variables y Constantes
Conceptos Básicos
Variables predefinidas
Ambito de las variables
Existencia y tipo de las variables
Variables variables
Variables externas a PHP
Constantes
Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP.
Un nombre de variable valido tiene que empezar con una letra o una raya (underscore),
seguido de cualquier número de letras, números y rayas. Como expresión regular se
podría expresar como: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Nota: En nuestro caso, una letra es a-z, A-Z, y los caracteres ASCII del 127
al 255 (0x7f-0xff).
<?php "Bob";
$var =
$Var = "Joe"; // imprime "Bob, Joe"
echo "$var, $Var";
$ 4site = 'not yet'; // inválido; comienza con un número
$_4site = 'not yet'; // valido; comienza con un subrayado
$täyte = 'mansikka'; // valido; 'ä' es ASCII 228 (Extendido)
?>
En PHP, las variables siempre se asignan por valor. Esto significa que cuando se
asigna una expresión a una variable, el valor íntegro de la expresión original se copia en
la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de
una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la
otra.
PHP ofrece otra forma de asignar valores a las variables: asignar por referencia.
Esto significa que la nueva variable simplemente referencia (en otras palabras, "se
convierte en un alias de" ó "apunta a") la variable original. Los cambios a la nueva
variable afectan a la original, y viceversa. Esto también significa que no se produce una
copia de valores; por tanto, la asignación ocurre más rápidamente. De cualquier forma,
cualquier incremento de velocidad se notará sólo en los bucles críticos cuando se
asignen grandes matrices u objetos.
37
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Algo importante a tener en cuenta es que sólo las variables con nombre pueden
ser asignadas por referencia.
<?php
$foo = 25; // Esta es una asignación válida.
$bar = &$foo;
$bar = &(24 * 7); // Inválida; referencia una expresión sin nombre.
function test() {
return 20;
}
$bar = &test();
?>
38
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
39
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
$a = 1;
include "b.inc";
?>
Aquí, la variable $a será visible dentro del script incluido b.inc. De todas
formas, dentro de las funciones definidas por el usuario aparece un ámbito local a la
función. Cualquier variable que se use dentro de una función está, por defecto, limitada
al ámbito local de la función. Por ejemplo:
<?php
$ a = 1; /* global scope */
function Test()
{
echo $a; /* referencia a una variable de ámbito local */
}
Test();
?>
Este script no producirá salida, ya que la orden echo utiliza una versión local de
la variable $a, a la que no se ha asignado ningún valor en su ámbito. Puede que se note
que hay una pequeña diferencia con el lenguaje C, en el que las variables globales están
disponibles automáticamente dentro de la función a menos que sean expresamente
sobreescritas por una definición local. Esto puede causar algunos problemas, ya que la
gente puede cambiar variables globales inadvertidamente. En PHP, las variables
globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro
de dicha función mediante el modificador global. Veamos un ejemplo:
<?php
$a = 1;
$ b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
40
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Sum();
echo $b;
?>
Esta función tiene poca utilidad ya que cada vez que es llamada asigna a $a el
valor 0 y representa un "0". La sentencia $a++, que incrementa la variable, no sirve
para nada, ya que en cuanto la función termina la variable $a desaparece. Para hacer una
función útil para contar, que no pierda la pista del valor actual del conteo, la variable $a
debe declararse como estática:
<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
?>
41
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
?>
Las variables estáticas pueden ser declaradas como se ha visto en los ejemplos
anteriores. Al tratar de asignar valores a estas variables que sean el resultado de
expresiones, causará un error de análisis sintáctico.
<?php
function foo(){ // correcto
static $int = 0; (ya que es una expresión)
static $int = 1+2; // incorrecto
static $int = sqrt(121); // incorrecto (es una expresión)
$int++;
echo $int;
}
?>
genera la página
42
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
genera
43
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
11. gettype(): Esta última función, más directa que las anteriores, devuelve directamente
el tipo de la variable que se le pasa como argumento. Los tipos posibles son integer,
double, string, array, object y unknown (desconocido).
Si sólo se necesita saber de qué tipo es una variable, esta última función es la
más directa y recomendable. En cambio, si se necesita que una variable sea de un
determinado tipo para operar con ella, es más directo y recomendable utilizar la
correspondiente anterior.
En este caso, podemos utilizar la función unset(), que elimina una variable
definida previamente. El nombre de la variable que debe eliminarse se pasa a la
función como parámetro. Por ejemplo, si queremos que $casa ya no esté definida,
podemos escribir unset($casa). Si la operación se ha llevado a cabo con éxito, la
función devuelve el valor verdadero; de lo contrario, devuelve falso.
<?php
destruir una variable
sencilla unset($foo);
destruir un elemento de una
matriz unset($bar['quux']);
destruir más de una variable
unset($foo1, $foo2, $foo3);
?>
Por ejemplo, si queremos que la variable $cosa sea de tipo cadena, debemos
escribir: settype($cosa, "string"); . Como puede observarse, el primer argumento
es el nombre de la variable y el segundo (entre comillas dobles) es el tipo de dato
que debe tener: boolean, integer, float, string, array, object, null.
<?php // string
$foo = "5bar";
$ bar = true; // boolean
settype($foo, "integer"); // $foo es ahora 5 (integer)
44
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Una variable variable toma el valor de una variable y lo trata como el nombre de
una variable. En el ejemplo anterior, hello, se puede usar como el nombre de una
variable utilizando dos signos de dólar. p.ej.
<?php
$$a = "world";
?>
45
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
echo "$a $hello";
?>
Para usar variables variables con matrices, hay que resolver un problema de
ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar
$a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1]
como índice de dicha variable. La sintaxis para resolver esta ambiguedad es: ${$a[1]}
para el primer caso y ${$a}[1] para el segundo.
Aviso
Hay que tener en cuenta que variables variables no pueden usarse con Matrices
superglobales. Esto significa que no se pueden hacer cosas como ${$_GET}.
3.6. Constantes
Una constante es un identificador para expresar un valor simple. Como el
nombre sugiere, este valor no puede variar durante la ejecución del script. (Las
constantes especiales __FILE__ y __LINE__ son una excepción a esto, ya que
actualmente no lo son). Una constante es sensible a mayúsculas por defecto. Por
convención, los identificadores de constantes suelen declararse en mayúsculas.
El nombre de una constante sigue las mismas reglas que cualquier etiqueta en
PHP. Un nombre de constante válido empieza con una letra o un caracter de subrayado,
seguido por cualquier número de letras, números, o subrayados. Se podrían expresar
mediante la siguiente expresión regular: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Se puede definir una constante usando la función define(). Una vez definida, no
puede ser modificada ni eliminada. La sintaxis de define() es la siguiente:
int define(string nombre, mixed valor [, int noMayusculas])
Solo se puede definir como constantes valores escalares (boolean, integer, float
y string ).
46
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si se usa una constante todavía no definida, PHP asume que se está refiriendo al
nombre de la constante en si. Se lanzará un aviso si esto sucede. Se debe usar la función
defined() para comprobar la existencia de dicha constante.
47
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
4. Tipos de Datos
Booleanos
Enteros
Números en punto flotante
Cadenas
Arrays
Objetos
Recursos
NULL
Forzado de tipos
• booleanos
• enteros
• números en punto flotante
• cadenas
• matrices
• objetos
• recursos (resource)
• NULL
49
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
4.1. Booleanos
Este es el tipo más simple. Un booleano expresa un valor de verdad. Puede ser
TRUE o FALSE. Para especificar un literal booleano, use alguna de las palabras clave
TRUE o FALSE. Ambas son insensibles a mayúsculas y minúsculas.
4.2. Enteros
Los enteros se pueden especificar usando una de las siguientes sintaxis:
4.4. Cadenas
Las cadenas de caracteres se pueden especificar usando uno de dos tipos de
delimitadores.
Si la cadena está encerrada entre dobles comillas ("), las variables que estén
dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación).
Como en C y en Perl, el carácter de barra invertida ("\") se puede usar para especificar
caracteres especiales:
secuencia significado
\n Nueva línea
\r Retorno de carro
\t Tabulación horizontal
\\ Barra invertida
\$ Signo del dólar
\" Comillas dobles
\[0-7]{1,3} la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación octal
\x[0-9A-Fa-f]{1,2} la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación hexadecimal
50
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se puede acceder a los caracteres dentro de una cadena tratándola como un array
de caracteres indexado numéricamente, usando una sintaxis similar a la de C. Vea un
ejemplo más abajo.
<?php
/* Asignando una cadena. */
$ str = "Esto es una cadena";
/* Añadiendo a la cadena. */
$ str = $str . " con algo más de texto";
51
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Las matrices son siempre convertidas a la cadena "Array"; por esta razón,
echo() y print() no pueden por su cuenta mostrar los contenidos de un valor array. Para
ver un elemento sencillo, use una construcción como echo $arr['foo'].
Los objetos a partir de PHP 4 son convertidos siempre a la cadena "Object". Por
eso, al igual que pasa con las matrices echo() y print() no pueden por su cuenta mostrar
los contenidos de un valor objecto.
52
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
4.5. Arrays
Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como
arrays indexados (vectores).
Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(),
rsort(), sort(), uasort(), usort(), y uksort() dependiendo del tipo de ordenación que se
desee.
Se puede recorrer un array usando las funciones next() y prev(). Otra forma
habitual de recorrer un array es usando la función each().
53
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
$a = array( => array(
"manzana"
"color" => "rojo",
"sabor" => "dulce",
"forma" => "redondeada"
), => array(
"naranja"
"color" => "naranja",
"sabor" => "ácido",
"forma" => "redondeada"
), => array(
"plátano"
"color" => "amarillo",
"sabor" => "paste-y",
"forma" => "aplatanada"
)
);
54
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
4.6. Objetos
Para inicializar un objeto, se usa la sentencia new para instanciar el objeto a una
variable.
class foo {
function do_foo () {
echo "Haciendo foo.";
}
}
4.7. Recursos
Un valor tipo resource es una variable especial, que contiene una referencia a un
recurso externo. Los recursos son creados y usados por funciones especiales. Gracias al
sistema de conteo de referencias introducido con el Motor Zend de PHP 4, un recurso
que ya no es referenciado es detectado automáticamente, y es liberado por el recolector
de basura. Por esta razón, rara vez se necesita liberar la memoria manualmente. Los
enlaces persistentes con bases de datos son una excepción a esta regla. Estos no son
destruidos por el recolector de basura.
4.8. NULL
El valor especial NULL representa una variable que no tiene valor. NULL es el
único valor posible del tipo NULL. Una variable es considerada como null si:
Existe un solo valor de tipo null, y ese es la palabra clave NULL, insensible a
mayúsculas y minúsculas.
$var = NULL;
Hay varias funciones interesantes para trabajar con el valor null: is_null() y unset().
55
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si se desea obligar a que una variable sea evaluada con un tipo concreto se
puede realizar un forzado de tipos. Si se desea cambiar el tipo de una variable se puede
usar la función settype().
Aunque el ejemplo anterior puede parecer que claramente debería resultar en que
$a se convierta en un array, el primer elemento del cual es 'f', consideremos esto:
$a = "1"; // $a es una cadena
$a[0] = "f"; // ¿Qué pasa con los índices de las cadenas? ¿Qué ocurre?
Dado que PHP soporta indexación en las cadenas vía offsets usando la misma
sintaxis que la indexación de arrays, el ejemplo anterior nos conduce a un problema:
¿debería convertirse $a en un array cuyo primer elemento sea "f", o debería convertirse
"f" en el primer carácter de la cadena $a?
56
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Nótese que las tabulaciones y espacios se permiten dentro de los paréntesis, así
que los siguientes ejemplos son funcionalmente equivalentes:
$foo = (int) $bar;
$foo = ( int ) $bar;
Puede no ser obvio que ocurrirá cuando se fuerce entre ciertos tipos. Por
ejemplo, lo siguiente debería ser tenido en cuenta.
57
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
5. Operadores
Operadores Aritméticos
Operadores de Asignación
Operadores de Bits
Operadores de Comparación
Operadores de Control de Errores
Operador de Ejecución
Operadores de Incremento/decremento
Operadores Lógicos
Operador de cadenas de texto
Operadores de Matrices
Operadores de Tipo
Precedencia y asociatividad de operandos
59
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Ejemplos de uso:
$var1 += 3;
$var2 /= 2;
$var3 >>= 1; $var1 = $var1 + 3;
$var2 = $var2 / 2;
$var3 = $var3 >> 1;
Operación Nombre
Resultado
$a > $b Mayor que
$a <= $b Menor o igual que Cierto si $a es estrictamente mayor que $b.
$a >= $b Mayor o igual que Cierto si $a es menor o igual que $b.
$a <> $b No igual Cierto si $a es mayor o igual que $b.
Cierto si el valor de $a no es igual al de $b
61
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
comillas invertidas como si fuera un comando del shell; y su salida devuelta como el
valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida;
puede asignarse a una variable). El uso de este operados es idéntico a la función
shell_exec().
$output = `dir /a-d`;
echo "<pre>$output</pre>";
<?php "<h3>Postincremento</h3>";
echo
$a = 5; . "<br>\n";
echo "Debería ser 5: " . $a++
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debería ser 6: " . ++$a . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Postdecremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a-- . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debería ser 4: " . --$a . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
?>
62
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La razón de que haya dos operadores distintos para las operaciones Y y O lógicas
es que tienen distinta precedencia.
Por ejemplo:
$a = 1;
$b = 2;
$c = “El resultado de “ . $a . “ + “ . $b . “ es “ . ($a + $b);
63
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
string(6) "banano"
["c"]=>
string(6) "cereza"
}
Unión de $b y $a:
array(3) {
["a"]=>
string(4) "pera"
["b"]=>
string(5) "fresa"
["c"]=>
string(6) "cereza"
}
bool(true)
bool(false)
64
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
65
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
6. Estructuras de Control
if
else
elseif
while
do..while
for
foreach
break
continue
switch
declare
return
require()
include()
require_once()
include_once()
Sintaxis Alternativa de Estructuras de Control
Todo script PHP se compone de una serie de sentencias. Una sentencia puede ser
una asignación, una llamada a función, un bucle, una sentencia condicional e incluso
una sentencia que no haga nada (una sentencia vacía). Las sentencias normalmente
acaban con punto y coma. Además, las sentencias se pueden agrupar en grupos de
sentencias encapsulando un grupo de sentencias con llaves. Un grupo de sentencias es
también una sentencia. En este capítulo se describen los diferentes tipos de sentencias.
6.1. if
La construcción if es una de las más importantes características de muchos
lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código.
PHP caracteriza una estructura if que es similar a la de C:
<?php
if (expr)
sentencia
?>
<?php
if ($a > $b)
print "a es mayor que b";?>
67
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
código mostraría a es mayor que b si $a fuera mayor que $b, y entonces asignaría el
valor de $a a $b:
<?php
if ($a > $b) {
print "a es mayor que b";
$b = $a;
}
?>
6.2. else
A menudo queremos ejecutar una sentencia si se cumple una cierta condicion, y
una sentencia distinta si la condición no se cumple. Esto es para lo que sirve else. else
extiende una sentencia if para ejecutar una sentencia en caso de que la expresión en la
sentencia if se evalúe como FALSE. Por ejemplo, el siguiente código mostraría a es
mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso:
<?php {
if ($a > $b)
print "a es mayor que b";
} else { NO es mayor que b";
print "a
}
?>
6.3. elseif
elseif, como su nombre sugiere, es una combinación de if y else. Como else,
extiende una sentencia if para ejecutar una sentencia diferente en caso de que la
expresión if original se evalúa como FALSE. No obstante, a diferencia de else,
ejecutará esa expresión alternativa solamente si la expresión condicional elseif se evalúa
como TRUE. Por ejemplo, el siguiente código mostraría a es mayor que b, a es igual a
b o a es menor que b:
<?php {
if ($a > $b)
} print "a es mayor que b";
elseif ($a == $b) {
} print "a es igual que b";
else { es mayor que b";
} print "a
?>
Puede haber varios elseif dentro de la misma sentencia if. La primera expresión
elseif (si hay alguna) que se evalúe como TRUE se ejecutaría. En PHP, también se
puede escribir 'else if' (con dos palabras) y el comportamiento sería idéntico al de un
'elseif' (una sola palabra). El significado sintáctico es ligeramente distinto (si estas
68
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
6.4. while
Los bucles while son los tipos de bucle más simples en PHP. Se comportan
como su contrapartida en C. La forma básica de una sentencia while es:
while (expr) sentencia
El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s)
sentencia(s) anidada(s) repetidamente, mientras la expresión while se evalúe como
TRUE. El valor de la expresión es comprobado cada vez al principio del bucle, así que
incluso si este valor cambia durante la ejecución de la(s) sentencia(s) anidada(s), la
ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta las sentencias
en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE
desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarán ni siquiera una
vez.
?>
6.5. do..while
Los bucles do..while son muy similares a los bucles while, excepto que las
condiciones se comprueban al final de cada iteración en vez de al principio. La principal
diferencia frente a los bucles regulares while es que se garantiza la ejecución de la
primera iteración de un bucle do..while (la condición se comprueba sólo al final de la
iteración), mientras que puede no ser necesariamente ejecutada con un bucle while
regular (la condición se comprueba al principio de cada iteración, si esta se evalúa como
FALSE desde el principio la ejecución del bucle finalizará inmediatamente).
<?php
$i = 0;
do {
print $i;
} while ($i>0);?>
69
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del
bucle do..while, para permitir parar la ejecución en medio de los bloques de código,
encapsulandolos con do..while(0), y usando la sentencia break. El siguiente fragmento
de código demuestra esto:
<?php
do {
if ($i < 5) {
print "i no es lo suficientemente grande";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i es correcto";
/* procesa i */
} while(0);
?>
6.6. for
Los bucles for son los bucles más complejos en PHP. Se comportan como su
contrapartida en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3) sentencia
Cada una de las expresiones puede estar vacía. Que expr2 esté vacía significa
que el bucle debería correr indefinidamente (PHP implicitamente lo considera como
TRUE, al igual que C). Esto puede que no sea tan inútil como se podría pensar, puesto
que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez
de usar la condición de for.
Considere los siguientes ejemplos. Todos ellos muestran números del 1 al 10:
<?php
/* ejemplo 1 */
70
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
/* ejemplo 2 */
/* ejemplo 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* ejemplo 4 */
Por supuesto, el primer ejemplo parece ser el mas elegante (o quizás el cuarto),
pero uno puede descubrir que ser capaz de usar expresiones vacías en bucles for resulta
útil en muchas ocasiones.
Otros lenguajes poseen una sentencia foreach para traducir un array o una tabla
hash. PHP3 no posee tal construcción; PHP4 sí (ver foreach). En PHP3, se puede
combinar while con las funciones list() y each() para conseguir el mismo efecto.
6.7. foreach
PHP 4 (PHP3 no) incluye una construcción foreach, tal como perl y algunos
otros lenguajes. Esto simplemente da un modo fácil de iterar sobre matrices. foreach
funciona solamente con matrices y devolverá un error si se intenta utilizar con otro tipo
de datos ó variables no inicializadas. Hay dos sintaxis; la segunda es una extensión
menor, pero útil de la primera:
foreach(expresion_array as $value) sentencia
foreach(expresion_array as $key => $value) sentencia
La segunda manera hace lo mismo, salvo que la clave del elemento actual será
asignada a la variable $key en cada iteración.
Nota: Cuando foreach comienza su primera ejecución, el puntero interno a
la matriz se reinicia automáticamente al primer elemento de la matriz. Esto
significa que no se necesita llamar a reset() antes de un bucle foreach.
Nota: Hay que tener en cuenta que foreach trabaja con una copia de la
matriz especificada y no la lista en si, por ello el puntero de la lista no es
modificado como en la función each(), y los cambios en el elemento de la
matriz retornado no afectan a la matriz original. De todas maneras el
puntero interno a la matriz original avanza al procesar la matriz.
71
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
<?php
reset( $arr );
while( list( $key, $value ) = each( $arr ) ) {
echo "Key: $key; Valor: $value<br>\n";
}
<?php
/* foreach ejemplo 1: sólo valor*/
$ a = array(1, 2, 3, 17);
foreach($a as $v) {
print "Valor actual de \$a: $v.<br>\n";
}
foreach($a as $v) {
print "\$a[$i] => $v.<br>\n";
$i++;
}
72
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$ a[1][1] = "z";
foreach(array(1, 2, 3, 4, 5) as $v) {
print "$v<br>\n";
}
?>
6.8. break
break sale de la estructuras de control iterante (bucle) actuales for, while, o
switch.
$ i = 0; {
while (++$i)
switch ($i) {
case 5: "En el 5<br>\n";
echo
break 1; /* Sale solo del switch. */
case 10: "En el 10; saliendo<br>\n";
echo
break 2; /* Sale del switch y del while. */
default:
break;
}
}
?>
6.9. continue
continue se usa dentro de la estructura del bucle para saltar el resto de la
iteración actual del bucle y continuar la ejecución al comienzo de la siguiente iteración.
Nota: Tener en cuenta que en PHP la declaración switch es considerada una
estructura de bucle por continue.
73
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
}
echo "$value<br>\n";
}
$i = 0;
while ($i++ < 5) {
echo "Externo<br>\n";
while (1) {
echo " Medio<br>\n";
while (1) {
echo " Interno<br>\n";
continue 3;
}
echo "Esto nunca se imprime.<br>\n";
}
echo "Y esto tampoco.<br>\n";
}
?>
6.10. switch
La sentencia switch es similar a una serie de sentencias if en la misma
expresión. En muchas ocasiones, se quiere comparar la misma variable (o expresión)
con nuchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a
qué valor es igual. Para ello sirve la sentencia switch.
Nota: Tener en cuenta que al contrario que otros lenguajes de
programación, continue se aplica a switch y funciona de manera similar a
break. Si teneis un switch dentro de un bucle y deseais continuar con el paso
siguiente en el bucle externo, usar continue 2.
Los siguientes dos ejemplos son dos modos distintos de escribir la misma cosa,
uno usa una serie de sentencias if, y el otro usa la sentencia switch:
<?php
$i=2;
if ($i == 0) {
print "i es igual a 0<br>\n";
} elseif ($i == 1) {
print "i es igual a 1<br>\n";
} elseif ($i == 2) {
print "i es igual a 2<br>\n";
}
switch ($i) {
case 0:
print "i es igual a 0<br>\n";
break;
case 1:
print "i es igual a 1<br>\n";
break;
case 2:
print "i es igual a 2<br>\n";
break;
}
?>
74
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
switch ($i) {
case 0:
print "i es igual a 0";
case 1:
print "i es igual a 1";
case 2:
print "i es igual a 2";
}
?>
Un caso especial es el default case. Este case coincide con todo lo que no
coincidan los otros case. Por ejemplo:
<?php
switch ($i) {
case 0:
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
default:
print "i no es igual a 0, 1 o 2";
}
?>
La expresión case puede ser cualquier expresión que se evalúe a un tipo simple,
es decir, números enteros o de punto flotante y cadenas de texto. No se pueden usar aquí
ni arrays ni objetos a menos que se conviertan a un tipo simple.
75
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
6.11. declare
La construcción declare es usada para definir directivas de ejecución para un
bloque de código. La sintaxis de declare es similar a la de las otras estructuras de
control:
declare (directiva) sentencia
o este:
declare(ticks=1);
script completo aqui
?>
Un "tick" es un evento que ocurre por cada N sentencias de bajo nivel ejecutadas
dentro del bloque declare. El valor de N es especificado por ticks=N como directiva
dentro de declare.
76
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
}
}
Este ejemplo perfila el código PHP dentro del bloque 'declare', grabando la hora,
una sentencia si y otra no, cuando fue ejecutada. Esta información puede ser usada para
encontrar areas en donde el codigo es lento. Este proceso se puede implementar de
diferentes maneras: usando "ticks" es más conveniente y facil de implementar.
6.12. return
Si se llama desde una función, return() termina inmediatamente la ejecución de
la función y retorna su argumento como valor de la función. return() tambien terminará
la ejecución de una sentencia eval() ó un script PHP.
6.13. require()
La sentencia require() incluye y evalua el archivo especificado.
77
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
6.14. include()
La sentencia include() incluye y evalúa el archivo especificado.
$color = 'green';
$ fruit = 'apple';
?>
apar614_01.php
<?php
include 'apar614_02.php';
?>
function foo()
{
global $color;
include 'apar614_02.php';
78
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
?>
Cuando un fichero es incluido, el intérprete sale del modo PHP y entra en modo
HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al final.
Por esta razón, cualquier código dentro del archivo referenciado que debiera ser
ejecutado como código PHP debe ser encerrado dentro de etiquetas válidas de comienzo
y fin de PHP.
<?php
Funciona.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Funciona.
include 'file.php'; // Funciona.
?>
Esto es CORRECTO.
if ($condition) {
include $file;
} else {
include $other;
}
?>
79
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
apar614_05.php
<?php
$foo = include 'return.php';
echo $foo; // imprime 'PHP'
$bar = include 'noreturn.php';
echo $bar; // imprime 1
?>
6.15. require_once()
La función require_once() incluye y evalua el fichero especificado durante la
ejecución del script. Se comporta de manera similar a require(), con la única diferencia
que si el código ha sido ya incluido, no se volverá a incluir. Consultar la documentación
de la función require() para obtener más información.
<?php
require_once("a.php"); // esto incluye a.php
require_once("A.php"); // esto no incluye a.php de nuevo!
?>
80
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
6.16. include_once()
La función include_once() incluye y evalua el fichero especificado durante la
ejecución del script. Se comporta de manera similar a include(), con la única diferencia
que si el código ha sido ya incluido, no se volverá a incluir.
En el ejemplo de arriba, el bloque HTML "A es igual 5" se anida dentro de una
sentencia if escrita en la sintaxis alternativa. El bloque HTML se mostraría solamente si
$a fuera igual a 5.
Como con la sentencia if, se pueden agrupar multiples sentencias dentro del
mismo bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis
alternativa:
while (expr): sentencia ... endwhile;
81
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Los siguientes ejemplos son idénticos, y ambos imprimen números del 1 al 10:
<?php
/* ejemplo 1 */
$i = 1;
while ($i <= 10) {
print $i++; /* el valor impreso sería
$i antes del incremento
(post-incremento) */
}
/* ejemplo 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
PHP también soporta la "sintaxis de dos puntos" alternativa para bucles for.
La sintaxis alternativa para las estructuras de control está también soportada con
switch.
<?php
switch ($i):
case 0:
print "i es igual 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
default:
print "i no es igual a 0, 1 o 2";
endswitch;
?>
82
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
7. Funciones
Funciones definidas por el usuario
Parámetros de las funciones
Devolviendo valores
Funciones variables
Funciones de tratamiento de cadenas de caracteres
<?php
function foo ($arg_1, $arg_2, ..., $arg_n)
{
echo "Función de ejemplo.\n";
return $retval;
}
?>
$ makefoo = true;
if ($makefoo) {
function foo ()
83
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
{
echo "No existo hasta que la ejecución del programa llegue
hasta mi.\n";
}
}
if ($makefoo) foo();
function bar()
{
echo "Existo desde que el programa comienza.\n";
}
?>
<?php
function foo()
{
function bar()
{
echo "No existo hasta que se llame a foo().\n";
}
}
foo();
bar();
?>
PHP soporta pasar parámetros por valor (el comportamiento por defecto), por
referencia, y parámetros por defecto. Las listas de longitud variable de parámetros sólo
están soportadas en PHP4 y posteriores. Un efecto similar puede conseguirse en PHP3
pasando un array de parámetros a la función:
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
84
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
El valor por defecto tiene que ser una expresión constante, y no una variable, un
miembro de una clase ó una llamada a una función.
Destacar que cuando se usan parámetros por defecto, estos tienen que estar a la
derecha de cualquier parámetro sin valor por defecto; de otra manera las cosas no
funcionarán de la forma esperada. Considera el siguiente fragmento de código donde se
usa incorrectamente parámetros por defecto en funciones:
<?php
function makeyogurt ($type = "acidophilus", $flavour)
{
return "Haciendo un bol de $type $flavour.\n";
}
echo makeyogurt ("mora"); // No funcionará de la manera esperada
?>
85
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
function makeyogurt ($flavour, $type = "acidophilus")
{
return "Haciendo un bol de $type $flavour.\n";
}
<?php
showtitles(‘Titulo1’);
showtitles(‘Titulo1’, ‘Titulo2’);
showtitles(‘Titulo1’, ‘Titulo2’, ’Titulo3’);
function showtitles()
{
86
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
for($i=0;$i<func_num_args();$i++)
echo (func_get_arg($i) . “\n”);
}
?>
No puedes devolver múltiples valores desde una función, pero un efecto similar
se puede conseguir devolviendo un array.
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
Para retornar una referencia desde una función, se tiene que usar el operador de
referencias & tanto en la declaración de la función como en la asignación del valor de
retorno a una variable;
<?php
function &returns_reference()
{
return $someref;
}
$newref = &returns_reference();
?>
87
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
function foo()
{
echo "En foo()<br>\n";
}
function echoit($string)
{
echo $string;
}
$ func = 'foo'; // Llama a foo()
$ func();
$ func = 'bar'; // Llama a bar()
$ func('test');
$ func = 'echoit';
$func('test'); // Llama a echoit()
?>
function Bar()
{
echo "Esto es Bar";
}
}
?>
7.8.1. echo
Ya hemos visto varios ejemplos de este comando. Tiene esta sintaxis:
echo argumento
88
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si nos fijamos en esta última sintaxis, podemos observar que hemos utilizado la
barra hacia la izquierda (\ ) delante de la variable, para que no expanda su contenido.
Además, hemos sacado la función de las comillas y la hemos concatenado con el texto
anterior y posterior usando el operador de concatenación (.).
7.8.2. print
Esta orden es prácticamente igual que echo, hasta el punto de que se pueden
intercambiar sin problemas.
Veamos un ejemplo en que se usa la orden print en lugar de echo.
<HTML>
<HEAD><TITLE>Curso de PHP</TITLE></HEAD>
<BODY>
89
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
</BODY>
</HTML>
7.8.3. printf
Es una función que permite mostrar información formateada según los valores
que aparezcan en una cadena de formato integrada por caracteres fijos y por una
directiva %.
Su sintaxis es:
printf ("cadena de formato", argumento1, argumento2,...)
Nueva línea
<HTML>
<HEAD></HEAD>
<BODY>
90
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
En este sencillo ejemplo podemos apreciar varias cosas que debemos conocer.
Son las siguientes:
En este ejemplo hay que observar también varias cosas que debemos tener en
cuenta:
1. Conviene recordar que en el texto literal hemos tenido que utilizar el signo \
delante de $i para que la variable no se expandiera. No confundirlo con el
comando \n que sirve para que se produzca un salto de línea.
2. La directiva %d lleva detrás el comando del código PHP \n. Puede llevar
también otro literal. El comando \n sirve para que, una vez mostrado el
resultado de la variable $i, se produzca un salto de línea dentro del código
HTML, como ya hemos dicho.
3. En el código fuente PHP hemos dejado hasta cinco espacios en blanco después
del primer literal y antes de la directiva, pero en la página web sólo aparece
uno. Hay que tener en cuenta que HTML sólo muestra un espacio, no todos los
que haya repetidos en el código.
Dentro de la cadena de formato nos interesa ver cómo se configura una directiva
y qué significa cada uno de los caracteres que la integran.
Toda directiva debe iniciarse por un signo %. Si se quiere anular el efecto de %
de forma que la directiva se vea como un literal, hay que poner delante otro signo %.
Por ejemplo, la orden
printf("Valor de la variable \$i= %%d \n", $i);
91
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
1. Un carácter de relleno, para que ocupe las posiciones vacías cuando lo que
ha de mostrarse no completa todas. Si no se pone, se supone que las
posiciones vacías han de ser espacios en blanco. En el caso de números,
puede indicarse que se rellenen con ceros o con otro carácter (escribir entre
comillas simples) como primer integrante de la directiva.
2. El carácter opcional ‘-‘, para alinear un número por la izquierda.
3. El número mínimo de posiciones que ha de ocupar la salida. Si su contenido
no ocupa tantas posiciones, los espacios vacíos se completan con el carácter
que se haya indicado en el componente primero. Por ejemplo, la instrucción
printf("La variable \$i con la directiva %%05d aparece como %05d \n", $i);
Puede ser una sola de las letras que aparecen en la tabla siguiente:
92
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<CENTER>
<H3>TABLA DE LOS 20 PRIMEROS NÚMEROS EN DIFERENTES
BASES</H3>
<TABLE BORDER=2>
<TH> Decimal </TH>
<TH> Binario </TH>
<TH> Octal </TH> <TH>
Hexadecimal </TH>
<? // Aquí se inicia el código PHP.
print "</TR>";
}
</TABLE>
</CENTER>
</BODY>
</HTML>
7.8.4. sprintf
Esta función nos permite dar formato a una cadena de texto exactamente igual
que con printf, y guardar, además el resultado en una variable, para utilizarlo
posteriormente.
93
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es la siguiente:
$cadena=sprintf(“cadena de formato”, argumento 1, argumento 2,...)
Nueva línea
Una vez vistas las funciones necesarias para mostrar información en forma de
cadena de caracteres veamos algunas de las funciones de cadenas más frecuentes y
necesarias. Por otra parte, en el Capítulo CLXI. Funciones de Cadenas del Manual
de PHP aparecen todas las funciones de cadena de caracteres. En este apartado nos
vamos a limitar a explicar brevemente las más frecuentes y necesarias.
La forma de proteger estos caracteres, para que no sean interpretados por el Shell
o por PHP como caracteres significativos, es poner una barra invertida (Slash) delante
de los mismos.
94
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Conviene observar que los espacios se representan con el signo +, las letras,
excepto la ñ, y los números se dejan igual, y los demás signos, como <, =, ), etcétera,
son sustituidos por el signo % seguido de dos dígitos en base hexadecimal.
95
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<HTML>
<HEAD></HEAD>
<BODY>
<br>
Sin aplicar salto de línea HTML: "Primero
Segundo
Tercero"<br>
Aplicando salto de línea HTML: "Primero <br />
Segundo <br />
Tercero"
</BODY>
</HTML>
Se puede observar que los saltos de línea del fichero de texto \n mediante la
función nl2br() han sido sustituidos en el código XHTML por saltos de línea <br />.
96
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La función trim() es una combinación de las dos anteriores: elimina los espacios
en blanco que haya al principio y al final de una cadena.
Por ejemplo, si $limpia contiene " casa ", la instrucción echo trim($limpia)
devuelve "casa".
La función strip_tags() elimina las etiquetas HTML de una cadena. Por
ejemplo, las instrucciones siguientes
$quita_html="<H1>Texto grande</H1> <B>Negrita</B><P>";
echo $quita_html."<P>";
echo strip_tags($quita_html);
Texto grande
Negrita
Texto grande Negrita
97
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Para que esta función tenga en cuenta el alfabeto completo español en mayúsculas,
sobre todo si las letras tienen tilde, como "Águila", hay que establecer su
configuración previamente con la función setlocale (LC_ALL,"spanish");. Estos
valores son los formatos de hora, moneda, alfabeto, separador de decimales,
etcétera.
4. Función ucwords(): devuelve la misma cadena convirtiendo el primer
carácter de todas las palabras en mayúscula.
Ejemplo: si $M_pal contiene "diosa de la antigüedad egipcia", la instrucción
echo ucwords($M_pal); devuelve "Diosa De La Antigüedad Egipcia".
98
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Por ejemplo,
echo substr("Memorias de África",3,4)
99
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Por ejemplo,
echo substr_replace("Memorias de África","en",9,2)
define las variables $nom, $ape1 y $ape2, y les asigna los valores "Nacho",
"Roa" y "Bastos", respectivamente. Así puede pasarlas a otra página.
100
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
101
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
• Tiene un índice (key o index) para referirse a cada uno de sus elementos. Este índice,
también llamado subíndice, puede ser de tipo numérico entero o de tipo cadena. En PHP
el índice del primer elemento tiene el valor 0, si es de tipo numérico entero.
• Cada elemento tiene un contenido (value), que puede ser de diferente tipo que el resto
de los elementos.
Como puede verse, esta sintaxis utiliza la palabra reservada array, pone entre
comillas los índices de cadena y usa el signo => para asignar el valor a los elementos.
Para crear una matriz bidimensional con las calificaciones obtenidas por una
alumna en las tres evaluaciones de Matemáticas, Lengua y Dibujo usando índices
alfanuméricos, podemos escribir lo siguiente:
$notas["Mat"]["Pri"] = "Suficiente";
$notas["Mat"]["Seg"] = "Bien";
$notas["Mat"]["Ter"] = "Notable";
$notas["Len"]["Pri"] = "Sobresaliente";
$notas["Len"]["Seg"] = "Sobresaliente”;
$notas["Len"]["Ter"] = "Notable";
$notas["Dib"]["Pri"] = "Notable";
$notas["Dib"]["Seg"] = "Bien";
$notas["Dib"]["Ter"] = "Suficiente";
102
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Es más breve, si bien hay que saber a qué asignatura y evaluación pertenece cada
índice. En la sintaxis precedente quedaría así:
$notas = array(0=>array(0=>1,1=>2,2=>3),
1=>array(0=>4,1=>5,2=>6),
2=>array(0=>7,1=>8,2=>9));
Como hemos visto, pues, la función array() permite crear e inicializar matrices,
si bien no es la única forma de hacerlo.
Su sintaxis es
array(lista de elementos separados por comas);
La función range() devuelve una matriz que sólo contiene los elementos
indicados entre dos números, ambos incluidos.
Su sintaxis es
range(número entero del límite inferior, número entero del límite superior);
103
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Pero podemos crear una matriz asignándole un índice numérico que no esté
ordenado o incluso un índice de tipo cadena desordenado. Por ejemplo, podíamos haber
creado e inicializado así la matriz $persona:
$persona[10] = "Josefa";
$persona[2] = "Pérez";
$persona[5] = "Rubio";
$persona[1] = 60;
La función count() cuenta los elementos que integran una matriz y devuelve un
número entero. Por ejemplo, la instrucción echo count($persona); devuelve 4.
104
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
105
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$datos=array("nombre"=>"Josefa","apellido1"=>"Pérez",
"apellido2"=>"Rubio","edad"=>60);
$numero_elementos=count($datos);
for ($i=0; $i < $numero_elementos; $i++)
{
$indice=key($datos);
$valor=current($datos);
echo "Indice:<B> $indice. </B>Contenido: <B>$valor</B><BR>";
next($datos);
}
Su sintaxis es
explode(carácter separador, cadena);
Su sintaxis es
implode(carácter separador, matriz);
Su sintaxis es
arsort(matriz);
106
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$palabras=array("3"=>"zozobra","4"=>"sabueso","6"=>"obús",
Su sintaxis es
asort(matriz);
Su sintaxis es
krsort(matriz);
Su sintaxis es
shuffle(matriz);
107
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$colores=array("a"=>"blanco","b"=>"azul","c"=>"rojo",
"d"=>"amarillo","e"=>"verde");
uasort($colores,"compara");
for (reset($colores);$indice=key($colores);next($colores)) echo
"Indice: <B>$indice</B> Contenido:<B>$colores[$indice]
</B><P>";
En este caso la función uasort() ordena los elementos según el cuarto carácter
de su contenido de menor a mayor (se cuenta desde 0; por eso hemos puesto 3 en la
función de usuario), que es lo que ejecuta la función de usuario compara(). Así pues, la
matriz queda así:
$colores=array("e"=>"verde","b"=>"azul","a"=>"blanco",
"c"=>"rojo","d"=>"amarillo");
Su sintaxis es
uksort(matriz,función de usuario);
108
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
En este caso la función uksort() ordena los elementos según el cuarto carácter
de su índice de mayor a menor (se cuenta desde 0; por eso hemos puesto 3 en la función
de usuario), que es lo que ejecuta la función de usuario compara().
Su sintaxis es
array_merge(matriz1,matriz2...);
Su sintaxis es
array_pad(matriz,número de elementos de la matriz resultante,relleno
de los elementos añadidos);
la instrucción
109
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$completa=array_pad($sabores,8,"indeterminado");
genera la matriz
$completa=array("dulce","amargo","salado","soso","menta",
"indeterminado","indeterminado","indeterminado");
Su sintaxis es
array_reverse(matriz);
Su sintaxis es
array_splice(matriz original,posición inicial del
desplazamiento,longitud del desplazamiento,cadena-valor-matriz
que sustituye el fragmento de la original);
donde:
• el argumento posición inicial del desplazamiento es un número entero que indica
la posición, contando desde 0, del primer elemento que debe ser sustituido. Si es
menor que 0, se cuenta desde el último elemento de la matriz original siendo el
último elemento el que ocupa la posición –1.
• el argumento longitud del desplazamiento es un número entero que indica el
número de elementos que serán sustituidos a partir de la posición especificada en
el argumento anterior. Si se omite, se eliminan todos desde la posición indicada.
Si es menor que 0, se eliminan tantos como se indique, pero contando desde el
final de la matriz original hasta la posición especificada.
• el argumento cadena, valor o matriz contiene el contenido que ha de asignarse a
los elementos eliminados. Puede no existir. En este caso, la matriz original
pierde los elementos eliminados sin ser sustituidos por otros.
genera la matriz
$matriz1=array("muy alto","alto","muy bajo");
110
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
genera la matriz
$matriz1=array("muy alto","alto");
genera la matriz
$matriz1=array(("muy alto","alto","medio");
genera la matriz
$matriz1=array("muy alto","alto","bajo","muy bajo");
genera la matriz
$matriz1=array("muy alto","alto","medio", "óptimo","bueno", "malo");
genera la matriz
$matriz1=array("muy alto","alto","medio","bajo", "muy
bajo","óptimo","bueno","malo");
genera la matriz
$nueva=("bajo","muy bajo");
111
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es
array_walk(matriz original,función de usuario,prefijo);
Su sintaxis es
compact(lista de variables o arrays...);
Su sintaxis es
array_count_values(matriz);
La función array_keys() recibe como argumento una matriz y devuelve otra que
contiene sólo los índices de la matriz original como contenidos de los nuevos elementos.
Como índices de la nueva matriz se asignan valores numéricos enteros desde 0 en
adelante.
Su sintaxis es
array_keys(matriz,valor);
Su sintaxis es
array_slice(matriz original, posición inicial del desplazamiento,
longitud del desplazamiento);
donde
112
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
genera la matriz
$nueva=array("medio","bajo");
La función array_ values() recibe como argumento una matriz y devuelve otra
en la que se han eliminado los índices dejando sólo los contenidos.
Su sintaxis es
array_values(matriz original);
Lógicamente, como no puede haber una matriz sin índices, a cada elemento se le
asignan índices numéricos desde 0 en adelante y se eliminan los que tuviera antes, sean
cadenas u otros valores numéricos.
La función each() lee el elemento actual de una matriz y avanza el puntero al
elemento siguiente. Con el elemento leído fabrica otra matriz de cuatro elementos: dos
para el índice (0 y key) y dos para el contenido (1 y value). Generalmente, esta función
se utiliza combinada con la función list() para recorrer los elementos de una matriz
con un bucle.
Su sintaxis es
each(matriz original);
113
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
$nueva=array(0=>"tres","key"=>"tres", 1=>"medio","value"=>"medio")
Los dos primeros elementos de la matriz resultante hacen referencia al índice del
elemento actual de la matriz original. De esta forma podemos referirnos a su contenido
también de dos formas: $nueva[0] o $nueva("key").
Como puede verse, los dos últimos elementos de la matriz resultante hacen
referencia al contenido del elemento actual de la matriz original. De esta forma podemos
referirnos a su contenido de dos formas: como $nueva[1] o como
$nueva("value").
La función extract() pasa los contenidos de los elementos de una matriz como
contenidos de las variables que llevan como nombre el índice de cada elemento de la
misma matriz. Como consecuencia, a la tabla de símbolos de variables se incorporan
estas nuevas variables.
Su sintaxis es
extract(matriz, si hay conflictos tipo de extracción,si hay conflictos
cadena de sustitución);
Los dos últimos argumentos son opcionales y sólo se aplican, si existen, cuando
al ejecutar la extracción se han producido colisiones, es decir, si la variable que se
pretendía crear ya existía e incluso si era de diferente tipo.
Su sintaxis es
in_array(valor buscado, matriz donde se busca);
114
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es
list(lista de variables);
Veamos las funciones que nos permiten realizar operaciones de tipo pila con las
matrices.
La función array_pop() extrae el último elemento de la matriz
eliminándolo. Su sintaxis es
array_pop(matriz);
Su sintaxis es
array_push(matriz,lista de elementos que se añaden);
115
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es
array_shift(matriz);
Su sintaxis es
array_unshift(matriz,lista de elementos que se añaden);
Es conveniente observar que, cuando añadimos elementos, PHP crea los índices
para cada uno, que son de tipo numérico ordinal.
Se considera como válida una fecha cuando su año está comprendido entre los
años 1 y el 32767, su mes entre 1 y 12, y su día entre 1 y 28 para febrero no bisiesto, 29
para febrero bisiesto, 30 para abril, junio, septiembre y noviembre, y 31 para el resto de
los meses. Así pues, esta función controla los años bisiestos al comprobar la validez de
una fecha.
donde los tres parámetros son números enteros. Conviene observar el orden en
que deben introducirse los parámetros, ya que no coinciden con la posición habitual de
nuestras fechas (día,mes,año).
116
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Conviene observar que esta cadena no utiliza categorías locales, por lo cual los
nombres de los días y los meses aparecen en inglés. Para formatear una fecha y mostrar
su resultado, es mejor utilizar la función strftime(), que se explica después.
117
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
118
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
119
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
echo $_REQUEST[‘nombre’];
?>
121
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
122
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<?php
echo "Su elección:<br>";
foreach($_POST[‘menu’] as $plato) {
echo "$plato<br>\n";
}
?>
Esta orden es prácticamente igual que echo, hasta el punto de que se pueden
intercambiar sin problemas.
printf ("cadena de formato", argumento1, argumento2,...)
Esta función nos permite dar formato a una cadena de texto exactamente igual
que con printf, y guardar, además el resultado en una variable, para utilizarlo
posteriormente.
Conviene saber que en PHP es frecuente que una página se llama a sí misma. Este
procedimiento se denomina recursividad. Cuando se ejecuta el código por primera
123
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
vez, sólo se muestra el formulario vacío y no aparecen los datos. Es lógico, pues las
variables aún no tienen contenido. Cuando las variables tengan algún contenido,
introducido en la página mediante el formulario, se puede mostrar esta información
en la página llamada de nuevo al pulsarse el botón Aceptar y ejecutarse la orden
<FORM ACTION=index.php METHOD=POST>
Esta forma de proceder es muy útil para verificar si los datos introducidos son
correctos. Si ponemos las condiciones de corrección dentro del código PHP, la
comprobación se realiza en el servidor.
Ya que podemos cambiar el nombre del fichero PHP que se llama a sí mimo, en
lugar de citar dentro del código expresamente su nombre, como hemos hecho,
podemos usar la variable de entorno $_SERVER['PHP_SELF'] que guarda el
nombre del fichero al ejecutarse. Escribiríamos en este caso:
<FORM ACTION=<?php echo $_SERVER['PHP_SELF'] ?> METHOD=POST>
Para pasar información de una página a otra a través de la URL debe realizarse
poniendo en la URL el nombre del fichero donde está el código de la página a la que
hay que pasar los valores, seguido del signo ?. Detrás de éste, se pone el nombre de
la variable cuyo contenido se debe pasar sin usar el signo $ , un = y el valor que se
pasa a esa variable. Si hay más de una variable, se ponen todas separadas por el
signo &, como en el ejemplo siguiente.
<A HREF="resultado.php?nom=Pedro&apel=García&des=Alto">
Pulse aquí para enlazar con la otra página </A>
124
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
9. Ficheros y Directorios
Abrir y Cerrar Ficheros
Recorrer ficheros y Leer su Contenido
Modificar el contenido de los ficheros
Copiar, borrar y renombrar ficheros
Operaciones con directorios
En esta capítulo, pues, vamos a estudiar de forma teórico- práctica las diferentes
operaciones que se pueden llevar a cabo con los directorios y con los ficheros.
Concretamente, en este primer apartado abordamos cómo abrir y cómo cerrar ficheros.
En el Capítulo XLI. Funciones del sistema de archivos del Manual Oficial de
PHP aparecen las funciones de ficheros. En este apartado nos vamos a limitar a explicar
brevemente las más frecuentes y necesarias.
1. Abrir el fichero.
2. Realizar las operaciones de lectura o escritura previstas.
3. Cerrar el fichero.
La función fopen() permite abrir un fichero para trabajar con él. Al ejecutarse,
comprueba si el fichero pasado como primer argumento existe o no. En el primer caso
esta función devuelve True; en el segundo, False. Por ello, conviene incluir también
esta función dentro de una estructura condicional que nos informe de la apertura o no
del fichero especificado.
Ésta es su sintaxis:
fopen("nombre del fichero","modo de apertura",
entero para mirar también en el camino fijado
en la instrucción include);
donde
El primer parámetro es el nombre exacto del fichero que se desea abrir. Si dentro
de este argumento se indica el directorio por no haber usado previamente la función
125
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
chdir(), es imprescindible poner las dos barras \\, para que la barra de directorio sea
interpretada correctamente, es decir, como signo textual de directorio y no como un
símbolo del lenguaje HTML.
$gestor = fopen("c:\\datos\\info.txt", "r");
Veamos un ejemplo:
if (fopen("Ficheros_1.php","r"))
echo "<B>El fichero \"Ficheros_1.php\" existe
y ha quedado abierto.</B>";
else
echo "<B>El fichero \"Ficheros_1.php\" no existe.</B>";
Conviene observar que, al igual que ocurre con las matrices, en los ficheros
también hay un puntero o apuntador que señala una de las posiciones del fichero.
126
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
if (fopen("C:\\WAMP\\WWW\Capitulo_09\\fichero1.php","r"))
De esta forma, más elegante y eficaz, se consigue evitar el mensaje de error que
se envía al cliente (por eso hemos usado el operador @) y se dejan de ejecutar las
siguientes líneas del código (gracias a la función die()). Si el fichero existe y puede
abrirse, no se muestra el mensaje y se prosigue con la interpretación de las siguientes
líneas de código.
127
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es la siguiente:
rewind("nombre completo del fichero" o identificador);
128
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La función ftell() se utiliza para conocer en qué posición del fichero está el
puntero. Tiene esta sintaxis:
ftell("nombre completo del fichero" o identificador);
Esta función es muy útil para leer uno a uno o línea a línea todos los caracteres
de un fichero usando un bucle while (!feof()), como estudiaremos más adelante.
La función fread() se utiliza para leer una cadena de un fichero abierto. Tiene
esta sintaxis:
fread("nombre completo del fichero" o identificador,
número de caracteres que se deben leer);
129
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La función fgets() hace exactamente lo mismo que la función fread() y lleva los
mismo parámetros como argumentos. Sólo se diferencian en que la función fgets() sólo
lee una cadena que, como máximo, abarca hasta que encuentre la marca de final de línea
(retorno de carro). Por ello, si el número del segundo parámetro es superior a los
caracteres de una línea, la cadena que se lee comprenderá sólo el texto de la línea.
Con esta función incluida dentro de un bucle podemos leer línea a línea un
fichero de esta forma:
rewind("Ficheros_3.txt");
while (!feof("Ficheros_3.txt"))
{
$linea=fgets("Ficheros_3.txt",256);
echo "<B>$linea </B><P>";
}
Usando esta función dentro de un bucle que recorra desde la primera posición
hasta la marca de final de fichero puede mostrarse el contenido completo de éste.
La función file() también se usa para leer un fichero y asignar el texto de cada
línea a una matriz. La primera línea se coloca como elemento 0 y así sucesivamente. En
este caso el identificador que se pasa como argumento es el propio nombre del fichero y
la función count() permite saber cuántos elementos tiene la matriz para poder
recorrerla posteriormente. Veamos un ejemplo:
$matriz=file("Ficheros_3.txt");
for ($i=0;$i<count($matriz);$i++)
{
print ("<B> Elemento $i:</B> $matriz[$i]<P>");
}
130
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es la siguiente:
fputs("nombre completo del fichero" o identificador,
cadena que se escribe,tamaño de la cadena);
Para que esta operación funcione correctamente es preciso utilizar bien el modo
de apertura del fichero. Si ha de añadirse el texto por el principio del fichero, debemos
usar el parámetro de apertura “r+”; si necesitamos añadir el texto por el final, usaremos
los parámetros de apertura “a” o “a+”; si queremos sustituir el contenido completo del
fichero, hay que poner los parámetros de apertura “w” o “w+”.
131
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es la siguiente:
copy("nombre del fichero original", "nombre del fichero destino");
La función unlink() sirve para borrar físicamente un fichero. Para poder realizar
esta operación, el fichero original no debe estar abierto. Esta función devuelve el valor
lógico True si se ha podido realizar la operación sin problema o False si no se ha
podido.
Su sintaxis es la siguiente:
unlink("nombre del fichero que debe borrarse");
Su sintaxis es la siguiente:
rename("nombre del fichero original","nuevo nombre del fichero");
132
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
comprobar que existe el fichero original como para comprobar que no existe otro con el
nombre que se le quiere poner.
133
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Su sintaxis es la siguiente:
134
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
poder cerrarlo con closedir(), leer sus ficheros con readdir() o mover el puntero de
lectura de un directorio con rewinddir().
Su sintaxis es la siguiente:
opendir("camino completo de directorio");
PHP dispone también de una clase que nos permite acceder y tratar los
directorios. Es la clase dir(). Para abrir un directorio funciona igual que opendir().
Además, tiene dos propiedades, que son handle (puntero) y path (camino), y tres
métodos, que son read() (leer el nombre de un fichero o subdirectorio), rewind()
(llevar el puntero al principio de directorio) y close() (cerrar el directorio). Dentro de
esta clase pueden usarse, además, las funciones estándar de manejo de directorios.
<?php
$d = dir("Capitulo_09");
echo "Gestor: " . $d->handle . "\n";
echo "Ruta: " . $d->path . "\n";
while (false !== ($entrada = $d->read())) {
echo $entrada."\n";
}
$d->close();
?>
Su sintaxis es la siguiente:
closedir("nombre del identificador de directorio");
Su sintaxis es la siguiente:
135
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Esta función lee el nombre del fichero o directorio sobre el que esté el puntero y
avanza éste al siguiente. Lo normal es usar esta función dentro de un bucle que vaya
leyendo uno a uno los elementos (ficheros o subdirectorios) del directorio.
if (is_dir($fichero))
print ("$fichero <B>es un directorio.</B><P>");
else
print ("$fichero <B>es un fichero.</B><P>");
}
La clase dir() también permite leer un directorio, como hemos explicado antes.
En UNIX hay que poner un segundo parámetro (número entero en base octal),
que indica el modo o permisos de creación. En Windows debemos poner 0 en este
parámetro o no ponerlo (es opcional).
Si el directorio ya existe, se produce un error. Por eso, al igual que ocurre con
los ficheros, conviene comprobar con la función file_exists() si ya existe, para no
intentar crearlo en este caso.
136
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si el problema consiste en que no está vacío, hay que eliminar todos los ficheros
con la función unlink() antes de intentar borrar el directorio.
9.5.8. Subir ficheros al servidor, usarlos y validarlos
Con PHP el cliente de una página web también puede subir ficheros al servidor
desde su ordenador, es decir, se puede convertir en emisor de información.
Vamos a estudiar los pasos que se dan cuando se sube un fichero al servidor:
137
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
138
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
139
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Actualmente existen multitud de ellos, aunque los más conocidos son el Internet
Explorer de Microsoft y el Netscape Navigator de Netscape.
Todo lo que se dice en esta guía funciona correctamente con Netscape, casi todo
con el IE, y algunas cosas no se verán con otros visualizadores o se verán mal, sobre
todo si son versiones antiguas.
Así pues, en esencia, una página escrita en HTML no es más que texto normal,
escrito con cualquier editor, y al que, cuando se le quiere dar algun aspecto especial,
como por ejemplo el tamaño de la letra, habrá que acompañar de ciertos códigos para
indicar el efecto deseado. A estos códigos se les llama elementos del lenguaje.
Por ejemplo, el elemento H1 que sirve para dar el máximo tamaño al texto, se
escribirá:
141
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Texto de prueba
Si olvidas poner </H1> todo el resto de la página tendrá el mismo tamaño
grande.
Por ejemplo, el elemento <A> que sirve para hacer un link (enlace) con otro
documento, se escribirá:
<A HREF="http://www.miservidor.es/mifichero.htm"> Link de prueba </A>
Los elementos pueden anidarse unos con otros, teniendo cuidado de poner los
cierres en el lugar adecuado. Por ejemplo, el elemento <H1> combinado con <I> que
sirve para generar texto en itálica, se escribirá:
<H1><I>Texto de prueba </I></H1>
142
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Texto de prueba
10.2. Estructura de un documento HTML
Los documentos escritos en HTML estan estructurados en dos partes
diferenciadas: la HEAD (cabecera) y el BODY (cuerpo).
Si escribes:
<HTML>
<HEAD>
<TITLE> Documento de prueba </TITLE>
</HEAD>
<BODY>
Para escribir comentarios en la página (que sólo se ven en el texto fuente, pero
no en el visualizador) se utilizará el elemento <!-- -->
Los documentos HTML los puedes escribir con lo que quieras, siempre que los
salves en modo Solo Texto. Es decir, que si utilizas, por ejemplo, Word de Windows o
de MAC, por defecto estos programas salvan en formato Word. Y aunque luego los
renombres como documentos .htm o .html, el formato interno sigue siendo Word.
Tampoco vale dejarlos con la extensión .txt que les dejan la mayoría de editores
al salvarlos en modo Solo Texto. No serían interpretados correctamente. Por lo tanto si
tienen extensión .txt (y por supuesto son .txt), entonces puedes renombrarlos a .htm, o
bien en el momento de guardarlos en formato Solo Texto no dejar la extensión por
defecto .txt y darle ya directamente la extensión .htm.
143
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
No hay que confundir el elemento <TITLE> con el nombre del fichero. Por
ejemplo, una página que está contenida en un fichero llamado head.htm y el texto de su
<TITLE> es: Head de un documento. Se escibirá asi:
<HEAD>
<TITLE>Head de un documento </TITLE>
</HEAD>
144
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Este otro sirve para que los buscadores puedan ofrecer un breve resumen de los
contenidos de tu página:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META NAME="description" CONTENT="Manual para escribir
HTML."> </HEAD>
Puedes poner todos los elementos <META> que creas necesarios, pero sin
repetirlos.
Habrás notado que se ha utilizado la palabra "caché", y tal vez no sepas a qué se
refiere. Todos los navegadores, por defecto, siempre que reciben una página de un
servidor se hacen una copia de la misma en el disco de tu máquina. Con esto se pretende
que si vuelves a solicitar la misma página, en lugar de pedirla de nuevo al servidor, te
mostrará la que tiene guardada en el disco. A esta área del disco donde el navegador va
poniendo las páginas visitadas, se le denomina caché. El tamaño de la caché lo puedes
modificar, desde la opciones de configuración del navegador, e incluso puedes darle
tamaño cero, con lo que siempre que veas una página, ésta habrá sido solicitada al
servidor.
Se escibirá asi:
<BODY>
texto texto texto texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto texto texto texto
</BODY>
A continuación se analizan los elementos más habituales del lenguaje que deben
escribirse en esta parte del documento.
145
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se escribirán así:
<H1> Texto de prueba (H1)</H1>.
<H2> Texto de prueba (H2)</H2>
<H3> Texto de prueba (H3)</H3>
<H4> Texto de prueba (H4)</H4>
<H5> Texto de prueba (H5)</H5>
<H6> Texto de prueba (H6)</H6>
No hay que olvidar poner el cierre </Hx> a cada elemento utilizado. Este tipo de
elemento se suele utilizar para escribir encabezamientos, ya que después del cierre
automáticamente el visualizador inserta un salto de párrafo.
se verá:
Texto en H1
Texto en H3
Y no una cosa al lado de la otra, como cabría esperar.
Otra forma de cambiar los tamaños de letra es utilizar el elemento <FONT > con
el atributo VALOR, que es un número entre 1 y 7. El valor por defecto del texto es 3,
por lo que valor puede ser positivo (+) o negativo (-) respecto a 3. Una gran ventaja de
esta notación respecto a la anterior es que no se produce un salto de párrafo después de
cada cambio, por lo que pueden hacerse cosas como esta:
<FONT SIZE=3>A</font><FONT SIZE=4>A</font><FONT SIZE=5>A</font>
146
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
AAA AAAAAA
Se puede cambiar el tamaño por defecto (3) de toda la página con el elemento
<BASEFONT SIZE=valor>. El texto tomará el tamaño indicado por valor y lo
mantendrá hasta que aparezca otro elemento <BASEFONT SIZE=valor> y lo restaure o
lo cambie por otro diferente.
Si escribes
<FONT FACE="arial">Texto de prueba 12345 con tipo ARIAL</FONT>
<FONT FACE="times new roman">Texto de prueba 12345 con tipo TIMES NEW
ROMAN</FONT>
<FONT FACE="courier new">Texto de prueba 12345 con tipo
COURIER NEW</FONT>
<FONT FACE="courier">Texto de prueba 12345 con tipo
COURIER</FONT> <FONT FACE="roman">Texto de prueba 12345 con tipo
ROMAN</FONT> <FONT FACE="small fonts">Texto de prueba 12345 con
tipo SMALL FONTS</FONT>
Se verá:
Por supuesto, este atributo es compatible con todos los demás ya conocidos,
como color y tamaño. Por ejemplo, si escribes
<FONT FACE="impact" SIZE=6 COLOR="red">
Texto de prueba 12345 con tipo IMPACT</FONT>
Se verá:
147
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si escribes:
<B><FONT COLOR="red">Texto ROJO </FONT>
<br>
<FONT COLOR="blue">Texto AZUL </FONT>
<br>
<FONT COLOR="navy">Texto AZUL MARINO </FONT>
<br>
<FONT COLOR="green">Texto VERDE </FONT>
<br>
<FONT COLOR="olive">Texto OLIVA </FONT>
<br>
<FONT COLOR="yellow">Texto AMARILLO </FONT>
<br>
<FONT COLOR="lime">Texto LIMA </FONT>
<br>
<FONT COLOR="magenta">Texto MAGENTA </FONT>
<br>
<FONT COLOR="purple">Texto PURPURA </FONT>
<br>
<FONT COLOR="cyan">Texto CYAN </FONT>
<br>
<FONT COLOR="brown">Texto MARRON </FONT>
<br>
<FONT COLOR="black">Texto NEGRO </FONT>
<br>
<FONT COLOR="gray">Texto GRIS </FONT>
<br>
<FONT COLOR="teal">Texto TEAL </FONT>
<br>
<FONT COLOR="white">Texto BLANCO </FONT>
<br>
</B>
Se verá:
Texto ROJO
Texto AZUL
Texto AZUL MARINO
Texto VERDE
Texto OLIVA
Texto AMARILLO
Texto LIMA
Texto MAGENTA
Texto PURPURA
Texto CYAN
Texto MARRON
Texto NEGRO
Texto GRIS
Texto TEAL
148
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Resulta:
Se escribirá así:
Como puede verse, hay un línea en blanco entre los dos bloques. El efecto del
elemento <BR> (por BReak) es el mismo, pero sin esa línea vacía.
Se escribirá así:
Se escribirán así:
<P ALIGN=LEFT>
Texto 1 Texto 1 Texto 1 Texto 1 Texto 1 Texto 1 Texto 1 Texto
1 Texto 1 Texto 1 Texto 1 Texto 1 Texto 1 Texto 1 Texto 1
Texto 1 <P ALIGN=RIGHT>
Texto 2 Texto 2 Texto 2 Texto 2 Texto 2 Texto 2 Texto 2 Texto
2 Texto 2 Texto 2 Texto 2 Texto 2 Texto 2 Texto 2 Texto 2
Texto 2 <P ALIGN=CENTER>
149
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se escribe así:
<DIV ALIGN=LEFT>
texto1 texto1 texto1 texto1 texto1 texto1 texto1 texto1
texto1 texto1 texto1 texto1 texto1 texto1 texto1 texto1
texto1 texto1 texto1 texto1 texto1 texto1 texto1 texto1
texto1 texto1 texto1 texto1 texto1 texto1 texto1 texto1
texto1 texto1 texto1 texto1 </DIV>
<DIV ALIGN=RIGHT>
texto2 texto2 texto2 texto2 texto2 texto2 texto2 texto2
texto2 texto2 texto2 texto2 texto2 texto2 texto2 texto2
texto2 texto2 texto2 texto2 texto2 texto2 texto2 texto2
texto2 texto2 texto2 texto2 texto2 texto2 texto2 texto2
texto2 texto2 texto2 texto2 texto2 texto2 texto2 texto2
texto2 texto2 texto2 texto2 texto2 < /DIV>
<DIV ALIGN=CENTER>
texto3 texto3 texto3 texto3 texto3 texto3 texto3 texto3
texto3 texto3 texto3 texto3 texto3 texto3 texto3 texto3
texto3 texto3 texto3 texto3 texto3 texto3 texto3 texto3
texto3 texto3 texto3 texto3 texto3 texto3 texto3 texto3
texto3 texto3 texto3 texto3 </DIV>
150
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se escribirá así:
<BLOCKQUOTE>
texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto
texto texto <BLOCKQUOTE>
texto texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto texto
</BLOCKQUOTE>
</BLOCKQUOTE>
Fíjate que en este ejemplo hay un anidamiento, y por tanto, debe haber dos
cierres </BLOCKQUOTE> al final
<HR NOSHADE>
El resultado es:
El resultado será:
151
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
El resultado será:
El resultado será:
O bien:
<HR WIDTH=80% SIZE=5 ALIGN=RIGHT>
El resultado será:
Si se escribe:
<FIELDSET>
Esto es una prueba de enmarcado
</FIELDSET>
Se obtiene:
152
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se verá:
texto texto texto texto texto texto texto texto texto txto texto texto
texto texto texto texto texto
texto centrado texto centrado
texto texto texto texto texto texto texto texto texto txto texto texto
texto texto texto texto texto
Esto, además de a texto sólo, se puede aplicar a una tabla, una imagen o
cualquier otra cosa.
Quedan algunos otros elementos que modifican el aspecto del texto. Algunos,
aparentemente, hacen la misma cosa, y otros no funcionan con el visualizador de
Netscape, por lo que se omiten aquí.
Texto en negrita:
<B>Texto en negrita</B>
Texto realzado:
<STRONG>Texto realzado</STRONG>
Texto en itálica:
<I>Texto en itálica</I>
Texto subrayado:
<U>Texto subrayado</U>
Texto tachado:
<STRIKE>Texto tachado</STRIKE>
Texto de dirección:
<ADDRESS>Texto de dirección</ADDRESS>
Texto intermitente
<BLINK>Texto intermitente</BLINK>
Texto superíndice Texto normal
<SUP>Texto Superíndice</SUP>
Texto grande
<BIG>Texto grande</BIG>
Texto pequeño
<SMALL>Texto pequeño</SMALL>
153
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Fíjate en que los elementos <LI> no tienen cierre. Terminan cuando aparece otro
igual o se cierra la lista.
En este caso los números han sido sustituidos por unos puntos gruesos. Esa es la
apariencia por defecto; se puede cambiar usando el atributo TYPE con tres valores (el
valor por defecto es DISC). Con el valor CIRCLE se verá:
o Primera linea
o segunda linea
Se escribe:
<UL TYPE=CIRCLE>
<LI>Primera linea
<LI>Segunda linea
</UL>
154
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Las listas ordenadas no sólo se pueden ordenar con números. También se pueden
utilizar letras y numeración romana tanto en mayúsculas como minúsculas. Para esto se
utiliza el atributo TYPE del elemento <OL> con los siguientes valores: TYPE=1 (por
defecto) para números, TYPE=A para letras mayúsculas, TYPE=a para letras
minúsculas, TYPE=I para numeración romana en mayúsculas y TYPE=i para
numeración romana en minúsculas.
155
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Esto es una lista ordenada con letras mayúsculas y que comienza por la E:
E. Primera linea
F. Segunda linea
G. Tercera linea
H. Cuarta
linea Se escribe:
<OL TYPE=A START=5>
<LI>Primera linea
<LI>Segunda linea
<LI>Tercera linea
<LI>Cuarta linea
</OL>
Esto es un menú:
• Primera linea
• Segunda linea
Se escribe:
<MENU>
<LI>Primera linea
<LI>Segunda linea
</MENU>
156
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La diferencia entre un menú y una lista desordenada, es que las líneas en la lista
desordenada comienzan en el margen izquierdo y las del menú unas posiciones más a la
derecha (aunque eso depende del visualizador, con Netscape se ven igual).
Esto es un directorio:
• Primera linea
• Segunda linea
Se escribe:
<DIR>
<LI>Primera linea
<LI>Segunda linea
</DIR>
Primera linea
Segunda linea
Se escribe:
<DL>
<DT>Primera linea
<DD>Segunda linea
</DL>
Fíjate que ahora en lugar del elemento <LI> se utiliza <DT> y <DD>, y como
tipo <DL>. Estos tres nuevos elementos también se pueden usar con cualquiera de los
anteriores tipos de lista, alterando por completo su apariencia. Para hacerse una idea de
la variedad de aspectos que se pueden conseguir ver los ejemplos de listados.
<DL>
<DT>Linea de texto 1
<DT>Linea de texto 2
<DT>Linea de texto 3
<DL>
<DT>Linea de texto 3.1
<DT>Linea de texto 3.2
<DL>
<DT>Linea de texto 3.2.1
<DT>Linea de texto 3.2.2
<DL>
<DT>Linea de texto 3.2.2.1
<DT>Linea de texto 3.2.2.2
</DL>
</DL>
</DL>
<DT>Linea 4 de texto
</DL>
Linea de texto 1
Linea de texto 2
Linea de texto 3
Linea de texto 3.1
Linea de texto 3.2
Linea de texto 3.2.1
157
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
10.4.6. Tablas
Las tablas son sin duda uno de los elementos más potentes del HTML. Con
pocos elementos se pueden conseguir efectos espectaculares. En el interior de las celdas
de una tabla, que pueden ser con borde visible o invisible, se puede poner cualquier
cosa: texto de cualquier tamaño y color, imágenes, links... Por supuesto, además de
permitir cualquier contenido, tienen sus propios atributos de alineación tanto horizontal
como vertical, y atributos de dimensionado. Por defecto se autodimensionan, es decir, se
adaptan en tamaño a su contenido, pero también es posible definirlo de forma fija.
Una cabecera <TH> es los mismo que una celda de datos <TD> pero de forma
automática el texto de su contenido recibe los atributos de negrita y centrado. Sólo es
posible definirlas al principio de las filas, de las columnas o de ambas a la vez.
He aquí un resumen de los elementos utilizados y los atributos que admite cada
uno:
TABLE TR TD TH CAPTION
BORDER X - - - -
ROWSPAN - - X X -
COLSPAN - - X X -
ALIGN - X X X X
VALIGN - - X - -
WIDTH X - X - -
HEIGTH X - X - -
CELLPADDING X - - - -
CELLSPACING X - - - -
Resumen de tablas
158
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
White
Red rgb=#FFFFFF
Green rgb=#FF0000
Blue rgb=#00FF00
Magenta rgb=#0000FF
Cyan rgb=#FF00FF
Yellow rgb=#00FFFF
Black rgb=#FFFF00
Aquamarine rgb=#000000
Baker's Chocolate rgb=#70DB93
rgb=#5C3317
Todo esto lo consigue el elemento <A> (por Anchor, en inglés = ancla o punto
de anclaje). En lo sucesivo le llamaremos enlace o sinplemente link (en inglés
link=eslabón o enlace).
Se escribirá:
<A HREF="http://www.miservidor.es/mifichero.htm"> Link de prueba </A>
159
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Si lo que se desea es que aparezca sin subrayado o de otro color, o ambas cosas,
se puede recurrir a una instruccion de estilo. Así:
<A HREF="http://www.miservidor.es/mifichero.htm"
style="color:red; text-decoration:none";> Link de prueba </A>
Esta forma de escribir la ruta del link de forma completa, se utiliza cuando hay
que saltar de una máquina a otra, si el enlace es para otra página de nuestro propio
servidor es suficiente escribir la ruta virtual corta: /mifichero.htm o bien:
/otro_directorio/mifichero.htm según proceda.
Como has visto, el punto de enlace se realiza en el texto escrito antes del cierre
del elemento </A>, pero también puede hacerse con una imagen cualquiera, que iría en
lugar del texto, incluso puedes poner el texto junto con una imagen. Por ejemplo para
hacer un link que nos lleve al índice desde una bola roja, se escribe:
Ir al índice <A HREF="indice.htm"> <img src="bolaroja.gif"> </A>
Al igual que el texto aparece subrayado en azul cuando forma parte de un enlace,
los gráficos reciben un borde azul alrededor de toda la imagen, lo que a veces puede
resultar poco estético. Esto también tiene solución, pero aquí se hace en la instrucción
de la imagen:
Ir al índice <A HREF="indice.htm"> <img src="bolaroja.gif"
border=0> </A>
160
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Dentro de los parámetros pasados a HREF, podrás ver que al principio pone
http://, esto es, el tipo de servicio al que el visualizador va a llamar, y hay varios :
Esta instrucción mostrará la página indice.htm pero con otra ventana del
visualizador, es decir tendremos lanzado el visualizador 2 veces. Esto sólo funciona si el
sistema operativo de tu máquina es multi tarea (p.ej.: Windows-95).
Del mismo modo, el atributo TARGET puede utilizarse para salir de una
pantalla compuesta de frames. En efecto, si estamos en una pantalla con, por ejemplo,
dos frames, cualquier link invocado desde cualquiera de ellos, hace que la página
llamada aparezca en ese mismo frame. Para volver a una pantalla "normal" sin frames,
se puede escribir un link con la sintaxis siguiente:
<A HREF="indice.htm" TARGET="_parent"> </A>
Como se acaba de ver, el atributo HREF sirve para enlazar con otro documento,
que puede estar en un servidor o ser un fichero local, pero que siempre se nos presentará
desde la primera línea del mismo.
El atributo NAME se utiliza para definir algo así como "un punto de aterrizaje"
en cualquier línea del documento de destino, de forma que nos aparecerá en pantalla
desde la línea deseada y no desde el principio. Esto es muy útil cuando se trata de
documentos largos divididos en secciones.
Se escribirá así:
En el documento activo:
<A HREF="http://www.miservidor.es/mifichero.htm#punto1"> Ir al
punto 1</A>
En el documento destino:
<A NAME="punto1"></A>
NAME también puede utilizarse para saltar de una línea a otra dentro de un
mismo documento. Se escribirá así:
161
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
En la línea de destino
<A NAME="punto1"></A>
162
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Las imágenes utilizadas pueden estar en formato GIF o JPG. Estos formatos son
interpretados directamente por el visualizador. Se puede usar cualquier otro formato
como el MPG (vídeo), pero entonces el visualizador llamará a un programa auxiliar, que
previamente le habrás definido, para que sea éste el que visualice el fichero. La
desventaja de las imágenes en formatos no tratados por el propio visualizador es que no
verás el texto junto con la imagen, y por tanto no podrás imprimir la página compuesta.
163
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
164
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Ahora que ya sabes cómo manejar las imágenes, veamos algunos efectos
especiales algo más complicados.
Por ejemplo, en una imagen, la mitad izquierda nos envía a indice.htm y la mitad
derecha a intro.htm. Al mover el puntero del ratón horizontalmente sobre la imagen y
observar la ventanita que hay en la parte baja de la pantalla, se vera como cambia el
nombre del link.
Se escribe así:
<MAP NAME="nombre1">
<AREA SHAPE="rect" COORDS="1,1,75,46" HREF="indice.htm">
<AREA SHAPE="rect" COORDS="76,1,136,46" HREF="intro.htm">
</MAP>
<IMG SRC="sugeren.gif" USEMAP="#nombre1">
En primer lugar tenemos el elemento MAP, que lo que está haciendo es definir
un mapa de coordenadas. Va acompañado del atributo NAME que da nombre al mapa.
Es necesario nombrarlo porque podría haber más de uno en la misma página, y
evidentemente, sus nombres no deberán repetirse.
165
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
HREF ya sabemos lo que hace: indica un link con una página, pero esta vez no
va acompañando al elemento <A>, digamos que es un atributo prestado. Hay un área
por cada link definido. Si un área no queremos que tenga link se definirá con
NOHREF.
IMG SRC también son conocidos: hacen que se visualice la imagen.
Y por fin, USEMAP nos dice qué mapa de coordenadas hay que aplicar a la
imagen. A una misma imagen se le pueden aplicar distintos mapas si se desea. Fíjate en
que nombre1, (el nombre del mapa) va precedido del símbolo #. Esto se debe a que, en
este caso, el mapa al que se hace referencia está en la misma página que la instrucción
IMG. Podría estar en otra, y en ese caso el símbolo tendría que estar después del
nombre de la página. Por ejemplo: otrapagina.htm#nombre1
Linea de texto
Linea de texto
Linea de texto
Linea de texto
Se escribe así:
<BODY BACKGROUND="yellow_r.gif">
166
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
El formulario no es más que una página escrita en HTML como cualquier otra.
Lo que la hace diferente es que permite capturar datos de varias maneras: directamente
desde el teclado, escogiendo un valor de una lista desplegable o seleccionando una
opción desde botones fijos o de todas ellas combinadas.
Una vez terminada la captura de datos, estos forman un registro que es enviado a
un servidor http (web) que lo procesará y devolverá una respuesta. Pueden utilizarse
también para enviar su contenido a una dirección de correo electrónico, o que
simplemente abran otra página.
Si el formulario se diseña para abrir una página o para ser enviado por e-mail,
todo se reduce a escribir HTML, pero la cosa se complica cuando se trata de
transacciones de datos que hay que guardar en un servidor (comercio electrónico). En
este caso, en el servidor tiene que haber un programa especial, creado específicamente
para ese formulario, que reciba los datos y sepa qué hacer con ellos, procesarlos y
confeccionar la respuesta que remitirá al navegador. A esa respuesta se le denomina
documento virtual ya que esa página no está escrita en ninguna parte; es generada,
enviada y destruida.
Todo esto y algunas cosas más (que habrá que ver en la documentación de
referencia) han de tenerse presentes a la hora de realizar programas CGI. Para
terminarlo de complicar, no todos los visualizadores utilizan la misma forma de enviar
los datos recibidos, por lo que se plantea a menudo la necesidad de decidir para qué
visualizador queremos programar nuestro WEB.
167
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Procesar
Se escribe:
<FORM METHOD="POST" ACTION="indice.htm">
......
</FORM>
168
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Otra cosa que puede hacer ACTION, y que además tiene la ventaja de que no
sería preciso diseñar un CGI, es enviar un e-mail (correo electrónico) a un usuario o a
una lista de usuarios. Los datos enviados por el formulario, tendrán la forma que ya
conocemos, pero una vez recibidos por esta vía, pueden ser tratados con programas de
edición de texto, y convertidos al formato que se quiera. Se escribe:
<FORM METHOD="POST" ACTION="mailto:mi-usuario@miservidor-e-mail">
......
</FORM>
CAMPO1=Esto es una
CAMPO2=demostracion de formularios
Al igual que con el elemento <A> es posible hacer que el asunto (subject) del e-
mail se reciba con el texto que quieras, pero omitiendo la parte correspondiente al
cuerpo (body) del mismo, ya que en este caso el contenido del e-mail son los campos
del formulario:
<FORM METHOD="POST" ACTION=
"mailto:mi-usuario@miservidor-e-mail?&subject=asunto de prueba"
ENCTYPE="TEXT/PLAIN">
......
</FORM>
El elemento INPUT
INPUT sin ningún atributo define por defecto una ventana de escritura de 20
caracteres de longitud por una línea de ancho:
Se escribe:
<FORM> <INPUT> </FORM>
169
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
HOLA
Se escribe:
<FORM> <INPUT VALUE="HOLA"> </FORM>
Esta opción se utiliza cuando es necesario enviar un valor fijo al servidor, pero
no se desea que el usuario intervenga o que lo vea. CUIDADO, esto no es un formato
encriptado, viendo el documento fuente se puede saber el valor de la ventana.
Procesar
Se escribe:
170
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
VALUE puede acompañar a SUBMIT , y en este caso sirve para definir el texto
que queremos que tenga el botón en su interior. Si se omite, por defecto el visualizador
le da el valor "Submit Query".
TYPE=RESET para generar un botón que al ser pulsado inicializa todos los
componentes del formulario.
Inicializar
Se escribe:
VALUE puede acompañar a RESET , y en este caso sirve para definir el texto
que queremos que tenga el botón en su interior. Si se omite, por defecto el visualizador
le da el valor "Reset".
TYPE=FILE Este es un nuevo tipo que sólo funciona con Netscape 3.0 o
superior, y sirve para enviar un fichero a una máquina remota (hacer FTP), pero no
funciona solo, necesita de ciertos acompañantes que hacen su uso un poco más
complicado. Aquí hay que echar mano de un atributo parametrizado de <FORM>:
ENCTYPE="multipart/form-data" para generar un botón que permitirá buscar un
fichero en nuestra máquina, ponerlo en una ventanita de entrada como las ya conocidas
(por tanto tanbién se puede escribir directamente el nombre del fichero en lugar de
buscarlo) y junto con un botón tipo submit enviar el fichero.
Se escribe:
<FORM enctype="multipart/form-data"
ACTION="ftp://miservidor/" METHOD="POST">
Enviar el fichero:
<INPUT NAME="mifichero" TYPE="FILE">
<INPUT TYPE="SUBMIT" VALUE="Enviar fichero"></FORM>
171
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Otra forma más directa de hacer un FTP en las dos direcciones, es desde la
ventana "Location" del visualizador. La sintaxis de los parámetros de ACTION son
válidos en esa ventana.
Se escribe:
Los formularios que utilicen este tipo de recursos pueden prescindir del tipo
SUBMIT, ya que el formulario se cierra con la imagen.
172
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Clase A
<INPUT TYPE="RADIO" NAME="clase" VALUE="A">
Clase B
<INPUT TYPE="RADIO" NAME="clase" VALUE="B"></FORM>
El elemento SELECT
SELECT sin ningún atributo define por defecto una lista desplegable de toda la
pantalla de alto y una columna de ancho:
Se escribe:
Se escribe:
173
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Se escribe:
Esto siginifica que cuando selecciones "Este es el valor 5" en realidad lo que se
envía al servidor es "Valor 5".
174
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Valor 1
Procesar Inicializar Valor 2
Valor 3
Se escribe:
El elemento TEXTAREA
Procesar Inicializar
Se escribe:
175
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Algunos visualizadores no soportan los frames. Para que nuestra página con
frames no resulte opaca a ellos, se utilizará el elemento NOFRAMES que permite
ofrecer un texto alternativo en entorno normal.
Hasta aquí ya podemos hacernos una idea de cómo funcionan los frames: Lo
primero es crear una minipágina con la definición del frame, viene a ser algo así como
una "lanzadera" y sólo contiene la definición del frame. Y por último, crear las páginas
176
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
<FRAMESET COLS=20%,*>
<FRAME SRC="a.htm">
<FRAMESET ROWS=40%,*>
<FRAME SRC="b.htm">
<FRAME SRC="c.htm">
</FRAMESET>
</FRAMESET>
Habrás podido comprobar que los parámetros que dimensionan los frames
actuan al presentar la página inicialmente. Después, si el usuario lo desea, puede
redimensionarlos como quiera. Esta es la opción por defecto. Si no se quiere permitir el
redimensionado, se aplica el atributo NORESIZE al elemento FRAME. Así:
<FRAME NORESIZE SRC.....>
Algo parecido ocurre con las barras de scrolling. Están regidas por el atributo
SCROLLING, que puede valer YES NO o AUTO. Por defecto es AUTO. Con esta
opción el visualizador decide, en función del contenido, si son necesarias las barras o
no. Con YES las pondrá siempre, aunque no sean necesarias, y con NO no las pondrá
nunca, aunque sean necesarias.
<FRAME SCROLLING=YES ....>
177
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Un frame con dos áreas verticales. Una normal, la otra con márgenes
forzados para el texto (MARGINWIDTH MARGINHEIGHT)
<FRAMESET COLS=50%,50%>
<FRAME SRC="a.htm">
<FRAME SRC="a.htm"
MARGINWIDTH=50
MARGINHEIGHT=50>
</FRAMESET>
<FRAMESET COLS=50%,50%>
<FRAME SRC="aa.htm">
<FRAME SRC="bb.htm" NAME="VENTANA">
</FRAMESET>
178
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
</FRAMESET>
Junto con estos programas, los ordenadores cargan en memoria unas tablas
especiales que coinciden con los caracteres que tiene tu teclado y algunos más que no
están en el mismo, pero que se pueden escribir en pantalla por otros medios. Estas
tablas, desafortunadamente, no son siempre las mismas, y varían de un sistema a otro,
de una marca de ordenador a otra, y por supuesto, de un idioma a otro. Por ejemplo, no
se ven igual las letras con acentos desde un PC que desde un MACintosh, o una
terminal UNIX, si las escribimos directamente desde el teclado.
Dado que el HTML pretende ser un lenguaje universal, y que una página debe
verse como su creador desea, sin importar si estamos ante un ordenador que "habla" en
inglés o en español, o que tiene tal o cual sistema operativo, se ha creado una tabla de
caracteres "conflictivos" (en realidad están todos, pero generalmente sólo se usa para
caracteres especiales) que se escriben con un código en lugar de pulsar la tecla que lo
contiene directamente.
Esto habrá que hacerlo con todos los caracteres que no sean las letras del
alfabeto (mayúsculas y minúsculas), los números y unos pocos signos, como el punto, la
coma, el guión y algunos otros. A este conjunto de caracteres, común para todos los
sistemas, se le denomina código ASCII, y desde luego hay que codificar todas las letras
acentuadas, eñes, cedillas, etc., etc.
179
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
180