//función para comprobar si un dispositivo esta en linea function dispositivoEnLinea($ipPublica,$puerto){ error_reporting(0); //por defecto 0 $respuesta = 0; try{ //usamos funcionalidad de sockets para comprobar la conectividad //el ultimo parámetro es el tiempo de espera máximo para recibir respuesta, ejemplo 10 seg $connect = fsockopen(strval($ipPublica), intval($puerto), $errno, $errstr, 120); if (!$connect) { //NO HAY RESPUESTA //si ocurre un error entonces igualamos a 0 $respuesta=0; //procedemos a actualizar el estatus del dispositivo con dicha ip $conexionD = new conexion(); $buffer = "UPDATE GERAPLI.dbo.ANV_DISPOSITIVOS_ANVIZ SET en_linea='NO' WHERE ippublica='" . $ipPublica . "' AND puertodispositivo='" . $puerto . "'"; $this->flog($buffer); //Ejecutamos la actualización de estado a en_linea="NO" ya que no ha devuelto respuesta $resultadoQuery = $conexionD->nonQuery($buffer); $this->flog(strval("Error de comunicación en dispositivo con ip: [ " . $ipPublica . " ] & puerto: [ " . $puerto . " ] [ "."$errstr ($errno)" . PHP_EOL . " ]")); } else { //HAY RESPUESTA $respuesta=1; //procedemos a actualizar el estatus del dispositivo con dicha ip $conexionD = new conexion(); $buffer = "UPDATE GERAPLI.dbo.ANV_DISPOSITIVOS_ANVIZ SET en_linea='SI' WHERE ippublica='" . $ipPublica . "' AND puertodispositivo='" . $puerto . "'"; $this->flog($buffer); //Ejecutamos la actualización de estado a en_linea="NO" ya que no ha devuelto respuesta $resultadoQuery = $conexionD->nonQuery($buffer); //$this->flog(strval("Error de comunicación en dispositivo con ip: [ " . $ipPublica . " ] & puerto: [ " . $puerto . " ] [ "."$errstr ($errno)" . PHP_EOL . " ]")); //cerramos conexión para liberar el puerto fclose($connect); } }catch(Exception $e){ //si ocurre un error entonces igualamos a 0 $respuesta=0; //procedemos a actualizar el estatus del dispositivo con dicha ip $conexionD = new conexion(); $buffer = "UPDATE GERAPLI.dbo.ANV_DISPOSITIVOS_ANVIZ SET en_linea='NO' WHERE ippublica='" . $ipPublica . "' AND puertodispositivo='" . $puerto . "'"; $this->flog($buffer); //Ejecutamos la actualización de estado a en_linea="NO" ya que no ha devuelto respuesta $resultadoQuery = $conexionD->nonQuery($buffer); $this->flog(strval("Error de comunicación en dispositivo con ip: [ " . $ipPublica . " ] & puerto: [ " . $puerto . " ] [ "."$errstr ($errno)" . PHP_EOL . " ]")); } return $respuesta; }