
Da ich gerade ein relaunch meiner Seite plane, ist da ein nettes kleines Modul bei abgefallen, was ich euch allen zugänglich machen möchte.
Unzwar handelt es sich hierbei um eine "Anwesenheitskontrolle" welche auf "fsockopen" basiert.
Verwendungsmöglichkeiten wären z.B. die Überprüfung der Erreichbarkeit eines Server oder wie in meinem Fall ob ich im Büro gerade erreichbar bin oder nicht.
Damit nicht bei jedem Seitenaufruf die Verbindung neu geprüft werden muss habe ich einen Interval mit eingebaut. So verhindert man das der Timeout von fsockopen die Ausgabe bei jedem Aufruf einer Seite verzögert wenn der Zielserver nicht erreichbar ist.
Könnt euch das Modul in seiner ersten Finalen Version ja einfach mal angucken und euren Kommentar zu abgeben.
in der 16. Zeile müsst Ihr einfach die Werte durch eure Wunschwerte ersetzen
Code: Alles auswählen
$oAnwesenheit = new wtAnwesenheit('HOSTNAME', PORT, TIMEOUT, INTERVAL, 'DATUMSFORMAT');
Code: Alles auswählen
<?php
/*************************************************************
* CONTENIDO MODUL - OUTPUT
*
* @name wtAnwesenheit
* @version 1.0.0
* @author Christian Kehres
* @copyright webtischlerei.de <www.webtischlerei.de>
* @license http://www.gnu.org/licenses/gpl-3.0.txt
*************************************************************/
// neues Objekte zur Templateverwendung initialisieren
(!isset($oTemplate) ? $oTemplate = new Template() : $oTemplate->reset());
// Objekt zur Anwesenheitskontrolle initialisieren
$oAnwesenheit = new wtAnwesenheit('HOSTNAME', PORT, TIMEOUT, INTERVAL, 'DATUMSFORMAT');
// Verbindung überprüfen
$bConnection = $oAnwesenheit->checkConnection();
// Zeitpunkt des Statuses an das Template übergeben
$oTemplate->set('s', 'date_time', $oAnwesenheit->getStatusTime());
// Template anhand des Statuses festlegen
$sTemplate = ($bConnection ? 'anwesenheit_ja.html' : 'anwesenheit_nein.html');
// das Template generieren und ausgeben
$oTemplate->generate('templates/' . $sTemplate, false, true);
###############################
### die dazugehörige Klasse ###
###############################
class wtAnwesenheit {
private $_sHostname = null;
private $_iPort = null;
private $_iTimeout = null;
private $_bConnection = null;
private $_iErrorNumber = null;
private $_sErrorString = null;
private $_sDateTime = null;
private $_iActuallyTime = null;
private $_oClient = null;
private $_iInterval = null;
public function wtAnwesenheit($sHostname, $iPort = 80, $iTimeout = 2, $iInterval = 300, $sDateFormat = 'd.m.Y H:i:s') {
global $client;
$this->_oClient = new cApiClient($client);
$this->_setActuallyTime();
$this->setHostname($sHostname);
$this->setPort($iPort);
$this->setTimeout($iTimeout);
$this->setInterval($iInterval);
$this->setDateTimeFormat($sDateFormat);
}
private function _setConnection($bConnection) {
$this->_bConnection = $bConnection;
}
private function _getConnection() {
return $this->_bConnection;
}
private function _setActuallyTime() {
$this->_iActuallyTime = time();
}
private function _getActuallyTime() {
return $this->_iActuallyTime;
}
public function setHostname($sHostname) {
$this->_sHostname = $sHostname;
}
private function _getHostname() {
return $this->_sHostname;
}
public function setPort($iPort){
$this->_iPort = $iPort;
}
private function _getPort(){
return $this->_iPort;
}
public function setTimeout($iTimeout) {
$this->_iTimeout = $iTimeout;
}
private function _getTimeout() {
return $this->_iTimeout;
}
public function setInterval($iInterval) {
$this->_iInterval = $iInterval;
}
private function _getInterval() {
return $this->_iInterval;
}
private function _setStatus() {
$this->_oClient->setProperty('anwesenheit', 'timestamp', $this->_getActuallyTime());
$this->_oClient->setProperty('anwesenheit', 'connection', $this->_getConnection());
}
private function _getStatus($sWhat) {
return $this->_oClient->getProperty('anwesenheit', $sWhat);
}
public function getStatusTime() {
return date($this->_getStatusTimeFormat(), $this->_getStatus('timestamp'));
}
public function setDateTimeFormat($sDateTimeFormat) {
$this->_sDateTimeFormat = $sDateTimeFormat;
}
private function _getStatusTimeFormat() {
return $this->_sDateTimeFormat;
}
private function _checkInterval() {
if (bcadd($this->_getStatus('timestamp'), $this->_getInterval(), 0) > $this->_getActuallyTime()) {
$bIntervalCheck = true;
} else {
$bIntervalCheck = false;
}
return $bIntervalCheck;
}
private function _checkStatus() {
// den aktuellen Status prüfen
$this->_setConnection(@fsockopen('' . $this->_getHostname() . '', $this->_getPort(), $iErrorNumber, $sErrorString, $this->_getTimeout()));
// Verbindung schließen
@fclose($this->_getConnection());
// Status setzen
$this->_setStatus();
}
public function checkConnection() {
// prüfen ob der letzte Status mehr als x Sekunden her ist
if (!$this->_checkInterval()) {
// den aktuellen Status prüfen
$this->_checkStatus();
}
// Status der Connection zurückgeben
return $this->_getStatus('connection');
}
}
?>