Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » Problem mit function writeToLogFile()

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.08.2007, 15:20 Uhr
~di9d
Gast


Hallo
Ich habe folgende Funktion geschrieben, um Logs in einer Log Datei zu speicher.


PHP 4:
function writeToLogFile($access, $ip, $user, $server, $version)
{
    $msg = date("[Y-m-d D H:i:s]") . "\t" . $access . "\t" . $ip . "\t" . $user . ((strlen($user) < 8) ? "\t" : "") . "\t\t" . $server . "\t" . $version;
  
    $logfile = "LOG_" . date("M-Y") . ".txt";
    $saveLocation = $logfile;
  
    if(!$handle = @fopen($saveLocation, "a")) exit;
    else{
        if(@fwrite($handle, "$msg\r\n")===FALSE) exit;
        @fclose($handle);
    }
}



Diese funktioniert in 80 % der Fälle fehlerfrei.
Doch es kommt auch immer wieder vor (mindestens 2-3 Mal am Tag), dass seltsamerweise die letzte Zeile in der Logdatei zuerst mit 'sternartigen' Zeichen überschrieben wird und dann unmittelbar dahinter (keine neue Zeile) den zu loggenden String einfügt.
Ich konnte bis jetzt noch kein Muster feststellen, es scheint als ob das total zufällig geschieht.
Leider habe ich weder Ahnung, was da manchmal schief geht, noch wie man das Problem beheben kann.

Hat irgendwer von euch vielleicht Ideen oder Vorschläge?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.08.2007, 15:54 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Was mir auf den ersten Blick auffällt:
- Wofür deklarierst du die Variable $logfile, wenn du sie nur nach $saveLocation kopierst?
- Schreib lieber

PHP 4:
if(!($handle = @fopen($saveLocation, "a")))

- Schau dir mal flock() an, dein Fehler könnte aus gleichzeitigen Schreibzugriffen auf die Datei resultieren.

Dieser Post wurde am 01.08.2007 um 15:55 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.08.2007, 16:27 Uhr
~di9d
Gast


Danke sehr für deine Antwort.
Ich hab den Code jetzt so abgeändert:


PHP 4:
function writeToLogFile($access, $ip, $user, $server, $version)
{
    $msg = date("[Y-m-d D H:i:s]") . "\t" . $access . "\t" . $ip . "\t" . $user . ((strlen($user) < 8) ? "\t\t\t" : "\t\t") . $server . "\t" . $version;
    $logfile = "LOG_" . date("M-Y") . ".txt";
    
    if(!($handle = @fopen($logfile, "a"))) exit;
    else if(@flock($handle, LOCK_EX)){
        if(@fwrite($handle, "$msg\r\n")===FALSE) exit;
        @flock($handle, LOCK_UN);
        @fclose($handle);
    }
}



Mal sehen ob das was gebracht hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: