Вы находитесь на странице: 1из 33

LABORATORIO DE CÓMPUTO DE INGENIERÍA

(PHP) PROGRAMACION WEB AVANZADA CON PHP

Objetivo: Crear aplicaciones Web manejadas por PHP, utilizando el


lenguaje así como sus extensiones.

Dirigido a: Todas aquellas personas dedicadas a la programación de


aplicaciones y que deseen desarrollar soluciones WEB utilizando
este lenguaje.

Requisitos: Haber programado aplicaciones HTML en un nivel


básico. Manejo de los conceptos de Orientación a objetos y
programación con SQL a nivel básico.5.

Alcance: Al término del curso los participantes serán capaces de


programar páginas WEB interactivas con el servidor de aplicaciones
PHP.

Herramientas a utilizar:

PHP, MySQL, HTML y Apache.

Temario:

I. PHP sobre Windows


1. Instalación del Servidor WEB
2. Instalación de PHP
3. Establecimiento de fuentes de datos

II. Introducción a PHP


1. Sintaxis del lenguaje
2. Manejo de funciones
3. Funciones anónimas
LABORATORIO DE CÓMPUTO DE INGENIERÍA

4. Strings
5. Arreglos

III. Comunicación
1. Envìo y recepción de datos
2. Método GET y POST
3. Envvío de correo electrónico

IV. Manipulación de bases de datos


1. Creación de la base de datos
2. Conexión a la base de datos
3, Consultas a la base de datos

V. Seguridad
1. Restringir el acceso
2. Distinción de usuarios
3. Sesiones

VI. Gráficos
1. Incrustación de imágenes
2. Manejo de imágenes y texto

Instalación del servidor Apache

A continuación vamos a explicar la instalación de un servidor


Apache en un sistema operativo Windows XP.

El archivo de instalación para Windows está en


http://www.apache.org/dist/httpd/binaries/win32/, una vez que lo
LABORATORIO DE CÓMPUTO DE INGENIERÍA

tengamos lo podemos copiar en nuestro escritorio y lo ejecutamos


haciendo doble click sobre él.

Entraremos en un programa de instalación standard de aplicaciones


win32, así que nos limitaremos a elegir las opciones que nos muestre
el programa de instalación, es muy sencillo ya que solo pide rutas de
instalación de los archivos y se pueden dejar las que vienen por
defecto.

Si no elegimos un directorio distinto Apache se instalará en:


C:\Archivos de programa\Apache Group\Apache

Una vez terminada la instalación vamos al directorio donde tenemos


instalado el servidor, en el directorio "\conf\" es donde se alojan
los archivos de configuración del servidor. Dentro de este
directorio se encuentra el archivo "httpd.conf" este es el archivo
de configuración que Apache utiliza al ejecutarse.

Para que Apache funcione correctamente deberemos modificar el


archivo anterior, para realizar esto deberemos abrirlo con un
editor de texto (por ejemplo WordPad), y guardarlo como archivo
de texto plano. Una vez abierto el archivo deberemos buscar la
línea que ponga "ServerName". Lo más probable es que encontremos
la siguiente línea:
#ServerName "nombre de servidor por defecto"

La debemos sustituir por la siguiente:


ServerName http://

Para poner en marcha el servidor deberemos ir al escritorio de


Windows, el servidor se encontrará en la siguiente ubicación del
menú de inicio "Inicio|Apache Web Server|star Apache", o por el
contrario en la ubicación que hayamos indicado durante la
LABORATORIO DE CÓMPUTO DE INGENIERÍA

instalación. Al ejecutarlo se nos quedará abierta una ventana MS-


DOS en la cual estará corriendo el servidor.

Con el servidor en funcionamiento, comprobaremos si funciona


correctamente, para ello abriremos un explorador como puede ser
Netscape Communicator o Internet Explorer y en la barra de
direcciones teclearemos:
http://127.0.0.1 o http://localhost o http://"nombre de nuestro
PC"

Si tenemos instalado correctamente Apache deberíamos ver la


página que aparece en la fotografía inferior. Esta es la página de
chequeo que por defecto incluye Apache. En caso de no verla es que
no hemos realizado correctamente algún paso anterior.

Por defecto las páginas estarán alojadas en la siguiente dirección


de nuestra máquina:
C:\Directorio de instalación de Apache\htdocs\

Por defecto tenemos configurado Apache para que abra el archivo


index.html que se encuentre en el directorio que indiquemos. Por lo
tanto cuando en el navegador pongamos la dirección
"http://127.0.0.1" el explorador cargará la página index.html del
directorio C:\Directorio de instalación de Apache\htdocs\.

Si tenéis alguna duda sobre todo lo dicho o queréis saber algo más
sobre Apache, en el directorio htdocs\manual existe información
mucho más extensa sobre el funcionamiento, configuración e
instalación de Apache.
Instalación de PHP4
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Descargamos y descomprimimos el archivo de PHP. Podemos


descomprimirlo por ejemplo en el directorio "C:\PHP4\". Una vez
descomprimido, vamos a ese directorio y editamos el archivo
php.ini-dist.

Dentro de él buscamos la sección Rutas y Directorios. Comprobamos


que el apartado "extension_dir" tenga el valor "./" esto indica el
directorio actual de PHP y donde se encontrarán las extensiones de
PHP.

En la siguiente sección tenemos las extensiones de PHP, que nos


proporcionan funciones extra a nuestro interprete de PHP.
Debemos comprobar que el archivo al que se hace referencia esta
en nuestro directorio de PHP ("C:\PHP4\").

En este archivo podemos configurar muchas más opciones, como por


ejemplo opciones para el soporte de distintos sistemas gestores de
bases de datos, pero por el momento no modificaremos nada,
solamente en caso de necesitarlo. Una vez que tengamos modificado
lo anterior, guardamos el archivo con el siguiente nombre "php.ini".

A continuación vamos al directorio donde teníamos instalado


Apache y en el directorio "/config/" editamos el archivo
"httpd.conf" donde deberemos introducir las siguientes directivas
de configuración.

Vamos a la sección "ScriptAlias". En esta sección indicamos el alias


que tendrá la ruta donde se encuentra nuestro intérprete de PHP.
Debemos tener la siguiente línea.
ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache
Group/Apache/cgi-bin/"
LABORATORIO DE CÓMPUTO DE INGENIERÍA

La línea anterior es un directorio que Apache tiene por defecto


para ejecutar scripts. Debajo de esta línea debemos introducir:
ScriptAlias /PHP4/ "C:\PHP4\"

En la sección Addtype, se encuentra la configuración que indica al


intérprete que archivos debe procesar. Añadimos:
Addtype application/x-httpd-php .php4
Addtype application/x-httpd-php .phtml

En la sección Action, indicamos cual es el archivo que sirve de


intérprete de PHP. Añadiremos:
Action application/x-httpd-php "/PHP4/php.exe"

Una vez echo esto guardamos el archivo y creamos una página de


prueba. Guardaremos el archivo en formato de texto plano. Abrimos
un archivo nuevo y escribimos el código inferior:
<?php
echo "Hola, mi primera página PHP";
phpinfo();
?>

Una vez escrito el código anterior lo guardamos en el directorio


"/htdocs/" del directorio Apache con el nombre "info.php4".
Ejecutamos de nuevo un explorador web e introducimos la siguiente
dirección: "http://127.0.0.1/info.php4". El resultado es una pantalla
con información sobre la versión de PHP que utilizamos, además de
información sobre el valor de las variables que PHP maneja. Si no
vemos esa pantalla deberemos comprobar los pasos anteriores y
comprobar que hemos hecho todo correctamente. No obstante,
podemos encontrar más información en el manual de referencia de
PHP.

Instalación de MySQL
LABORATORIO DE CÓMPUTO DE INGENIERÍA

MySQL es un sistema gestor de bases de datos, este nos permite


guardar información y poder realizar páginas más dinámicas, por
ejemplo, podemos guardar contraseñas, direcciones de correo,
realizar foros de discusión, contadores, aparte de guardar
cualquier tipo de información que nos sea de interés. Para poder
manejarnos con él deberemos tener unos conocimientos mínimos del
lenguaje SQL.

Una vez que tengamos el archivo de instalación mysql-


shareware_3_22_34-win.zip debemos descomprimirlo, por ejemplo,
podemos ubicarlo en el directorio "C:\mysqlinst\". Una vez
descomprimido vamos a ese directorio y ejecutamos el programa de
instalación "Setup.exe" donde indicaremos las rutas que queremos
para su instalación.

Una vez terminada la instalación los archivos ejecutables se


encuentra en el directorio "\bin\". MySQL se comporta como un
servidor, por tanto para poder tener acceso al SGBD (sistema
gestor de bases de datos) deberemos tenerlo en funcionamiento,
para hacer esto deberemos ejecutar el archivo "\bin\mysqld-
shareware.exe". Para acceder al sistema debemos hacerlo con el
programa cliente, que es "/bin/mysql.exe".

Para comprobar que funciona correctamente, abrimos una ventana


MS-DOS y vamos al directorio donde esté instalado MySQL (por
defecto "C:\mysql\" y dentro del directorio "\bin\" ejecutamos
"mysql.exe". Si todo va bien habremos entrado en el SGBD. Nos
aparecerá el siguiente mensaje:
Welcome to the MySQL monitor. Commands en with; or \g.
Your MySQL connection id is 2 to server version: 3.22.34-
shareware-debug
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Type 'help for help'


mysql>

Podemos ver las bases de datos que tenemos en el sistema


escribiendo lo siguiente:
show databases;

Para salir de la sesión deberemos escribir "exit;".

Nota:

Todos estos programas están pensados inicialmente para funcionar


bajo S.O. UNIX y que las versiones Windows, tienen muchas
limitaciones, así que no podremos sacar toda la potencia que tienen
estos programas. Pero para un comienzo es suficiente.

Introducción

El lenguaje PHP es un lenguaje de programación de estilo clásico,


con esto quiero decir que es un lenguaje de programación con
variables, sentencias condicionales, bucles, funciones.... No es un
lenguaje de marcas como podría ser HTML, XML o WML. Está mas
cercano a JavaScript o a C.

PHP se ejecuta en el servidor, por eso nos permite acceder a los


recursos que tenga el servidor como por ejemplo podría ser una
base de datos. El programa PHP es ejecutado en el servidor y el
resultado enviado al navegador.
Al ser PHP un lenguaje que se ejecuta en el servidor no es necesario
que su navegador lo soporte, es independiente del navegador, pero
sin embargo para que sus páginas PHP funcionen, el servidor donde
están alojadas debe soportar PHP.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Sintaxis de PHP

La ventaja que tiene PHP sobre otros lenguajes de programación


que se ejecutan en el servidor (como podrían ser los script CGI
Perl), es que nos permite intercalar las sentencias PHP en las
paginas HTML, es un concepto algo complicado de entender si no se
ha visto nunca como funciona unas paginas PHP o ASP.

Vamos a ver un ejemplo sencillo para comprenderlo mejor. En azul


está el código HTML y en rojo el código PHP. Seguiremos este
criterio durante todo el manual.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP</title>
</head>

<body>

Parte de HTML normal.


<BR><BR>

<?php
echo "Parte de PHP<br>";

for($i=0;$i<10;$i++)
{
echo "Linea ".$i."<br>";
}
?>

</body>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

</html>

El código PHP ejecutado tiene dos partes: la primera imprime


"Parte de PHP" y la segunda es un bucle que se ejecuta 10 veces de
0 a 9, por cada vez que se ejecuta se escribe una línea, la variable
$i contiene el número de línea que se está escribiendo.

Variables

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


meter números enteros, números decimales, carácteres... 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 carácteres.

<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>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Existen 2 tipos de variables, las variables locales que solo pueden


ser usadas dentro de funciones y las variables globales que tienen
su ámbito de uso fuera de las funciones, podemos acceder a una
variable global desde una función con la instrucción global
nombre_variable;

Aritméticos

Estos son los operadores que se pueden aplicar a las variables y


constantes numéricas.

Operador Nombre Ejemplo


+ Suma 5+6
- Resta 7-9
* Multiplicación 6*3
/ División 4/8
% Módulo 7%2
++ Suma 1 $a++
-- Resta 1 $a--

Ejemplo:

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php
LABORATORIO DE CÓMPUTO DE INGENIERÍA

$a = 8;
$b = 3;
echo $a + $b,"<br>";
echo $a - $b,"<br>";
echo $a * $b,"<br>";
echo $a / $b,"<br>";
$a++;
echo $a,"<br>";
$b--;
echo $b,"<br>";
?>
</body>
</html>

Comparación

Los operadores de comparación son usados para comparar valores y


así poder tomar decisiones.

Operador Nombre Ejemplo Devuelve verdadero cuando:


== Igual $a == $b $a es igual $b
!= Distinto $a != $b $a es distinto $b
< Menor que $a < $b $a es menor que $b
> Mayor que $a > $b $a es mayor que $b
<= Menor o igual $a <= $b $a es menor o igual que $b
>= Mayor o igual $a >= $b $a es mayor o igual que $b

Condicionales

Las sentencias condicionales nos permiten ejecutar o no unas


ciertas instrucciones dependiendo del resultado de evaluar una
condición. Las más frecuentes son la instrucción if y la instrucción
switch.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Sentencia if ... else

<?php
if (condición)
{
Sentencias a ejecutar cuando la
condición es cierta.
}
else
{
Sentecias a ejecutar cuando la
condición es falsa.
}
?>

La sentencia if ejecuta una serie de instrucciones u otras


dependiendo de la condición que le pongamos. Probablemente sea la
instrucción más importante en cualquier lenguaje de programación.
Con la sentencia switch podemos ejecutar unas u otras
instrucciones dependiendo del valor de una variable, en el ejemplo
anterior, dependiendo del valor de la variable $posicion se ejecuta
el bloque 1 cuando el valor es "arriba", el bloque 2 cuando el valor es
"abajo" y el bloque 3 si no es ninguno de los valores anteriores.

Bucles

Los bucles nos permiten iterar conjuntos de instrucciones, es decir


repetir la ejecución de un conjunto de instrucciones mientras se
cumpla una condición.
Sentencia while
<?php
while (condición)
LABORATORIO DE CÓMPUTO DE INGENIERÍA

{
intrucciones a ejecutar.
}
?>

Mientras la condición sea cierta se reiterará la ejecución de las


instrucciones que están dentro del while.
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Inicio<BR>
<?php
$i=0;
while ($i<10)
{
echo "El valor de i es ", $i,"<br>";
$i++;
}
?>
Final<BR>
</body>
</html>

Sentencia for

La instrucción for es la instrucción de bucles más completa. En una


sola instrucción nos permite controlar todo el funcionamiento del
bucle.

El primer parámetro del for, es ejecutado la primera vez y sirve


para inicializar la variable del bucle, el segundo parámetro indica la
LABORATORIO DE CÓMPUTO DE INGENIERÍA

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.

Funciones

El uso de funciones nos da la capacidad de agrupar varias


instrucciones bajo un solo nombre y poder llamarlas a estas varias
veces desde diferentes sitios, ahorrándonos la necesidad de
escribirlas de nuevo.
<?php
function Nombre(parametro1, parametro2...)
{
instrucción1;
instrucción2;
instrucción3;
instrucción4;

return valor_de_retorno;
}
?>

Manejo de cadenas

Dado el uso del lenguaje PHP el tratamiento de cadenas es muy


importante, existen bastantes funciones para el manejo de cadenas,
a continuación explicaremos las más usadas.

* strlen(cadena). Nos devuelve el número de carácteres de una


cadena.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

* split(separador,cadena). Divide una cadena en varias usando un


carácter separador.
* sprintf(cadena de formato, var1, var2...). Formatea una cadena
de texto al igual que printf pero el resultado es devuelto como una
cadena.
* substr(cadena, inicio, longitud). Devuelve una subcadena de
otra, empezando por inicio y de longitud longitud.
* chop(cadena). Elimina los saltos de línea y los espacios finales
de una cadena.
* strpos(cadena1, cadena2). Busca la cadena2 dentro de cadena1
indicándonos la posición en la que se encuentra.
* str_replace(cadena1, cadena2, texto). Reemplaza la cadena1
por la cadena2 en el texto.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php
echo strlen("12345"),"<br>";

$palabras=split(" ","Esto es una prueba");


for($i=0;$palabras[$i];$i++)
echo $palabras[$i],"<br>";

$resultado=sprintf("8x5 = %d <br>",8*5);
echo $resultado,"<br>";

echo substr("Devuelve una subcadena de otra",9,3),"<br><br>";

if (chop("Cadena \n\n ") == "Cadena")


LABORATORIO DE CÓMPUTO DE INGENIERÍA

echo "Iguales<br><br>";

echo strpos("Busca la palabra dentro de la frase",


"palabra"),"<br><br>";

echo str_replace("verde","rojo","Un pez de color verde, como


verde es la hierba."),"<br>";

?>
</body>
</html>

Envío y recepción de datos

El lenguaje PHP nos proporciona una manera sencilla de manejar


formularios, permitiéndonos de esta manera procesar la
información que el usuario ha introducido.

Al diseñar un formulario debemos indicar la página PHP que


procesará el formulario, así como en método por el que se le pasará
la información a la página.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

<H1>Ejemplo de procesado de formularios</H1>


Introduzca su nombre:
<FORM ACTION="procesa.phtml" METHOD="GET">
<INPUT TYPE="text" NAME="nombre"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

Por razones de seguridad para acceder a las variables del


formulario hay que usar el array de parámetros $_POST[] o
$_GET[] dependiendo del método usado para enviar los parámetros.

Method GET y POST

En la página anterior hemos comentado que los datos de un


formulario se envía mediante el método indicado en el atributo
METHOD de la etiqueta FORM, los dos métodos posibles son GET y
POST.

La diferencia entre estos dos métodos radica en la forma de enviar


los datos a la página, mientras que el método GET envía los datos
usando la URL, el método POST los envía por la entrada estándar
STDIO

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

<FORM ACTION="procesa2.phtml" METHOD="GET">


Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR>
Introduzca sus apellidos:<INPUT TYPE="text"
NAME="apellidos"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
<FORM ACTION="procesa2.phtml" METHOD="POST">
Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR>
Introduzca sus apellidos:<INPUT TYPE="text"
NAME="apellidos"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
El nombre que ha introducido por GET es: <?php echo
$_GET['nombre']," ",$_GET['apellidos'] ?><br>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

El nombre que ha introducido por POST es: <?php echo


$_POST['nombre']," ",$_POST['apellidos'] ?>
<br>
</body>
</html>

Envío de correo electrónico

PHP nos ofrece la posibilidad de enviar emails de una manera


sencilla y fácil, para ello el lenguaje nos proporciona la instrucción
mail( )

<?php
mail(destinatario, tema, texto del mensaje);
?>

En el parámetro destinatario pondremos la dirección de email a


donde se enviará el mensaje, en el parámetro tema el tema o
subject del mensaje y el parámetro texto del mensaje el cuerpo del
mensaje en formato texto plano.
Existe una sintaxis extendida de la instrucción mail( ) que nos
permite añadir información adicional a la cabecera del mensaje.

<?php
mail(destinatario, tema, texto del mensaje, información adicional
de cabecera);
?>

En la información de cabecera podremos incluir parámetros


adicionales al mensaje como Reply-To:, From:, Content-type:... que
nos permiten tener un mayor control sobre el mensaje.

Manipulación de bases de datos


LABORATORIO DE CÓMPUTO DE INGENIERÍA

Crear la base de datos

El comando para crear una base de datos MySQL es el siguiente:


mysqladmin -u root create base_datos

Con este comando conseguimos crear una base de datos en el


servidor de bases de datos de nuestro servidor.

Una vez conseguido esto debemos crear las tablas en la base de


datos, la descripción de las tablas contienen la estructura de la
información que almacenaremos en ellas. Para lo cual usaremos en
lenguaje de consultas SQL común para todas las bases de datos
relacionales
En este ejemplo creamos una tabla llamada prueba con 3 campos: un
campo identificador, que nos servirá para identificar unívocamente
una fila con el valor de dicho campo, otro campo con el nombre de
una persona y por último un campo con el apellido de la persona.

Para crear la tabla puede usar la herramienta de administración de


MySQL de su servidor web o puede escribir un fichero de texto
con el contenido de la sentencia SQL equivalente y luego decirle al
motor de base de datos que la ejecute con la siguiente instrucción:
mysql -u root base_datos <prueba.sql

prueba.sql
CREATE TABLE prueba (
ID_Prueba int(11) DEFAULT '0' NOT NULL auto_increment,
Nombre varchar(100),
Apellidos varchar(100),
PRIMARY KEY (ID_Prueba),
UNIQUE ID_Prueba (ID_Prueba)
LABORATORIO DE CÓMPUTO DE INGENIERÍA

);

Conexión a la base de datos

Una vez que tenemos creada la base de datos en nuestro servidor,


el siguiente paso es conectarnos a la misma desde una página PHP.
Para ello PHP nos proporciona una serie de instrucciones para
acceder a bases de datos MySQL.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php
function Conectarse()
{
if (!($link=mysql_connect("localhost","usuario","Password")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("base_datos",$link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

$link=Conectarse();
LABORATORIO DE CÓMPUTO DE INGENIERÍA

echo "Conexión con la base de datos conseguida.<br>";

mysql_close($link); //cierra la conexion


?>
</body>
</html>

Al ejecutar la instrucción mysql_connect creamos un vínculo entre


la base de datos y la pagina PHP, este vínculo será usado
posteriormente en las consultas que hagamos a la base de datos.

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.

Consultas a la base de datos

Una vez que nos hemos conectado con el servidor de bases de


datos, ya podemos realizar consultas a las tablas de la base de
datos.

Restringir el acceso

Atención: El acceso restringido a páginas usando las variables


globales $PHP_AUTH_USER, $PHP_AUTH_PW y
$PHP_AUTH_TYPE solo funciona si PHP ha sido instalado como un
módulo de Apache, si ha sido instalado como un CGI los ejemplos de
ésta sección no funcionarán.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Para conseguir la autentificación en las páginas usaremos el sistema


de autentificación del protocolo HTTP, este sistema se basa en las
variables globales $PHP_AUTH_USER y $PHP_AUTH_PW.

* $PHP_AUTH_USER. Nombre de usuario introducido.


* $PHP_AUTH_PW. Contraseña introducida.

Para que el navegador nos muestre la ventana de petición de nombre


de usuario y contraseña basta con enviar la siguiente cabecera:
<?php // Manual de PHP de WebEstilo.com
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso
restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
else {
echo "Ha introducido el nombre de usuario:
$PHP_AUTH_USER<br>";
echo "Ha introducido la contraseña: $PHP_AUTH_PW<br>";
}
?>

Esto provoca que se muestre la ventana de nombre de usuario y


contraseña y los datos introducidos se asignen a las variables
$PHP_AUTH_USER y $PHP_AUTH_PW.

A partir de aquí realizaremos las comprobaciones necesarias para


asegurarnos que los datos introducidos son los correctos.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

En el siguiente ejemplo pediremos autorización y comprobaremos si


el nombre de usuario es Javier y la contraseña 123, si es así
tendremos acceso al resto de la página.
<?php // Manual de PHP de WebEstilo.com
if (($PHP_AUTH_USER!="Javier") || ($PHP_AUTH_PW!="123"))
{
header('WWW-Authenticate: Basic realm="Acceso
restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B>.
</body>
</html>

Distinción de usuarios

En la anterior página todo el mundo que tenía acceso a la parte


restringida entraba con el mismo nombre de usuario y contraseña,
esto evidentemente no es una buena solución, es mejor que cada
persona tenga un nombre de usuario y contraseña, ya que de esta
forma podemos inhabilitar a un usuario sin ver comprometida la
seguridad de nuestro sitio.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

En esta página veremos la forma de realizar esto, teniendo un


archivo separado con los nombres de usuario y las contraseñas
válidas. Dicho archivo podría tener el siguiente formato:
nombre_de_usuario|contraseña. Por ejemplo:

passwords.txt
Javier|1235
Pedro|qwer
Noe|Gty45e
Monica|rwe4v

En este ejemplo se pide la autorización al comienzo de la página si


no se ha establecido con anterioridad y se comprueba con el archivo
de contraseñas que hemos llamado passwords.txt, si el nombre de
usuario y contraseña coincide con alguna entrada del fichero se nos
permite ver el resto de la página.
<?php // Manual de PHP de WebEstilo.com
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso
restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}

$fich = file("passwords.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($PHP_AUTH_USER==$campo[0]) &&
($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
$i++;
}
LABORATORIO DE CÓMPUTO DE INGENIERÍA

if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso
restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario
<?php echo $PHP_AUTH_USER?>.
</body>
</html>

Sesiones

Si existe una consulta repetida en las listas de PHP, es la relativa al


uso de las 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.

El término sesión en PHP, session en inglés, se aplica a esta


secuencia de navegación, para ello crearemos un identificador único
que asignamos a cada una de estas sesiones de navegación. A este
identificador de sesión se le denomina, comúnmente, como la sesión.
LABORATORIO DE CÓMPUTO DE INGENIERÍA

El proceso en cualquier lenguaje de programación podría ser algo


así:

Existe una sesión?


Si existe la retomamos
Si no existe creamos una nueva
Generar un identificador único

Y para que no perdamos el hilo de la navegación del usuario


deberemos asociar esta sesión a todas las URLs y acciones de
formulario. Podemos también crear un cookie que incluya el
identificador de sesión, pero es conveniente recordar que la
disponibilidad o no de las cookies depende del usuario, y no es
conveniente fiarse de lo que un usuario pueda o no tener habilitado.

Lo contado hasta ahora es teoría pura y es aplicable a cualquier


lenguaje de programación C, Perl, etc. Los que programamos en
PHP4 tenemos la suerte de que toda la gestión de sesiones la hace
el mismo PHP.

Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos


hacerlo explícitamente, mediante la función session_start(), o al
registrar una variable en una sesión mediante
session_register('miVariable'). En ambos casos se crea una nueva
sesión, si no existe, o se retoma la sesión actual. Veamos un sencillo
ejemplo:

<?php

session_start();
echo "He inicializado la sesión";
?>
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Esta es la forma más básica, si el usuario tiene los cookies


activados, PHP habrá insertado de forma automática la sesión y
ésta será pasada de una página a otra sin hacer nada más. Desde un
punto de vista práctico la sesión es operativa, pero no vemos nada.
Podemos obtener la sesión en cualquier momento mediante la
función session_id(). Inserta en las sucesivas páginas la siguiente
línea para ver si la sesión está disponible:
<?php // Manual de PHP de WebEstilo.com

session_start();
echo 'La sesión actual es: '.session_id();
?>

En este caso session_start() comprueba en los cookies que existe


una sesión y continua con ella, session_id() devuelve el identificador
actual.

Incrustación de imágenes

La función que vamos a utilizar es imagePaletteCopy(). Esta función


copia la paleta de una imagen indexada (fuente) a otra (destino),
forzando que la imagen destino utilice los mismos colores que la
imagen fuente.

Supongamos que esta es la imagen que queremos convertir a escala


de grises:
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Mientras más colores mayor será la calidad de la imagen. No


olvidemos que a mayor calidad también será mayor el tiempo de
transferencia.

<?php

header("Content-type: image/gif");

// Obtenemos la imagen original


$imagen = imagecreatefromjpeg("imagen1.jpg");

// Convertimos la imagen a indexada


imagetruecolortopalette($imagen,true,256);

// Esta será la imagen para la escala de grises


$escala = imagecreatefromgif("escala1.gif");

// Copiamos la paleta de escala a la imagen


imagepalettecopy($imagen,$escala);

imagedestroy($escala);

imagegif($imagen);
LABORATORIO DE CÓMPUTO DE INGENIERÍA

imagedestroy($imagen);

?>

Este será el resultado al utilizar la paleta de la escala de grises en


la imagen a colores:

Manejo de Imágenes y texto

Habrá ocasiones en las que necesitemos generar textos con


imágenes en lugar de con fuentes TrueType. Un ejemplo es la
siguiente imagen:
LABORATORIO DE CÓMPUTO DE INGENIERÍA

Muy Importante: Habrá que nombrar cada archivo PNG con su


correspondencia de caracter, esto es; la imagen de la letra 'A' lo
llamaremos 'a.png', la imagen de la letra 'B' 'b.png', y así
sucesivamente.

Para comenzar, descarguen el juego de caracteres en mayúsculas de


la A a la Z, los números del 0 al 9 y una imagen de fondo
('bg_big.png') que he preparado para este ejercicio y
descomprímanlo en una carpeta llamada 'abcdario'. El archivo PHP
que vamos a trabajar deberá encontrarse en el mismo nivel que la
carpeta que contiene las imágenes, no dentro de ella.

Ahora vamos con el código:

<?php

// Comenzamos con el 'header'


header("Content-type: image/jpeg");

// Creamos la imagen
$imagen = imagecreatetruecolor(420,132);

// Definimos la imagen que servirá de fondo


$fondo = imagecreatefrompng("abcdario/bg_big.png");
// La definimos como patrón de fondo
imagesettile($imagen,$fondo);

// Rellenamos con el patrón


imagefill($imagen,0,0,IMG_COLOR_TILED);

// Damos salida a la imagen


imagejpeg($imagen);
LABORATORIO DE CÓMPUTO DE INGENIERÍA

//Destruimos las imagenes


imagedestroy($fondo);
imagedestroy($imagen);

?>

eriores