You are on page 1of 42

Programación en Red - Ingeniería Informática Conozca PHP

-0- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

Indice

1.- ¿Qué es PHP? .............................................................................................2

2.- ¿Por qué PHP?. Ventajas frente a HTML.................................................4

3.- Breve historia de PHP................................................................................5

4.- Conceptos básicos ......................................................................................6

4.1 Sintaxis básica...............................................................6


4.2 Tipos de datos...............................................................6
4.3 Variables.......................................................................7
4.4 Operadores...................................................................10
4.5 Estructuras de control.................................................12
4.6 Presentación de datos por pantalla............................16

5.- Clases y objetos en PHP ............................................................................17

6.- Acceso a bases de datos.............................................................................18

6.1 MySQL.........................................................................18
6.2 ODBC............................................................................22
6.3 Más bases de datos soportadas. .................................24

7.- Uso de cookies............................................................................................25

8.- Paso de variables a través URL ................................................................28

9.- Sesiones ......................................................................................................29

10.- Librería GD...............................................................................................31

11. Seguridad....................................................................................................34

12.- Otras posibilidades que ofrece PHP ........................................................38

12.1 PDF..............................................................................38
12.2 Funciones de impresión. ...........................................39
12.3 XML con PHP............................................................40

13.- Documentación .........................................................................................41

-1- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

1.- ¿Qué es PHP?

PHP (acrónimo de PHP: Procesador de Hipertexto) es un lenguaje de scripting que


permite la generación dinámica de contenidos en un servidor web. El significado de sus
siglas es HyperText Preprocessor. Entre sus principales características cabe destacar su
potencia, su alto rendimiento, su facilidad de aprendizaje y su escasez de consumo de
recursos.

Debemos destacar que PHP al igual que lenguajes como ASP o JSP, se ejecuta en el
servidor, de manera que el cliente sólo recibe el resultado de la ejecución en el servidor.
De esta forma el cliente no puede conocer el código que ha generado esa salida. Este
funcionamiento es muy diferente a lenguajes como Javascript, que se ejecutan en el
cliente, pudiendo ver el usuario todo el código y su funcionamiento.

PHP ha tomado muchas de las mejores cualidades de otros lenguajes existentes: la


versatilidad del C, los objetos de Java y la facilidad y potencia del parser de Perl.
Su licencia es Open Source, funciona en multitud de plataformas, tales como Linux,
AIX, *BSD, SCO, casi todos los tipos de Unix, además de en todas las versiones de
Windows 9x, 2000 y NT.

PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la
información de formularios, generar páginas con contenidos dinámicos, o mandar y
recibir cookies.

El código PHP va embebido en páginas HTML. Para delimitar la sección de código


correspondiente a este lenguaje de script se usan un par de etiquetas de inicio y cierre
que normalmente suelen ser <?php y ?> . Aparte de este par de etiquetas, existen
también otras opciones que veremos más adelante.

Veamos de forma sencilla el funcionamiento de las paginas PHP alojadas en un


servidor:

1 - El navegador del cliente solicita el documento PHP.

2 - Llega la solicitud del servidor y el servidor localiza el documento. Debido a la


extensión del documento lanza y ejecuta el interprete de PHP y ejecuta todo su código.

3 - Una vez ejecutado el código se genera el resultado en HTML y lo devuelve al


servidor para que lo transfiera al cliente.

4 - El servidor transfiere el resultado en HTML y es mostrado en el navegador del


cliente.

El cliente no puede ver el código PHP, por esto PHP es transparente para el usuario,
únicamente verá el resultado en HTML que genera el interprete de PHP; de esta forma
cualquier navegador puede interpretar el resultado obtenido en HTML.

-2- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

Veamos algunas más de las múltiples ventajas que PHP ofrece. Entre estas podemos
destacar:

- Dispone de múltiples herramientas que te permiten acceder a bases de datos de


forma sencilla.

- Es multiplataforma, funciona tanto para Unix (con Apache) como para Windows
(con Microsoft Internet Information Server) de forma que el código ya creado
para una de ellas no tiene porqué modificarse al pasar a la otra.

- La sintaxis que utiliza, proviene de otros lenguajes muy extendidos como C y


Perl, por lo que si estás familiarizado con estos, el aprendizaje de PHP te será
muy sencillo.

- Para quien conozca las ASP (Active Server Pages) de Microsoft, PHP es muy
parecido, sólo que más rápido, gratuito y multiplataforma.

- También ofrece la posibilidad de usar programación de procedimientos ó


programación orientada a objetos.

-3- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

2.- ¿Por qué PHP?. Ventajas frente a HTML

Veamos una breve introducción al lenguaje HTML para poder entender mejor las
ventajas que nos ofrece PHP.

HTML no es un lenguaje de programación sino que se trata más bien de un lenguaje


descriptivo que tiene como objeto dar formato al texto y a las imágenes que
visualizamos en el navegador.
Con este lenguaje podemos introducir enlaces, seleccionar el color y tamaño de las
fuentes o intercalar imágenes, todo esto de una manera prefijada y en ningún caso
inteligente. HTML no permite realizar un simple cálculo matemático o crear una página
de la nada a partir de una base de datos. El HTML, es muy útil a pequeña escala, pero es
bastante limitado a la hora de concebir grandes sitios o portales.

Es esta deficiencia del HTML la que ha hecho necesario el empleo de otros lenguajes
más potentes y mucho más versátiles y de un aprendizaje relativamente más
complicado, capaces de responder de manera inteligente a las demandas del navegador
y que permiten la automatización de determinadas tareas tediosas e irremediables como
pueden ser las actualizaciones, el tratamiento de pedidos de una tienda virtual, una
sencilla operación matemática...

PHP es un lenguaje capaz de recrear a partir de ciertos "scripts" un sinfín de páginas


automatizadas.
A pesar de que las páginas dinámicas (en PHP) nos puedan en un principio limitar a
causa de su mayor complejidad con respecto al HTML, todas las ventajas que nos
ofrecen compensan con creces este esfuerzo inicial.

Veamos un ejemplo de la utilidad de PHP: Supongamos que tenemos una pagina web
para una tienda de libros, y que queremos que se actualicen las nuevas adquisiciones,
ofertas y novedades de cada semana. Toda la información de los libros estará
almacenada en una Base de Datos, y es sencillo con PHP que toda esa información se
actualice automáticamente accediendo a la Base de Datos, si la pagina fuera
simplemente en HTML, tendríamos que modificar manualmente todas las paginas
actualizando toda la información.

En este manual introductorio nos centraremos en dar a conocer al lector el lenguaje


PHP, con el cual podrá hacer páginas dinámicas para crear sitos web como el expuesto
anteriormente.

En las secciones siguientes, veremos en más profundidad una parte de todas las ventajas
que nos ofrece este lenguaje.

-4- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

3.- Breve historia de PHP

PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue
desarrollado originalmente en el año 1994 por Rasmus Lerdorf como un CGI escrito en
C que permitía la interpretación de un número limitado de comandos. El sistema fue
denominado Personal Home Page Tools y adquirió relativo éxito gracias a que otras
personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias
páginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó un
sistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter)
y el conjunto de estas dos herramientas, sería la primera versión compacta del lenguaje:
PHP/FI.

La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando se volvió


a programar el analizador sintáctico, se incluyeron nuevas funcionalidades como el
soporte a nuevos protocolos de Internet y el soporte a la gran mayoría de las bases de
datos comerciales. Todas estas mejoras sentaron las bases de PHP versión 3.
Actualmente PHP se encuentra en su versión 4, que utiliza el motor Zend, desarrollado
con mayor meditación para cubrir las necesidades actuales y solucionar algunos
inconvenientes de la anterior versión. Algunas mejoras de esta nueva versión son su
rapidez -gracias a que primero se compila y luego se ejecuta, mientras que antes se
ejecutaba mientras se interpretaba el código-, su mayor independencia del servidor web
-creando versiones de PHP nativas para más plataformas- y un API más elaborado y con
más funciones.

Gráfica del número de dominios y direcciones IP que utilizan PHP.


Estadística de Netcraft.

En los dos últimos años, el número de servidores que utilizan PHP se ha disparado,
logrando situarse cerca de los 5 millones de sitios y 800.000 direcciones IP a finales del
2000, cifra que actualmente habrá sido superada ampliamente, lo que le ha convertido a
PHP en una tecnología popular. Esto es debido, entre otras razones, a que PHP es el
complemento ideal para que el tándem Linux-Apache sea compatible con la
programación del lado del servidor de sitios web. Gracias a la aceptación que ha
logrado, y los grandes esfuerzos realizados por una creciente comunidad de
colaboradores para implementarlo de la manera más óptima, podemos asegurar que el
lenguaje se convertirá en un estándar que compartirá los éxitos augurados al conjunto de
sistemas desarrollados en código abierto.

-5- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

4.- Conceptos básicos

En esta sección conoceremos los tipos de datos, variables, operadores y estructuras más
utilizadas en PHP, veremos el uso de la sintaxis con ejemplos prácticos.

4.1 Sintaxis básica

Como explicábamos en el primer apartado, para poder usar PHP y HTML


conjuntamente, PHP hace uso de una serie de etiquetas que delimitan el código, de
forma que todo lo que esté situado entre esas etiquetas será ejecutado y lo que esté
fuera, es decir, la parte de HTML será dejada igual.

Existe la posibilidad de usar cuatro pares de etiquetas pero de éstas, sólo dos están
disponibles siempre:

<?php <script languaje="php">


// Código PHP // Código PHP
?> </script>

Las otras dos formas de identificar el código PHP tienen el problema de que no vienen
por defecto y para usarlas hay que modificar unos parámetros en el archivo de
configuración de php (php.ini).

<? <%
// Código PHP // Código PHP
?> %>
Forma abreviada de <?php Etiquetas usadas para ASP

4.2 Tipos de datos

El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide


PHP en tiempo de ejecución dependiendo del contexto en el que se utilice esa variable.

PHP soporta los siguientes tipos de datos:

- Array $var = new array ("patatas","tomates")


- Números en punto flotante $var = 23.45
- Entero $var = 33
- Objeto $var = new NombreClase ( )
- Cadena $var = "Hola Antonio"

-6- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

4.3 Variables

Una variable es un contenedor de información, en el que podemos meter números


enteros, números decimales, caracteres... el contenido de las variables se puede leer y se
puede cambiar durante la ejecución de una página PHP.

En PHP todas las variables comienzan con el símbolo del dólar “$” y no es necesario
definir una variable antes de usarla. Tampoco tienen tipos, es decir que una misma
variable puede contener un número y luego puede contener caracteres. Debemos de
tener en cuenta, que el nombre de las variables es sensibles a minúsculas y mayúsculas.

Ejemplo 1

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php
$a = 1; // almacenamos en $a un entero
$b = 3.34; // almacenamos en $b un float
$c = "Hola Mundo"; // almacenamos en $c una cadena
echo $a,"<br>",$b,"<br>",$c; // mostramos en pantalla el contenido de las variables
?>
</body>
</html>

En PHP las variables se asignan por valor, esto quiere decir que, por ejemplo, después
de asignar el valor de una variable a otra, los cambios que se efectúen a una de esas
variables no afectará a la otra.

PHP4 ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto
significa que la nueva variable simplemente referencia (en otras palabras, "se convierte
en un alias de" o "apunta a") la variable original. La asignación por referencia se realiza
más rápidamente al no tener que copiar el contenido de la variable. Dicha asignación se
realiza poniendo un & delante de la variable.

Ejemplo 2

<?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;
?>

Hemos de tener en cuenta que solo las variables con nombre pueden asignarse por
referencia, es decir no podemos asignar por referencia $(2+4).

-7- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

4.3.1 Variables predefinidas:

PHP proporciona una gran cantidad de variables predefinidas a las que se puede acceder
a través de cualquier script. En nuevas versiones de PHP, es necesario modificar el
archivo de configuración "php.ini" para tener acceso a estas variables.

Podemos encontrar las variables:

§ argc
Contiene la cadena de petición en una línea de comandos.

§ argv
Contiene el número de argumentos de la línea de comandos, que son variables
muy utilizadas en C.

§ HTTP_GET_VARS
Es un array asociativo con las variables pasadas mediante el método GET, bien a
través de un formulario o bien pasado directamente por la url.

§ HTTP_POST_VARS
Es un array asociativo con las variables pasadas mediante el método POST a
través de un formulario.

§ HTTP_COOKIE_VARS
Es un array asociativo formado por las variables pasadas mediante cookies.

4.3.2 Variables de sistema

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.

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.

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.

-8- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

A continuación enumeramos algunas de estas variables y la información que nos


aportan:

Variable Descripción
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
$HTTP_USER_AGENT
usuarios hacia páginas optimizadas para su navegador o realizar
cualquier otro tipo de acción en el contexto de un navegador
determinado.
Nos devuelve la o las abreviaciones de la lengua considerada como
principal por el navegador. Esta lengua o lenguas principales pueden
$HTTP_ACCEPT_LANGUAGE 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.
Nos indica la URL desde la cual el internauta ha tenido acceso a la
$HTTP_REFERER página. Muy interesante para generar botones de "Atrás" dinámicos o
para crear nuestros propios sistemas de estadísticas de visitas.
Nos devuelve una cadena con la URL del script que está siendo
$PHP_SELF
ejecutado. Muy interesante para crear botones para recargar la página.
Se trata de un array que almacena los nombres y contenidos de las
$HTTP_GET_VARS
variables enviadas al script por URL o por formularios GET
Se trata de un array que almacena los nombres y contenidos de las
$HTTP_POST_VARS
variables enviadas al script por medio de un formulario POST
Se trata de un array que almacena los nombres y contenidos de las
$HTTP_COOKIES_VARS
cookies. Veremos qué son más adelante.
Almacena la variable usuario cuando se efectúa la entrada a páginas de
$PHP_AUTH_USER acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal
para controlar el acceso a las páginas internas del sitio.
Almacena la variable password cuando se efectúa la entrada a páginas
$PHP_AUTH_PW 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.
Nos devuelve el path físico en el que se encuentra alojada la página en
$DOCUMENT_ROOT
el servidor.
Guarda el identificador de sesión del usuario. Veremos más adelante
$PHPSESSID
en qué consisten las sesiones.

-9- Universidad de Almería


Programación en Red - Ingeniería Informática Conozca PHP

4.4 Operadores

Las variables, pueden ser creadas, modificadas y comparadas con otras por medio de los
llamados operadores. En apartados anteriores de este trabajo hemos utilizado en
nuestros ejemplos algunos de ellos.

En esta sección pretendemos listar los más importantes.

Operadores aritméticos
Nos permiten realizar operaciones numéricas entre variables y números.

Signo Operación
+ Suma
- Resta
* Multiplicación
/ División
% Devuelve el resto de la división

Operadores de comparación
Se utilizan principalmente en las sentencias condicionales (if) para comparar dos
variables y verificar si cumple o no la propiedad del operador.

Signo Operador de
== Igualdad
!= Desigualdad
< Menor que
<= Menor igual que
> Mayor que
>= Mayor igual que

Operadores lógicos
Se usan en combinación con los operadores de comparación cuando la expresión de la
condición lo requiere.

And Y
Or O
! No

- 10 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Operadores de incremento

Sirven para aumentar o disminuir en una unidad el valor de una variable. Podemos
distinguir dos tipos: Operadores de preincremento y de postincremento.

El primer tipo primero incrementa el valor y luego devuelve $a mientras que el segundo
tipo primero devuelve el valor actual y después incrementa la variable en uno.

Modo de uso Tipo Acción que realiza


++$a Preincremento Incrementa $a en uno y después devuelve $a.
$a++ Postincremento Devuelve $a y después incrementa $a en uno.
--$a Predecremento Decrementa $a en uno y después devuelve $a.
$a-- Postdecremento Devuelve $a y después decrementa $a en uno.

Operadores combinados

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

Modo de uso Acción que realiza


$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

ya que escribir $variable += 10 es lo mismo que hacer : $variable = $variable+10

- 11 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

4.5 Estructuras de control

Todo archivo de comandos PHP se compone de una serie de sentencias. Una sentencia
puede ser una asignación, una llamada a función, un bucle, una instrucción condicional
e incluso una sentencia que no haga nada. Las sentencias normalmente acaban con
punto y coma. También se pueden agrupar las sentencias, encapsulándolas mediante
llaves. En esta apartado estudiaremos en profundidad unos de estos tipos de sentencias
denominadas estructuras de control (bucles, sentencias condicionales...).

Nos centraremos principalmente en la sintaxis, ya que el funcionamiento de las


estructuras de control es muy similar al del lenguaje C y el principal objetivo de este
trabajo es conocer el lenguaje PHP.

Omitiremos por simplicidad, las etiquetas de apertura y cierra que indican, comienzo y
fin del lenguaje PHP.

4.4.1 Estructuras de control Condicionales

§ Sentencia condicional >> If

Permite la ejecución condicional de fragmentos de código, es decir podemos ejecutar un


código u otro, dependiendo del cumplimiento o no de una condición (simple o
compuesta). Las condiciones se especifican mediante el uso de los operadores
estudiados en la sección anterior.

Ejemplo 1

if ($a > $b)


print "a es mayor que b";

Si el contenido de la variable $a es mayor que el de $b se ejecuta la instrucción


print, la cual escribiría en pantalla:

a es mayor que b

Si queremos que dentro de la instrucción if haya varias sentencias las podemos agrupar
utilizando llaves {...}

Ejemplo 2

if ($a > $b) {


print "a es mayor que b";
$b = $a;
}

- 12 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Las sentencias if se pueden anidar indefinidamente metiendo unas dentro de otras


sentencias, lo cual proporciona una flexibilidad completa para ejecuciones
condicionales en las diferentes partes de tu programa.

Si queremos que cuando no se cumpla una condición ejecutar un fragmento de código,


podemos usar la palabra reservada else, que es una extensión del if.

Ejemplo 3

if ($a > $b) {


print "a es mayor que b";
}else {
print "a NO es mayor que b";
}

Si $a es mayor que $b imprimirá en pantalla que


“a es mayor que b”

en cualquier otra caso (en que caso de que a sea menor o igual que b), mostrará
“a NO es mayor que b”

Un punto importante a considerar es que también es posible realizar comparaciones de


cadenas en las que se tiene en cuenta las mayúsculas y minúsculas.
La comparación se realiza con los códigos ascii de forma que:

"alberto" será menor que "juan"


"A" será menor que "a"
"pepe" será menor que "pepe2"
"abc" será distinto de "ABC"

§ Sentencia condicional >> Switch

La sentencia switch es similar a una serie de sentencias if haciendo referencia a la


misma expresión. En muchas ocasiones, se quiere comparar una variable (o expresión)
con muchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a
qué valor es igual.

Con la sentencia switch, podemos ejecutar unas u otras instrucciones dependiendo del
valor de la variable que estemos utilizando. Veamos un ejemplo para comprenderlo
mejor.

- 13 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Ejemplo usando switch Equivalente usando varios if

$posicion = "arriba"; $posicion = "arriba";

switch($posicion) { if($posición == "arriba") { // Bloque 1


case "arriba": // Bloque 1 echo "La variable contiene";
echo "La variable contiene"; echo " el valor arriba";
echo " el valor arriba"; }else{
break; if($posición == "abajo") { // Bloque 2
case "abajo": // Bloque 2 echo "La variable contiene";
echo "La variable contiene"; echo " el valor abajo";
echo " el valor abajo"; }
break; if(($posición != "arriba")&&
default: // Bloque 3 ($posición != "abajo"))
echo "La variable contiene otro valor";
echo " distinto de arriba y abajo";
{ // Bloque 3
echo "La variable contiene otro valor";
}
echo " distinto de arriba y abajo";
}

Cuando el valor de la variable $posicion es igual a “arriba” se ejecuta el bloque 1, si por


el contrario la variable tuviera como valor "abajo" se ejecutaría el bloque 2 mientras que
si valor no fuera ninguno de los anteriores, ejecutaríamos el código del bloque 3.

4.4.2 Estructuras de control de Bucles

§ Control de iteraciones >> While

La instrucción while es un sencillo bucle que evalúa una condición, mientras la


condición de una instrucción while sea cierta se reiterará el bucle, la sintaxis es la
misma que la utilizada en C.

Ejemplo 4

Ejemplo de un sencillo bucle while:

$i=0;
while ($i<10)
{
echo "El valor de i es ", $i,"<br>";
$i++;
}

Visto el ejemplo aclararemos su funcionamiento: El valor de $i al comienzo es 0,


durante la ejecución del bucle, se va sumando 1 al valor de $i de manera que cuando $i
vale 10 ya no se cumple la condición y se termina la ejecución del bucle. En cada
iteración del bucle se va presentando en pantalla el valor de la variable $i y se va
sumando una unidad a la variable $i, a este tipo de variables se les suele llamar
variables acumuladoras, porqué van acumulando el valor hasta llegar a la condición de
salida del bucle.

- 14 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

§ Control de iteraciones >> 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.

Veamos con un ejemplo la sintaxis de la instrucción for:

Ejemplo 5

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


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

El bucle hará 10 iteraciones imprimiendo en pantalla el valor de $i que irá desde el


valor inicial 0 aumentando en cada iteración una unidad hasta llegar al valor que
hace falsa la condición $i<10, en la cual finalizara el bucle.

- 15 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

4.6 Presentación de datos por pantalla

Cuando se llega a un cierto punto nos preguntamos... ¿cómo puedo mostrar lo que yo
quiero por pantalla? ¿cómo muestro el contenido de una variable?.

Pues bien, para realizar esto, disponemos de la sentencia echo " " y de un par de
funciones más.

La sentencia echo nos permite dar salida a una o más cadenas. No hace falta especificar
el tipo de variable a la cual se da salida.
Se puede usar de la siguientes formas entre otras:

echo "Esto es un ejemplo de cadena";


echo "La variable nombre es $nombre";
echo "La variable nombre es ".$nombre;

La función print funciona igual que echo ya que da salida a una o varias cadenas sin
formato.

Por último tenemos la función printf, la cual nos permite especificar el tipo de variable
que vamos a mostrar.

<?php printf(cadena con el formato, variable1, variable2...); ?>

La cadena con el formato indica cómo se han de representar los valores que vienen
especificados detrás de la cadena con el formato, todos ellos seguidos por comas si hay
mas de uno.

Los principales tipos de formatos que puede usar printf:

% s Cadena de caracteres
% d Número sin decimales
% f Número con decimales
% c Caracteres ASCII

Ejemplo 5

<?php
printf("El numero 2 en formato entero: %d",2);
printf("El numero 2 en formato real: %f",2);
printf("El numero 2 en formato real con 3 decimales: %.3f",2);
?>

Esto hará que el navegador muestre por pantalla lo siguiente:

El numero 2 en formato entero: 2


El numero 2 en formato real: 2.000000
El numero 2 en formato real con 3 decimales: 2.000

- 16 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

5.- Clases y objetos en PHP

PHP es orientado a objetos, es decir, permite crear clases e instancias de estas(objetos).


Cada clase puede tener sus propias variables (atributos) y sus métodos o funciones.

PHP además soporta la herencia simple. Esto quiere decir que una clase puede heredar
de otra adquiriendo todos sus métodos y atributos. Hay que tener en cuenta que PHP
sólo soporta la herencia simple y no la herencia múltiple por lo que una clase no podrá
derivar de más de una clase padre. Otro inconveniente es que no es posible sobrecargar
métodos en PHP. La sobrecarga de métodos consiste en tener más de un método de una
clase con el mismo nombre pero con distintos parámetros de forma que según como se
realice la llamada se ejecutará una u otra función.

Bueno, entremos un poco más en detalle sobre cómo definir una clase en PHP:

Ejemplo 1

class Nombre_Clase {

/* Variables o atributos de la clase */


var $var1;
var $var2=20; // Se puede definir un valor por defecto para la variable

/* Métodos de la clase */

/* Este método se denomina Constructor de la clase. Tiene el mismo nombre de


la clase y se llama automáticamente al crear un objeto nuevo */
function Nombre_Clase($valor)
{
$this->var1=$valor;
}

/* Este método es solo un ejemplo.


Se encarga de sumar las dos variables y devolver la suma */

function Sumar () {
$suma=$this->var1 + $this->var2;
}

Una vez definida la clase, para crear un nuevo objeto de esta clase necesitaríamos usar el
operador new:

$prueba = new Nombre_Clase(5); /* Llamamos al constructor y le pasamos un valor */

$suma=$prueba->Sumar(); /* Llamamos al método Sumar y obtenemos la suma de


los números */

Si ahora hiciéramos un echo $suma; debería mostrarnos por pantalla el número 25. Es decir,
el valor 20 de $var2 definido al crear la clase, sumado a 5 que es el valor que le hemos
pasado al crear el objeto.

- 17 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

6.- Acceso a bases de datos

Una de las principales ventajas que presenta el trabajar con páginas dinámicas, es el
poder almacenar los contenidos en bases de datos. De esta forma, podemos
organizarlos, actualizarlos y buscarlos de una manera mucho más simple.

Esta interacción se realiza, por un lado, a partir de las funciones que PHP nos propone
para cada tipo de base de datos y, por otro estableciendo un diálogo a partir de un
idioma universal: SQL (Structured Query Language) el cual es común a todas las bases
de datos. Este lenguaje resulta muy potente y fácil de aprender.

A continuación mostraremos las bases de datos más importantes soportadas por PHP,
por una parte MySQL, por ser la más usada con PHP y por otra parte aquellas que
funcionan bajo conexión ODBC.

6.1 MySQL

Vamos a estudiar el acceso a bases de datos MySQL por ser gratuita, eficiente y por ser
también la más extendida en combinación con PHP.
El servidor donde tenemos alojadas las páginas nos tiene que proporcionar herramientas
para crearla o acceso al Telnet para que la creemos por nosotros mismos.
En este manual supondremos que tenemos la BD ya creada y ubicada en un hipotético
servidor.

Para poder empezar a trabajar con bases de datos MySQL, antes que nada necesitamos
saber cómo realizar una conexión al servidor MySQL y cómo seleccionar la base de
datos que vamos a usar.

Veamos primero como realizar la conexión al servidor MySql:

$link=mysql_connect("nombre de host","usuario","password");

Al ejecutar la instrucción mysql_connect creamos un vínculo entre la base de datos y la


pagina PHP ($link), este vínculo será usado posteriormente en las consultas que
hagamos a la base de datos, el usuario y el password son para que solo puedan acceder a
la BD usuarios que tengan permiso para ello.

Finalmente, una vez que hemos terminado de usar el vínculo con la base de datos, lo
liberaremos con la instrucción mysql_close para que la conexión no quede ocupada.

Una vez hecha la conexión el servidor debemos seleccionar la base de datos con la que
vamos a trabajar. Esto se hace con la instrucción:

mysql_select_db("nombre de la base de datos",$link);

- 18 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Con el “nombre de la Base de Datos” a la que queremos acceder y con la variable $link
que es el resultado de haber hecho la conexión con el servidor, seleccionamos la BD con
la que deseamos trabajar.

Ahora estudiaremos como realizar las operaciones más básicas sobre nuestra BD,
(inserción, búsqueda, modificación y eliminación).

Explicaremos dichas operaciones sobre una BD inicial que contiene la siguiente


información:

Nombre Apellidos Sexo Edad


Juan Puertas Hombre 23
Francisco Javier Orellana Hombre 23

Nombre de Tabla: personas

Para interactuar con la BD lo haremos con el lenguaje de consultas universal SQL,


mediante la función mysql_query.

§ INSERCIÓN DE UN NUEVO REGISTRO

Para insertar un nuevo registro lo haremos con la siguiente instrucción en PHP.

mysql_query(”INSERT INTO personas(Nombre,Apellidos,Sexo,Edad) VALUES


(‘Marta’,’García’,’Mujer’,’24’)”, $link);

De esta forma tan sencilla insertaremos a una persona de nombre Marta, apellidos
García, sexo Mujer y edad 24 años.

Después de la inserción la BD quedaría de la siguiente forma:

Nombre Apellidos Sexo Edad


Juan Puertas Hombre 22
Francisco Javier Orellana Hombre 22
Marta García Mujer 24

Nombre de Tabla: personas

- 19 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

§ OBTENCIÓN DE DATOS DE LA BD.

Veamos con un ejemplo práctico la sintaxis de como realizar una consulta sobre la BD.

$result=mysql_query(“SELECT * FROM personas WHERE Edad='22'”,$link);

En la variable $result se almacenaran todos los registros de personas con edad igual a 22
años. Con el * detrás del select estamos indicando que todos los campos de cada
registro serán recuperados.

MySQL permite obtener los resultados de cada registro almacenados en la variable


$result de tres formas distintas:

- mysql_fetch_row($result): Devuelve el resultado en un array indexado (0,1,2,..)

- mysql_fetch_array($result): Devuelve el resultado en un array asociativo

- mysql_fetch_object($result): Devuelve el resultado en un registro.

En cada llamada a una de estas funciones, se devuelve el contenido de un registro


obtenido en la consulta. La única diferencia entre las tres instrucciones anteriores es la
forma en la que los datos son devueltos.

Anteriormente hemos realizado una consulta y el resultado esta almacenado en la


variable $result, ahora mostraremos las tres formas distintas de como recuperar esos
datos de dicha variable.

mysql_fetch_array($result) mysql_fetch_row($result) mysql_fetch_object($result)

while($row=mysql_fetch_array($result)) while($row=mysql_fetch_row($result)) while($row=mysql_fetch_array($result))


{ { {
echo “ $row[ Nombre ] ”; echo “ $row[ 0 ] ”; echo “ $row->Nombre”;
echo “ $row[ Apellidos ] ”; echo “ $row[ 1 ] ”; echo “ $row->Apellidos ”;
echo “ $row[ Sexo ] ”; echo “ $row[ 2 ] ”; echo “ $row->Sexo ”;
}; }; };

Para extraer todos los datos obtenidos en la consulta, necesitamos usar un bucle que
ejecute esta función. En cada llamada, se irá devolviendo un registro de la consulta,
desde el primero hasta el último. En el momento en que no queden más registros que
mostrar, la función devolverá False y el bucle dejará de ejecutarse.

- 20 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

§ MODIFICACIÓN DE REGISTROS DE LA BD.

Podemos actualizar los datos de un registro ya existente, de la siguiente forma:

mysql_query (“UPDATE personas SET Edad=23 WHERE Nombre='Juan'”,$link);

Con esta instrucción modificamos el campo edad de todas las personas con nombre
"Juan" que estén en la tabla personas, actualizando su valor a 23.

Como solo hay una persona con ese nombre, únicamente se actualizará un registro de
nuestra BD. En el caso de que ningún registro cumpla la condición, la tabla no será
modificada.

La tabla con la que representamos nuestra Base de Datos quedaría de la siguiente forma:

Nombre Apellidos Sexo Edad


Juan Puertas Hombre 23
Francisco Javier Orellana Hombre 22
Marta García Mujer 24

Nombre de Tabla: personas

§ ELIMINACIÓN DE REGISTROS

La sintaxis para eliminar registros de la BD es:

mysql_query (“DELETE FROM personas WHERE Sexo='Hombre'”,$link);

Esta instrucción elimina a todas las personas que cumplan la condición Sexo='Hombre'.

Como podemos ver, tenemos dos personas en la tabla que cumplen esta condición, así
que al llamar a esta sentencia serán eliminados de la Base de Datos.

La BD quedará después de ejecutar esta instrucción de la siguiente forma:

Nombre Apellidos Sexo Edad


Marta García Mujer 24

Nombre de Tabla: personas

- 21 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

6.2 ODBC

En este apartado conoceremos como PHP nos permite trabajar con ODBC. Como
vamos a ver ahora, todas las funciones usadas comienzan con la palabra odbc, siendo la
metodología de trabajo muy similar a la que utilizábamos con MySQL

El primer paso a realizar es conectar con la base de datos. Para ello necesitamos el
nombre de la conexión DSN que debería haberse creado previamente usando la
configuración del puente ODBC. Además también necesitaremos el nombre de usuario
y el password especificados al crear esa conexión.

$link=odbc_connect("nombre del DSN","usuario","password");

Al usar esta función obtenemos un identificador de conexión y al igual que hacíamos


con MySQL, tendremos que usarlo como parámetro al realizar la llamada a la mayoría
de funciones de ODBC, entre las que se encuentran la realización de consultas SQL.

Si la conexión ha sido realizada correctamente, podremos realizar cualquier operación


sobre la base de datos, tales como la inserción, modificación de registros, eliminación y
búsquedas.

Estas acciones podremos realizarlas mediante la siguiente función:

odbc_exec($link,"SQL a ejecutar");

Ejemplos de la sintaxis de SQL usada para estas operaciones se pueden encontrar en el


apartado anterior ya que al ser exactamente igual tanto para uno como para otro no
serviría de nada repetirlo dos veces.

En el caso de que la operación realizada sea una búsqueda de información en la base de


datos, necesitamos saber el procedimiento a realizar para obtener los datos, la cual
explicaremos a continuación.

Mostraremos un ejemplo, partiendo una situación inicial en la que contamos con una
base de datos de personas con los siguiente campos:

nombre edad ciudad profesión


Antonio 33 Granada Químico
Susana 27 Almería Biólogo

Nombre de Tabla: personas

Podemos realizar cualquier consulta que deseemos sobre la BD, en este ejemplo vamos
a obtener todos las personas de la base de datos que viven en Almería.

$result=odbc_exec($link,"SELECT * FROM personas WHERE ciudad='almeria'");

- 22 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

En $result se guardarán todos los resultados obtenidos, es decir, todos los registros que
cumplan la condición.

Veamos ahora como obtener los valores de esos registros del resultado.

while(odbc_fetch_row($result))
{
$nombre = odbc_result( $result, "nombre");
$edad = odbc_result( $result, "edad");
$ciudad = odbc_result( $result, "ciudad");
$profesión = odbc_result( $result, "profesión");
}

La función odbc_fetch_row acepta como parámetro la variable con el resultado


($result) obtenida al llamar a la función odbc_exec. Cada vez que es ejecutada esta
instrucción, la variable $result pasa a apuntar al siguiente registro de datos del resultado.

Si queremos obtener los datos del registro al que apunta $result, debemos usar la
función odbc_result,

$nombre = odbc_result( $result, "nombre");

A esta función le pasamos la variable $result obtenida al realizar la consulta, junto con
el nombre del campo del registro que queremos extraer. Esta función devolverá el valor
que contiene el campo. En el ejemplo que estamos considerando el campo nombre
contendrá la cadena de texto “Susana”.
Por ello, debemos ejecutar esta función tantas veces como campos queramos extraer.

Como hemos visto en el ejemplo, se ha realizado un bucle while ejecutando la función


odbc_fetch_row. Esto se ha utilizado para obtener todos los resultados que nos ha
devuelto la consulta, que se irán recuperando en el orden especificado en la consulta.
Recuperados todos los registros, la función odbc_fetch_row devolverá false y el bucle
finalizará su ejecución.

odbc_close() nos permite cerrar la conexión con el servidor de bases de datos asociado
al identificador que le pasemos como parámetro.

Existen multitud de funciones usadas para trabajar con ODBC aunque sólo hemos
mostrado las más importantes y necesarias para realizar las operaciones básicas.

A continuación listamos otras funciones que podrían resultar de utilidad:

- void odbc_close_all ( void)


Cierra toda conexión a bases de datos que exista. Resultaría útil en caso de
trabajar simultáneamente con más de una base de datos.

- string odbc_field_type ( int result_id, int field_number)


Nos muestra el tipo de datos que puede almacenar un campo determinado.

- 23 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

- int odbc_tables ( resource connection_id [, string qualifier [, string owner [, string


name [, string types]]]])
Devuelve información sobre las tablas almacenadas en una fuente de datos
determinada.

- int odbc_result_all ( int result_id [, string format])


Se encarga de mostrar de forma automática el resultado de una consulta en
forma de tabla HTML. Sólo hay que introducir como parámetro la variable
devuelta por odbc_exec()

6.3 Más bases de datos soportadas.

Quizás la característica más potente y destacable de PHP es su soporte para una gran
cantidad de bases de datos.
Ofrece interfaces para el acceso a la mayoría de las bases de datos comerciales y por
ODBC a todas las bases de datos posibles en sistemas Microsoft, a partir de las cuales
podremos editar el contenido de nuestro sitio con absoluta sencillez.

PHP soporta las siguientes bases de datos actualmente:

Adabas D Ingres Oracle (OCI7 and OCI8)


dBase InterBase Ovrimos
Empress FrontBase PostgreSQL
FilePro (read-only) mSQL Solid
Hyperwave Direct MS-SQL Sybase
IBM DB2 MySQL Velocis
Informix ODBC Unix dbm

También tenemos una extensión DBX de abstracción de base de datos que permite usar
de forma transparente cualquier base de datos soportada por la extensión.
Adicionalmente, PHP soporta por defecto ODBC (The Open Database Connection
standard), así que es posible conectar a cualquier base de datos que soporte este
estándar.

- 24 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

7.- Uso de cookies

Cuando navegamos por internet visitamos multitud de distintas paginas, muchas de ellas
bastante complicadas que implementan distintos servicios de Internet. Estas páginas
tienen que guardar distintas informaciones acerca de un usuario, por ejemplo su nombre,
su edad o su color preferido. Para ello cuentan con una serie de mecanismos en el
servidor como bases de datos u otro tipo de contenedores, pero hay un mecanismo
mucho más interesante de guardar esa información que los propios recursos del
servidor, que es el propio ordenador del usuario.

La utilidad principal de las cookies es la de poder identificar al navegador una vez éste
visita el sitio por segunda vez y así, en función del perfil del cliente dado en su primera
visita, el sitio puede adaptarse dinámicamente a sus preferencias (lengua utilizada,
colores de pantalla, formularios rellenados total o parcialmente, redirección a
determinadas páginas...).

Con las cookies, pequeñas porciones de información se quedan almacenadas en el disco


duro local del usuario, permitiendo identificar a este a través de diferentes páginas de un
mismo sitio e incluso durante visitas entre distintos días.

Dicho de otra forma las cookies son cadenas de texto que son enviadas desde el
servidor al cliente (navegador) y almacenadas en este, luego el navegador envía estas
cookies al servidor permitiendo así la identificación del cliente en el servidor.

Las cookies han levantado una polémica sobre el derecho a la intimidad de cada usuario
y sobre la inseguridad de que los servidores metan archivos de texto en nuestros
ordenadores.

Debemos comentar, que es un poco peligroso que las páginas web a las que accedemos
se dediquen a introducir cosas en nuestro ordenador, debido a esto, las cookies están
altamente restringidas. Para empezar, solamente podemos guardar en ellas textos, nunca
programas, imágenes, etc. Además, los textos nunca podrán ocupar más de 1 K, de
modo que nadie podría inundarnos el ordenador a base de cookies. Estas restricciones,
unidas a la necesidad de poner una fecha de caducidad a las cookies para que estas se
guarden, hacen que el aceptar cookies no signifique un verdadero problema para la
integridad de nuestros sistemas.

Funcionamiento de las cookies

La cookie es enviada al navegador desde el servidor y si este la acepta permanece en él.

El navegador se puede configurar para que no acepte ninguna cookie, o para que nos
avise cada vez que un servidor intente introducir una cookie en nuestro PC.

- 25 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Las páginas piden la cookie al navegador...

El navegador las envía, permitiendo la identificación del usuario por parte del servidor.

A continuación vamos a ver como usar las cookies para nuestro beneficio .

Después de toda esta introducción de que es una cookie y de cómo funciona,


procedamos a explicar la sintaxis de su funcionamiento.

El manejo de cookies en PHP se realiza de una manera muy sencilla, mediante el uso de
la función setcookie, esta función esta disponible a partir de la versión 3 de PHP.

int setcookie (string Nombre [, string Valor [, int Expire [, string Path [, string Dominio
[, int Secure]]]]]);

Setcookie() define una cookie que es enviada junto con el resto de la información de la
cabecera(header). Las cookies deben ser enviadas antes de cualquier tag de html, por lo
tanto deberemos realizar la llamada a estas funciones antes de cualquier tag <HTML> o
<HEAD>. Esta es una restricción de las cookies no de PHP.

Todos los argumentos excepto el nombre son opcionales.

• Nombre. Nombre de la cookie. Si creamos una cookie solamente con el nombre,


en el cliente se eliminara la cookie que exista con ese nombre. También
podemos reemplazar cualquier argumento con una cadena vacía ("").
• Value. Valor que almacenará la cookie en el cliente.
• Expire. El argumento expire es un argumento entero que indica la hora en que
se eliminara la cookie en el formato de hora que devuelven las funciones UNIX
time() y mktime(). Normalmente se usa time() + N. segundos de duración, para
especificar la duración de una cookie.
• Path. Subdirectorio en donde tiene valor la cookie.
• Dominio. Dominio en donde tiene valor la cookie. Si ponemos como dominio
www.domain.com la cookie no se transmite para domain.com, mientras que si

- 26 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

ponemos domain.com la cookie se transmite tanto para domain.com como para


www.domain.com

• Secure . El argumento secure indica que la cookie solo se transmitirá a través de


una conexión segura HTTPS.

Después de estudiar la sintaxis del maneja de cookies y el significado de sus


argumentos, veamos un ejemplo práctico:

setcookie("usuario", "Antonio", time()+3600,"/","JuanYZubi.com");

En este ejemplo establecemos una cookie de nombre usuario que contiene el valor
Antonio, que dura 1 hora (3600 segundos) válida para todo el dominio JuanYZubi.com

Para utilizar el valor de la cookie en nuestros scripts tan sólo tendremos que llamar la
variable que define la cookie.

Se ha establecido la cookie de nombre “usuario”, su valor es: <? print $usuario; ?>

Por otra parte, es interesante señalar que el hecho de que definir una cookie ya existente,
implica el borrado de la antigua. Del mismo modo, el crear una primera cookie conlleva
la generación automática del archivo texto.

- 27 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

8.- Paso de variables a través de la URL

Bucles y condiciones son muy útiles para procesar los datos dentro de un mismo script.
Sin embargo, en un sitio Internet, las páginas vistas y los scripts utilizados son
numerosos. Muy a menudo necesitamos que nuestros distintos scripts estén conectados
unos con otros y que se sirvan de variables comunes. Por otro lado, el usuario
interacciona por medio de formularios cuyos campos han de ser procesados para poder
dar una respuesta. Todo este tipo de factores dinámicos han de ser eficazmente
regulados por un lenguaje como PHP.

Las variables de un script tienen una validez exclusiva para el script y que nos resulta
imposible conservar su valor cuando ejecutamos otro archivo distinto aunque ambos
estén enlazados. Existen varias formas de enviar las variables de una página a otra de
manera a que la página destino reconozca el valor asignado por el script de origen:

Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha
variable dentro del enlace hipertexto de la página destino.

La sintaxis sería la siguiente:

<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>

Podéis observar que estas variables no poseen el símbolo $ delante. Esto es debido a
que en realidad este modo de pasar variables no es específico de PHP sino que forma
parte del protocolo http.

Ahora nuestra variable pertenece también al entorno de la página destino.php y está lista
para su utilización.

- 28 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

9.- Sesiones

El uso de sesiones es un método ampliamente extendido en cualquier aplicación de


cierta entidad. Básicamente una sesión es la secuencia de páginas que un usuario visita
en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.

Al no usar sesiones, las variables creadas sólo existen en el archivo que es ejecutado de
forma que si cargamos una página distinta estas variables se pierden a no ser que
pasemos las variables a través de la URL o mediante un formulario. Estos métodos,
aunque útiles, no son todo lo prácticos que podrían en determinados casos en los que la
variable que queremos conservar ha de ser utilizada en varios scripts diferentes.
Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas
tantas veces como queramos dentro de una misma sesión.

Veamos unos supuestos prácticos que nos desvelen la utilidad del uso de sesiones.

Imaginemos un sitio en el que introducimos nuestro nombre de usuario y que en cada


pagina por la que nos moviéramos de este sitio web tuviéramos que mostrar
información referente a este usuario, debiéramos de pedirle el nombre de usuario todas
las veces, o pasar el nombre de usuario por URL durante toda la navegación del sitio
Web. Vemos entonces la necesidad y la comodidad de declarar una variable que fuese
valida para toda la sesión y que tuviese como valor el nombre de usuario introducido
inicialmente.

Pensemos también en un carrito de la compra de una tienda virtual donde el cliente va


navegando por las páginas del sitio y añadiendo los artículos que quiere comprar a un
carrito. Este carrito podría ser perfectamente una variable de tipo array (tabla) que
almacena para cada referencia la cantidad de artículos contenidos en el carrito. Esta
variable debería ser obviamente conservada continuamente a lo largo de todos los
scripts.

PHP nos permite almacenar variables llamadas de sesión que, una vez definidas, podrán
ser utilizadas durante este tiempo por cualquiera de los scripts de nuestro sitio. Estas
variables serán específicas del usuario de modo que varias variables sesión del mismo
tipo con distintos valores pueden estar coexistiendo para cada una de las sesiones que
están teniendo lugar simultáneamente. Estas sesiones tienen además su propio
identificador de sesión que será único y específico.

Para iniciar una sesión podemos hacerlo de dos formas distintas:

- Declaramos abiertamente la apertura de sesión por medio de la función


session_start(). Esta función crea una nueva sesión para un nuevo visitante o
bien recupera la que está siendo llevada a cabo.

- 29 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

- Declaramos una variable de sesión por medio de la función


session_register('variable'). Esta función, además de crear o recuperar la sesión
para la página en la que se incluye también sirve para introducir una nueva
variable de tipo sesión.

Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier
etiqueta o de imprimir cualquier cosa. En caso contrario se producirá un error.

Con lo visto, vamos a proponer el ejemplo clásico de utilización de una sesión: un


contador. Este contador deberá aumentar de una unidad cada vez que recargamos la
página o apretamos al enlace:

Ejemplo 1

<?
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>

<?
if (!isset($contador))
$contador=0;

++$contador;
echo "<a href='contador.php'>Has recargado esta página $contador veces</a>";

?>
</BODY>
</HTML>

La condición if tiene en cuenta la posibilidad de que la variable $contador no haya sido


todavía inicializada. La función isset se encarga de dar un valor cero cuando una
variable no ha sido inicializada.

Otras funciones útiles para la gestión de sesiones son:

Función Descripción
Session_id() Nos devuelve el identificador de la sesión
Session_destroy() Cierra la sesión eliminando todas las variables y el identificador.
Session_unregister('variable') Elimina una variable de sesión

- 30 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

10.- Librería GD

Una de las peculiaridades que PHP nos presenta con respecto a otros lenguajes
dinámicos es la utilización de la llamada biblioteca GD. Esta biblioteca no es más que
un conjunto de funciones que tienen como objeto la creación de imágenes.

En efecto, crear imágenes por medio de un lenguaje de programación puede resultar en


un principio más complicado y tedioso que servirse de otras herramientas gráficas
mucho más visuales y potentes presentes en la totalidad de las aplicaciones de diseño
gráfico. Sin embargo, no todo van a ser inconvenientes, más bien todo lo contrario.
Entre otras ventajas, el uso de un lenguaje dinámico para la creación de imágenes nos
permite:

• La creación de botones dinámicos

Una de las principales aplicaciones de esta herramienta gráfica es la posibilidad


de crear gráficos "virtuales" que se generan dinámicamente en función de los
parámetros que se indiquen al script responsable de su creación. De este modo
podemos generar botones dinámicos en los que, especificando el texto a mostrar,
el script se encarga de crearlo debidamente combinado con una imagen. Esto nos
evita tener que crear cada uno de los botones de nuestro sitio con una aplicación
de diseño gráfico. Podemos, mediante una simple llamada al script generador del
botón, crearlos en el momento que los vamos a usar.

• Tratamiento automatizado de imágenes recibidas de los usuarios

Supongamos que disponemos de un sitio en el que recibimos fotos o gráficos y


estos han de ser redimensionados y duplicados en distintos tamaños (un tamaño
real y un thumbnail por ejemplo). Podríamos disponer de unos scripts sencillos y
de rápida creación que permitirían tratar las imágenes, duplicarlas y
almacenarlas en bases de datos rápida y eficazmente.

• La actualización y personalización más flexible

Crear gráficos por programación implica usar variables para definir colores o
tipos y tamaños de letra. Esto quiere decir que, llegado el momento, podemos
cambiar el aspecto de multitud de imágenes creadas con un mismo script tan
sólo modificando unos pocos parámetros de éste. Esto nos ahorraría muchas
horas de trabajo el día en el que decidamos dar un cambio de diseño a la página
por ejemplo. Por otra parte, ponemos a disposición del usuario un elemento
adicional de interacción dado que esta parametrización puede ser llevada a cabo
por él mismo y guardada como cookies en su disco duro.

- 31 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

• El ahorro en memoria

Si bien es posible crear archivos con estas herramientas, también es posible crear
las imágenes de una forma temporal lo cual nos permite economizar memoria.
Este elemento puede ser interesante en casos en los que tenemos un espacio de
alojamiento limitado o bien si las imágenes que mostramos en el sitio son
numerosas y se muestran pocas veces. Sin embargo, también tiene el efecto de
resultar más lento puesto que la imagen ha de ser creada antes de ser mostrada lo
cual requiere un tiempo de procesamiento suplementario.

Como puede verse, en determinadas situaciones, el uso de la biblioteca GD puede


resultar una herramienta muy importante para el desarrollo de un sitio web.

La biblioteca GD no es instalada por defecto. Cualquier intento de ejecución de un


script que emplee este tipo de funciones dará inevitablemente un error a menos que nos
hayamos encargado de instalar el módulo correspondiente.

En el caso de un servidor Apache funcionando bajo Linux, se puede activar el módulo


en configure mediante la función -with-gd[=path]. Donde path es la ruta donde se
encuentra el archivo de la librería.

Los usuarios de Windows han de instalar el archivo php_gd.dll y activar el módulo de la


biblioteca en el archivo de configuración php.ini (localizado por regla general en el
directorio C:\Windows). Para activar el módulo nada más sencillo que seguir los pasos
siguientes:

1.-Abrir con un editor de texto el archivo php.ini.

2.-Localizar en el código del archivo la línea: ;extension=php_gd.dll

3.-Borrar el punto y coma ; que juega el papel de comentario

4.-Localizar la sección Paths and Directories y en la línea extension_dir=


introducir el camino físico en el que hemos albergado el archivo php_gd.dll. Ej.
extension_dir=C:\Archivos de programa\PHP\

Llevados a cabo estos pasos, PHP está en situación de reconocer cualquier llamada a
una función de la biblioteca GD. Esta biblioteca freeware de la compañía americana
Boutell presenta en sus versiones más actuales una importante variante con respecto a
sus predecesoras: no tiene en cuenta el formato GIF. Esto es debido a que el formato
GIF ha dejado de ser gratuito y para su uso en cualquier aplicación es necesario pagar
una licencia. Es por ello que la biblioteca GD incluye el formato PNG como alternativa.
Este formato nos permite las mismas posibilidades aunque presenta el problema de que
no es reconocido por la totalidad de los navegadores. Este inconveniente es actualmente
solventado por la mayoría de los programadores utilizando versiones antiguas de la
biblioteca que siguen circulando por la red.

- 32 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

Existen otras funciones, también de esta librería, que no sirven para crear nuevas
imágenes pero si para extraer información de imágenes ya existentes. Podemos obtener
el formato que tiene una imagen (GIF,JPG,PNG), su altura, anchura ...

Funciones informativas

Función Descripción Sintaxis


Genera un array con las ($arr) informaciones de la imagen:
$arr = getimagesize
getimagesize Anchura, altura, formato (1 = GIF, 2 = JPG, 3 = PNG),
($filename)
cadena "height=altura width=anchura" del codigo HTML
imagesx Devuelve la anchura de la imagen $im $ancho = imagesx($im)
imagesy Devuelve la altura de la imagen $im $alto= imagesy($im)
$total =
imagecolorstotal Devuelve el número total de colores empleados
imagecolorstotal($im)

- 33 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

11 .- Seguridad (Esta sección esta orientada a usuarios más avanzados de PHP)

Como ya hemos visto a lo largo de este trabajo, PHP es un lenguaje muy rico, posee una
gran cantidad de funcionalidades e intenta ofrecerlas de una forma sencilla para el
programador.
Como es lógico pensar, desde el punto de vista de la seguridad, cuanto más rico sea el
lenguaje en funcionalidad, más aumenta el riesgo de que en un “usuario malicioso”
puede atacar nuestro sitio web.
En esta sección hablaremos de algunos temas de seguridad relativos a PHP, explicando
algunas de sus vulnerabilidades y exponiendo la forma de proteger nuestros scripts,
veremos solo unos cuantos ejemplos, ya que el tema de seguridad es un campo muy
amplio y cada día surgen nuevos “agujeros de seguridad”.

En PHP no hace falta declarar variables para usarlas, esto es una ventaja para el
programador, dichas variables son validas para todo el script, estas variables se pueden
pasar de una pagina a otra, esto que en principio parece ser una ventaja, si no es usado
convenientemente se puede convertir en un grave problema de seguridad, veamos un
caso práctico.

Para este ejemplo supongamos que la página principal.php contiene el siguiente


código:

<form method="get" action="validar.php">


<input type= "edit" name=”password">
< input type ="SUBMIT">
</form>

página principal.php

El usuario introducirá el password y tras pulsar el botón de enviar, la información de ese


formulario será enviada a validar.php para ser tratada.

<?php
if ($password == "mi_contraseña")
$autentificado = 1;

if ($autentificado == 1)
echo "Tu número de tarjeta de crédito es XXX";
?>

página validar.php

En la ejecución normal, se espera que la variable autentificado este vacía y solo tome el
valor 1 si el password procedente de la pagina principal.php coincide con la contraseña.

El problema está en confiar en que las variables van a estar inicializadas a vacío. Un
usuario remoto puede hacer uso de las variables pasando a través de la URL la variable
deseada por POST: 'http://server/validar.php?autentificado=1'. El código de validar.php
no reconocerá la contraseña como válida, pero la variable autentificado habrá sido

- 34 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

creada al cargar la página y tendrá como valor 1 comprometiendo así la información, ya


que cualquier usuario remoto accedería una parte del código de acceso restringido.

Para proteger un script de este tipo debemos asegurar que la variable que usamos no se
encuentra en ninguno de los arrays $HTTP_GET/POST_VARS o bien en los arrays
$_GET o $_POST si la versión de PHP es la 4.1 o superior.
Además no debemos presuponer que la variable no va a contener nada de principio.
Debido a esto, una solución sería asegurarnos que al realizar la comparación de la
variable (autentificado), ésta va a contener exactamente el valor que nosotros queremos
que tenga:

if ($password == "mi_contraseña")
$autentificado = 1;
else
$autentificado = 0;

Si la variable $autentificado fue pasada a este script a través de GET o POST, su valor
será sobrescrito automáticamente al ejecutar este código.

También podemos encontrar problemas de seguridad en otro tipo de script como son los
que realizan upload de archivos, es decir, subir archivos al servidor vía web a través de
un formulario.

Para ver un ejemplo, suponemos que el código del formulario es el siguiente:

<FORM METHOD="POST" ENCTYPE="multipart/form-data">


<INPUT TYPE="FILE" NAME="hello">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>

Este formulario permite al usuario seleccionar un archivo del disco local de forma que
al pulsar sobre el botón de enviar el fichero será transferido a un directorio del servidor
remoto.

Esta función es de mucha utilidad pero la respuesta que ofrece PHP es muy peligrosa.
Cuando PHP recibe la petición, antes de empezar a ejecutar el script, recibe el archivo
del usuario remoto, chequea que el archivo no sea superior a la variable
$MAX_FILE_SIZE (10kb en este caso) y el máximo permitido desde el archivo de la
configuración de PHP, si pasa estos chequeos el archivo es grabado en el disco remoto
en un directorio temporal. Un usuario remoto puede enviar los archivos que el quiera y
antes de que el script decida si lo deja o no, el archivo se graba al disco.

Como ya hemos dicho el archivo es recibido y grabado al disco local (en la ubicación
que se especifica en la configuración, casi siempre es /tmp) con un nombre aleatorio
(ej. "GB0001"). El script PHP necesita información con respecto al archivo que subimos
para procesarlo.

PHP da valor a 4 variables locales para describir a un archivo de upload, por ejemplo
(nombres del form anterior):

- 35 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

$hello = nombre del archivo en la maquina local (ej. "/tmp/ GB0001")


$hello_size = tamaño en bytes del archivo (ej. 1024)
$hello_name = El nombre original del archivo (ej"c:\\temp\\hello.txt")
$hello_type = Mime type del archivo subido (ej. "text/plain")

El script trabaja con el archivo mediante la variable $hello. El problema radica en que es
posible que $hello no sea una variable a la que PHP le haya dado valor y que el atacante
simplemente le haya asignado los valores que el desea.

Continuemos con el ejemplo anterior, para la siguiente entrada de URL:

http://server/pagina.php?hello=/etc/passwd&hello_size=10240&hello_type=text/
plain&hello_name=hello.txt

Esto da las variables a las que el script espera asignarles valor, pero en vez de trabajar
con el archivo remoto trabaja con /etc/passwd (exponiendo el contenido del mismo).
Este ataque puede ser usado para exponer el contenido de cualquier archivo
(seguramente archivos de configuración).

Las versiones de PHP más actuales traen distintos métodos para determinar los archivos
remotos (HTTP_POST_FILES[] array). Incorpora funciones para no tener este
problema, por ejemplo una de ellas sirve para determinar si un archivo en particular es
uno de los que se hizo en el upload.

Algunos programadores llaman a sus librerías de una forma especifica, como puede ser
archivo.inc y normalmente no configuran el apache para este tipo de extensión sea
interpretada también como php, php4 o php3.
Cualquier atacante puede hacer un download de ese tipo de archivos sabiendo
únicamente su ubicación, es decir, si averigua que el archivo esta en
www.dominio.com/dir/archivo.inc ya sea por astucia del atacante o por suerte, esto
ocasiona un problema de seguridad. El atacante podría llegar a encontrar el login de un
usuario y su password para acceder a la BD del servidor, también estaría viendo el
código fuente, y para un atacante hábil es muy útil ver este código, porqué con él estaría
viendo, nombres de variables, configuración, estilo de programación, etc...

Una posible solución si usas archivos de la manera archivo.inc, es añadir una doble
extensión archivo.inc.php.

Ahora veremos otro fallo de seguridad referido al upload de archivos al server.


En algunos sitios webs las variables que se pasan como parámetro son archivos, un
claro ejemplo podría ser este:

www.dominio.com/archivo.php?pagina=archivo

El problema consiste en que cualquier atacante podría ejecutar código php en tu


servidor, esto es un nefasto fallo de seguridad, porqué el atacante podría hacer “casi
todo lo que quisiera” (siempre estará sujeto a los permisos que tengan los archivos)

- 36 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

manejando código php. Decimos esto porque en la mayoría de los casos el apache, sobre
el cual corre el interprete de PHP esta configurado como nobody, así que los permisos
sobre los archivos están limitados.

Ahora veamos como podría un atacante explotar este fallo de seguridad:

Con el siguiente form, podrá cargar la pagina en el server:

<form enctype="multipart/form-data" action="http://www.dominio.com/archivo.php" method="post">

Archivo php: <input type="file" name="pagina">


<input type="submit" value="Enviar Fichero">
</form>

Una solución sería es configurar php no habilitando las variables tomadas directamente
desde la entrada (ya que php las crea como globales dentro del script) y chequear
cualquier variable de entrada que este en el array HTTP_GET/POS_VARS[] o sacarla
directamente de ahí si “global var” esta desactivado.
Si se usa la configuración php por defecto se han de validar los archivos de entrada con
cualquier método comparándolos con los permitidos.

- 37 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

12.- Otras posibilidades que ofrece PHP

12.1 PDF

PHP ofrece la posibilidad de crear documentos PDF. Actualmente existen dos opciones
para hacer esto:

Se puede usar la PDF Library creada por Thomas Merz, pero presenta como
inconveniente que necesita dos módulos más (JPG library y TIFF library) que con
frecuencia dan problemas en la configuración de PHP.

Otra posibilidad es la de usar una librería de ANSI C, llamada ClibPDF. Esta librería le
permite crear documentos PDF pero no es gratuita. La funcionalidad y la API de
ClibPDF son similares a la PDFlib de Thomas Merz pero tiene la ventaja de que
ClibPDF es más rápido y crea documentos de menor tamaño y esto es un factor muy
importante al hablar de páginas web ya que cuanto mas tamaño tenga mayor será el
tiempo de carga.

A continuación vamos a ver alguna de las funciones proporcionadas por la que


consideremos la mejor opción para crear documentos PDF, ClibPDF, sin tener en
cuenta la gratuidad o no de la librería.

- int cpdf_open ( int compression, string filename)

La función cpdf_open() abre un documento PDF nuevo. Debemos especificar el


nombre que queremos darle al archivo y si queremos comprimirlo o no.

- void cpdf_close ( int pdf document)

La función cpdf_close() cierra un documento PDF.

- void cpdf_begin_text ( int pdf document)

La función cpdf_begin_text() comienza una sección de texto. Debe ser


terminada con cpdf_end_text().

- void cpdf_end_text ( int pdf document)

La función cpdf_end_text() finaliza una sección de texto que fue inicializada


con cpdf_begin_text().

- void cpdf_text ( int pdf_document, string text, double x-coor, double y-coor, int
mode, double orientation, int alignmode)

La función cpdf_text() muestra la cadena "text" en la posición de coordenadas (x-


coor, y-coor). Permite especificar la orientación del texto además de la longitud de
la cadena.

- 38 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

- void cpdf_set_font ( int pdf document, string font name, double size, string encoding)

La función cpdf_set_font() define la fuente actual, el tamaño y la codificación.

- int cpdf_open_jpeg ( int pdf document, string file name, double x-coor, double y-
coor, double angle, double width, double height, double x-scale, double y-scale, int
mode)

La función cpdf_import_jpeg() abre una imagen almacenada en el fichero de


nombre file name . El formato de la imagen debe ser JPEG. La imagen es situada
en la página actual en la posición (x-coor, y-coor) y puede ser rotada.

- void cpdf_finalize_page ( int pdf document, int page number)

La función cpdf_finalize_page() finaliza una página con número de página page


number. Esta función es sólo para ahorrar memoria. Una página terminada ocupa
menos memoria pero no puede volver a ser modificada.

Después de ver algunas de las funciones más importantes, para crear un documento en
PHP, veamos un ejemplo práctico:

<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_text($cpdf, "Esto es un ejemplo de creación de un texto en pdf, utilizando PHP", 50, 750);
cpdf_finalize($cpdf);
cpdf_close($cpdf);
?>

12.2 Funciones de impresión.

Una posibilidad que nos ofrece PHP es la de imprimir documentos en el servidor. Posee
una serie de funciones que nos permiten conectar con una impresora determinada,
configurarla a nuestro gusto o elegir un tipo de fuente determinado y su tamaño entre
otras cosas.

Una posible utilidad que podría tener esto sería la creación de un administrador de
impresión para imprimir de forma remota o bien se podría usar para imprimir informes
sobre la web, aunque son muchas las aplicaciones que puede tener.

A continuación mostramos alguna de las funciones más importantes para la impresión.


Podemos ver como todas empiezan con la palabra printer seguido de la función que
realizan:

- 39 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

printer_open ( [string devicename])

Intenta abrir una conexión con el dispositivo especificado (devicename),


devolviendo un manejador de la impresora o False en caso de error.

printer_start_doc ( resource handle [, string document])

Esta función crea un nuevo documento en la cola de impresión. Se le pasa como


parámetros el manejador de la impresora y el nombre usado para identificar el
documento.

printer_start_page ( resource handle)

Crea una nueva página en el documento.

printer_close ( resource handle)

Cierra la conexión con el dispositivo de impresión.

12.3 XML con PHP

XML (eXtensible Markup Language) es un formato de información para el intercambio


de documentos estructurado en la "Web" Es un estándar definido por el consorcio de la
"World Wide Web" (W3C). Se puede encontrar información sobre XML y tecnologías
relacionadas en http://www.w3.org/XML/.

PHP nos permite crear un analizador de XML de forma que podemos obtener todas las
etiquetas que forman el archivo xml junto con los valores que toman. Actualmente no
existe mucha documentación sobre este soporte que ofrece PHP aunque suponemos que
no tardarán en sacar una información más completa.

- 40 - Universidad de Almería
Programación en Red - Ingeniería Informática Conozca PHP

13.- Documentación

Para la creación de este manual introductorio, hemos recopilado parte de la información


de los siguientes manuales y paginas web, con la finalidad de dar a conocer un lenguaje
scripting como es PHP.

http://www.php.net
http://www.php-hispano.net
http://www.ciberteca.net/
http://www.webestilo.com
http://php3.de/
http://phpline.vulcanonet.com/public/que.htm
http://www.desarrolloweb.com
http://www.datafull.com

Los creadores de este básico manual esperan que este trabajo les haya servido para
aprender de una forma rápida la potencia de este lenguaje.

- 41 - Universidad de Almería

You might also like