bulli: LogDatei mit Ausgabe mysqlerror()

Hallo,

ich habe ein Script, was in regelmäßigen Abständen ausgeführt werden soll.

Ich möchte nun ein logfile erzeugen, wo sämtliche Meldungen, die erscheinen, geloggt werden.

Ich bekomms einfach nicht hin, dass alles geloggt wird.

Hier mein Code:

[code lang=HTML]

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <title>upload</title>

</head>

<body>

<br>

<?php require_once ('konfiguration.php');
$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen!!!");
$datei= "c:/wetterdaten/test.csv";
$ziel = "c:/wetterdaten/erledigt/test.csv";
$sql = "delete from tab_wetter";
$sql2 = "LOAD DATA LOCAL INFILE '$datei' ignore INTO TABLE tab_wetter FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY '\r\n'";

$result = mysql_query($sql) or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "DB gelöscht! ";
$result = mysql_query($sql2) or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "   Datei eingelesen!";
rename("$datei", "$ziel"."(".date("d.m.Y", time())." um " .date("G_i_s", time()).")");

$text1= "mysql_errror()";
$text2 = " Die Datei wurde in den Ordner "erledigt" verschoben"." am ". date("d.m.Y", time())." um ". date("G:i", time())." Uhr"."\n";
$inhalt = $text1.$text2;

$handle = fopen ("logfile.txt", "a");
fwrite($handle, $inhalt);
fclose($handle);

?>
</body>
</html>
[/CODE]

Gruß

Bulli

  1. Hi!

      
    
    > $text1= "mysql_errror()";  
    
    

    Da wolltest Du nicht, oder? Das ist nur ein String!

    offf:pp

    1. ja, das hab ich auch schon bemerkt.

      wie bekomme ich es hin, das wenn der Fall "or die" eintritt, die Fehlermeldung in eine Variable eingefügt wird.

      Gruß

      bulli

      1. Hallo

        wie bekomme ich es hin, das wenn der Fall "or die" eintritt, die Fehlermeldung in eine Variable eingefügt wird.

        Ganz einfach: auf die() verzichten. die() ist _keine_ vernünftige Fehlerbehandlung. Du willst das Skript ja nicht abwürgen, Du willst ja loggen.

        Freundliche Grüße

        Vinzenz

        1. Hallo Vinzenz

          ... und wie bekomme ich jetzt sämtliche Fehlermeldungen in eine Variable, zBsp: $inhalt ????

          hier nun der geänderte Code:

            
            
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
          <html>  
          <head>  
            
            <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">  
            <title>upload</title>  
            
            
          </head>  
            
            
          <body>  
            
          <br>  
            
          <?php require_once ('konfiguration.php');  
          $db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);  
          $db_sel = mysql_select_db( MYSQL_DATENBANK )  
          or die("Auswahl der Datenbank fehlgeschlagen!!!");  
          $datei= "c:/wetterdaten/test.csv";  
          $ziel = "c:/wetterdaten/erledigt/test.csv";  
          $sql = "delete from tab_wetter";  
          $sql2 = "LOAD DATA LOCAL INFILE '$datei' ignore INTO TABLE tab_wetter FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\\r\\n'";  
            
          $result = mysql_query($sql); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "DB gelöscht! ";*/  
          $result = mysql_query($sql2); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "   Datei eingelesen!";*/  
          rename("$datei", "$ziel"."(".date("d.m.Y", time())." um " .date("G_i_s", time()).")");  
            
          $text1= $result;  
          $text2 = " Die Datei wurde in den Ordner \"erledigt\" verschoben"." am ". date("d.m.Y", time())." um ". date("G:i", time())." Uhr"."\n";  
          $inhalt = $text1.$text2;  
            
            
          $handle = fopen ("logfile.txt", "a");  
          fwrite($handle, $inhalt);  
          fclose($handle);  
            
            
          ?>  
          </body>  
          </html>  
          
          

          Gruß
          Bulli

          1. Hallo

            ... und wie bekomme ich jetzt sämtliche Fehlermeldungen in eine Variable, zBsp: $inhalt ????

            bei Funktionen, die eine Zeichenkette zurückliefern?
            Ganz einfach durch eine Zuweisung:

            $inhalt = mysql_error();

            hier nun der geänderte Code:

            <?php require_once ('konfiguration.php');
            $db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
            $db_sel = mysql_select_db( MYSQL_DATENBANK )
            or die("Auswahl der Datenbank fehlgeschlagen!!!");

            hier hast Du immer noch ein die() drin.

            $sql = "delete from tab_wetter";

            Du solltest Dir TRUNCATE anschauen.

            $sql2 = "LOAD DATA LOCAL INFILE '$datei' ignore INTO TABLE tab_wetter FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY '\r\n'";

            $result = mysql_query($sql); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "DB gelöscht! ";*/

            Nein, nicht einfach weitermachen, sondern loggen.

            $result = mysql_query($sql2); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "   Datei eingelesen!";*/
            rename("$datei", "$ziel"."(".date("d.m.Y", time())." um " .date("G_i_s", time()).")");

            rename kann fehlschlagen, das solltest Du loggen :-)

            $text1= $result;
            $text2 = " Die Datei wurde in den Ordner "erledigt" verschoben"." am ". date("d.m.Y", time())." um ". date("G:i", time())." Uhr"."\n";
            $inhalt = $text1.$text2;

            [...]

            $handle = fopen ("logfile.txt", "a");
            fwrite($handle, $inhalt);
            fclose($handle);

            Nutze doch file_put_contents(). Natürlich kann auch diese Operation fehlschlagen :-)

            Grundsätzlich rate ich Dir zum EVA-Prinzip:

            Deine Eingabe ist, soweit ich das sehe, das Einlesen der Wetterdaten.

            Die Verarbeitung besteht aus
             - Löschen der bestehenden Daten Deiner Tabelle,
             - Einlesen der neuen Daten in Deine Tabelle,
             - Verschieben der Eingabedatei.

            Bei der Ausgabe erfolgen
             - Anhängen der Logdaten an eine Logdatei,
             - Ausgabe einer HTML-Seite, die über Erfolg oder Misserfolg berichtet.

            Freundliche Grüße

            Vinzenz

            1. Hallo,
              ich muss nochmal nachhaken, ich bekomms einfach nicht gebacken.
              Die Sache mit mysql_error() funktioniert soweit, aber wie kann ich die anderen Sachen loggen.

              $result = mysql_query($sql); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "DB gelöscht! ";*/

              Nein, nicht einfach weitermachen, sondern loggen.

              $result = mysql_query($sql2); /*or die ('Auswahl der Datenbank fehlgeschlagen'.mysql_error()); echo "   Datei eingelesen!";*/
              rename("$datei", "$ziel"."(".date("d.m.Y", time())." um " .date("G_i_s", time()).")");

              rename kann fehlschlagen, das solltest Du loggen :-)

              Gruß
              Bulli

              1. Hi!

                Die Sache mit mysql_error() funktioniert soweit, aber wie kann ich die anderen Sachen loggen.

                Welche anderen Sachen? Du hast oben doch schon mehrfach den Tipp bekommen, auf die Rückgabewerte der von dir benutzten Funktionen zu achten.

                  
                
                > > > rename("$datei", "$ziel"."(".date("d.m.Y", time())." um "  
                
                

                In der Online Doku auf php.net steht hierzu:
                "Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE."

                Du schaust Dir den Rückgabewert an z.B:

                  
                if ($rename($datei1, $datei2)) {  
                    // alles ok..  
                } else {  
                   // Fehler -> Loggen!  
                }  
                
                

                BTW: es gibt die Funtkion error_log

                off:pp