Logfile funktioniert nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
besucher
code
date
datei
datenbank
datum
einsatz
fehler
folgendem inhalt
legen
server
speichern
tabelle
tag
url
versuch
verzeichnis
warnung
zugriff
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Ausgebesserter Code:
Dein Fehler:<?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); ?>
Du hast in der Zeile von fputs nach dem "\n" keinen Punkt gemacht.
Abgesehen davon kannst du dir das "\n" dort sparen...
imho schrieb:
Du hättest gern den Fehler surchen dürfen
Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legenphp_value display_errors true
-
Danke für die schnellen Antworten!
imho schrieb:
Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legenphp_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:
Dein Fehler:<?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); ?>
Du hast in der Zeile von fputs nach dem "\n" keinen Punkt gemacht.
Abgesehen davon kannst du dir das "\n" dort sparen...
imho schrieb:
Du hättest gern den Fehler surchen dürfen
Evtl mal eine .htaccess mit folgendem Inhalt in den Root des verzeichnisses legenphp_value display_errors true
Hab ich versucht, hat aber leider nichts geändert.. -
Für sowas gibts auch scripts :) Siehe hier http://www.robotstats.com/en/
Wieos das bei dir jetzt nicht funktioniert ist mir schleierhaft -
Hallo,
du musst die "schreibrechte" (CHMOD) von logfile.txt anpassen, dan sollte es funktionieren.
-
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
-
oindex schrieb:
Das stimmt, MySQL ist hier wirklich besser.
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
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. -
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.
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! -
Irgendwie seid ihr alle bisschien dumm...
In eine .html kann man nicht <?php schreiben ! Versuchs mal mit ner index.php ! Das sollte
Gehen ... -
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 -
webfreclan schrieb:
Man kann PHP in jeder Datei ausführen, man muss das nur dem Apache sagen...
Doch, man kann PHP Code in HTML Dateien ausführen
Wobei das .html wirklich der Fehler sein wird... -
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 ?!
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage