Contenidos Unidad 3 - Marubarrenechea's Weblog · Fundamentos del Lenguaje ... 2 Unidad 03...

59
1 Índice 3.2. Apache Web Server. Conceptos. ............................................................................................. 3 3.3. Instalación................................................................................................................................ 4 3.4. Sitios en Dreamweaver. Creación. ......................................................................................... 15 3.5. Vistas..................................................................................................................................... 15 3.6. Publicación ............................................................................................................................ 17 3.7. Sincronización con el servidor Web. ...................................................................................... 23 3.8. Que es PHP ........................................................................................................................... 25 3.9. Fundamentos del Lenguaje .................................................................................................... 28

Transcript of Contenidos Unidad 3 - Marubarrenechea's Weblog · Fundamentos del Lenguaje ... 2 Unidad 03...

1

Índice3.2. Apache Web Server. Conceptos. ............................................................................................. 3 3.3. Instalación................................................................................................................................ 4 3.4. Sitios en Dreamweaver. Creación. ......................................................................................... 15 3.5. Vistas. .................................................................................................................................... 15 3.6. Publicación ............................................................................................................................ 17 3.7. Sincronización con el servidor Web. ...................................................................................... 23 3.8. Que es PHP........................................................................................................................... 25 3.9. Fundamentos del Lenguaje.................................................................................................... 28

2

Unidad 03

Introducción a Apache Web Server – Lenguaje PHP

Objetivo Al final de esta unidad, habrás desarrollado los conocimientos y habilidades para

comprender los siguientes conceptos:

• Fin del ciclo de desarrollo de un sitio Web: prueba y publicación.

• Publicar el Sitio Local: Sitio remoto en el servidor Web.

• Documento por defecto en los servidores Web.

• Importancia de mantener actualizado el sitio Web.

Además durante el recorrido de esta unidad pretendemos que aprendas la instalación y configuración avanzada de las herramientas utilizadas en este módulo (PHP, Apache y MySQL).

Finalmente podrás realizar una página básica en PHP, que contenga en cuenta variables, tipos de datos, operadores y estructuras de control.

3

3.1. Servidores Web. Concepto y funciones.

Un servidor web es un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo está diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML (hypertext markup language): textos complejos con enlaces, figuras, formularios, botones y objetos incrustados como animaciones o reproductores de música.

Sin embargo, el hecho de que HTTP y HTML estén íntimamente ligados no debe dar lugar a confundir ambos términos. HTML es un formato de archivo y HTTP es un protocolo.

Cabe destacar el hecho de que la palabra servidor identifica tanto al programa como a la máquina en la que dicho programa se ejecuta. Existe, por tanto, cierta ambigüedad en el término, aunque no será difícil diferenciar a cuál de los dos nos referimos en cada caso.

Los archivos para cada sitio de Internet se almacenan y se ejecutan en el servidor. Hay muchos servidores en Internet y muchos tipos de servidores, pero comparten la función común de proporcionar el acceso a los archivos y servicios.

Un servidor sirve información a los ordenadores que se conecten a él. Cuando los usuarios se conectan a un servidor pueden acceder a programas, archivos y otra información del servidor.

En la web, un servidor web es un ordenador que usa el protocolo http para enviar páginas web al ordenador de un usuario cuando el usuario las solicita.

Los servidores web, servidores de correo y servidores de bases de datos son a lo que tiene acceso la mayoría de la gente al usar Internet.

Los servidores se conectan a la red mediante una interfaz que puede ser una red verdadera o mediante conexión vía línea telefónica o digital.

Un servidor web básico cuenta con un esquema de funcionamiento muy simple, basado en ejecutar infinitamente el siguiente bucle:

Espera peticiones en el puerto TCP indicado (el estándar por defecto para HTTP es el 80).

Recibe una petición.

Busca el recurso.

Envía el recurso utilizando la misma conexión por la que recibió petición.

Vuelve al segundo punto.

Un servidor web que siga el esquema anterior cumplirá todos los requisitos básicos de los servidores HTTP, aunque sólo podrá servir ficheros estáticos.

A partir del anterior esquema se han diseñado y desarrollado todos los servidores de HTTP que existen, variando sólo el tipo de peticiones (páginas estáticas, CGIs, Servlets, etc.) que pueden atender, en función de que sean o no sean multi-proceso o multi-hilados, etc.

3.2. Apache Web Server. Conceptos.

• EL Apache, es un Servidor WEB, que cuenta con un motor PHP que permite ejecutar páginas hechas en PHP bajo el protocolo HTTP.

El servidor Apache es un software que esta estructurado en módulos. La configuración de cada módulo se hace mediante la configuración de las directivas que están contenidas dentro

4

del módulo. Los módulos del Apache se pueden clasificar en tres categorías:

Módulos Base: Módulo con las funciones básicas del Apache

Módulos Multiproceso: son los responsables de la unión con los puertos de la máquina, acepando las peticiones y enviando a los hijos a atender a las peticiones

Módulos Adicionales: Cualquier otro módulo que le añada una funcionalidad al servidor.

Las funcionalidades más elementales se encuentran en el módulo base, siendo necesario un módulo multiproceso para manejar las peticiones. Se han diseñado varios módulos multiproceso para cada uno de los sistemas operativos sobre los que se ejecuta el Apache, optimizando el rendimiento y rapidez del código.

El resto de funcionalidades del servidor se consiguen por medio de módulos adicionales que se pueden cargar. Para añadir un conjunto de utilidades al servidor, simplemente hay que añadirle un módulo, de forma que no es necesario volver a instalar el software.

Módulos Base y Módulos Multiproceso:

core: Funciones básicas del Apache que están siempre disponibles.

mpm_common: Colección de directivas que se implementan en más de un módulo multiproceso.

beos: Módulo de multiproceso optimizado para BeOS.

leader: Variable experimental de MPM.

mpm_netware: Módulo de multiproceso que implementa un servidor web optimizado para Novell NetWare.

mpmt_os2: MPM híbrido, multiproceso y multihilo para OS/2.

perchild: Módulo multiproceso que permite a los procesos demonio servir las peticiones que se asignan a distintos id de usuario.

prefork: Implementa un servidor sin hilos.

threadpool: Variante experimental del módulo estándar de MPM.

mpm_winnt: Módulo multiproceso optimizado para Windows NT.

worker: Módulo multiproceso que implementa un híbrido multihilos y multiprocesos de servidor Web.

También trabajaremos con:

• El MySQL, es un motor o servidor de Base de Datos que me permitirá crear y manipular nuestras propias Bases de Datos y Tablas.

• El PHP, es un lenguaje de programación que me permite interactuar con código HTML y conectarme a la Base de MySQL. La aplicación debe residir en el directorio raíz del Servidor HTTP o en un subdirectorio del mismo para que pueda ser interpretado por el motor de PHP.

3.3. Instalación

5

Para poder empezar con la instalación necesitamos que previamente hayan descargado los siguientes programas y aplicaciones.

Requisitos

– Servidor web Apache (www.apache.org )

– con el módulo PHP (www.php.net )

– y la base de datos MySQL (www.mysql.com )

Otras utilidades

– Herramientas para la gestión de MySQL, como PHPMyAdmin (www.phpmyadmin.net), MySql Query Browser

– Editores de PHP, como DevPHP (www.sourceforge.net), Eclipse (www.eclipse.org), Dreamweaver, NuSphere PhpED

Instalación y configuración de Apache

Los pasos que vamos a seguir son:

• Descargar

• Instalar

• Configurar

1: descargar

– Conectarse a www.apache.org

– Seleccionar HTTP Server

• Elegir la versión estable más reciente

– descargarla a una carpeta temporal

2: instalar

– Ejecutar el archivo bajado y seguir las instrucciones

– Introducir la información requerida:

• Network Domain: localhost

• Server name: localhost

• Administrator’s Email Address: webmaster@localhost

– Instalar como servicio (no disponible en W9X)

– Seleccionar instalación típica e instalar en la carpeta por defecto, C:\Archivos de programa\Apache Software Foundation\

– Se crea el grupo de programas Apache HTTP Server y la carpeta C:\Archivos de programa\Apache Software Foundation\Apache2.2

– Arrancar el servidor:

• Inicio > Programas > Apache HTTP Server 2.2.4 > Control Apache Server > Start

– Ejecutar el navegador y cargar http://localhost/

– Si sale la página de inicio del servidor, la instalación habrá sido correcta (a veces luego de esta opción es mejor reiniciar la PC para que se tomen los cambios).

3: configurar

6

– Archivo de configuración: httpd.conf, situado en C:\Archivos de programa\Apache Software Foundation\Apache2.2\conf o Ejecutar: Inicio > Programas > Apache HTTP Server 2.2.4 > Configure Apache Server > Edit the Apache httpd.conf Configuration File

– Cambios:

• DocumentRoot -> c:/htdocs (por defecto es C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs)

• <Directory “c:/htdocs”> (por defecto es C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs)

• Añadir index.php a DirectoryIndex

– Crear carpeta c:\htdocs

– Crear una página de inicio o copiar los ficheros de C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs, en la carpeta creada anteriormente.

– Reiniciar apache para leer la nueva configuración

Instalación y configuración de PHP

Los pasos que vamos a seguir son:

• Descargar

• Descomprimir

• Configurar

• Probar

1: descargar

– Conectar a www.php.net

– Seleccionar downloads, windows binaries

– Elegir la versión estable actual

– Descargar a una carpeta temporal

2: descomprimir

– Extraer a la carpeta c:\

– Se crea o bien crear la carpeta c:\php-x.x.x-Win32. Renombrar a c:\php

3: configurar

– Copiar el archivo de configuración php.ini-recommended como php.ini en la carpeta del sistema (habitualmente c:\windows)

– Editarlo y cambiar lo siguiente:

• doc_root = c:\htdocs

• extension_dir = c:\php\ext

– Editar httpd.conf (C:\Archivos de programa\Apache Software Foundation\Apache2.2\conf) y añadir las líneas siguientes:

• LoadModule php5_module c:/php/php5apache2_2.dll

• AddType application/x-httpd-php .php

– Reiniciar Apache

4: probar

7

– Crear una página PHP de prueba y cargarla con el navegador (por ejemplo: copiar las sentencia que se muestran a continuación en la figura)

– Ejemplo: prueba.php en c:\htdocs\

Figura: Pagina prueba.php

– Ejecutar el navegador y teclear la URL http://localhost/prueba.php

Instalación del editor Dev-PHP

– Descargar de http://sourceforge.net/projects/devphp

– Ejecutar archivo descargado y seguir las instrucciones. Tomar los valores por defecto

– Dev-PHP queda configurado como el editor predeterminado para los archivos PHP

Configuración del php.ini:

El archivo php.ini es el que contiene nuestra configuración de PHP, con el que podemos controlar muchos aspectos de su funcionamiento.

Este archivo sirve para indicar una serie de valores que determinan el comportamiento del intérprete PHP y lo podemos encontrar dentro de la carpeta c:\windows bajo el nombre de php.ini.

Este no es más que un archivo de texto que podemos abrir con cualquier editor que trabaje con texto simple.

Dentro de este archivo, todo lo que comienza con un punto y coma es un comentario, y es ignorado. El texto marcado con corchetes, como [PHP] indica una cabecera de sección.

Las instrucciones se llaman directivas, y están formadas por una pareja compuesta por la clave y su valor, por ejemplo: asp_tags = Off.

Cabe aclarar que debemos tener especial cuidado al modificar este archivo pues diferencia entre mayúsculas y minúsculas por ejemplo no es lo mismo asp_tags que Asp_tags. También verás que algunas directivas comienzan con; lo que quiere decir que están comentadas ya que no son necesarias por defecto.

Otro dato a tener en cuenta es que en Windows las rutas o paths se escriben con la barra invertida (c:\windows) mientras que unix utiliza la barra del dividir (/usr/local/bin/...) cuestión importante porque podemos necesitar configurar algunas rutas.

A continuación veremos algunas de las directivas de configuración:

• Directivas de opciones de lenguaje:

Las instrucciones generales sobre el funcionamiento de PHP son:

engine = On

<?PHP phpinfo(); ?>

8

Activa la interpretación de scripts php (si php está cargado como módulo de apache).

short_open_tag = On

Permite usar en tus scripts etiquetas php abreviadas <? ... ?>, y el atajo para imprimir variables <%= $valor %>. Si el valor es off, deberás usar la forma <?php ... ?> o <script>.

asp_tags = Off

Permite usar etiquetas estilo asp <% ... %>.

precisión = 14

Indica el número máximo de decimales visualizados.

y2k_compliance = On

Sirve para forzar compatibilidad con el año 2000.

output_buffering = Off

Permite enviar cabeceras http (cookies por ejemplo) desde puntos distintos al inicio del script. Además de valores on | off puedes fijar aquí el tamaño máximo (en bytes) de las líneas http permitidas, por ejemplo: output_buffering = 4096

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.

zlib.output_compression = Off

Habilita la librería zlib de forma que los datos de salida del script se envían comprimidos. Puedes indicar valores off|on o precisar el tamaño del buffer (por defecto es de 4 KB).

;zlib.output_handler =

Si tienes activada la opción anterior, no puedes usar la directiva output_handler; con similar funcionalidad tienes zlib.output_handler.

implicit_flush = Off

Intenta enviar al cliente el contenido de la memoria intermedia de salida. Dicho coloquialmente, "envía lo que tengas hasta ahora, en lugar de esperar a completarlo". No es aconsejable su activación, siendo preferido usar la función flush() cuando sea necesario.

unserialize_callback_func=

Relacionado con las funciones serialize().

allow_call_time_pass_reference = Off

Uno mas de los cambios en PHP... tradicionalmente podías construir una función y al usarla, decidir si pasabas o no el valor de una variable por referencia (&$var). Ahora esto es desaconsejado y se recomienda especificar que los valores serán pasados por referencia en la propia declaración de la función (función blah (&$var))

safe_mode = Off

Para activar el modo seguro de PHP.

Si usas PHP como CGI, "debes" activar safe_mode y especificar el valor de safe_mode_exec_dir, con lo cual aseguras que el usuario solo pueda acceder a la información existente en las carpetas especificadas.

9

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 safe_mode_include_dir =

Los archivos que estén en este directorio podrán ser utilizados con include/require en safe_mode On sin necesidad de chequeos UID/GID

safe_mode_exec_dir =

Si el PHP se utiliza en modo seguro, la función system() y el resto de funciones que ejecutan programas del sistema solo actuaran sobre archivos ejecutables que estén en el directorio indicado.

safe_mode_allowed_env_vars = PHP_

Puedes proporcionar aquí una serie de prefijos (separados por ;). Si indicas estos prefijos, en safe_mode los usuarios solo podrán alterar variables de entorno cuyo nombre comience con ese prefijo. Si esta directiva esta vacía, en safe_mode podrán modificarse todas las variables de entorno.

safe_mode_protected_env_vars = LD_LIBRARY_PATH

Permite colocar una lista de variables de entorno (separadas por ;) que no pueden variarse vía putenv() incluso aunque safe_mode_allowed_env_vars lo permita.

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.

Bajo Windows, los directorios se separan mediante punto y coma. En el resto de sistemas, con dos puntos ":". Como módulo de Apache, los senderos para open_basedir de los directorios padre se heredan ahora automáticamente.

El valor por defecto es permitir abrir todos los archivos.

Esta directiva es independiente de Safe Mode.

disable_functions =

Con esta directiva puedes inhabilitar con carácter general determinadas funciones PHP. Basta con incluirlas separadas por punto y coma (";"). Al igual que la anterior, es independiente de Safe Mode.

highlight...

Permite especificar los colores a utilizar por el coloreador de sintaxis interno de PHP

expose_php = On

Permite controlar si PHP debe o no revelar su presencia en el servidor, por ejemplo incluyéndose en las cabeceras http del servidor.

10

• Directivas de los límites al empleo de recursos max_execution_time = 30

Fija el tiempo máximo en segundos que se le permite usar a un script antes de ser finalizado por el intérprete. Así se evita que scripts mal escritos puedan bloquear el servidor.

max_input_time = 60

Indica el tiempo máximo en segundos que el script puede invertir en analizar datos recibidos

memory_limit = 8M

Fija el tamaño máximo de memoria en bytes que se permite reclamar a un script. Así se evita que script mal escritos ocupen toda la memoria disponible de un servidor.

• Directivas de gestión y archivo de errores error_reporting = E_ALL

Fija el nivel (detalle) con el que PHP te informa de errores. Esta directiva vuelca el informe de errores en la pantalla, y su uso no está aconsejado en páginas en producción, ya que el error puede revelar información sensible. Lo recomendado es permitir mostrar errores, con el máximo detalle posible, mientras desarrollas el script PHP; y cuando está terminado y en producción, deshabilitar el mostrado de errores en pantalla y activar en su lugar el archivo de errores.

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).

Algunas combinaciones son:

error_reporting = E_ALL & ~E_NOTICE

Muestra todos los errores críticos, excluyendo advertencias que pueden indicar mal funcionamiento del código pero no impiden la ejecución del intérprete.

error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR

Muestra solo errores.

error_reporting = E_ALL

Muestra todos los errores y advertencias.

display_errors = Off

Determina si los errores se visualizan en pantalla como parte de la salida en HTML o no.

display_startup_errors = Off

11

Incluso con display_errors on, por defecto PHP no muestra los errores que detecta en la secuencia de encendido. Con esta directiva puedes mostrar estos errores. No es aconsejable activarla.

log_errors = On

Guarda los mensajes de error en un archivo. Normalmente el registro del servidor. Esta opción, por tanto, es específica del mismo.

log_errors_max_len = 1024

Especifica el tamaño del archivo error_log. Si tiene un valor 0 significa que no hay restricción de tamaño

ignore_repeated_errors = Off

Si está activado, no archiva mensajes repetidos. No se consideran mensajes repetidos aquellos que no provienen de la misma línea.

ignore_repeated_source = Off

Si está activado, considera repetidos los mensajes de error iguales, aunque provengan de distinta línea / script

report_memleaks = On

Mostrar o no. memory leak se refiere a cuando (por error) el script no libera la memoria usada cuando ya no la necesita, y en consecuencia usa cada vez más hasta llegar a agotarla.

track_errors = Off

Si lo activamos, tendremos el último mensaje de error/advertencia almacenado en la variable $php_errormsg

html_errors = Off

Si lo activamos, no incluye etiquetas HTML en los mensajes de error.

docref_root = /phpmanual/ y docref_ext = .html

Si tienes html_errors activado, PHP automáticamente incluye enlaces en el mensaje de error que te dirigen a la página del manual que explica la función que está implicada. Puedes bajarte una copia del manual y indicar su ubicación (y extensión del archivo) usando estas directivas.

error_prepend_string = "<font color=ff0000>"

Cadena a añadir antes de cada mensaje de error.

error_append_string = "</font>"

Cadena a añadir después del mensaje de error.

;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 (deshabilitado) por defecto.

• Directivas de gestión de datos

track_vars

Esta directiva crea arrays $HTTP_GET_VARS, $HTTP_POST_VARS y

12

$HTTP_COOKIE_VARS con los datos introducidos con los métodos GET, POST y con cookies. Desde PHP 4.0.3 está siempre activa.

;arg_separator.output = "&amp;"

Es el carácter que se empleará en las urls generadas por PHP para separar argumentos (valores pasados vía url). & es el separador por defecto.

;arg_separator.input = ";&"

Es el separador que usará PHP cuando analice una url suministrada para almacenarla en variables

variables_order = "GPCS"

Esta directiva fija el orden (precedencia) en que PHP registrará y interpretará las variables de entorno (de izquierda a derecha en el orden indicado). Los valores posibles se toman con las iniciales del método usado para asignar el valor a la variable: Get, Post, Cookie, Enviroment y Server. Fijando por ejemplo el valor a "GP", hará que el PHP ignore por completo las cookies y que sobrescriba las variables recibidas por GET con las que tengan el mismo nombre y vengan por POST.

En php.ini encontrarás una directiva semejante en desuso (no recomendada) que es gpc_order

register_globals = Off

Permite registrar automáticamente (o no) las variables EGPCS como globales.

register_argc_argv = Off

Esta directiva instruye a PHP si debe declarar las variables argv&argc (arrays predefinidos que almacenan los parámetros pasados (argv) y su numero (argc).

post_max_size = 8M

Tamaño máximo de los datos que PHP aceptará por el método POST

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.

magic_quotes_runtime = Off

Si se habilita magic_quotes_runtime, muchas de las funciones que devuelven datos de algún tipo de fuente externa incluyendo bases de datos y archivos de texto devolverán las comillas marcadas con una barra invertida. Si también está activo magic _quotes_sybase, la comilla simple es marcada con una comilla simple en lugar de la barra invertida.

magic_quotes_sybase = Off

Si magic_quotes_sybase está en on, la comilla simple es marcada con una comilla simple en lugar de la barra invertida cuando están habilitados magic_quotes_gpc o magic_quotes_runtime.

• Mas directivas de Gestión de datos auto_prepend_file = y auto_append_file =

13

Permiten indicar la ruta y nombre de un archivo que se añadirán antes o después (respectivamente) de todos los archivos php que se ejecuten. El valor especial no desconecta la adición automática de archivos.

Si el script es terminado con exit(), no tendrá lugar la adición automática señalada con auto_append_file.

Los archivos indicados con estas directivas se incluirán como si fuesen llamados mediante la función include(), así que se utiliza include_path.

;default_charset = "iso-8859-1"

Por defecto, el código de caracteres indicado por PHP en la cabecera de salida.

default_mimetype = "text/html"

Por defecto, el tipo mime de salida de datos. Cada MIMETYPE define el formato de los datos (por ejemplo, texto/hmtl, jpg, gif ....)

;always_populate_raw_post_data = On

PHP crea la variable $HTTP_RAW_POST_DATA cuando recibe datos via POST cuyo tipo MIME no reconoce (almacena lo s datos en esta variable sin analizarlos). Con esta directiva se ordena que se cree siempre la variable $HTTP_RAW_POST_DATA, aunque el tipo MIME sea conocido.

;allow_webdav_methods = On

Permite manejar las peticiones http propias de webdav.

• Directivas de 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".

doc_root =

Indica el "Directorio raiz" donde están nuestras paginas php en el servidor. Sólo se usa si no está vacío. Si PHP se configura con safe mode, no se interpretaran las páginas php situadas fuera de este directorio. Ojo con los servidores virtuales que apuntan a zonas distintas del servidor.

user_dir =

El directorio raíz para los archivos PHP bajo el directorio inicial de un usuario (/~usuario). Normalmente se deja vacío

extension_dir = ./

En qué directorio debe buscar el PHP las extensiones dinámicas a cargar. Bajo Windows, por defecto si no se coloca ningún valor en esta directiva, se buscaran en c:\php4\extensions\.

enable_dl = On

14

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().

cgi.force_redirect = 1

Por defecto se activa. Es una directiva importante de seguridad que "debes" activar si ejecutas en tu apache PHP como cgi (no es necesaria si tienes PHP como modulo, o si usas como servidor el IIS de Microsoft).

; cgi.redirect_status_env = ;

En conjunción con cgi.force_redirect y servidores distintos de Apache o iPlanet.

; fastcgi.impersonate = 1;

En conjunción con IIS y FastCGI

• Directivas para subir ficheros

file_uploads = On

Permitir o no subir (upload) ficheros vía HTTP.

upload_tmp_dir =

Carpeta o directorio utilizable para guardar temporalmente archivos subidos por PHP. Si no se especifica, usará el designado por defecto por el servidor. El usuario que esté ejecutando el script debe tener permiso de escritura en ese directorio.

upload_max_filesize = 2M

Tamaño máximo de archivos que pueden subirse.

Directivas relacionadas con fopen allow_url_fopen = On

Permite pasar urls (http, ftp) a la función fopen(), en lugar de la ubicación física del archivo

;from="[email protected]"

Define el email a usar como contraseña para ftp anónimo

;user_agent="PHP"

Define la "firma" que dejará PHP en el servidor remoto de donde toma los archivos

default_socket_timeout = 60

Es el Timeout en segundos para la apertura de sockets

; auto_detect_line_endings = Off

Si está activo, PHP detectara automáticamente el carácter que indica fin de línea (distinto en Windows, linux y Windows)

• Directivas de extensiones dinámicas

extension=

15

Indica 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.

Directivas para la configuración de módulos de PHP

define_syslog_variables = Off

Permite definir variables del sistema. Se recomienda colocar en Off.

;browscap = extra/browscap.ini

El archivo browscap.ini es un archivo de texto que contiene información sobre las cadenas de identificación que usa cada navegador. Mediante esta directiva indicas a PHP donde tienes browscap.ini; se usa conjuntamente con la función get_browser().

• Directivas de Configuración de Correo

Si usas PHP bajo linux, puedes enviar correo usando tu propio PC con sendmail; con Windows no tienes esa posibilidad, por lo que para enviar correos desde un script PHP con la función mail() tienes que delegar en tu configuración de correo ordinaria, la que usas por ejemplo con outlook para enviar y recibir correo.

Este sería un ejemplo bajo Windows:

SMTP = [email protected]

Este sería el caso si tu conexión a Internet te la proporciona telefónica.

Especificamos la dirección del servidor smtp (correo saliente).

sendmail_from= [email protected]

La dirección del remitente ("De:") para los correos enviados desde PHP bajo Windows.

3.4. Sitios en Dreamweaver. Creación.

El método más común para crear un sitio Web utilizando Dreamweaver consiste en crear y editar páginas en el disco local, guardándolas en nuestro propio equipo (1). Después conectarnos a un servidor Web remoto donde las vamos a alojar (2) y, a continuación, cargar una copia del sitio web y los documentos (páginas, imágenes, etc.) que contiene (3) en el servidor para ponerlas a disposición pública (4) y que el servidor los "sirva".

16

Cuando un sitio Web se encuentra totalmente operativo en el servidor, veremos que solamente es un conjunto de archivos (HTML, imágenes, animaciones flash, otras carpetas, etc). Todos estos archivos se almacenan en una carpeta dentro del servidor.

Dreamweaver se puede utilizar también creando y modificando directamente las páginas directamente en el servidor de Internet, pero los pasos de este curso dan por sentado que se trabaja localmente y que posteriormente se realiza la carga en un servidor remoto.

Lo primero que tenemos que hacer es crear una carpeta que será la carpeta en la que guardemos todas nuestras páginas, y todos los archivos que vayamos añadiendo, es la carpeta raíz del sitio. La podemos tener previamente creada o crearla a partir del Dreamweaver. Si tenemos dos particiones en el disco duro del ordenador, elegimos la parte destinada a datos. Le damos a Sitio > Administrar sitios...

3.5. Vistas.

Es posible visualizar un sitio en el panel Archivos o en una ventana.

El panel Archivos se puede abrir a través del menú Ventana, opción Archivos. También pulsando F8.

Para cambiar de una vista a otra hay que pulsar sobre el botón que aparece en la parte superior del panel y de la ventana.

Al mismo tiempo, es posible visualizar el sitio local, el sitio remoto, el servidor remoto de prueba o el mapa del sitio.

En esta imagen se visualizan el mapa del sitio y el sitio local.

En este caso los documentos prueba1.htm y prueba2.htm cuelgan del documento indice.htm, ya que éste ha sido definido como página principal del sitio y contiene vínculos hacia los otros dos.

17

Si los archivos se mueven de una carpeta a otra, o se cambian de nombre, desde fuera de Dreamweaver, las páginas no se mostrarán correctamente: no aparecerán imágenes, no funcionarán enlaces, etc.

En cambio, si estas modificaciones se hacen desde dentro de Dreamweaver, a través del sitio, es posible actualizar automáticamente las páginas para que si hacen referencia a un objeto que ha cambiado, después no se produzcan problemas al visualizarlas.

Al modificar algún objeto que es referenciado por algún otro documento, se muestra una ventana similar a esta, que indica los documentos que hacen referencia a dicho objeto, y que pueden ser actualizados para que no se produzcan los problemas antes mencionados.

Simplemente hay que pulsar sobre el botón Actualizar.

18

3.6. Publicación

Prueba general

Deberías establecerte siempre como regla general el ir probando y verificando que tu sitio funcione como lo deseas. Al diseñar una página Web lo que realmente haces es ‘sugerir’ la forma en que deseas que se vea.

Es la gran diferencia con otras ramas del diseño. El producto final puede, y ocasionalmente lo hará en pequeña o mediana escala, diferir de usuario a usuario. Depende de los sistemas operativos, software de navegación, resoluciones y capacidades gráficas de sus computadoras.

Por lo que no esperes al final del diseño del sitio para probarlo con más de un navegador o más de una resolución gráfica del monitor.

Por otra parte hay que verificar que la estructura del sitio es efectiva y la navegación brinda el servicio esperado. Es aconsejable que otra persona, que nunca haya navegado el sitio, pruebe hacerlo para verificar que los elementos de ubicación, navegación e información han sido bien utilizados.

Con respecto a la navegación, cuando se trabaja con sitios medianos o grandes siempre existe la posibilidad de que hayas movido de carpeta, eliminado o cambiado de nombre uno que otro archivo del sitio, lo que puede ocasionar páginas con enlaces incorrectos (rotos) o imágenes que no se muestran, entre otras posibilidades. Por lo que es aún más importante la prueba integral del sitio.

Proveedores de alojamiento Web

Lo primero que obtenemos de nuestro trabajo es un sitio local definido en nuestra computadora personal junto con todos los archivos que lo conforman, bien organizados en carpetas y subcarpetas. Todos estos almacenados ‘por debajo’ de la carpeta ‘raíz’.

Pero todo tú trabajo y desarrollo se encuentra solamente al alcance de las personas que puedan visualizarlo en tu computadora. Es hora de que más personas lo puedan visitar a cualquier hora del día, en cualquier parte del mundo, es hora de publicarlo en Internet.

Como mencionamos en la primera unidad, Internet básicamente se conforma de un gran conjunto de computadoras especiales (Servidores) conectadas las 24 horas del día brindando servicios para otro conjunto de computadoras (Clientes) que se conectan esporádica o permanentemente a dicha red para hacer uso de estos servicios. Esto es lo que se denomina: ‘Arquitectura Cliente/Servidor’.

La Web es simplemente uno de esos servicios, con la particularidad de que en los ‘servidores’ deben correr el programa llamado ‘servidor Web’ (Ej.: Apache, Microsoft IIS, IBM HTTP Server, etc.). ¿Cuál es la tarea de este programa? Bien, primero existen los usuarios o visitantes que solicitan a la Web, mediante sus ‘navegadores de Internet’ (Clientes Web: Internet Explorer, Netscape Navigator), sitios y páginas Web. Los ‘servidores Web’ son los responsables de contestar a estas solicitudes enviando al navegador las páginas y archivos necesarios (imágenes, etc.) para que este pueda visualizarle al visitante lo solicitado.

Como existen proveedores de conexión a Internet (Arnet, Ciudad Internet, FullZero, etc.), también existen (y muchas veces son los mismos) proveedores de alojamiento de sitios Web. O sea, quienes tienen a disposición uno o varios servidores Web conectados a Internet listos para ‘alojar’ tus sitios y los de muchos otros clientes más. Por lo tanto, lo primero que deberías hacer es contratar un servicio de alojamiento de alguno de estos proveedores de alojamiento Web (Web Hosting).

19

Existen miles de estos proveedores, desde los gratuitos (que ya son muchos) hasta pagos de distintos montos.

Proveedores Gratuitos

Con una simple consulta de ‘alojamiento Web gratuito’ en algún buscador de la Web (Ej.: www.google.com.ar) encontrarás miles de sitios en donde te ofrecen dicho servicio. Lo que hay que tener en cuenta es que lamentablemente NADA es gratuito en Internet (y en general . . .). Todos estos proveedores te brindan espacio para tu sitio Web gratuitamente ‘a cambio’ de que les permitas publicitar dentro del mismo. Hay algunos que lo hacen en alguna parte (superior o inferior) de tus páginas o directamente en ventanas independientes que se abren automáticamente al visitar tu sitio.

Estos proveedores también te limitan el espacio en disco para tus archivos y, en algunos casos, la cantidad de visitas (cantidad de transferencia), entre otras cosas.

Algunos proveedores:

• www.gratiswebs.com.ar

• www.tudominiogratis.com

• www.geocities.com

• web.iespana.es

• www.tripod.lycos.es

Proveedores Pagos

Ya cuando tenés un sitio de tamaño considerable y tengas planificado ofrecer más funcionalidades en el mismo que puedan requerir almacenamiento de información en bases de datos, comercio electrónico, chat, etc. En estos casos no va a haber ningún proveedor que te brinde todos o parte de estos servicios gratuitamente. Por lo tanto tendrás que evaluar los diferentes proveedores pagos según sus diferentes ofertas y costos de servicios.

Ejemplo:

• www.apunto-web.com

• www.towebs.com.ar

• www.comsat.com.ar

Publicar el Sitio en Internet

En este punto ya hemos contratado algún alojamiento, gratuito o pago, y estamos en condiciones de publicar nuestro sitio Web a la comunidad de Internet.

Básicamente lo que tenemos que hacer es tomar todos los archivos que componen nuestro sitio Web, incluidas imágenes, animaciones, etc. y subirlas a al servidor Web (alojamiento). Para lograr esto, es imprescindible identificar dónde están todos los archivos de nuestro Web. Si hasta el momento no pusiste atención al momento de almacenar (o guardar) tus páginas e imágenes, muy posiblemente estas estén dispersas por varios directorios y te resulte difícil

20

encontrarlas. Es por esto que es tan importante el concepto de ‘Sitio Local’, o sea, tener almacenados todos los archivos de nuestro sitio bajo una y solo una carpeta ‘raíz’.

Sitio Remoto

El ‘subir’ el sitio simplemente consiste en obtener como resultado una copia exacta de nuestro sitio local, con todas sus carpetas y archivos (páginas, imágenes, animaciones, etc.) almacenada en el servidor Web. Por lo tanto tendremos en el exactamente la misma estructura de archivos que tenemos en nuestra computadora pero en un servidor ‘remoto’. De aquí es que viene el término ‘Sitio Remoto’.

Dependiendo del alojamiento que tengamos, la manera de subir los archivos cambiará. Existen, de todos modos, dos maneras de subir los archivos al servidor Web, por ‘FTP’ o a través de una ‘interfaz Web’, como se menciona a continuación.

Interface Web

Es muy típico que los proveedores de alojamiento gratuito provean de una herramienta de muy fácil uso para subir las páginas. Esta herramienta se accede a través de la Web del proveedor de alojamiento y no es más que un formulario donde se puede elegir los archivos que se desea subir al servidor, se pulsa un botoncito, y todo listo. FreeServers es un ejemplo de esto, es más, ellos solo brindan gratuitamente este medio de transferencia. Como desventaja existe el problema que hay que subir los archivos uno por uno, contra la diferencia de subirlos todos a la vez con FTP.

Documento por defecto

Como ya sabemos, una vez creada una página Web tiene que ser finalmente almacenada en un archivo, como cualquier otro documento que deseemos que perdure en el disco rígido. Es importante conocer el concepto de ‘documento por defecto’, incluso antes de ponerse crear y dar nombres a los archivos de tus páginas. El documento por defecto es el archivo que envía el servidor Web cuando el visitante no especifica qué página en particular es la que solicita (mediante la dirección URL). Veamos esto con un ejemplo. Cuando escribimos la dirección ‘www.santafe.gov.ar’ no estamos especificando ningún nombre de archivo en concreto, entonces el servidor Web donde está alojado este sitio Web nos devolverá el documento por defecto del directorio raíz del dominio. Cada directorio puede tener un solo documento por defecto, por ejemplo, cuando escribimos ‘www.santafe.gov.ar/turismo’ se envía el documento por defecto del directorio ‘turismo’ del servidor Web. Cada servidor Web puede estar configurado de una manera distinta para el documento por defecto, es decir, en cada servidor Web el documento por defecto puede ser distinto. Lo más habitual es que se llame index.html, que es la manera por defecto en la mayoría de los alojamientos Web, pero en otros casos puede variar el documento por defecto y ser lo que los administradores de cada servidor decidan. Otros nombres para el documento por defecto podrían ser default.html o indice.html. Hay que aclarar que muchos servidores Web poseen una lista de posibilidades con prioridades. Ejemplo: primero busca ‘index.html’, si este archivo no se encuentra se intenta ‘index.htm’, luego default.hml, y así sucesivamente. La idea es que facilitemos a los visitantes tanto a recordar direcciones web como también a ingresarlas en sus navegadores de Internet. En el ejemplo anterior, en vez de escribir www.santafe.gov.ar/index.html, que sería la página principal del sitio, simplemente (gracias a esta característica) se puede escribir

21

www.santafe.gov.ar. Decimos que es importante saber cuál es nuestro ‘documento por defecto’ porque es necesario que llamemos a la página principal (Home Page) de nuestro sitio web con ese nombre de archivo.

Publicación con Dreamweaver

Definir una carpeta local

Configurar un sitio web en Dreamweaver es muy sencillo, tan sólo es necesario especificar las propiedades del sitio local y los parámetros de conexión al sitio remoto (en este caso utilizando un acceso FTP) para empezar a publicar archivos en el servidor. Inicie Dreamweaver y en el menú superior seleccione Sitio / Administrar sitios.... Aparecerá una nueva ventana, se trata del Administrador de Sitios:

Haga clic en Nuevo... / Sitio para abrir la ventana de configuración del nuevo sitio.

22

En la ventana de configuración seleccione la pestaña Avanzadas y la categoría Datos locales para introducir todos los datos de la configuración local de su sitio Web.

23

En Nombre del sitio introduzca cualquier nombre que le permita identificar este sitio. Para indicar la Carpeta raíz local deberá hacer clic sobre el botón de la derecha para examinar su disco duro hasta seleccionar el directorio donde se encuentran todos los archivos de su sitio web. También puede configurar la Carpeta predeterminada de imágenes si guarda todas las imágenes de su sitio web en un mismo directorio y la Dirección HTTP de su sitio. Mantenga el resto de las opciones marcadas por defecto.

Definir una carpeta remota

En la misma ventana de configuración del nuevo sitio haga clic en la categoría Datos remotos y en tipo de acceso seleccione FTP. Introduzca el nombre del Servidor FTP (como instructorcursoweb.iespana.es). En el cuadro Directorio del Servidor introduzca la ruta del servidor desde la carpeta raíz FTP hasta la carpeta raíz del sitio remoto. A continuación introduzca su nombre de usuario y contraseña en los cuadros de texto correspondiente y para comprobar que los datos de acceso al servidor remoto son correctos haga clic en Prueba. Mantenga el resto de opciones desactivadas. Para guardar la configuración haga clic en Aceptar y en la ventana del Administrador de Sitios haga clic en Listo (en este ejemplo se ha utilizado la dirección instructorcursoweb.iespana.es, pero usted deberá indicar la dirección de FTP de su dominio o servidor web).

24

Utilizar FTP seguro (SFTP)

Si su plan de alojamiento admite SFTP (FTP seguro) marque la opción Utilizar FTP seguro (SFTP). Al utilizar el sistema SFTP o FTP seguro Dreamweaver utilizará el acceso SSH para transferir los archivos. Al contrario que el FTP tradicional, este protocolo encripta la información que se transmite evitando que las contraseñas y la información sensible se transmitan en claro por Internet. Si activa el FTP seguro deberá cambiar la ruta del Directorio del Servidor e indicar el path absoluto hasta el directorio remoto de publicación, por ejemplo /home/usuario/public_html/ donde usuario es el nombre de usuario de su acceso FTP.

Publicar los archivos locales

Después de configurar las carpetas local y remota ya puede publicar su sitio web. Si no puede ver el administrador de archivos a su derecha (en la ventana principal de Dreamweaver)

seleccione en el menú superior Ventana / Archivos (o pulse F8) y haga clic sobre el icono para conectar. Puede alternar a Vista remota y Vista local para acceder a los archivos del sitio local y del sitio remoto.

25

Aunque puede empezar a transferir sus archivos directamente desde este panel, puede trabajar más cómodamente haciendo clic sobre el icono de la derecha para expandir el administrador de archivos a modo ventana. Como puede comprobar, la apariencia es similar a un cliente de FTP, a la izquierda los archivos del sitio remoto y a la derecha los archivos del sitio local. Puede arrastrar elementos entre ambos sitios (remoto y local) para publicar o descargar archivos.

Si ha trabajado con otros clientes de FTP tal vez se haya acostumbrado a transferir archivos en sentido contrario (de izquierda a derecha para publicar); en Dreamweaver no será un problema. Vaya al menú superior y seleccione Edición / Preferencias... (o pulse Ctrl + U) y seleccione la categoría Sitio. Seleccione Mostrar siempre Archivos locales a la izquierda. Cuando haya transferido sus archivos no olvide comprobar que se han publicado correctamente.

3.7. Sincronización con el servidor Web.

Para sincronizar los archivos:

� En el panel Sitio, elija un sitio en el menú emergente de sitios actuales. � Seleccione archivos o carpetas específicos. � Si desea sincronizar el sitio completo, omita este paso. � En el panel Sitio, lleve a cabo una de estas operaciones:

o Elija Sitio > Sincronizar. o Haga clic con el botón derecho y seleccione Sincronizar en el menú

contextual. Aparece el cuadro de diálogo Sincronizar archivos. o Complete el cuadro de diálogo.

Dreamweaver sincroniza los archivos de forma automática. Si los archivos ya están sincronizados, Dreamweaver le comunica que no es necesario realizar la sincronización.

26

El último "paso" para que tu sitio sea muy visito y que los visitantes entren una y otra vez se trata de mantenerlo siempre actualizado. Hay algunos sitios web que se prestan más que otros a tener sus contenidos actualizados, como son las páginas donde se pueden ver contenidos de actualidad, pero en general todas las páginas pueden mantener secciones con contenidos actualizables. Este es un aspecto muy importante, pues si el visitante se percata de que los contenidos se renuevan constantemente volverá con el tiempo unas cuantas veces. Por lo general habrá que volver siempre sobre este punto para ver qué hay de nuevo y dónde se puede renovar el contenido del Web. No es bueno tener un enlace que no lleva a ningún sitio, igual que no es bueno tener una dirección de correo que ya no existe. Además, si tenemos un área de noticias no será bueno que la última noticia sea de hace tres meses porque da la impresión de que nunca renovamos los contenidos. Como resultado lograrás espantar a tus visitantes. Toda actualización deberá ser seguida su correspondiente prueba y posterior publicación de las páginas en donde los cambios fueron llevados a cabo. Si no mantenemos nuestro sitio actualizado el visitante entrará una vez a la página pero no lo volverá a hacer nunca, con lo que habremos perdido una oportunidad de hacernos con un cliente o un visitante asiduo. Supongo que habrá quedado claro lo importante de esta tarea, aunque salta a la vista, creo, para la mayoría de las personas.

27

3.8. Que es PHP

Por los conocimientos adquiridos en las unidades anteriores, ya estamos familiarizados más o menos con HTML. En realidad el HTML no es lenguaje de programación sino, más bien, se trata de un lenguaje descriptivo que tiene como objeto dar formato al texto y las imágenes que pretendemos visualizar en el navegador.

A partir de este lenguaje somos capaces de introducir enlaces, seleccionar el tamaño de las fuentes o intercalar imágenes, todo esto de una manera prefijada y en ningún caso inteligente. En efecto, el HTML no permite siquiera realizar un simple cálculo matemático o crear una página de la nada a partir de una base de datos. A decir verdad, el HTML, aunque muy útil a pequeña escala, resulta bastante limitado a la hora de concebir sitios de media o gran envergadura.

Es esta deficiencia del HTML la que ha hecho necesario el empleo de otros lenguajes accesorios mucho más versátiles (y de un aprendizaje relativamente más complicado) capaces de responder de manera inteligente a las demandas del usuario (a través del navegador) y que permiten la automatización de determinadas tareas tediosas e irremediables como pueden ser las actualizaciones, el manejo de bases de datos...

Vamos a aprender a programar en PHP y como acceder a un tipo de base de datos como es MySQL, desde una perspectiva muy práctica.

Estos lenguajes capaces de recrear a partir de ciertos scripts un sinfín de páginas automatizadas son los protagonistas de este concepto de páginas dinámicas.

¿Qué es un script?: Un script es un conjunto de instrucciones que se ejecutan paso a paso, instrucción a instrucción. Esto significa que PHP no genera ejecutables, si no que es PHP el encargado de ejecutar nuestro código. Es por tanto un lenguaje interpretado, no compilado.

PHP

Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web, justo antes de que se envíe la página a través de Internet al cliente.

Las páginas que se ejecutan en el servidor pueden realizar accesos a bases de datos, conexiones en red, y otras tareas para crear la página final que verá el cliente. El cliente solamente recibe una página con el código HTML resultante de la ejecución de la PHP. Como la página resultante contiene únicamente código HTML, es compatible con todos los navegadores.

“PHP es el acrónimo de Hipertext Preprocesor (Preprocesador de hipertexto). Es un lenguaje de programación servidor, gratuito e independiente de plataforma, rápido, con una gran librería de funciones y mucha documentación.”

PHP se escribe dentro del código HTML, lo que lo hace realmente fácil de utilizar, tiene algunas ventajas como su gratuidad, independencia de plataforma, rapidez y seguridad. Es independiente de plataforma, puesto que existe un módulo de PHP para casi cualquier servidor web. Esto hace que cualquier sistema pueda ser compatible con el lenguaje lo cual implica una ventaja importante, ya que permite migrar un sitio desarrollado en PHP de un sistema a otro prácticamente sin ningún trabajo.

28

Fue creado originalmente en 1994 por Rasmus Lerdorf, pero como PHP está desarrollado en política de código abierto, a lo largo de su historia ha tenido muchas contribuciones de otros desarrolladores.

Este lenguaje de programación está preparado para realizar muchos tipos de aplicaciones Web gracias a la extensa librería de funciones con la que está dotado. La librería de funciones cubre desde cálculos matemáticos complejos hasta tratamiento de conexiones de red, por poner dos ejemplos.

Algunas de las más importantes capacidades de PHP son: compatibilidad con las bases de datos más comunes, como MySQL, mSQL, Oracle, Informix, y cualquier base de datos que pueda accederse por ODBC.

Incluye funciones para el envío de correo electrónico, subir archivos al servidor, crear dinámicamente en el servidor imágenes en formato GIF, incluso animadas y una lista interminable de utilidades adicionales.

Características: Introducción a la sintaxis PHP

Para incluir código PHP en nuestra página en HTML necesitamos especificar cuáles son las partes constitutivas del código que están escritas en este lenguaje. Esto se hace, como en otros casos, delimitando nuestro código por etiquetas. Podemos utilizar distintos modelos de etiquetas en función de nuestras preferencias y costumbres.

Como lo mencionamos anteriormente PHP nos permite embeber sus pequeños fragmentos de código dentro de la página HTML y realizar determinadas acciones de una forma fácil y eficaz sin tener que generar programas programados íntegramente en un lenguaje distinto al HTML.

Por otra parte, PHP ofrece un sinfín de funciones para la interacción con bases de datos.

ODBC

Open Database Connectivity es un sistema para acceder a diferentes formatos de bases de datos casi sin tener que modificar la aplicación, utilizando para ello SQL (lenguaje de consulta estructurado)

Hay que tener en cuenta sin embargo que no necesariamente todas están configuradas inicialmente y que otras sólo están disponibles a partir de una determinada versión de PHP.

A estas etiquetas las llamaremos etiquetas de inicio y finalización de PHP, respectivamente.

Ejemplo 1:

<html>

<head>

<title>Primer ejemplo de PHP</title>

</head>

<body>

<?php echo "Hola, si todo funciona bien estarás leyendo esta frase en tu navegador!!!"; ?>

</body>

29

</html>

Otra característica general de los scripts en PHP es la forma de separar las distintas instrucciones. Para hacerlo, hay que acabar cada instrucción con un punto y coma ";".

Incluimos también la sintaxis de comentarios. Un comentario es una frase o palabra que nosotros incluimos en el código para comprenderlo más fácilmente al volverlo a leer un tiempo después y que, por supuesto, el ordenador tiene que ignorar ya que no está dirigido a él sino a nosotros mismos.

Los comentarios tienen una gran utilidad ya que es muy fácil olvidarse del funcionamiento de un script programado un tiempo atrás y resulta muy útil si queremos hacer mas comprensible nuestro código a otra persona.

Te recomendamos que a todos los ejemplos que aparezcan en el curso los pruebes. Ejemplo 2:

<html>

<head>

<title>Ejemplo de comentarios en PHP</title>

</head>

<body>

<?

$salida="Probando los comentarios ¿los ves?";

//Comentario de una linea echo $mensaje;

#Este comentario también es de una linea

/*En este caso el comentario ocupa varias lineas */

?>

</body>

</html>

Si usamos doble barra (//) o el símbolo # podemos introducir comentarios de una línea. Mediante /* y */ creamos comentarios de más de una línea. Por supuesto, nada nos impide de usar estos últimos en una sola línea.

3.9. Fundamentos del Lenguaje Identificadores

Es un nombre. Se utilizan para denominar variables, funciones, constantes y clases. El primer carácter debe ser una letra ASCII.

Variables

Las variables en PHP son definidas anteponiendo el símbolo dólar ($) al nombre de la variable que estábamos definiendo.

30

Dependiendo de la información que contenga, una variable puede ser considerada de uno u otro tipo:

Variables numéricas Almacenan cifras

Enteros $entero=2002; Números sin decimales

Real $real=3.14159; Números con o sin decimal

Variables alfanuméricas Almacenan textos compuestos de números y/o cifras

Cadenas Almacenan variables alfanuméricas $cadena="Hola amigo";

Tablas Almacenan series de informaciones numéricas y/o alfanuméricas

Arrays Son las variables que guardan las tablas

$sentido[1]="ver"; $sentido[2]="tocar"; $sentido[3]="oir"; $sentido[4]="gusto"; $sentido[5]="oler";

Objetos Se trata de conjuntos de variables y funciones asociadas. Presentan una complejidad mayor que las variables vistas hasta ahora pero su utilidad es más que interesante.

A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables. En efecto, cuando definimos una variable asignándole un valor, el ordenador le atribuye un tipo. Si por ejemplo definimos una variable entre comillas, la variable será considerada de tipo cadena:

$variable="5"; //esto es una cadena

Sin embargo si pedimos en nuestro script realizar una operación matemática con esta variable, no obtendremos un mensaje de error sino que la variable cadena será asimilada a numérica:

<? $cadena="5"; //esto es una cadena $entero=3; //esto es un entero echo $cadena+$entero ?>

31

Este script dará como resultado "8". La variable cadena ha sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar la operación matemática. Del mismo modo, podemos operar entre variables tipo entero y real. No debemos preocuparnos de nada, PHP se encarga durante la ejecución de interpretar el tipo de variable necesario para el buen funcionamiento del programa.

Sin embargo, en contraste, hay que tener cuidado en no cambiar mayúsculas por minúsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre en mayúsculas o siempre en minúsculas para evitar este tipo de malentendidos a veces muy difíciles de localizar.

Variables asignadas por referencia

En PHP también podemos asignar variables por referencia. En ese caso no se les asigna un valor, sino otra variable, de tal modo que las dos variables comparten espacio en memoria para el mismo dato.

La notación para asignar por referencia es colocar un "&" antes del nombre de la variable.

<?php $foo = 'Bob'; // Asigna el valor 'Bob' a $foo $bar = &$foo; // Referencia $foo vía $bar. $bar = "Mi nombre es $bar"; // Modifica $bar... echo $foo; // $foo también se modifica. echo $bar; ?>

Esto dará como resultado la visualización dos veces del string "Mi nombre es Bob". Algo como: Mi nombre es BobMi nombre es Bob Cambio del tipo de las variables en PHP

PHP no requiere que indiquemos el tipo que va a contener una variable, sino que lo deduce del valor que asignemos a la variable. Asimismo, se encarga de actualizar automáticamente el tipo de la variable cada vez que le asignamos un nuevo valor.

Por ello, para cambiar el tipo de una variable simplemente le asignamos un valor con un nuevo tipo.

Nota: Se excluyen en este caso el cambio de variables a tipo Array porque la sintaxis puede resultar ambigua al expresar ese código, es decir, puede darse el caso de que una línea de código pueda significar dos cosas.

$a = "1"; //$a es una cadena $a[0] = "f"; //¿Estamos editando el índice de la cadena o forzando a array?

Forzado En cualquier caso, podemos forzar una variable para que cambie de tipo con la función setType().

setType($variable,"nuevo_tipo");

32

la función setType() actualiza el tipo de $variable a "nuevo_tipo" y devuelve un boleano indicando si hubo éxito o no en la conversión.

Entre "nuevo_tipo" tenemos:

� "integer" � "double" � "string" � "array" � "object"

También podemos hacer que una variable se comporte como un tipo determinado forzándola, de la misma manera a como se hace en el lenguaje C.

$variable = "23"; $variable = (int) $variable;

Los forzados permitidos son: � (int), (integer) - fuerza a entero (integer) � (real), (double), (float) - fuerza a doble (double) � (string) - fuerza a cadena (string) � (array) - fuerza a array (array) . (object) - fuerza a objeto (object)

Envío de variables

Muchas veces queremos utilizar una variable definida en un srcipt de PHP en otro script o enviar datos mediante un formulario.

Para ello vamos a ver dos ejemplos que te darán una idea cómo se implementan estas situaciones.

Ejemplo:

<html>

<head>

<title>Página de inicio</title>

</head>

<body>

<H2>Esta es la página de inicio</H2>

<?

$nro=1;

?>

<br><br>

<a href="pagina.php?nro=<?echo $nro;?>">Comenzar</a>

</body>

</html>

Guardá el archivo con el nombre inicio.php y creá uno nuevo con el nombre pagina.php.

33

<html>

<head>

<title>Página <?echo $nro;?></title>

</head>

<body>

<H2>Esta es la página <?echo $nro;?></H2>

<?

$nro++;

?>

<br><br>

<a href="pagina.php?nro=<?echo $nro;?>">Ir a la siguiente página</a>

</body>

</html>

Bien ahora ingresa a inicio.php y continúa la navegación por el link inferior. Ves que el valor de la variable se indica en la barra de navegación de tu navegador y después del nombre del archivo precedido por un signo de interrogación pagina.php?nro=2.

Ahora vamos a ver cómo enviamos variables a través de formularios.

Ejemplo:

<html>

<head>

<title>Ingreso</title>

</head>

<body>

<H2>Ingreso a la página</H2>

<form action="envia_form.php" method=POST>

Nombre: <input type=text name="nombre" size=16>

Apellido: &nbsp;&nbsp;&nbsp; <input type=text name="apellido"

size=16>

<input type=submit value="Entrar">

</form>

</body>

</html>

Guardar el archivo con el nombre formulario.php, como verás en la etiqueta form, este script llama a envia_form.php, por lo tanto al próximo script le deberás poner ese nombre.

34

<?php

$nom_enviado=$_POST['nombre']."&nbsp;".$_POST['apellido'];

?>

<html>

<head>

<title>Usuario <?echo $nom_enviado;?> </title>

</head>

<body>

<H2>Hola <?php echo $nom_enviado;?> bienvenido a la página!!!</H2>

</body>

</html>

El método post es el usado normalmente en los formularios.

Con este método las variables se pasan entre páginas sin verlo el usuario, con el método get el usuario ve las variables ya que se ven desde la barra de direcciones del navegador.

mail(destinatario, asunto, cuerpo, headers, additional_parameters)

Parámetros necesarios: destinatario, asunto y cuerpo.

Parámetros opcionales: headers y additional_parameters.

Ves en este script que la variable $_POST se utiliza como un arreglo asociativo, cuyos componentes se acceden mediante el nombre de las variables especificadas en el formulario.

Envío de emails

Para el envío de correos electrónicos utilizando PHP disponemos de una función bastante potente, incluida en todas las versiones de PHP.

En PHP disponemos de la función mail() que permite configurar y enviar el mensaje de correo.

La función mail() recibe tres parámetros obligatorios y otros dos parámetro opcionales.

Destinatario: indica la dirección de correo o direcciones de correo que han de recibir el mensaje. Si incluimos varias direcciones debemos separarlas por una coma.

Asunto: indica la cadena de caracteres que queremos que sea el título del correo electrónico a enviar.

Cuerpo: el cuerpo del mensaje, lo que queremos que tenga escrito el correo.

Headers: Cabeceras del correo. Datos como la dirección de respuesta, las posibles direcciones que recibirán copia del mensaje, las direcciones que recibirán copia oculta, si el correo está en formato HTML, etc.

Additional_parameters: esta opción no suele utilizarse y, además, sólo está disponible a partir de la versión PHP 4.0.5.

35

Ejemplo:

<?

mail("[email protected]","Hola!!!","Como estas?? Te escribo para decirte mi nueva direccion") ;

/*El email, si todo está bien configurado, le llegará a [email protected] con el título Hola!!! y en el cuerpo del mensaje aparecerá Como estas??........etc.etc.etc.*/

?>

Ejemplo:

Vamos a enviar los datos cargados en un formulario por email, al siguiente archivo lo guardaremos con el nombre enviar_datos.php

<html>

<head>

<title>Envío de datos</title>

</head>

<body>

<?

if (!$_POST){ /*Comprobamos si se ha cargado el formulario, es decir si _POST esta vacía o no*/

?>

<form action="enviar_datos.php" method=post> <!—Te das cuenta que el formulario llama al mismo archivo que contiene la carga de los datos, según si el formulario haya sido completado o no, se visualizarán diferentes contenidos---->

Nombre: <input type=text name="nombre" size=16>

<br>

Email: <input type=text name="email" size=16>

<br>

Edad: <input type=text name="edad" size=4>

<br>

Ciudad: <input type=text name="ciudad" size=36>

<br>

<input type=submit value="Enviar">

</form>

<?

}else{

//1Estoy recibiendo el formulario, compongo el cuerpo del mensaje $cuerpo = "Formulario enviado\n";

$cuerpo .= "Nombre: " . $_POST["nombre"] . "\n";

36

$cuerpo .= "Email: " . $_POST["email"] . "\n";

$cuerpo .= "Edad: " . $HTTP_POST_VARS["edad"] . "\n";

$cuerpo .= "Ciudad: " . $_POST["ciudad"] . "\n";

//dirección del remitente

$headers .= "From:

".$_POST["nombre"].$_POST["email"]."\r\n";

//direcciones que recibián copia

$headers .= "Cc: [email protected]\r\n";

//direcciones que recibirán copia oculta

$headers .= "Bcc: [email protected]\r\n";

//mando el correo...

if (mail("[email protected]","Datos",$cuerpo,$headers))

//Aquí ya estamos enviando el email y comprobando a su vez si se hace correctamente

{echo "Gracias por completar el formulario. Se ha enviado correctamente."; }

else

{echo "Ha ocurrido un erro al intentar enviar los datos, por favor intentelo nuevamente."; }

}

?>

</body>

</html>

Literales Es un valor de dato que aparece directamente en el programa. Ejemplos: 2007, “Hola”, true. Palabras Claves Variables de sistema en PHP

Dada su naturaleza de lenguaje de lado servidor, PHP es capaz de darnos acceso a toda una serie de variables que nos informan sobre nuestro servidor y sobre el cliente. La información de estas variables es atribuida por el servidor y en ningún caso nos es posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir directamente sobre la propiedad que definen.

Existen multitud de variables de este tipo, algunas sin utilidad aparente y otras realmente interesantes y con una aplicación directa para nuestro sitio Web. Aquí enumeramos algunas de estas variables y la información que nos aportan:

Variable Descripción

37

$HTTP_USER_AGENT

Nos informa principalmente sobre el sistema operativo y tipo y versión de navegador utilizado por el internauta. Su principal utilidad radica en que, a partir de esta información, podemos redireccionar nuestros usuarios hacia páginas optimizadas para su navegador o realizar cualquier otro tipo de acción en el contexto de un navegador determinado.

$HTTP_ACCEPT_LANGUAGE

Nos devuelve la o las abreviaciones de la lengua considerada como principal por el navegador. Esta lengua o lenguas principales pueden ser elegidas en el menú de opciones del navegador. Esta variable resulta también extremadamente útil para enviar al internauta a las páginas escritas en su lengua, si es que existen.

$HTTP_REFERER

Nos indica la URL desde la cual el internauta ha tenido acceso a la página. Muy interesante para generar botones de "Atrás" dinámicos o para crear nuestros propios sistemas de estadísticas de visitas.

$PHP_SELF Nos devuelve una cadena con la URL del script que está siendo ejecutado. Muy interesante para crear botones para recargar la página.

$HTTP_GET_VARS Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por URL o por formularios GET

$HTTP_POST_VARS Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por medio de un formulario POST

$HTTP_COOKIES_VARS Se trata de un array que almacena los nombres y contenidos de las cookies. Veremos qué son más adelante.

$PHP_AUTH_USER

Almacena la variable usuario cuando se efectúa la entrada a páginas de acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para controlar el acceso a las páginas internas del sitio.

$PHP_AUTH_PW

Almacena la variable password cuando se efectúa la entrada a páginas de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para controlar el acceso a las páginas internas del sitio.

$REMOTE_ADDR Muestra la dirección IP del visitante.

$DOCUMENT_ROOT Nos devuelve el path físico en el que se encuentra alojada la página en el servidor.

$PHPSESSID Guarda el identificador de sesión del usuario. Veremos más

38

adelante en qué consisten las sesiones.

No todas estas variables están disponibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. Además, algunas de ellas han de ser previamente activadas o definidas por medio de algún acontecimiento. Así, por ejemplo, la variable $HTTP_REFERER no estará definida a menos que el internauta acceda al script a partir de un enlace desde otra página. Variables superglobales

A partir de PHP 4.1.0, se dispone de un conjunto de variables de tipo array que mantienen información del sistema, llamadas superglobales porque se definen automáticamente en un ámbito global.

Estas variables hacen referencia a las mismas que se accedían antes por medio de los arrays del tipo $HTTP_*_VARS. Éstas todavía existen, aunque a partir de PHP 5.0.0 se pueden desactivar con la directiva register_long_arrays.

La lista de estas variables, extraída directamente de la documentación de PHP es la siguiente: $GLOBALS Contiene una referencia a cada variable disponible en el espectro de las variables del script. Las llaves de esta matriz son los nombres de las variables globales. $GLOBALS existe dese PHP 3. $_SERVER Variables definidas por el servidor Web ó directamente relacionadas con el entorno en don el script se esta ejecutando. Análoga a la antigua matriz $HTTP_SERVER_VARS (la cual está todavía disponible, aunque no se use).

$_GET Variables proporcionadas al script por medio de HTTP GET. Análoga a la antigua matriz $HTTP_GET_VARS (la cual está todavía disponible, aunque no se use).

$_POST Variables proporcionadas al script por medio de HTTP POST. Análoga a la antigua matriz $HTTP_POST_VARS (la cual está todavía disponible, aunque no se use).

$_COOKIE Variables proporcionadas al script por medio de HTTP cookies. Análoga a la antigua matriz $HTTP_COOKIE_VARS (la cual está todavía disponible, aunque no se use).

$_FILES Variables proporcionadas al script por medio de la subida de ficheros via HTTP. Análoga a la antigua matriz $HTTP_POST_FILES (la cual está todavía disponible, aunque no se use). Vea también Subiendo ficheros por método POST para más información.

39

$_ENV Variables proporcionadas al script por medio del entorno. Análoga a la antigua matriz $HTTP_ENV_VARS (la cual está todavía disponible, aunque no se use).

$_REQUEST Variables proporcionadas al script por medio de cualquier mecanismo de entrada del usuario y por lo tanto no se puede confiar en ellas. La presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de configuración variables_order. Esta matriz no tiene un análogo en versiones anteriores a PHP 4.1.0. Vea también import_request_variables(). $_SESSION Variables registradas en la sesión del script. Análoga a la antigua matriz $HTTP_SESSION_VARS (la cual está todavía disponible, aunque no se use). Vea también la sección Funciones para el manejo de sessiones para más información. Tipos de datos

PHP soporta 8 tipos de datos primitivos: – Tipos escalares: boolean, integer, double, string – Tipos compuestos: array, object – Tipos especiales: resource, NULL

El tipo de una variable no se suele especificar. Se decide en tiempo de ejecución en función del contexto y puede variar

Tipo integer (números enteros) Los enteros se pueden especificar usando una de las siguientes sintaxis:

$a = 1234; # número decimal $a = -123; # un número negativo $a = 0123; # número octal (equivalente al 83 decimal) $a = 0x12; # número hexadecimal (equivalente al 18 decimal) Tipo double (números reales)

Los números en punto flotante ("double") se pueden especificar utilizando cualquiera de las siguientes sintaxis: $a = 1.234; $a = 1.2e3;

– 27, -5, 0 – 1.234, -5.33

Tipo boolean (lógico)

– Valores: true, false (insensibles a las mayúsculas) – El 0 y la cadena vacía tienen valor false

Tipo string:

– Las cadenas se encierran entre comillas simples o dobles: • ‘simples’: admite los caracteres de escape \’ (comilla simple) y \\ (barra).

Las variables NO se expanden • “dobles”: admite más caracteres de escape, como \n, \r, \t, \\, \$, \”. Los

nombres de variables SÍ se expanden Ejemplos: $a = 9; print ‘a vale $a\n’; // muestra a vale $a\n print “a vale $a\n”; // muestra a vale 9 y avanza una línea print “<IMG SRC=‘logo.gif’>”;

40

// muestra <IMG SRC=‘logo.gif’> print “<IMG SRC=\”logo.gif\”>”; // muestra <IMG SRC=“logo.gif”> Acceso a un carácter de la cadena: • La forma es $inicial = $nombre{0}; Alcances de variables

El ámbito de una variable es el contexto dentro del que la variable está definida. La mayor parte de las variables PHP sólo tienen un ámbito simple. Este ámbito simple también abarca los ficheros incluidos y los requeridos. Por ejemplo:

$a = 1; include "b.inc"; Aquí, la variable $a 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:

$a = 1; /* ámbito global */ 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 usted 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. Veamos un ejemplo: $a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b; El script anterior producirá la salida "3". Al declarar $a y $b globales dentro de la función, todas las referencias a tales variables se referirán a la versión global. No hay límite al número de variables globales que se pueden manipular dentro de una función. Constantes Definición de constantes: define (“CONSTANTE”, “hola”); print CONSTANTE; No llevan $ delante

41

Sólo se pueden definir constantes de los tipos escalares (boolean, integer, double, string) Operadores

Las variables, como base de información de un lenguaje, pueden ser creadas, modificadas y comparadas con otras por medio de los llamados operadores. En los capítulos anteriores quizas ya hemos utilizado en nuestros ejemplos algunos de ellos.

En este capítulo pretendemos listar los más importantes y así dar constancia de ellos para futuros ejemplos.

Operadores Aritméticos

Estos son los operadores que se pueden aplicar a las variables y constantes numéricas.

Nos permiten realizar operaciones numéricas con nuestras variables

Tabla 1.2

Operadores de Asignación

El operador básico de asignación es "=", significa que el operando de la izquierda toma el valor de la expresión de la derecha.

El valor de una expresión de asignación es el propio valor asignado. Esto es, el valor de "$a = 3"es 3. Esto permite hacer cosas como $a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4.

Además del operador básico de asignación, existen los "operadores combinados" para todas las operaciones aritméticas y de cadenas que sean binarias (es decir de dos operandos). Este

42

operador combinado te permite, de una sola vez, usar una variable en una expresión y luego establecer el valor de esa variable al resultado de la expresión.

Ejemplo:

<html>

<head>

<title>Ejemplo de operadores de asignación</title>

</head>

<body>

<?php

$a = 3;

$a += 5;

echo $a.”<br>”;

$b = "Hola ";

$b .= "Ahí!"; echo $a.”<br>”;

echo $b.”<br>”;

?>

</body>

</html>

Operadores de Comparación

Se utilizan principalmente en nuestras condiciones para comparar dos variables y verificar si cumple o no la propiedad del operador.

Tabla 1.3

Ejemplo:

<html>

<head>

<title>Ejemplo de Operadores de Comparación</title>

43

</head>

<body>

<?php

$a = 10;

$b = 6;

$c = 6;

echo $a == $b,"<br>";

echo $a != $b,"<br>";

echo $a < $b,"<br>";

echo $a > $b,"<br>";

echo $a >= $c,"<br>";

echo $b <= $c,"<br>";

?>

</body>

</html>

Operadores Lógicos

Los operadores lógicos son usados para evaluar varias comparaciones, combinando los posibles valores de estas. También se usan en combinación con los operadores de comparación cuando la expresión de la condición lo requiere.

Tabla 1.4

Ejemplo:

<html>

44

<head>

<title>Ejemplo de Operadores Lógicos</title>

</head>

<body>

<?php

$a = 10;

$b = 6;

$c = 6;

echo ($a == $b) && ($c > $b),"<br>";

echo ($a == $b) || ($b == $c),"<br>";

echo !($b <= $c),"<br>";

?>

</body>

</html>

Operadores de incremento

Sirven para aumentar o disminuir de una unidad el valor de una variable

++$variable Aumenta de 1 el valor de $variable

--$variable Reduce de uno el valor de $variable

Operadores combinados

Una forma habitual de modificar el valor de las variables es mediante los operadores combinados:

$variable += 10 Suma 10 a $variable

$variable -= 10 Resta 10 a $variable

$variable .= "añado" Concatena las cadenas $variable y "añado"

Este tipo de expresiones no son más que abreviaciones de otras formas más clásicas:

$variable += 10 es lo mismo que: $variable = $variable+10

Estructuras de Control

45

Condicionales

Las sentencias condicionales nos permiten ejecutar o no ciertas instrucciones dependiendo del resultado de evaluar una condición. Las más frecuentes son la instrucción if y la instrucción switch.

Control del flujo en PHP: Sentencia if ... else

La programación exige en muchas ocasiones la repetición de acciones sucesivas o la elección de una determinada secuencia y no de otra dependiendo de las condiciones específicas de la ejecución.

Como ejemplo, podríamos hacer alusión a un script que ejecute una secuencia diferente en función del día de la semana en el que nos encontramos.

Este tipo de acciones pueden ser llevadas a cabo gracias a una paleta de instrucciones presentes en la mayoría de los lenguajes. En este capítulo describiremos someramente algunas de ellas propuestas por PHP y que resultan de evidente utilidad.

Para evitar el complicar el texto, nos limitaremos a introducir las más importantes dejando de lado otras cuantas que podrán ser fácilmente asimilables a partir de ejemplos prácticos.

La sentencia if ejecuta una serie de instrucciones u otras dependiendo de la condición que le pongamos. Probablemente sea la instrucción más importante en cualquier lenguaje de programación.

Estructura if..else:

<?php

if (condición)

{

Sentencias a ejecutar cuando la condición es cierta.

}

else

{

Sentencias a ejecutar cuando la condición es falsa.

}

?>

Ejemplo:

<html>

<head>

<title>Ejemplo de If..else</title>

</head>

<body>

<?php

46

$a = 10;

$b = 6;

if ($a < $b)

{

echo "a es menor que b";

}

else

{

echo "a no es menor que b";

}

?>

</body>

</html>

Llegados a este punto, el programa verificará el cumplimiento o no de la condición. Si la condición es cierta las instrucciones 1 y 2 serán ejecutadas. De lo contrario (else), las instrucciones A y B serán llevadas a cabo.

Esta estructura de base puede complicarse un poco más si tenemos cuenta que no necesariamente todo es blanco o negro y que muchas posibilidades pueden darse. Es por ello que otras condiciones pueden plantearse dentro de la condición principal. Hablamos por lo tanto de condiciones anidadas que tendrían una estructura del siguiente tipo:

if (condición1) { Instrucción 1; Instrucción 2; ... } else { if (condición2) { Instrucción A; Instrucción B; ... } else { Instrucción X ... }

47

}

De este modo podríamos introducir tantas condiciones como queramos dentro de una condición principal.

De gran ayuda es la instrucción elseif que permite en una sola línea introducir una condición adicional. Este tipo de instrucción simpifica ligeramente la sintaxis que acabamos de ver:

if (condición1) { Instrucción 1; Instrucción 2; ... } elseif (condición2) { Instrucción A; Instrucción B; ... } else { Instrucción X ... }

El uso de esta herramienta resultará claro con un poco de práctica. Pongamos un ejemplo sencillo de utilización de condiciones. El siguiente programa permitiría detectar la lengua empleada por el navegador y visualizar un mensaje en dicha lengua.

<HTML> <HEAD> <TITLE>Detector de Lengua</TITLE> </HEAD> <BODY> <? //Antes de nada introducimos mensajes en forma de variables $espanol="Hola"; $ingles="Hello"; $frances="Bonjour"; //Ahora leemos del navegador cuál es su lengua oficial $idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2); //Formulamos las posibilidades que se pueden dar if ($idioma == "es") {echo "$espanol";} elseif ($idioma=="fr")

48

{echo "$frances";} else {echo "$ingles";} ?> </BODY> </HTML>

Para poder ver el funcionamiento de este script es necesario cambiar el idioma preferido lo

cual puede ser realizado a partir del menú de opciones del navegador. Para leer la lengua aceptada por el navegador lo que hacemos es definir una variable ($idioma) y, mediante la función substr, recogemos las dos primeras letras del código correspondiente al idioma aceptado por el navegador ($HTTP_ACCEPT_LANGUAGE).

La tercera parte de script se encarga de ver si el navegador está en español (es), francés (fr) o en cualquier otro idioma que no sea ninguno de estos dos y de imprimir el mensaje que proceda en cada caso.

A notar que, cuando se trata de comparar variables, ponemos un doble igual "==" en lugar de un simple "=". Este último queda reservado exclusivamente para asignar valores a variables

Sentencia switch ... case

La sentencia switch es similar a una serie de sentencias IF en la misma expresión. Con switch podemos ejecutar unas u otras instrucciones dependiendo del valor de una variable.

Estructura switch..case:

<?php

$variable=valor;

switch ($variable) {

case valor0:

sentencias;

break;

case valor1:

sentencias;

break;

case valor2:

sentencias;

break;

}

?>

Es importante entender cómo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta línea por línea. Sólo cuando se encuentra una sentencia case con un

49

valor que coincide con el valor de la expresión switch, PHP comienza a ejecutar las sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguirá ejecutando las sentencias del siguiente case.

Ejemplo 13:

<html>

<head>

<title>Ejemplo de switch...case sin break</title>

</head>

<body>

<?php

$i=0;

switch ($i) {

case 0:

echo "i es igual a 0";

case 1:

echo "i es igual a 1";

case 2:

echo "i es igual a 2";

}

?>

</body>

</html>

Bien, ahora has visto que si no pones una sentencia break al final de cada case, el funcionamiento del switch no será el deseado.

Pruébalo nuevamente escribiendo la sentencia break; detrás de cada punto y coma de las sentencias echo.

Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Es decir, se ejecuta cuando ninguno de los case coinciden. Es llamado “el caso por defecto”.

Ejemplo 14:

<html>

<head>

<title>Ejemplo de switch...case con default case</title>

</head>

<body>

<?php

50

$color = "rojo";

switch($color) {

case "rojo": // Bloque 1

echo "La variable contiene";

echo " el valor rojo";

break;

case "azul": // Bloque 2

echo "La variable contiene";

echo " el valor azul";

break;

default: // Bloque 3

echo "La variable contiene otro valor";

echo " distinto de rojo y azul";

}

?>

</body>

</html>

Bucles (ciclos)

Control del flujo en PHP

Los ordenadores, como cualquier máquina, están diseñados para realizar tareas repetitivas. Es por ello que nuestros programas pueden aprovecharse de este principio para realizar una determinada secuencia de instrucciones un cierto número de veces. Para ello, utilizamos las estructuras llamadas en bucle que nos ayudan a, usando unas pocas líneas, realizar una tarea incluida dentro del bucle un cierto numero de veces definido por nosotros mismos. Nos permiten iterar conjuntos de instrucciones, es decir repetir la ejecución de un conjunto de instrucciones mientras se cumpla una condición.

PHP propone varios tipos de bucle cada uno con características específicas.

Sentencia while

Mientras la condición sea cierta se reiterará la ejecución de las instrucciones que están dentro del while.

Ejemplo 15:

<html>

<head>

<title>Ejemplo de while</title>

51

</head>

<body>

Inicio<BR>

<?php

$cantidad=0;

while ($cantidad<10)

{

echo "El valor de cantidad es ", $cantidad,"<br>";

$cantidad++;

}

?>

Final<BR>

</body>

</html>

Sin duda el bucle más utilizado y el más sencillo. Lo usamos para ejecutar las instrucciones contenidas en su interior siempre y cuando la condición definida sea verdadera. La estructura sintáctica es la siguiente.

while (condición) { instruccion1; instruccion2; ... }

Un ejemplo sencillo es este bucle que aumenta el tamaño de la fuente en una unidad a cada nueva vuelta por el bucle:

<? $size=1; While ($size<=6) { echo"<font size=$size>Tamaño $size</font><br>\n"; $size++; } ?>

A modo de explicación, diremos que, antes de nada, hemos de definir el valor de la variable que vamos a evaluar en la condición. Algo absolutamente obvio pero fácil de olvidar. En este caso le hemos atribuido un valor de 1 que corresponde a la letra más pequeña. El paso siguiente es crear el bucle en el que imponemos la condición que la variable no exceda el valor de 6.

52

La instrucción a ejecutar será imprimir en nuestro documento un código HTML en el que la etiqueta font y el mensaje que contiene varían a medida que $size cambia su valor. El siguiente paso es incrementar en una unidad el valor de $size. Esto se puede hacer con una expresión como la mostrada en el bucle ($size++) que en realidad es sinónima de: $size=$size+1 Veremos otras de estas abreviaciones más adelante.

Otro ejemplo del buble While

El bucle while se suele utiliza cuando no se sabe exactamente cuantas iteraciones se deben realizar antes de acabar. Vamos a utilizarlo en otro ejemplo, en el que hay que recorrer una cadena hasta encontrar un carácter dado. Si lo encuentra, escribir su posición. Si no, escribir que no se ha encontrado.

Nota: Para hacer este ejercicio necesitamos conocer la función de cadena strlen(), que obtiene la longitud de la cadena que se le pase por parámetro.

int strlen (string cad) Devuelve un entero igual a la longitud de la cadena.

<? $cadena = "hola a todo el mundo"; //recorro la cadena hasta encontrar una "m" $i=0; while ($cadena[$i]!="m" && $i< strlen($cadena)){ $i++; } if ($i==strlen($cadena)) echo "No se encuentra..."; else echo "Está en la posición $i"; ?>

En este ejemplo se define una cadena con el valor "hola a todo el mundo". Posteriormente se recorre esa cadena hasta el final de la cadena o hasta encontrar el caracter "m", utilizando una variable $i que lleva la cuenta de los caracteres recorridos.

Al final del bucle while, si se salió porque se encontró el caracter "m", la variable $i valdrá un número menor que la longitud de la cadena. Si se salió por llegar al final de la cadena, la variable $i valdrá lo mismo que la longitud en caracteres de esa cadena. En el condicional simplemente se comprueba si $i vale o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en cada caso.

Bucle do/while

Este tipo de bucle no difiere en exceso del anterior. La sintaxis es la siguiente:

do

53

{ instruccion1; instruccion2; ... } while (condición)

La diferencia con respecto a los bucles while es que este tipo de bucle evalúa la condición al final con lo que, incluso siendo falsa desde el principio, éste se ejecuta al menos una vez.

Sentencia for

La instrucción for es la instrucción de bucles más completa. En una sola instrucción nos permite controlar todo el funcionamiento del bucle.

El primer parámetro del for, es ejecutado la primera vez y sirve para inicializar la variable del bucle, el segundo parámetro indica la condición que se debe cumplir para que el bucle siga ejecutándose y el tercer parámetro es una instrucción que se ejecuta al final de cada iteración y sirve para modificar el valor de la variable de iteración.

Estructura for:

<?php

while (inicial ; condición ; ejecutar en iteración)

{

Instrucciones a ejecutar;

}

?>

Ejemplo 16:

<html>

<head>

<title>Ejemplo de for</title>

</head>

<body>

Inicio<BR>

<?php

for($i=0 ; $i<10 ; $i++)

{

echo "El valor de i es ", $i,"<br>";

}

?>

Final<BR>

54

</body>

</html>

Es el más popular, la diferencia con los anteriores radica en cómo se plantea la condición de finalización del bucle. Para aclarar su funcionamiento vamos a expresar el ejemplo de bucle while visto en el capítulo anterior en forma de bucle for:

<? For ($size=1;$size<=6;$size++) { echo"<font size=$size>Tamaño $size</font><br>\n"; } ?>

Las expresiones dentro del paréntesis definen respectivamente:

-Inicialización de la variable. Valida para la primera vuelta del bucle.

-Condición de evaluación a cada vuelta. Si es cierta, el bucle continúa.

-Acción a realizar al final de cada vuelta de bucle.

Bucle foreach

Este bucle, implementado en las versiones de PHP4, nos ayuda a recorrer los valores de un array lo cual puede resultar muy útil por ejemplo para efectuar una lectura rápida del mismo. Recordamos que un array es una variable que guarda un conjunto de elementos (valores) catalogados por claves.

La estructura general es la siguiente:

Foreach ($array as $clave=>$valor) { instruccion1; instruccion2; …; }

Un ejemplo práctico es la lectura de un array lo cual podría hacerse del siguiente modo:

<? $moneda=array("España"=> "Peseta","Francia" => "Franco","USA" => "Dolar"); Foreach ($moneda as $clave=>$valor) { echo "Pais: $clave Moneda: $valor<br>"; } ?>

Este script se encargaría de mostrarnos por pantalla el contenido del array $moneda. No resultaría mala idea crear una función propia basada en este bucle que nos permitiese

55

visualizar arrays monodimensionales y almacenarla en nuestra librería. Esta función podría ser definida de esta forma:

Function mostrar_array ($array) { Foreach ($array as $clave=>$valor) {echo "$clave=>$valor<br>";} }

Break y continue

Estas dos instrucciones se introducen dentro de la estructura y nos sirven respectivamente para escapar del bucle o saltar a la iteración siguiente. Pueden resultarnos muy prácticas en algunas situaciones.

Inclusión de código

Ejemplo Globalizador

Ahora veremos un ejemplo final en el cual seleccionaremos los nombres de las personas cargadas en una agenda y visualizaremos sus datos, como dirección, email, etc.

Este ejemplo te mostrará como enviar variables a otro script, una estructura de control y un pequeño repasito de frames de HTML.

Al final de la materia volveremos a realizar este ejemplo pero interactuando con una base de datos MySql y tomando los datos (que ahora serán estáticos) como la lista de nombres.

Comencemos con el ejemplo, y como siempre cualquier duda acercala al foro del curso. Éxitos!!!

Antes que nada vamos a crear un archivo HTML llamado ejemplo.html, el cuál será el contenedor de los frames que utilizaremos.

ejemplo.html

<HTML>

<HEAD>

<TITLE> Ejemplo Final </TITLE>

</HEAD>

<frameset rows="60%,*">

<frameset cols="40%,*">

<frame name=izquierda src="enviar_datos.php">

<frame name=derecha src="datos.php">

</frameset>

<frame name=abajo src="buscar.php">

56

</frameset>

</HTML>

Bien ahora como habrás visto tendremos que crear 3 archivos:

enviar_datos.php, datos.php y buscar.php.

enviar_datos.php

<html>

<head>

<title></title>

</head>

<body >

<div align="right">

<font size=-1><?echo date("j-n-Y");?></font>

</div>

<center>

<font color="#990000" size=5><b>Agenda</b></font><hr>

<table border=1 bordercolor="990000" width=250 cellpadding=5>

<tr>

<td valign=top bgcolor=#FFFF99><center><font color="#3333CC"

size=4><b>Selección de Personas</b></font></center>

</td></tr>

<tr><td valign=top >

<a href="datos.php?id=1" target="derecha">Perez, Marcelo</a>

<br>

<a href="datos.php?id=2" target="derecha">Alvarez, Gustavo</a>

<br>

<a href="datos.php?id=3" target="derecha">Sanchez, Sebastián</a>

<br>

<a href="datos.php?id=4" target="derecha">Mendez, Carlos</a>

</td></tr>

</center>

</body>

</html>

57

En este script ves que los links hacen referencia a datos.php (que todavía no creamos) con diferentes valores de la variable id y que el resultado de datos.php se visualizará en el frame llamado derecha.

Además los nombres de las personas incluidas en la agenda están cargados estáticamente, es decir que si queremos ingresar una nueva persona a la agenda debemos modificar este archivo cuantas veces sea necesario y si queremos ordenarlos alfabéticamente???? Más trabajo adicional!!!

Sigamos con la creación de datos.php...

datos.php

<html>

<head>

<title>Enviar datos de compra</title>

</head>

<body >

<CENTER><font color="#990000" size=5>

<b>Datos de la Persona:</b>

</font><hr>

</CENTER>

<?

switch($id)

{

case 1:

$nombre="Perez, Marcelo";

$direccion="Alvear 5935";

$foto="foto1.gif";

$tel="0342-155020654";

$email="[email protected]";

break;

case 2:

$nombre="Alvarez, Gustavo";

$direccion="Alvear 4411";

$foto="foto2.gif";

$tel="0342-4602390";

$email="[email protected]";

break;

case 3:

58

$nombre="Sanchez, Sebastián";

$direccion="Cullen 336";

$foto="foto3.gif";

$tel="0342-4588721";

$email="[email protected]";

break;

case 4:

$nombre="Mendez, Carlos";

$direccion="Santa Fe 1865";

$foto="foto4.gif";

$tel="011-48899774";

$email="[email protected]";

break;

default:

$nombre="Agenda";

$direccion="";

$foto="lock.gif";

$tel="";

$email="";

};

?>

<table border=1 bordercolor="990000" width=250 cellpadding=5 align=left>

<tr><td valign=top colspan=2 bgcolor=#96ABFE><center><font color="black"

size=4><b><?echo $nombre;?></b></font></center>

</td></tr>

<tr>

<td valign=top ><B>Dirección:</B></td>

<td valign=top ><? echo $direccion;?></td>

</tr>

<tr>

<td valign=top ><B>Teléfono:</B></td>

<td valign=top ><? echo $tel;?></td>

</tr>

<tr>

<td valign=top ><B>E-mail:</B></td>

59

<td valign=top ><a href="mailto:<? echo $email;?>"><? echo

$email;?></a></td>

</tr>

</table>

<img src="<?echo $foto;?>" border=1 hspace=5><br>

</body>

</html>

Con la estructura switch verificamos cual es valor de la variable id y según ese valor se visualizan los datos de la persona.

Ves que este script tampoco es tan fácil de modificar si queremos ingresar o eliminar una persona, es por eso que más adelante en el curso trabajaremos con bases de datos.

Por último creamos buscar.php, que por ahora no funcionará, solo lo dejaremos creado para que después podamos interactuar con la base de datos.

buscar.php

<html>

<head>

<title></title>

</head>

<body >

<font color="#3333CC"><b>Datos de la Persona</b></font><br><br>

<form action=post src="buscar_datos.php" target=izquierda>

Nombre:<INPUT TYPE="text" NAME="nombre">

<INPUT TYPE="submit" value=Buscar>

</form>

</body>

</html>

Al cargar ejemplo.html en tu navegador (recuerda que el servidor apache debe estar corriendo en tu pc).

Al hacer clic en alguno de los nombres del frame izquierdo, como dijimos los datos de esa persona se visualizan en el frame derecho.