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.
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. 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
Podemos probar un ejemplo sencillo que cuenta las visitas a nuestro servidor:
<?phpsession_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']);
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>
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 ">  
<input type="reset" value=" Borrar "> <input type="button" name ="cancelar" value=" Cancelar "
onclick="document.location.replace('<?php echo $cancelar; ?>')"> </form>
<br>
NOTA: El nombre y el password son sensibles a mayú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)
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_]); }
//*********************************************************************** // 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; } ?>
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.
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]);
// 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 )
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);
// 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; }
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) {
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ó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ó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ón [-25.0 : 25.0]:
$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>