Practica PHP Sesiones Sockets

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

CURSO ADMINISTRACIN APACHE WEB SERVER


PRCTICA 6: Programacin PHP: sesiones, mysql, sockets

1. Verificar el servidor Web Apache y MySQL


1. Comprobaremos que el servidor web apache esta instalado y configurado correctamente incluyendo los mdulos PHP, SSL, certificados etc., tal como se describe en las sesiones anteriores. 2. Comprobaremos que tenemos instalado el servidor de Bases de Datos MySQL y hemos creado una base de datos de usuarios tal como se describe en la prctica anterior (incluiremos en ella tres campos: userid , passwd, level)

2. Acerca de las variables superglobales


Desde la versin 4.1 de PHP se implantaron mecanismos de seguridad en el acceso a los parmetros de un script y se simplific el acceso a las variables globales bsicas. As pues, si no est activa la opcin register_globals en php.ini, (opcin recomendada) los parmetros pasados al CGI (mtodos GET y POST), variables de sesin, variables de configuracin , etc no estn registradas como variables globales. En lugar de ello disponemos de un conjunto de arrays asociativos globales especficos para cada tipo de variable (esto permite que no interfieran variables con el mismo nombre). Cada vez que se usa una variable global en una funcin es preciso declararla como tal (global). Por eso tambin s anaadieron las llamas variables supergobales (no precisan e declaracin) que se pueden utilizar directamente en cualquier ambito. Entre ellas estn los arrays de acceso a los parmetros CGI, sesin, configuracin del sistema, datos de la ejecucin, etc. A continuacin se describen todas las variables superglobales. Estas variables son el modo recomendado de acceder a las variables del sistema.

Pgina 1 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

PHP superglobales

$GLOBALS Contiene una referencia a cada variable disponible en el espectro de las variables del script. Las llaves de esta matriz son los nombres de las variables globales. $GLOBALS existe desde PHP 3. $_SERVER Variables definidas por el servidor web directamente relacionadas con el entorno en don el script se esta ejecutando. Anloga a la antigua matriz $HTTP_SERVER_VARS (la cual est todava disponible, aunque no se use). $_GET Variables proporcionadas al script por medio de HTTP GET. Anloga a la antigua matriz $HTTP_GET_VARS (la cual est todava disponible, aunque no se use). $_POST Variables proporcionadas al script por medio de HTTP POST. Anloga a la antigua matriz $HTTP_POST_VARS (la cual est todava disponible, aunque no se use). $_REQUEST Variables proporcionadas al script por medio de cuaquier mecanismo de entrada del usuario y por lo tanto no se puede confiar en ellas. La presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de configuracin variables_order. Esta matriz no tiene un anlogo en versiones anteriores a PHP 4.1.0. Nota: Cuando se utiliza la linea de comandos, argv y argc no son incluidas aqu; estas variables se podrn encontrar en la matriz $_COOKIE Variables proporcionadas al script por medio de HTTP cookies. Anloga a la antigua matriz $HTTP_COOKIE_VARS (la cual est todava disponible, aunque no se use). $_FILES Variables proporcionadas al script por medio de la subida de ficheros via HTTP . Anloga a la antigua matriz $HTTP_POST_FILES (la cual est todava disponible, aunque no se use). $_ENV Variables proporcionadas al script por medio del entorno. Anloga a la antigua matriz $HTTP_ENV_VARS (la cual est todava disponible, aunque no se use). $_SESSION Variables registradas en la sesin del script. Anloga a la antigua matriz $HTTP_SESSION_VARS (la cual est todava disponible, aunque no se use).

Pgina 2 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

3. Manejo de Sesiones
El mecanismo de sesiones permite almacenar datos comunes entre diferentes accesos a nuestro servidor realizados por un usuario. Esto permite a las aplicaciones Web desarrolladas en PHP recordar lo que ha hecho el usuario en anteriores conexiones. La duracin de la sesion est predefinida en php.ini y por defecto es hasta que se cierre el navegador. Los datos de la session se almacenan en f rma de Cookies (datos almacenadas en el o ewquipo cliente) o bien como paso de parmetros CGI del tipo GET. Si nuestro navegador permite Cookies utilizar este mtodo que es el ms fiable, si no utilizar la propagacin a travs de parmetros CGI tipo GET (este ultimo mtodo puede interferir con el paso de parmetros normales de nuestra aplicacin realizados en Javascript) Vamos a utilizar el mecanismo de sesiones para que cuando un usuario se valide en nuestro sistema, sus datos sean almacendados y sean validos durante toda la sesin. Aprovechando lo que se estudi en prcticas anteriores, el proceso de validacin se basar en un formulario CGI y el chequeo con una base de datos del usuario y contrsea. Las funciones para el manejo de sesiones se han simplificado enormente a partir de la version 4.1 de PHP por lo que utilizaremos este nuevo esquema mucho ms fiable y seguro. La function bsica para el maenjo de sesiones es: session_start() que carga los datos de la sesin almacenados en el cliente. Nota: En veriones anterioes a la 4.1 de PHP las variables de la sesin estaban disponibles como variables globales y era preciso resgistrarlas como parte de la session para que los cambios fueran permanentes. Actualmente esto no es preciso y por seguridad no se registra ninguna variable de la session o de parmetros de CGI como variables globales (a no ser que lo configuremos expresamente en php.ini). Disponemos en su lugar de las variables llamadas superglobales que siempre son accesibles desde cuanquier function. El acceso a los datos de la session se realizan mediante la variable superglobal $_SESSION (tambin estn disponibles en la variable global normal $HTTP_SESSION_VARS). Se trata de un array asociativo que contiene los datos de la sesi n. Cualquier cambio en esta variable es permanente en las siguientes conexiones. Para comprobar si un dato de una session existe pordemos usar la function estndar isset(). Para eliminar una variable de una sesin podemos usar la function unset().

Pgina 3 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

Podemos probar un ejemplo sencillo que cuenta las visitas a nuestro servidor:
<?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; } else { $_SESSION['count']++; }

// primera conexin

echo "Esta es la visita nnero ", $_SESSION['count']; echo "<br><br><br>"; phpinfo(); ?>

En este ejemplo podemos ver las variables PHP (al final) con el identificador de sesin ($_COOKIE["PHPSESSID"] o $_REQUEST["PHPSESSID"]). Este identificador es comun para todos los accesos desde el mismo navegador o ventanas abiertas desde l, pero es difernete si abrimos un nuevo navegador. Por tanto el mecanismo de sesiones solo guarda los datos mientras accedamos desde la misma aplicacin (navegador). Si cerramos la ventana y abrimos una nueva los datos se pierden. Si realmente queremos conservas datos entre diferentes ejecuciones del navegador deberemos usar directamente las Cookies. Ejemplo2: borrar una variable de la session y mostrar el identificador de sesin.
<?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; // primera conexin } else { $_SESSION['count']++; } echo "Esta es la visita nmero ", $_SESSION['count']; echo "<br>Identificador de Sesin: ", Session_ID(); // si alcanza el valor 5 borra la variable de la sesin para volver a empezar if($_SESSION['count'] >= 5) unset($_SESSION['count']); ?>

Pgina 4 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

4. Validacin de usuarios utilizando Sesiones y MySQL


Vamos a realizan una aplicacin que permita la validacin del usuario en cualquier pgina PHP utilizando el mecanismo de sesiones, la base de datos MySQL y el cifrado SSL. El cifrado SSL es necesario si deseamos que el password no pueda ser capturado en la red. Los parmetros de un CGI estan disponibles en la babecera HTTP por lo que pueden ser decodificados con facilidad. Por ello, cuando accedamos a una pgina de validacin segura deber realizarse usando SSL. La aplicacin se estrucurar en tres ficheros: - Fichero validar. inc: contendr el cdigo PHP para realizar la validacin. Este fichero se incluir en cualquier pgina donde deseemos realizar la validacin. Este fichero se ubicar en el directorio especificado en la directiva incude_path de php.ini - Fichero validar.php: contendr en CGI de validacin solicitando en nombre de usuario y contrasea chequeando su validez (Se accedera mediante SSL) - Fichero pagina .php: pgina de ejemplo que precise validacin. Todas las constantes utilizadas se definirn en el fichero validar.inc para que puedan ser cambiadas con facilidad. Por simplicidad las pginas no incluyen el formato del texto que deber ser aadido mediante un editor HTML y el uso de hojas de estilos CSS. La base de datos debe modificarse para incluir los campos: userid (nombre de usuario) , passwd (md5($userid.$passwd)), y level (entero con el nivel de acceso) Fichero: pagina.php
<?php include ("validar.inc"); ValidarSesion($usuario) ?> <html> <head> <title>Prueba Sistema de Validacin </title> </head> <body> Prueba Sistema de Validacin <br><br><br> Nombre: <?php echo $usuario["nombre"]; ?> <br> Nivel: <?php echo $usuario["nivel"]; ?> </body> </html>

Pgina 5 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

Fichero: validar. php


<?php include "validar.inc"; // // // // // // variables de entrada del CGI: $_REQUEST["volver"] : pgina de retorno desde la validacin correcta $_REQUEST["cancelar"] : URI para el retorno para el botn cancelar $_REQUEST["sumbit_val"] : $_REQUEST["nombre"] : nombre del usuario $_REQUEST["clave"] : password

// Comprueba la variable volver if(!isset($_REQUEST["volver"])) $volver="/"; else $volver=$_REQUEST["volver"]; // Comprueba la variable cancelar if(!isset($_REQUEST["cancelar"])) $cancelar="/"; else $cancelar=$_REQUEST["cancelar"]; $texto_error=""; if (isset($_REQUEST["submit_val"])) { // Datos ya introducidos, comprueba el usuario y contrasea if ( ComprobarUsuarioBD($_REQUEST["nombre"], md5($_REQUEST["nombre"].$_REQUEST["clave"]), $usuario)) { $_SESSION[_CAMPO_USUARIO_]=$usuario["nombre"]; $_SESSION[_CAMPO_PASSWD_]=$usuario["clave"]; // la clave se guarda cifrada $_SESSION[_CAMPO_NIVEL_]=$usuario["nivel"]; GuardaDatosUsuarioLog($nombre, $volver); echo "<script type=\"text/javascript\">document.location.replace('$volver');</script>"; die(""); } else $texto_error="(Usuario o password incorrectos)"; } // formulario de entrada de datos ?> <html> <head> <title>Login </title> </head> <body> Control de Accceso de Usuarios <?php echo $texto_error; ?> <br><br><br> <form action="" method=POST> Nombre: <input name="nombre" value="" size=16> <br> Password: <input name="clave" type=password value="" size=16> <br> <br> <input type="submit" name="submit_val" value=" Login "> &nbsp;&nbsp;&nbsp <input type="reset" value=" Borrar "> &nbsp;&nbsp;&nbsp; <input type="button" name ="cancelar" value=" Cancelar " onclick="document.location.replace('<?php echo $cancelar; ?>')"> </form>

Pgina 6 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

<br> NOTA: El nombre y el password son sensibles a may&uacute;sculas </body> </html>

Fichero: validar.inc
<?php // programa: validar.inc // Definicin de constantes define("_URL_PAGINA_VALIDAR_", "/validar.php"); define("_URL_PAGINA_CANCELAR_", "/"); define("_PATH_FICHERO_LOGS_", "c:\apache\data\logs.txt"); define("_SERVIDOR_BASE_DATOS_", "localhost"); define("_BASE_DATOS_", "mibase"); define("_USUARIO_BASE_DATOS_", "root"); define("_CAMPO_USUARIO_", "userid"); define("_CAMPO_PASSWD_", "passwd"); define("_CAMPO_NIVEL_", "level"); // inicia siempre la sesin session_start(); //*********************************************************************** // Comprueba que un usuario/passwd son correctos en la base de datos // $passwd: cifrado md5($usuario.$passwd) // $usuario :devuelve los datos del usuario validado //*********************************************************************** function ComprobarUsuarioBD($userid, $passwd, &$usuario) { // abre la base de datos $db = mysql_connect(_SERVIDOR_BASE_DATOS_, _USUARIO_BASE_DATOS_); if(!$db) return false; // el servidor MySQL no est activo $result=mysql_select_db(_BASE_DATOS_,$db); if(!$result) return false; // no existe la base de datos // busca el usuario $userid=addslashes($userid); // elimina caracteres maliciosos $sql = "SELECT * FROM alumno WHERE userid='$userid'"; $result = mysql_query($sql, $db); if (!$result) return false; $myrow = mysql_fetch_array($result); if(!$myrow) return false; // no existe el usuario // comprueba el password if(!isset($myrow[_CAMPO_PASSWD_]) || $myrow[_CAMPO_PASSWD_]!=$passwd) return false; // password incorrecto // copia los datos $usuario["nombre"]=$myrow[_CAMPO_USUARIO_]; $usuario["clave"]=$myrow[_CAMPO_PASSWD_]; $usuario["nivel"]=$myrow[_CAMPO_NIVEL_]; mysql_close($db)

Pgina 7 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

return true; } //*********************************************************************** // Comprueba que la sesin est validada. Chequeos: // 1. si est validado // 2. clave y nombre registrados vlidos // $usuario :devuelve los datos del usuario validado //*********************************************************************** function ComprobarSesion(&$usuario) { // comprueba que la sesin est validada if (!isset($_SESSION[_CAMPO_USUARIO_]) || !isset($_SESSION[_CAMPO_PASSWD_]) || !isset($_SESSION[_CAMPO_NIVEL_]) ) return false; // comprueba en la base de datos que el usuario y el password son correctos if(!ComprobarUsuarioBD($_SESSION[_CAMPO_USUARIO_], $_SESSION[_CAMPO_PASSWD_], $usuario)) return false; return true; } //*********************************************************************** // Comprueba que la sesin est validada.Si no solicita validacin. // $usuario :devuelve los datos del usuario validado //*********************************************************************** function ValidarSesion(&$usuario) { // comprueba que la sesin actual est correctamente validada if ( ComprobarSesion($usuario)) return true; // si no, fuerza la validacin echo "<script type=\"text/javascript\"> document.location='", _URL_PAGINA_VALIDAR_, "?volver=",$_SERVER["PHP_SELF"] , "&cancelar=", _URL_PAGINA_CANCELAR_ , "';</script>"; die(""); } //*********************************************************************** // Elimina los datos de la sesin validada //*********************************************************************** function BorrarSesion() { if (isset($_SESSION[_CAMPO_USUARIO_])) unset ($_SESSION[_CAMPO_USUARIO_]); if (isset($_SESSION[_CAMPO_PASSWD_])) unset ($_SESSION[_CAMPO_PASSWD_]); if (isset($_SESSION[_CAMPO_NIVEL_])) unset ($_SESSION[_CAMPO_NIVEL_]); }

Pgina 8 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

//*********************************************************************** // Lee los datos de la sesin actual // $usuario :devuelve los datos del usuario validado // //*********************************************************************** function LeerSesion(&$usuario) { // comprueba que la sesin est validada if (!isset($_SESSION[_CAMPO_USUARIO_]) || !isset($_SESSION[_CAMPO_PASSWD_]) || !isset($_SESSION[_CAMPO_NIVEL_]) ) return false; $usuario["nombre"]=$_SESSION[_CAMPO_USUARIO_]; $usuario["clave"]=$_SESSION[_CAMPO_PASSWD_]; $usuario["nivel"]=$_SESSION[_CAMPO_NIVEL_]; return true; }

//**************************************************************/ // Funcion que actualiza la tabla de accesos al sistema (log) //**************************************************************/ function GuardaDatosUsuarioLog($usuario, $pagina) { $ip=$_SERVER["REMOTE_ADDR"]; $ag=$_SERVER["HTTP_USER_AGENT"]; $pg=$pagina; $fecha=date ("M d Y H;i;s", time());

$fp=fopen(_PATH_FICHERO_LOGS_, "a"); $log= "USUARIO: $usuario :PAGINA: $pg :NAVEGADOR: $ag\n"; fwrite($fp, $log); fclose($fp); return; }

:FECHA: $fecha

:IP: $ip

?>

Pgina 9 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

5. Conexin a sistemas remotos mediante sockets


En PHP todas las funciones de gestin de streams o ficheros tienen la posibilidad de acceder a sistemas remotos utilizando los protocolos estndar (HTTP, FTP,..). Basta con indicar en el parmetro del nombre del fichero el prefijo del protocolo (http://...). El problema es que solo es slamente funcionan con potocolos estandarizados y con cabeceras por defecto. Si debemos comunicarnos con un dispositivo con un protocolo especfico, o bien debemos enviar cabeceras especiales (por ejemplo autentificacin de usuarios en Apache) tendremos que utilizar la librera de sockets. PHP incluye una librera general con las mismas funciones de UNIX para el manejo de sockes. Adicionalmente se proporcionan algunas funciones de mayor nivel para simplificar el cdigo cuando realizamos conexiones en modo cliente (las ms habituales). Las funciones que utilizaremos son:
int fsockopen ( string hostname, int port [, int errno [, string errstr [, double timeout]]]) permite abrir un socket int fclose ( int fp) cierra el socket fgets(), fputs(), fread() fwrite() para lectura/ escritura en el socket feof() : comprueba si hay datos en el socket socket_set_timeout(int fp, int seconds [, int microseconds])) fija el tiempo de espera mximo en las operaciones de lectura

Vamos a realizar una aplicacin PHP en la que nos conectaremos con un servidor de video para controlar una cmara motorizada y capturar una imagen. La aplicacin estar formada por dos ficheros: - Fichero camara.inc: contendr el cdigo PHP para realizar la connexion. Este fichero se ubicar en el directorio especificado en la directiva incude_path de php.ini - Fichero camara.php: contendr en CGI de toma de datos y ejecucin de la peticin Todas las constantes utilizadas se definirn en el fichero camara.inc para que puedan ser cambiadas con facilidad. Por simplicidad las pginas no incluyen el formato del texto que deber ser aadido mediante un editor HTML y el uso de hojas de estilos CSS.

Pgina 10 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

Fichero: camara.inc
<?php // programa: camara.inc // Definicin de constantes define("_SERVIDOR_VIDEO_", "videoisa.umh.es"); define("_DIRECTORIO_IMAGEN_", "c:/Apache/htdocs/imagenes/"); define("_PATHURL_IMAGEN_", "/imagenes/"); define("_CLAVE_ACCESO_VIDEOISA_", xxxxxxxxxxx\r\n\r\n"); define("_TIMEOUT_SOCK_", 10); apertura de un socket define("_TIMEOUT_READ_SOCK_", 5); la respuesta de un soket // variables $FICHERO_IMAGEN =""; $RESOLUCIONES= "Authorization: Basic

// tiempo mximo de espera para la // tiempo mximo de espera para

// fichero con la captura de la imagen

array ( "704x576"=> "704x576", "352x288"=> "352x288", "176x144"=> "176x144"

); $NIVELESCOLOR= array ( "100" => "Color RGB 24bits", "50" => "Color RGB 12bits", "0" => "Monocromo" array ( "0" => "Sin Perdida", "25" => "Media", "50" => "Alta"

); $COMPRESIONES=

);

// Mueve la cmara PTZ function MoverPTZ($camera, $pan, $tilt, $zoom) { $peticion_http = array( "GET /axiscgi/com/ptz.cgi?camera=$camera&pan=$pan&tilt=$tilt&zoom=$zoom&speed=75 HTTP/1.0\r\n", _CLAVE_ACCESO_VIDEOISA_ ); // abre una conexin $socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_); if(!$socket) return false; //enva la peticin for($i=0; $i< count($peticion_http); $i++) fwrite($socket, $peticion_http[$i]);

Pgina 11 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

// lee la respuesta $respuesta=array(); socket_set_timeout($socket, _TIMEOUT_READ_SOCK_); $i=0; while(!feof($socket)) { $respuesta[$i]=fread($socket,256); echo "$respuesta<br>"; $i++; } fclose($socket); return true; } // Lee el estado actual de la camara function LeerEstadoPTZ($camera, &$pan, &$tilt, &$zoom) { $peticion_http= array( "GET /axis-cgi/com/ptz.cgi?camera=$camera&query=position HTTP/1.0\r\n", _CLAVE_ACCESO_VIDEOISA_ ); // abre una conexin $socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_); if(!$socket) return false; //enva la peticin for($i=0; $i< count($peticion_http); $i++) fwrite($socket, $peticion_http[$i]); // lee la respuesta $respuesta=array(); $i=0; socket_set_timeout($socket, _TIMEOUT_READ_SOCK_); while(!feof($socket)) { $respuesta[$i]=fread($socket,256); //echo "$i- $respuesta[$i]<br>"; $i++; } fclose($socket);

// Extrae los parmetros $offset=0; $pos_pan_val=strpos($respuesta[0], "pan", $offset)+strlen("pan")+1; $pos_tilt_val=strpos($respuesta[0], "tilt", $offset)+strlen("tilt")+1; $pos_zoom_val=strpos($respuesta[0], "zoom", $offset)+strlen("zoom")+1; if($pos_pan_val==false || $pos_tilt_val==false || $pos_zoom_val==false )

Pgina 12 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

return false; $final=strlen($respuesta[0]); $pan=(int) substr($respuesta[0], $pos_pan_val, $final$pos_pan_val); $tilt=(int) substr($respuesta[0], $pos_tilt_val, $final$pos_tilt_val); $zoom=(int) substr($respuesta[0], $pos_zoom_val, $final$pos_zoom_val); return true; } //*********************************************** // Toma una imagen de la cmara //*********************************************** function TomarImagenCamara($camera, $resolution, $compression, $colorlevel) { global $FICHERO_IMAGEN, $ESTADO_TITERE;

// crea el directorio para las imgenes si no existe if (!is_dir(_DIRECTORIO_IMAGEN_)) mkdir(_DIRECTORIO_IMAGEN_, 0777); // aade el timestamp UNIX al nombre del fichero $FICHERO_IMAGEN = "snap" . time() . ".jpg";

$peticion_http = array("GET /axiscgi/jpg/image.cgi?camera=$camera&resolution=$resolution&compression=$comp ression&colorlevel=$colorlevel&clock=0&date=0&quad=0&text=0&rotation=0&sh owlenght=0 HTTP/1.0\r\n", _CLAVE_ACCESO_VIDEOISA_); // abre una conexin $socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_); if(!$socket) return false; //enva la peticin for($i=0; $i< count($peticion_http); $i++) fwrite($socket, $peticion_http[$i]); // lee la respuesta $respuesta=array(); $i=0; socket_set_timeout($socket, _TIMEOUT_READ_SOCK_); while(!feof($socket)) { $respuesta[$i]=fread($socket,350000); $i++; } fclose($socket);

Pgina 13 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

// Elimina la cabecera HTTP for($i=0, $offset=0; $i<5; $i++) { $pos=strpos($respuesta[0], "\r\n", $offset); $offset= $pos+2; } $entrada=substr($respuesta[0], $pos+2, strlen($respuesta[0])-$pos-2 ); $respuesta[0]=$entrada;

// Graba la imagen en el fichero $fp=fopen( _DIRECTORIO_IMAGEN_ . $FICHERO_IMAGEN, "wb"); if(!$fp) return false; for($i=0; $i< count($respuesta); $i++) fwrite($fp, $respuesta[$i], strlen($respuesta[$i])); fclose($fp); return true; } ?>

Pgina 14 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

Fichero: camara.php
<?php include("c.inc"); // // // // // // // // Variables del CGI: $ejecutar: indica una solicitud $resolution: $colorlevel: $compression: $pan: $tilt: $zoom:

if(isset($_REQUEST["ejecutar"])) $ejecutar=$_REQUEST["ejecutar"]; if(isset($_REQUEST["resolution"])) $resolution=$_REQUEST["resolution"]; if(isset($_REQUEST["colorlevel"])) $colorlevel=$_REQUEST["colorlevel"]; if(isset($_REQUEST["compression"])) $compression=$_REQUEST["compression"];

if(isset($_REQUEST["pan"])) $pan=$_REQUEST["pan"]; if(isset($_REQUEST["tilt"])) $tilt=$_REQUEST["tilt"]; if(isset($_REQUEST["zoom"])) $zoom=$_REQUEST["zoom"];

if(isset($ejecutar)) { MoverPTZ(1, $pan, $tilt, $zoom); } else { // valores por defecto $resolution=key($RESOLUCIONES); $compression=key($COMPRESIONES); $colorlevel=key($NIVELESCOLOR); } LeerEstadoPTZ(1, $pan, $tilt, $zoom); TomarImagenCamara(1, $resolution, $compression, $colorlevel); ?> <html> <head> <title>Camara - </title> <script type="text/javascript"> <!-function ComprobarValores(selObj, num) { switch (num) {

Pgina 15 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

case 1: // Giro if(parseInt(selObj.pan.value)<-100) selObj.pan.value="-100"; else if(parseInt(selObj.pan.value)>100) selObj.pan.value="100"; break; case 2: // Elevacin if(parseInt(selObj.tilt.value)<-25) selObj.tilt.value="-25"; else if(parseInt(selObj.tilt.value)>25) selObj.tilt.value="25"; break; case 3: // Zoom if(parseInt(selObj.zoom.value)<0) selObj.zoom.value="0"; else if(parseInt(selObj.zoom.value)>9999) selObj.zoom.value="9999"; break; } } //--> </script> </head> <body> Cmara <form name="camara" method="post" action=""> Resoluci&oacute;n: <select name="resolution"> <?php foreach ($RESOLUCIONES as $clave=> $valor) echo "<option value=\"$clave\" >$valor</option>"; ?> </select> Tipo de Imagen: <select name="colorlevel"> <?php foreach ($NIVELESCOLOR as $clave=> $valor) echo "<option value=\"$clave\" >$valor</option>"; ?> </select> Compresi&oacute;n: <select name="compression"> <?php foreach ($COMPRESIONES as $clave=> $valor) echo "<option value=\"$clave\" >$valor</option>"; ?> </select> <br><br>Giro [-100.0 : 100.0]: <input type="text" name="pan" size="4" maxlength="4" value="<?php echo $pan;?>" onChange="ComprobarValores(this.form, 1)"> Elevaci&oacute;n [-25.0 : 25.0]: <input type="text" name="tilt" size="4" maxlength="4" value="<?php echo

Pgina 16 de 17

Divisin de Ingeniera de Sistemas y Automtica Departamento de Ingeniera de Sistemas Industriales

$tilt;?>" onChange="ComprobarValores(this.form, 2)"> Zoom [0 : 9999]: <input type="text" name="zoom" size="4" maxlength="4" value="<?php echo $zoom; ?>" onChange="ComprobarValores(this.form, 3)"> <br><br> <input type="submit" name="ejecutar" value="Ejecutar"> <input type="button" value="Actualizar" onclick="location.replace('<?echo $_SERVER["PHP_SELF"];?>');"> <br><br> <img name="Camara" src="<?php echo _PATHURL_IMAGEN_ , $FICHERO_IMAGEN;?>" > </form> </body> </html>

Pgina 17 de 17

También podría gustarte