Dienstag, 3. Mai 2011

Kleinigkeiten: Eine Logdatei

Manche Dinge sind so einfach, dass man sie mit einem Dreizeiler abhandeln könnte. Man tut es aber nicht, weil es doch immer diverse Sonderfälle gibt und man sich den Code endlich einmal als Vorlage speichern möchte. Eine einfache Klasse, die Inhalte in eine Logdatei protokolliert oder per eMail versendet.

Der Methodenname "_" als Kurzform der Methode "schreibe" ist nicht elegant, schont aber die Tastatur. Der Methode "maile" kann entweder nur ein Mailtext oder optional auch ein Betreff übergeben werden.

class LogDatei {
    /*
     * $Obj = new LogDatei('Pfad/Datei.txt');
     * Falls die Datei nicht geoffnet werden kann die()
     *
     * $Obj->setMail('e@mail.xyz');
     * $Obj->setSMTP('smtp')
     * Optional SMTP und EMail setzen
     *
     * $Obj->schreibe('Inhalt');
     * $Obj->_('Inhalt');
     * Kurzform von schreibe()
     * $Obj->schreibeMitZeit('Inhalt');
     *
     * $Obj->maile('Inhalt');
     * $Obj->maile('Inhalt', 'Betreff');
     *
     *
     * $Obj->merke('Inhalt');
     * Der Inhalt wird für ein spaeteres Schreiben gemerkt
     * $Obj->flush();
     * Gemerkten Inhalt schreiben und dann vergessen
     * $Obj->flushToMail();
     * Gemerkten Inhalt mailen und dann vergessen
     */

    private $Datei;
    private $Mail = 'elter@yahoo.com';
    private $Merker;

    public function __construct($Datei) {

        $test = fopen($Datei, "a");
        if($test){
            fclose($test);
            $this->Datei = $Datei;
        }else{
            die('PANIK: LogDatei nicht verfuegbar! Program terminated');
        }
    }

    public function _($Inhalt){
        $this->schreibe($Inhalt);
    }

    public function flush() {
        $this->schreibe($this->Merker);
        $this->Merker = '';
    }

    public function flushToMail($Inhalt) {
        $this->schreibe($this->Merker);
        $this->Merker = '';
    }

    public function merke($Info) {
        $this->Merker .= "\r\n" . $Info;
    }

    public function setMail($Mail) {
        $this->Mail = $Mail;
    }

    public function setSMTP($SMTP) {
        ini_set('SMTP', $SMTP);
    }

    public function maile($Inhalt) {
        $betreff = 'Info von LogDatei';
        $Ergebnis = mail($this->Mail, $betreff, $Inhalt, "From: absender@domain.de\nContent-Type: text/html\n");

        if ($Ergebnis == false) {
            $this->schreibeMitZeit('PANIK: eMail nicht verschickt!');
        }
    }

    public function schreibe($Inhalt) {
        $datei = fopen($this->Datei, "a");
        fwrite($datei, "\r\n" . $Inhalt);
        fclose($datei);
    }

    public function schreibeMitZeit($Inhalt) {
        $datei = fopen($this->Datei, "a");
        fwrite($datei, "\r\n" . date(' d.m.H:i > ') . $Inhalt);
        fclose($datei);
    }

}
Und wie immer ohne Gewähr...

Keine Kommentare:

Kommentar veröffentlichen