• No se han encontrado resultados

CURSO ADMINISTRACIÓN APACHE WEB SERVER. 1. Verificar el servidor Web Apache y MySQL. 2. Acerca de las variables superglobales

N/A
N/A
Protected

Academic year: 2021

Share "CURSO ADMINISTRACIÓN APACHE WEB SERVER. 1. Verificar el servidor Web Apache y MySQL. 2. Acerca de las variables superglobales"

Copied!
17
0
0

Texto completo

(1)

CURSO ADMINISTRACIÓN APACHE WEB SERVER

PRÁCTICA 6: Programación 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 módulos 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 práctica

anterior (incluiremos en ella tres campos: userid , passwd, level)

2. Acerca de las variables superglobales

Desde la versión 4.1 de PHP se implantaron mecanismos de seguridad en el acceso a los

parámetros de un script y se simplificó el acceso a las variables globales básicas.

Así pues, si no está activa la opción register_globals en php.ini, (opción recomendada) los

parámetros pasados al CGI (métodos GET y POST), variables de sesión, variables de

configuración , etc… no están registradas como variables globales. En lugar de ello

disponemos de un conjunto de arrays asociativos globales específicos 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 función es preciso declararla como tal

(global). Por eso también se anañadieron las llamas variables supergobales (no precisan

declaración) que se pueden utilizar directamente en cualquier ambito. Entre ellas están los

arrays de acceso a los parámetros CGI, sesión, configuración del sistema, datos de la

ejecución, etc.

A continuación se describen todas las variables superglobales. Estas variables son el modo

recomendado de acceder a las variables del sistema.

(2)

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. Análoga a la antigua matriz $HTTP_SERVER_VARS (la cual está todavía disponible, aunque no se use).

$_GET

Variables proporcionadas al script por medio de HTTP GET. Análoga a la antigua matriz $HTTP_GET_VARS (la cual está todavía disponible, aunque no se use).

$_POST

Variables proporcionadas al script por medio de HTTP POST. Análoga a la antigua matriz $HTTP_POST_VARS (la cual está todavía 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 configuración

variables_order. Esta matriz no tiene un análogo 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 podrán encontrar en la matriz

$_COOKIE

Variables proporcionadas al script por medio de HTTP cookies. Análoga a la antigua matriz $HTTP_COOKIE_VARS (la cual está todavía disponible, aunque no se use). $_FILES

Variables proporcionadas al script por medio de la subida de ficheros via HTTP . Análoga a la antigua matriz $HTTP_POST_FILES (la cual está todavía disponible, aunque no se use).

$_ENV

Variables proporcionadas al script por medio del entorno. Análoga a la antigua matriz $HTTP_ENV_VARS (la cual está todavía disponible, aunque no se use).

$_SESSION

Variables registradas en la sesión del script. Análoga a la antigua matriz $HTTP_SESSION_VARS (la cual está todavía disponible, aunque no se use).

(3)

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

duración 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 forma de Cookies (datos almacenadas en el

ewquipo cliente) o bien como paso de parámetros CGI del tipo GET. Si nuestro navegador

permite Cookies utilizará este método que es el más fiable, si no utilizará la propagación a

través de parámetros CGI tipo GET (este ultimo método puede interferir con el paso de

parámetros normales de nuestra aplicación 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 sesión.

Aprovechando lo que se estudió en prácticas anteriores, el proceso de validación se basará

en un formulario CGI y el chequeo con una base de datos del usuario y contrseña.

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 más fiable y

seguro.

La function básica para el maenjo de sesiones es: session_start() que carga los datos de

la sesión almacenados en el cliente.

Nota: En veriones anterioes a la 4.1 de PHP las variables de la sesión 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

parámetros 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

(también están 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 estándar

isset().

Para eliminar una variable de una sesión podemos usar la function

(4)

Podemos probar un ejemplo sencillo que cuenta las visitas a nuestro servidor:

<?php

session_start();

if (!isset($_SESSION['count'])) {

$_SESSION['count'] = 0; // primera conexión

} else {

$_SESSION['count']++; }

echo "Esta es la visita núnero ", $_SESSION['count']; echo "<br><br><br>";

phpinfo(); ?>

En este ejemplo podemos ver las variables PHP (al final) con el identificador de sesión

($

_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 aplicación (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 sesión.

<?php

session_start();

if (!isset($_SESSION['count'])) {

$_SESSION['count'] = 0; // primera conexión } else {

$_SESSION['count']++; }

echo "Esta es la visita número ", $_SESSION['count']; echo "<br>Identificador de Sesión: ", Session_ID();

// si alcanza el valor 5 borra la variable de la sesión para volver a empezar

if($_SESSION['count'] >= 5) unset($_SESSION['count']);

(5)

4. Validación de usuarios utilizando Sesiones y

MySQL

Vamos a realizan una aplicación que permita la validación del usuario en cualquier página

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 parámetros de un CGI estan disponibles en la babecera HTTP por lo que pueden ser

decodificados con facilidad. Por ello, cuando accedamos a una página de validación segura

deberá realizarse usando SSL.

La aplicación se estrucurará en tres ficheros:

- Fichero validar. inc : contendrá el código PHP para realizar la validación. Este

fichero se incluirá en cualquier página donde deseemos

realizar la validación. Este fichero se ubicará en el directorio

especificado en la directiva incude_path de php.ini

- Fichero validar.php: contendrá en CGI de validación solicitando en nombre de

usuario y contraseña chequeando su validez (Se accedera

mediante SSL)

- Fichero pagina .php: página de ejemplo que precise validación.

Todas las constantes utilizadas se definirán en el fichero validar.inc para que puedan ser

cambiadas con facilidad.

Por simplicidad las páginas no incluyen el formato del texto que deberá ser añadido 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 Validación </title> </head>

<body>

Prueba Sistema de Validación <br><br><br>

Nombre: <?php echo $usuario["nombre"]; ?> <br>

Nivel: <?php echo $usuario["nivel"]; ?> </body>

(6)

Fichero: validar. php

<?php

include "validar.inc";

// variables de entrada del CGI:

// $_REQUEST["volver"] : página de retorno desde la validación correcta // $_REQUEST["cancelar"] : URI para el retorno para el botón 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 contraseña 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>

(7)

<br>

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

Fichero: validar.inc

<?php // programa: validar.inc // Definición 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 sesión 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)

(8)

return true; }

//*********************************************************************** // Comprueba que la sesión está validada. Chequeos:

// 1. si está validado

// 2. clave y nombre registrados válidos

// $usuario :devuelve los datos del usuario validado

//*********************************************************************** function ComprobarSesion(&$usuario)

{

// comprueba que la sesión 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 sesión está validada.Si no solicita validación.

// $usuario :devuelve los datos del usuario validado

//*********************************************************************** function ValidarSesion(&$usuario)

{

// comprueba que la sesión actual está correctamente validada if ( ComprobarSesion($usuario))

return true;

// si no, fuerza la validación

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 sesión 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_]); }

(9)

//*********************************************************************** // Lee los datos de la sesión actual

// $usuario :devuelve los datos del usuario validado

//

//*********************************************************************** function LeerSesion(&$usuario)

{

// comprueba que la sesión 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 :FECHA: $fecha :IP: $ip :NAVEGADOR: $ag\n"; fwrite($fp, $log); fclose($fp); return; } ?>

(10)

5. Conexión a sistemas remotos mediante sockets

En PHP todas las funciones de gestión de streams o ficheros tienen la posibilidad de acceder

a sistemas remotos utilizando los protocolos estándar (HTTP, FTP,..). Basta con indicar en el

parámetro del nombre del fichero el prefijo del protocolo (http://...).

El problema es que solo es sólamente funcionan con potocolos estandarizados y con cabeceras

por defecto. Si debemos comunicarnos con un dispositivo con un protocolo específico, o bien

debemos enviar cabeceras especiales (por ejemplo autentificación de usuarios en Apache)

tendremos que utilizar la librería de sockets.

PHP incluye una librería general con las mismas funciones de UNIX para el manejo de

sockes. Adicionalmente se proporcionan algunas funciones de mayor nivel para simplificar el

código cuando realizamos conexiones en modo cliente (las más 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 máximo en las operaciones de lectura

Vamos a realizar una aplicación PHP en la que nos conectaremos con un servidor de video

para controlar una cámara motorizada y capturar una imagen. La aplicación estará formada

por dos ficheros:

- Fichero camara.inc : contendrá el código 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 ejecución de la petición

Todas las constantes utilizadas se definirán en el fichero camara.inc para que puedan ser

cambiadas con facilidad.

Por simplicidad las páginas no incluyen el formato del texto que deberá ser añadido mediante

un editor HTML y el uso de hojas de estilos CSS.

(11)

Fichero: camara.inc

<?php // programa: camara.inc // Definición de constantes define("_SERVIDOR_VIDEO_", "videoisa.umh.es"); define("_DIRECTORIO_IMAGEN_", "c:/Apache/htdocs/imagenes/"); define("_PATHURL_IMAGEN_", "/imagenes/");

define("_CLAVE_ACCESO_VIDEOISA_", "Authorization: Basic xxxxxxxxxxx\r\n\r\n");

define("_TIMEOUT_SOCK_", 10); // tiempo máximo de espera para la apertura de un socket

define("_TIMEOUT_READ_SOCK_", 5); // tiempo máximo de espera para la respuesta de un soket

// variables

$FICHERO_IMAGEN =""; // fichero con la captura de la imagen

$RESOLUCIONES= array ( "704x576"=> "704x576", "352x288"=> "352x288", "176x144"=> "176x144" ); $NIVELESCOLOR= array ( "100" => "Color RGB 24bits", "50" => "Color RGB 12bits", "0" => "Monocromo" ); $COMPRESIONES= array ( "0" => "Sin Perdida", "25" => "Media", "50" => "Alta" ); // Mueve la cámara PTZ

function MoverPTZ($camera, $pan, $tilt, $zoom) { $peticion_http = array( "GET /axis-cgi/com/ptz.cgi?camera=$camera&pan=$pan&tilt=$tilt&zoom=$zoom&speed=75 HTTP/1.0\r\n", _CLAVE_ACCESO_VIDEOISA_ );

// abre una conexión

$socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_);

if(!$socket)

return false;

//envía la petición

for($i=0; $i< count($peticion_http); $i++) fwrite($socket, $peticion_http[$i]);

(12)

// 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 conexión

$socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_);

if(!$socket)

return false;

//envía la petición

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 parámetros $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 )

(13)

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 cámara

//***********************************************

function TomarImagenCamara($camera, $resolution, $compression, $colorlevel)

{

global $FICHERO_IMAGEN, $ESTADO_TITERE;

// crea el directorio para las imágenes si no existe if (!is_dir(_DIRECTORIO_IMAGEN_))

mkdir(_DIRECTORIO_IMAGEN_, 0777);

// añade el timestamp UNIX al nombre del fichero $FICHERO_IMAGEN = "snap" . time() . ".jpg";

$peticion_http = array("GET

/axis-cgi/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 conexión

$socket = fsockopen(_SERVIDOR_VIDEO_, 80, $errno, $errstr, _TIMEOUT_SOCK_);

if(!$socket)

return false;

//envía la petición

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);

(14)

// 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; }

(15)

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) {

(16)

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: // Elevación 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> Cámara

<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]:

(17)

$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>

Referencias

Documento similar

[r]

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

La aplicación servidor dentro del contenedor apache tomcat recepciona esta petición, la evalúa, y realiza la petición a la base de datos para obtener todas las

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los

La implementación hardware de la parte servidor se hará con una Raspberry Pi 3 la cual contará con Raspbian como sistema operativo el cual usará apache como servidor

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación

La idea inicial era utilizar este sistema PIC-WEB como servidor, para alojar una página web desde la cual poder realizar el control de robot, pero debido a