kostenloser Webspace werbefrei: lima-city


Logfile funktioniert nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    Hallo!

    Ich hab vor ein paar Tagen ein Script für eine Logdatei auf selfphp.info gefunden und versuche das jetzt in meine Seite einzubauen. Komischerweise funktioniert es aber nicht..

    logfile.php:
    <?php
    
    $logdatei=fopen("logs/logfile.txt","a");
    fputs($logdatei, "\n"
        date("d.m.Y, H:i:s",time()) .
        ", " . $_SERVER['REMOTE_ADDR'] .
        ", " . $_SERVER['REQUEST_METHOD'] .
        ", " . $_SERVER['PHP_SELF'] .
        ", " . $_SERVER['HTTP_USER_AGENT'] .
        ", " . $_SERVER['HTTP_REFERER'] ."\n"
        );
    fclose($logdatei);
    
    ?>


    Head der index.html:
    <head>
    
    <?php
    include("logfile.php");
    ?>
    
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	<meta http-equiv="Content-Script-Type" content="text/javascript">
    	<meta http-equiv="Content-Style-Type" content="text/css">
    
    	<meta name="robots" content="index">
    
    <title>Testseite</title>
    
    <link rel="stylesheet" type="text/css" href="/css/divs.css">
    <link rel="stylesheet" type="text/css" href="/css/home.css">
    <link rel="stylesheet" type="text/css" href="/css/font.css">
    <link rel="stylesheet" type="text/css" href="/css/leftnav.css">
    
    <script type="text/javascript" src="/js/ga.js"></script>
    
    </head>


    Und dann hab ich halt noch den Ordner "logs" erstellt und auf CHMOD 777 gesetzt. Hab auch schon versucht die Datei "logfile.txt" selbst zu erstellen aber das hat auch nicht geholfen.
    Weiß jemand was ich falsch mache? Danke im Voraus!

    Beitrag zuletzt geändert: 30.4.2012 16:47:08 von yorecords
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legen
    php_value display_errors true


    Außerdem solltest du beachten, dass dein Script bei jedem Seitaufruf das abspeichert... Ich empfehle den Einsatz von GA Analytics oder Piwik o.ä, dann musste dich um so banalitäten nicht kümmern

    Beitrag zuletzt geändert: 30.4.2012 16:55:16 von imho
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Ausgebesserter Code:
    <?php
    
    $logdatei = fopen('logs/logfile.txt', 'a');
    fputs($logdatei,
    	date('d.m.Y, H:i:s') .
    	', ' . $_SERVER['REMOTE_ADDR'] .
    	', ' . $_SERVER['REQUEST_METHOD'] .
    	', ' . $_SERVER['PHP_SELF'] .
    	', ' . $_SERVER['HTTP_USER_AGENT'] .
    	', ' . $_SERVER['HTTP_REFERER'] . "\n"
    );
    fclose($logdatei);
    
    ?>
    Dein Fehler:
    Du hast in der Zeile von fputs nach dem "\n" keinen Punkt gemacht.
    Abgesehen davon kannst du dir das "\n" dort sparen...

    imho schrieb:
    Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legen
    php_value display_errors true
    Du hättest gern den Fehler surchen dürfen ;-)
  5. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    Danke für die schnellen Antworten!

    imho schrieb:
    Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legen
    php_value display_errors true


    Außerdem solltest du beachten, dass dein Script bei jedem Seitaufruf das abspeichert... Ich empfehle den Einsatz von GA Analytics oder Piwik o.ä, dann musste dich um so banalitäten nicht kümmern


    Hab ich versucht, hatte aber keinen Effekt.
    Ich verwende sowieso Google Analytics, aber mir geht es darum, dass mir die Logdatei die Aktivitäten von Suchmaschinen anzeigt und das macht GA leider nicht.

    hackyourlife schrieb:
    Ausgebesserter Code:
    <?php
    
    $logdatei = fopen('logs/logfile.txt', 'a');
    fputs($logdatei,
    	date('d.m.Y, H:i:s') .
    	', ' . $_SERVER['REMOTE_ADDR'] .
    	', ' . $_SERVER['REQUEST_METHOD'] .
    	', ' . $_SERVER['PHP_SELF'] .
    	', ' . $_SERVER['HTTP_USER_AGENT'] .
    	', ' . $_SERVER['HTTP_REFERER'] . "\n"
    );
    fclose($logdatei);
    
    ?>
    Dein Fehler:
    Du hast in der Zeile von fputs nach dem "\n" keinen Punkt gemacht.
    Abgesehen davon kannst du dir das "\n" dort sparen...

    imho schrieb:
    Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legen
    php_value display_errors true
    Du hättest gern den Fehler surchen dürfen ;-)


    Hab ich versucht, hat aber leider nichts geändert..
  6. Für sowas gibts auch scripts :) Siehe hier http://www.robotstats.com/en/
    Wieos das bei dir jetzt nicht funktioniert ist mir schleierhaft
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    yorecords schrieb:
    Hab ich versucht, hat aber leider nichts geändert..
    Kommt eine eine Fehlermeldung oder Warnung? Aktivier zumindest die Fehlerausgabe. Wenn du das gemacht hast müsstest du eine Warnung bekommen wenn die Datei nicht erstellt werden kann.
  8. g******r

    Hallo,

    du musst die "schreibrechte" (CHMOD) von logfile.txt anpassen, dan sollte es funktionieren.

    :wave:
  9. Zugriff log würde ich immer mit mysql machen,

    denn bei gleichzitigen Zugriff auf .txt basiertes Speichern
    kann die gesamte log- txt.Datei "geschossen" werden,
    übrig bleibt dann eine leere Datei, also alle Daten verloren

    wenn zwei User in der gleichen Sekunde zugreifen,
    wird die Datei zweimal geöffnet,
    da sie aber schon vom ersten geöffnet ist ... knallts ....

    mysql kann gleichzeitige Zugriffe (besser) verkraften

    und wenn Du nur "logfile.txt" nimmst,
    ohne Datums-Angaben im Dateiname
    dann ist diese "logfile.txt" ziemlich schnell ziemlich groß
    was ausleen und auswerten dann wieder erschwert
    wenn du auf .txt bestehst, dann mach mind. je Monat eine eigene log Datei

    <Jahr>_<Monat>_logfile.txt

    aber lass es am besten mit .txt lieber gleich sein, und nimm MySQL !!!
    ein Rat aus Erfahrung, mir hat es auch schon .txt Logfiles zerschossen
    seit dem ... lieber MySQL, wegen "gleichzeitigem" Zugriff beim Speichern
  10. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    oindex schrieb:
    aber lass es am besten mit .txt lieber gleich sein, und nimm MySQL !!!
    ein Rat aus Erfahrung, mir hat es auch schon .txt Logfiles zerschossen
    seit dem ... lieber MySQL, wegen "gleichzeitigem" Zugriff beim Speichern
    Das stimmt, MySQL ist hier wirklich besser.
    Und noch zur Logdatei: die wird erst dann zerstört wenn gleichzeitig "geschrieben" wird.
    Wenn gleichzeitig nur gelesen wird passiert gar nichts, das möchte nur so am Rande erwähnt werden.
  11. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    imho schrieb:
    Für sowas gibts auch scripts :) Siehe hier http://www.robotstats.com/en/
    Wieos das bei dir jetzt nicht funktioniert ist mir schleierhaft


    Das ist cool, danke. Habs jetzt schon mal installiert, aber die Grafiken funktionierten nicht... Aber dieses Problem werd ich schon noch lösen.

    hackyourlife schrieb:
    Kommt eine eine Fehlermeldung oder Warnung? Aktivier zumindest die Fehlerausgabe. Wenn du das gemacht hast müsstest du eine Warnung bekommen wenn die Datei nicht erstellt werden kann.


    Das mach ich doch mit dem Befehl "php_value display_errors true oder"? Es ist aber trotzdem keine Warnung oder sonstwas gekommen.

    gatterer schrieb:
    Hallo,

    du musst die "schreibrechte" (CHMOD) von logfile.txt anpassen, dan sollte es funktionieren.

    :wave:


    Hab ich doch gemacht. Hab ich ja schon vorher geschrieben.

    oindex schrieb:
    Zugriff log würde ich immer mit mysql machen,

    denn bei gleichzitigen Zugriff auf .txt basiertes Speichern
    kann die gesamte log- txt.Datei "geschossen" werden,
    übrig bleibt dann eine leere Datei, also alle Daten verloren

    wenn zwei User in der gleichen Sekunde zugreifen,
    wird die Datei zweimal geöffnet,
    da sie aber schon vom ersten geöffnet ist ... knallts ....

    mysql kann gleichzeitige Zugriffe (besser) verkraften

    und wenn Du nur "logfile.txt" nimmst,
    ohne Datums-Angaben im Dateiname
    dann ist diese "logfile.txt" ziemlich schnell ziemlich groß
    was ausleen und auswerten dann wieder erschwert
    wenn du auf .txt bestehst, dann mach mind. je Monat eine eigene log Datei

    <Jahr>_<Monat>_logfile.txt

    aber lass es am besten mit .txt lieber gleich sein, und nimm MySQL !!!
    ein Rat aus Erfahrung, mir hat es auch schon .txt Logfiles zerschossen
    seit dem ... lieber MySQL, wegen "gleichzeitigem" Zugriff beim Speichern


    Ja ich hätt es eh sofort mit mysql gemacht, nur wenn ich das nicht einmal so schaffe, werd ich es als PHP-Anfänger mit mysql noch weniger schaffen. Da brauch ich ja schon einmal allein für die Verbindung zur Datenbank ein vernünftiges Script..

    Ich werds jetzt auf jeden Fall mit Robostats versuchen. Das scheint perfekt zu sein.
    Danke an alle für die Hilfe!
  12. Irgendwie seid ihr alle bisschien dumm...
    In eine .html kann man nicht <?php schreiben ! Versuchs mal mit ner index.php ! Das sollte
    Gehen ...
  13. jv-web schrieb:
    Irgendwie seid ihr alle bisschien dumm...
    In eine .html kann man nicht <?php schreiben ! Versuchs mal mit ner index.php ! Das sollte
    Gehen ...

    Doch, man kann PHP Code in HTML Dateien ausführen:
    http://www.devmag.net/php-tricks/238-php-code-in-html-dateien-ausfuhren.html
  14. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    webfreclan schrieb:
    Doch, man kann PHP Code in HTML Dateien ausführen
    Man kann PHP in jeder Datei ausführen, man muss das nur dem Apache sagen...

    Wobei das .html wirklich der Fehler sein wird... ;-)
  15. Hallo

    habe mal versucht ein kleines PHP / MySQL Script für Besucher-Logs zu bauen,

    aber ist noch nur ein ganz grober Versuch, der einfach jeden Aufruf speichert

    bitte sooooo nicht 1:1 im Einsatz verwenden, ist nur ein Test / Versuch
    ... aber vielleicht können wir hier gemeinsam was brauchbares draus machen :)

    <?php 
    // ------------------------------------------------------ 
    // ------------------------ config ---------------------- 
    
    date_default_timezone_set('Europe/Berlin');
    
    $run_tsmp = time(); 
    $run_date = date('Y-m-d H:i:s',$run_tsmp); 
    
    
    $db_host = '';    // ----  MySQL Server 
    $db_user = '';    // ----  MySQL Benutzer 
    $db_pass = '';    // ----  MySQL Passwort 
    $db_name = '';    // ----  MySQL Datenbank 
    
    $db_table = 'logs_besucher';   // ----  MySQL Tabelle 
    
    
    // ------------------------------------------------------ 
    // ------------------------ connection ------------------ 
    
    $con = mysql_connect($db_host, $db_user, $db_pass);
    if (!$con) { die "<br />Fehler ... keine MySQL Verbindung: <br />\r\n" . mysql_error(); exit; }
    
    $sel = mysql_select_db($db_name, $con);
    if (!$sel) { die "<br />Fehler ... Datenbank nicht erreichbar: <br />\r\n" . mysql_error(); exit; }
    
    
    // ------------------------------------------------------ 
    // ------------------------ setup ----------------------- 
    
    
    $res_exists = mysql_query("SHOW TABLES LIKE '".$db_table."'");
    
    if (mysql_num_rows($res_exists) < 1) {
    
    $sql_setup1 = "CREATE TABLE IF NOT EXISTS `".$db_table."` ( 
    
      `id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT, 
      `datum` varchar(30) NOT NULL, 
      `HTTP_HOST` varchar(255) NOT NULL, 
      `HTTP_USER_AGENT` varchar(255) NOT NULL, 
      `HTTP_ACCEPT_LANGUAGE` varchar(255) NOT NULL, 
      `HTTP_REFERER` varchar(255) NOT NULL, 
      `QUERY_STRING` varchar(255) NOT NULL, 
      `REDIRECT_STATUS` varchar(255) NOT NULL, 
      `REMOTE_ADDR` varchar(255) NOT NULL, 
      `REQUEST_METHOD` varchar(255) NOT NULL, 
      `PHP_SELF` varchar(255) NOT NULL, 
      `REQUEST_TIME` varchar(255) NOT NULL, 
    
     PRIMARY KEY (`id`) 
    ) 
     ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"; 
    
    
    $res_setup1 = mysql_query($sql_setup1); 
    if (!$res_setup1) { die "<br />Fehler ... Setup Table: <br />\n" . mysql_error(); exit; }
    
    }
    
    
    // ------------------------------------------------------ 
    // ------------------------ insert ---------------------- 
    
    
    $sql_inser1 = "INSERT INTO `".$db_table."` (
      `datum, 
      `HTTP_HOST`, 
      `HTTP_USER_AGENT`, 
      `HTTP_ACCEPT_LANGUAGE`, 
      `HTTP_REFERER`, 
      `QUERY_STRING`, 
      `REDIRECT_STATUS`, 
      `REMOTE_ADDR`, 
      `REQUEST_METHOD`, 
      `PHP_SELF`, 
      `REQUEST_TIME` 
    )
    VALUES (
      '".$run_date."', 
      '".$_SERVER['HTTP_HOST']."', 
      '".$_SERVER['HTTP_USER_AGENT']."', 
      '".$_SERVER['HTTP_ACCEPT_LANGUAGE']."', 
      '".$_SERVER['HTTP_REFERER']."', 
      '".$_SERVER['QUERY_STRING']."', 
      '".$_SERVER['REDIRECT_STATUS']."', 
      '".$_SERVER['REMOTE_ADDR']."', 
      '".$_SERVER['REQUEST_METHOD']."', 
      '".$_SERVER['PHP_SELF']."', 
      '".$_SERVER['REQUEST_TIME']."' 
    )
    ");
    
    
    $res_insert1 = mysql_query($sql_inser1); 
    if (!$res_insert1) { die "<br />Fehler ... Insert Data: <br />\n" . mysql_error(); exit; }
    
    
    // ------------------------------------------------------
    
    
    ### 
    
    
    // ------------------------------------------------------ 
    ?>



    die Tabelle anlegen kann man bestimmt besser getalten, Daten-Typen, KEYs, etc

    es sollte wohl auch nicht jeder Aufruf geloggt werden,
    das würde sonst schon bei mittelmäßigem Traffic bestimmt sehr viel
    evtl kann man da ne IP-Sperre machen, und nur unique Aufrufe alle x Minuten loggen

    oder nur loggen, wenn HTTP_REFERER nicht vom eigenen Server kommt,
    also alle "internen Aufrufe" raus lassen ... nur Aufrufe von Extern loggen

    andererseits wäre schon interessant, welche "Wege" ein Besucher uaf der Seite nimmt,
    also welche Unter-Seiten er sich (wie lange) anschaut, Einstiegs- und Ausstiegs-Seite, etc.

    es sollte auch mit rein, dass Datensätze, die älter als z.B. 100 Tage sind
    automatisch gelöscht werden, also DELETE ... WHERE (Datum mehr als 100 Tage in Vergangenheit)

    wie vergleiche ich am besten das Datum, mit Timespamp oder mit Datum formatiert ?
    also wie müsste hier der passende SQL-Befehl aussehen (DELETE ... WENN ... älter als 100 Tage) ?

    oder andere Verbesserungs-Vorschläge ... ?!
    ... gerne auch ganz anderen Ansatz ?!
  16. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    plugboard schrieb:
    Hallo

    habe mal versucht ein kleines PHP / MySQL Script für Besucher-Logs zu bauen,

    aber ist noch nur ein ganz grober Versuch, der einfach jeden Aufruf speichert

    bitte sooooo nicht 1:1 im Einsatz verwenden, ist nur ein Test / Versuch
    ... aber vielleicht können wir hier gemeinsam was brauchbares draus machen :)

    <?php 
    // ------------------------------------------------------ 
    // ------------------------ config ---------------------- 
    
    date_default_timezone_set('Europe/Berlin');
    
    $run_tsmp = time(); 
    $run_date = date('Y-m-d H:i:s',$run_tsmp); 
    
    
    $db_host = '';    // ----  MySQL Server 
    $db_user = '';    // ----  MySQL Benutzer 
    $db_pass = '';    // ----  MySQL Passwort 
    $db_name = '';    // ----  MySQL Datenbank 
    
    $db_table = 'logs_besucher';   // ----  MySQL Tabelle 
    
    
    // ------------------------------------------------------ 
    // ------------------------ connection ------------------ 
    
    $con = mysql_connect($db_host, $db_user, $db_pass);
    if (!$con) { die "<br />Fehler ... keine MySQL Verbindung: <br />\r\n" . mysql_error(); exit; }
    
    $sel = mysql_select_db($db_name, $con);
    if (!$sel) { die "<br />Fehler ... Datenbank nicht erreichbar: <br />\r\n" . mysql_error(); exit; }
    
    
    // ------------------------------------------------------ 
    // ------------------------ setup ----------------------- 
    
    
    $res_exists = mysql_query("SHOW TABLES LIKE '".$db_table."'");
    
    if (mysql_num_rows($res_exists) < 1) {
    
    $sql_setup1 = "CREATE TABLE IF NOT EXISTS `".$db_table."` ( 
    
      `id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT, 
      `datum` varchar(30) NOT NULL, 
      `HTTP_HOST` varchar(255) NOT NULL, 
      `HTTP_USER_AGENT` varchar(255) NOT NULL, 
      `HTTP_ACCEPT_LANGUAGE` varchar(255) NOT NULL, 
      `HTTP_REFERER` varchar(255) NOT NULL, 
      `QUERY_STRING` varchar(255) NOT NULL, 
      `REDIRECT_STATUS` varchar(255) NOT NULL, 
      `REMOTE_ADDR` varchar(255) NOT NULL, 
      `REQUEST_METHOD` varchar(255) NOT NULL, 
      `PHP_SELF` varchar(255) NOT NULL, 
      `REQUEST_TIME` varchar(255) NOT NULL, 
    
     PRIMARY KEY (`id`) 
    ) 
     ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"; 
    
    
    $res_setup1 = mysql_query($sql_setup1); 
    if (!$res_setup1) { die "<br />Fehler ... Setup Table: <br />\n" . mysql_error(); exit; }
    
    }
    
    
    // ------------------------------------------------------ 
    // ------------------------ insert ---------------------- 
    
    
    $sql_inser1 = "INSERT INTO `".$db_table."` (
      `datum, 
      `HTTP_HOST`, 
      `HTTP_USER_AGENT`, 
      `HTTP_ACCEPT_LANGUAGE`, 
      `HTTP_REFERER`, 
      `QUERY_STRING`, 
      `REDIRECT_STATUS`, 
      `REMOTE_ADDR`, 
      `REQUEST_METHOD`, 
      `PHP_SELF`, 
      `REQUEST_TIME` 
    )
    VALUES (
      '".$run_date."', 
      '".$_SERVER['HTTP_HOST']."', 
      '".$_SERVER['HTTP_USER_AGENT']."', 
      '".$_SERVER['HTTP_ACCEPT_LANGUAGE']."', 
      '".$_SERVER['HTTP_REFERER']."', 
      '".$_SERVER['QUERY_STRING']."', 
      '".$_SERVER['REDIRECT_STATUS']."', 
      '".$_SERVER['REMOTE_ADDR']."', 
      '".$_SERVER['REQUEST_METHOD']."', 
      '".$_SERVER['PHP_SELF']."', 
      '".$_SERVER['REQUEST_TIME']."' 
    )
    ");
    
    
    $res_insert1 = mysql_query($sql_inser1); 
    if (!$res_insert1) { die "<br />Fehler ... Insert Data: <br />\n" . mysql_error(); exit; }
    
    
    // ------------------------------------------------------
    
    
    ### 
    
    
    // ------------------------------------------------------ 
    ?>



    die Tabelle anlegen kann man bestimmt besser getalten, Daten-Typen, KEYs, etc

    es sollte wohl auch nicht jeder Aufruf geloggt werden,
    das würde sonst schon bei mittelmäßigem Traffic bestimmt sehr viel
    evtl kann man da ne IP-Sperre machen, und nur unique Aufrufe alle x Minuten loggen

    oder nur loggen, wenn HTTP_REFERER nicht vom eigenen Server kommt,
    also alle "internen Aufrufe" raus lassen ... nur Aufrufe von Extern loggen

    andererseits wäre schon interessant, welche "Wege" ein Besucher uaf der Seite nimmt,
    also welche Unter-Seiten er sich (wie lange) anschaut, Einstiegs- und Ausstiegs-Seite, etc.

    es sollte auch mit rein, dass Datensätze, die älter als z.B. 100 Tage sind
    automatisch gelöscht werden, also DELETE ... WHERE (Datum mehr als 100 Tage in Vergangenheit)

    wie vergleiche ich am besten das Datum, mit Timespamp oder mit Datum formatiert ?
    also wie müsste hier der passende SQL-Befehl aussehen (DELETE ... WENN ... älter als 100 Tage) ?

    oder andere Verbesserungs-Vorschläge ... ?!
    ... gerne auch ganz anderen Ansatz ?!


    Sobald ich mich mit PHP und MySQL auskenne bin ich bei der Entwicklung dabei.. ^^
    Werd mich aber zuerst noch mit Java und C beschäftigen, also kann es noch ein Bisschen dauern. :wink:
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!