Manual PHP

Page 1

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

-0-

Conozca PHP

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 // Código PHP ?>

<script languaje="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 Números en punto flotante Entero Objeto Cadena

$var = new array ("patatas","tomates") $var = 23.45 $var = 33 $var = new NombreClase ( ) $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; $b = 3.34; $c = "Hola Mundo"; echo $a,"<br>",$b,"<br>",$c; ?> </body> </html>

// almacenamos en $a un entero // almacenamos en $b un float // almacenamos en $c una cadena // mostramos en pantalla el contenido de las variables

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'; $bar = &$foo; $bar = "Mi nombre es $bar"; echo $foo; echo $bar; ?>

// Asigna el valor 'Bob' a $foo // Referencia $foo vía $bar. // Modifica $bar... // $foo también se modifica.

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

$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 adelante 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 ++$a Preincremento

Acción que realiza Incrementa $a en uno y después devuelve $a.

$a++ --$a

Postincremento Devuelve $a y después incrementa $a en uno. 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" "A" "pepe" "abc" §

será menor que será menor que será menor que será distinto de

"juan" "a" "pepe2" "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) { case "arriba": // Bloque 1 echo "La variable contiene"; echo " el valor arriba"; break; case "abajo": // Bloque 2 echo "La variable contiene"; echo " el valor abajo"; break; default: // Bloque 3 echo "La variable contiene otro valor"; echo " distinto de arriba y abajo"; }

if($posición == "arriba") { // Bloque 1 echo "La variable contiene"; echo " el valor arriba"; }else{ if($posición == "abajo") { // Bloque 2 echo "La variable contiene"; echo " el valor abajo"; }

if(($posición != "arriba")&& ($posición != "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(); los números */

/* Llamamos al método Sumar y obtenemos la suma de

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 Juan Francisco Javier

Apellidos Puertas Orellana

Sexo Hombre Hombre

Edad 23 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 Juan Francisco Javier Marta

Apellidos Puertas Orellana García

Sexo Hombre Hombre Mujer

Edad 22 22 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)

while($row=mysql_fetch_array($result)) { echo “ $row[ Nombre ] ”; echo “ $row[ Apellidos ] ”; echo “ $row[ Sexo ] ”; };

while($row=mysql_fetch_row($result)) { echo “ $row[ 0 ] ”; echo “ $row[ 1 ] ”; echo “ $row[ 2 ] ”; };

mysql_fetch_object($result) while($row=mysql_fetch_array($result)) { echo “ $row->Nombre”; echo “ $row->Apellidos ”; 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 Juan Francisco Javier Marta

Apellidos Puertas Orellana García

Sexo Hombre Hombre Mujer

Edad 23 22 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 Marta

Apellidos García

Sexo Mujer

Edad 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 Antonio Susana

edad 33 27

ciudad Granada Almería

profesión Químico 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 Session_id() Session_destroy() Session_unregister('variable')

Descripción Nos devuelve el identificador de la sesión Cierra la sesión eliminando todas las variables y el identificador. 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: Anchura, altura, formato (1 = GIF, 2 = JPG, 3 = PNG), cadena "height=altura width=anchura" del codigo HTML

$arr = getimagesize ($filename)

imagesx

Devuelve la anchura de la imagen $im

$ancho = imagesx($im)

imagesy

Devuelve la altura de la imagen $im

$alto= imagesy($im)

getimagesize

imagecolorstotal Devuelve el número total de colores empleados

- 33 -

$total = imagecolorstotal($im)

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 (xcoor, 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 ycoor, 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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.