Problembeschreibung

Wenn der Webspace nicht erreichbar ist, bekommt man das als Betreiber meist selbst gar nicht mit. Häufig wird man erst durch Seitenbesucher darauf aufmerksam gemacht. Hierzu sollte es eine Tool geben, welches die Verfügbarkeit des Webspaces permanente überwacht und bei Unerreichbarkeit sofort per e-Mail und SMS informiert. Außerdem wäre bei diesen Testabrufen auch eine Protokollierung der Ausliefergeschwindigkeiten für eine statistische Anzeige sinnvoll. Die Prüfung muss dabei von einem entfernten Server aus erfolgen.

Lösung mittels PHP-Server-Monitor (PSM)

Dieses OpenSource-Tool erfüllt alle o.g. Anforderungen. Es ist in deutsch verfügbar, kostenlos, basiert auf PHP und TWIG.

Um zu erreichen, dass der Webserver von Marks von entfernt geprüft wird, erfolgte die Installation auf dem Server von mediaDESIGN St. Kraft. Umgekehrt wird die gleiche Installation auf dem Marks-Server unter einem eigenen Webspace mit Subdomain monitor.marks-dev.de vorgenommen. Damit diese notwendige "Überkreuzung" für den Benutzer nicht störend und verwirrend wirkt (denn man muss monitor.media-web.de aufrufen um die Konfig./Protokollierung/Statustests für den Marks-Server nutzen zu können und umgekehrt monitor.marks-dev.de um die für mediaDESIGN-Webspaces anzuzeigen), wurde in die webspace/index.html eine iFrame-HTML-Seite abgelegt, welche dann dort in das iFrame das PSM aus einem Unterverzeichnis (/marks/ auf mediaDESIGN-Server und /mdsk/ auf dem Marks-Server) einbettet.

Hier das Beispiel auf dem Marks-Server f. mediaDESIGN:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Server Monitor XYZ GmbH</title>
<style type="text/css">
html, body, iframe {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
    background: #750A04;
    border: none 0;
}
</style>
</head>
<body>

<iframe src="http://monitor.media-web.de/xyz" name="XYZ: Server Monitor"
    noresize>
   <p><a href="http://monitor.media-web.de/xyz/index.php"></a></p>
</iframe>

</body>
</html>

SMS-Gateway für SMS4de

PSM wurde erweitert, um SMS-Schnittstelle von sms4.de für PSM nutzen zu können. Hierzu waren jedoch Modifikationen auch von Core-Scripten notwendig die nachfolgend dokumentiert sind:

 

Neues Scripte SMS4.de send-SMS-Class

(~)/src/psm/Txtmsg/Sms4de.class.php

Dieses Script wurde anhand der vorhandenen Beispiele und den Vorlagen für sms4de vollst. neue erstellt. Es splitte in der Hauptfunktion sendSMS() zunächst die Eingaben im Feld Username in die Variablen $Username, $strCustomNo und $intTarif. Hierin unterscheidet sich sms4de von den anderen SMS-Anbietern, weil zusätzlich im URL auch eine Kundennummer und der zutreffende Tarif angegeben werden müssen. Es wurde vermieden dies über zusätzliche Core-Script-Anpassungen zu erreichen.

Das Versenden der SMS erfolgt dann durch zweierlei Varianten. Wenn PHP curl nutzen kann, dann wird die PSM-Standard-Funktion psm_curl_get() verwendet. Wenn nicht, dann wird über die php-Funktion file_get_contents() gesendet/geladen. Alternativ ist eine 3 Variante vorgesehen über die PHP-Funktion fopen/fgets, jedoch auskommentiert, weil diese sich nicht maßgeblich von psm_curl_get() unterscheidet und folglich redundant wäre. Beachten, dass auf manchen Hosts file_get_contents() oder fget() nicht mgl. ist weil die PHP-Direktive allow_url_fopen auf off konfiguriert ist.

<?php
/**
 * PHP Server Monitor
 * Monitor your servers and websites.
 *
 * This file is part of PHP Server Monitor.
 * PHP Server Monitor is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * PHP Server Monitor is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with PHP Server Monitor.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @package     phpservermon
 * @author      mediaDESIGN.SK <mdsk_@_media-web.de>
 * @copyright   Copyright (c) 2008-2014 Pepijn Over <pep_@_neanderthal-technology.com>
 * @license     http://www.gnu.org/licenses/gpl.txt GNU GPL v3
 * @version     Release: v3.1.1
 * @link        http://www.phpservermonitor.org/
 **/

namespace psm\Txtmsg;

class Sms4de extends Core {
	// =========================================================================
	// [ Fields ]
	// =========================================================================
	public $success	  	= false;

    public $Response = array();
    public $strUrl;

	// =========================================================================

    public function sendSMS($strMessage){
        // in der SMS-Konfig. müssen im Feld Username alle drei Parameter übergeben werden (Muster:
        list($Username, $strCustomerNo, $intTarif) = explode('|',$this->username);

        $this->strUrl =
            'http://www.sms4.de/cgi-bin/sms_out.pl'
            .'?user='.$Username
            .'&pwd='.$this->password
            .'&kdnr='.$strCustomerNo
            .'&tarif='.$intTarif;

        if(!function_exists(curl_init)) {
            foreach ($this->recipients as $intRecipientNo) {
                $this->Response['curl_info'] = psm_curl_get($this->strUrl . '&handynr=' . $intRecipientNo . '&text=' . urlencode($strMessage));
            }
            return $this->Response['curl_info'];
        } else {
            foreach ($this->recipients as $intRecipientNo) {
                // $xmlResponse = $this->sendSMSfopen($this->strUrl . '&handynr=' . $intRecipientNo . '&text=' . urlencode($strMessage));

                // alternative like PHP-Server-Monitor:
                $xmlResponse = file_get_contents( $this->strUrl . '&handynr=' . $intRecipientNo . '&text=' . urlencode($strMessage) );
                $this->Response = json_decode(json_encode((array) simplexml_load_string($xmlResponse)), 1);
            }
            // echo '<pre>'.print_r($this->Response,1).'</pre>';
            return $xmlResponse;
        }

    }

    public function sendSMSfopen($url) {
        $message = '';
        $this->Response = array();
        $this->Response['fct'] = __FUNCTION__;

        if ( ($fp = @fopen($url, "r")) ) {
            $max_zeichen=256;
            $daten = fgets($fp, $max_zeichen);
            while ($daten) {
                $message .= $daten;
                $daten = fgets($fp, $max_zeichen);
            }
            if (!empty($message)) $xml = json_decode(json_encode((array) simplexml_load_string($message)), 1);
            $this->Response['fgets_status'] = $xml['status'];
            $this->Response['fgets_info'] = $xml['statustext'];
            return $this->Response['fgets_info'];
        } else {
            $this->Response['fgets_error'] = "Error: URL $url could not open..";
            return false;
        }
        fclose($fp);
    }

}

 

 

Ergänztes Template-Script Admin::Configuration, Pulldown-List mit sms4de

(~)/src/templates/default/module/config/config.tpl.html

Z: 162

<option value="sms4de" {{ sms_selected_sms4de|raw }}>{{ label_sms_gateway_sms4de }}</option>

Ergänzte Sprachdateien f. engl. und deutsch

(~)/src/lang/de_DE.lang.php
(~)/src/lang/en_US.lang.php

Z:197

'sms_gateway_sms4de' => 'SMS4de',

Ergänzte Function-Class mit SMS-Build-Methode

(~)/src/includes/functions.inc.php

Z469f:

case 'sms4de':
   $sms = new \psm\Txtmsg\Sms4de();
   break;

Funktion-Config-Controller mit getLabels-Methode

(~)/src/psm/Module/Config/Controller/ConfigController.class.php

Z317:

'label_sms_gateway_sms4de' => psm_get_lang('config', 'sms_gateway_sms4de'),

 

Konfiguration der SMS4de-Schnittstelle in PSM

  • SMS-Versand erlauben: on
  • SMS-Gateway: SMS4de (...)
  • Gateway Benutzername: username|kennwort|INT  z.B. mdsk|ME32112|7
  • Gateway Kennwort: ****
  • SMS-Nummer: in dieser Schreibweise: 4917212345678