Seite 1 von 1

Fehlerseite

Verfasst: So 26.Mär, 2006 14:50
von Giga4000
Hi OXPUS,

ich glaube ich muss dich mal wieder stören. Ich wollte mir eine Fehlerseite mit PHP machen, bei der die IP-Adresse und die gesuchte URL per E-Mail an mich geschickt wird. Das die E-Mail verschickt wird klappt auch wunderbar, allerdings bekomme ich das mit der IP-Adresse und der gesuchten URL irgendwie nicht hin. Ich habe dir mal mein Script angehängt. Ich hoffe du kannst mir helfen.

Danke!

Verfasst: So 26.Mär, 2006 20:29
von oxpus
Die IP ist mit $HTTP_SERVER_VARS['REMOTE_ADDR'], die URL mit $HTTP_SERVER_VARS['REQUEST_URI'] abrufbar.

Verfasst: So 26.Mär, 2006 21:32
von Giga4000
Hmm ... jetzt kommt:

Code: Alles auswählen

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/error/404.php on line 5

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/error/404.php on line 6

Verfasst: So 26.Mär, 2006 23:58
von oxpus
Du musst diese auch in Variablen laden.
Direkt ansprechen kannst Du die nicht.
Also u. B. $user_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];

Verfasst: Mo 27.Mär, 2006 22:22
von Giga4000
Verdammt ... ich bekomme es einfach nicht hin ¢¬

Kannst du dir das Script vielleicht nocheinmal ansehen:

Verfasst: Mo 27.Mär, 2006 23:31
von Christian_N
Ist voll easy :)
tun doch einfach

Code: Alles auswählen

$nachricht = "Hallo, soeben gab es einen Error 404 auf deinem Server:";

$nachricht = "URL:", $HTTP_SERVER_VARS['REQUEST_URI'];
$nachricht = "Browser:", $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
$nachricht = "IP-Adresse:", $HTTP_SERVER_VARS['REMOTE_ADDR'];
$nachricht = "Hostadresse:", $HTTP_SERVER_VARS['HTTP_HOST'];
mit diesen ersetzen:

Code: Alles auswählen

$nachricht = "Hallo, soeben gab es einen Error 404 auf deinem Server: \n\n";
$nachricht .= 'URL: ' .$HTTP_SERVER_VARS['REQUEST_URI']. "\n";
$nachricht .= 'Browser: ' .$HTTP_SERVER_VARS['HTTP_USER_AGENT']. "\n";
$nachricht .= 'IP-Adresse: ' .$HTTP_SERVER_VARS['REMOTE_ADDR']. "\n";
$nachricht .= 'Hostadresse: ' .$HTTP_SERVER_VARS['HTTP_HOST']. "\n";
bei mir hats funktioniert - ergebnis in der Mail:

Code: Alles auswählen

Hallo, soeben gab es einen Error 404 auf deinem Server: 

URL: /test.php
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.1) 
Gecko/20060111 Firefox/1.5.0.1 
IP-Adresse: xxx.xxx.xxx.xxx 
Hostadresse: www.meinedomain.de 

EDIT: den zum Ersetzen-Code angepasst :)

Gruß Chris

Verfasst: Mo 27.Mär, 2006 23:44
von oxpus
Absätze in Emails werden mittels erstellt.
Also mit doppelten Hochkommas (nicht zwei einzelne!).
\n steht hier für "new line"

Verfasst: Di 28.Mär, 2006 00:03
von Christian_N
aua das tut weh, kurzen gehirnaussetzer stimmt ja :hh:

also müsste mein oben genannten code so lauten:

Code: Alles auswählen

   1. $nachricht = "Hallo, soeben gab es einen Error 404 auf deinem Server: \n\n";
   2. $nachricht .= 'URL: ' .$HTTP_SERVER_VARS['REQUEST_URI']. "\n";
   3. $nachricht .= 'Browser: ' .$HTTP_SERVER_VARS['HTTP_USER_AGENT']. "\n";
   4. $nachricht .= 'IP-Adresse: ' .$HTTP_SERVER_VARS['REMOTE_ADDR']. "\n";
   5. $nachricht .= 'Hostadresse: ' .$HTTP_SERVER_VARS['HTTP_HOST']. "\n";
mal ausprobiere gleich :)

EDIT: klappt wunderbar - Danke für den Denkanstoss :) - hab auch gleich mal den oben genannte Ersetz-Code angepasst :D

Verfasst: Di 28.Mär, 2006 12:43
von blondi
was genau, muss wie gemacht werden um diese funktion zu nutzen zu können...

habe mal die 404.php wie von christian beschrieben abgeändert und in den forum ordner hochgeladen, allerdings geht das bei mir nicht...

habt ihr eine kurze beschreibung


liebe grüsse

Verfasst: Di 28.Mär, 2006 14:05
von Giga4000
Ich musste noch $HTTP_SERVER_VARS durch $_SERVER ersetzen. Ich denke mal das kommt durch PHP 5.

Ein Problem habe ich allerdings noch ^^

Bei der URL würde ich gerne die aufgerufene URL haben und nicht die wo das Script liegt. Deshalb habe ich die Zeile durch diese ersetzt:

Code: Alles auswählen

$nachricht .= 'URL: ' .$_SERVER['HTTP_REFERER']. "\n";
Nun kommt allerdings die Fehlermeldung:

Code: Alles auswählen

Notice: Undefined index: HTTP_REFERER in /www/usersites/m-r/mx-forums/pub/error/404.php on line 8
Aber laut php.net müsste das die richtige Variable sein und in der PHP Info funktioniert es auch.

Verfasst: Di 28.Mär, 2006 14:42
von Christian_N
@blondi Du musst auch noch in den rootverzeichschniss eine Datei names .htaccess reinmachen mit folgende inhalt

Code: Alles auswählen

ErrorDocument 404 /errors/404.php
Wobei die Datei 404 in dem Ordner "errors" liegen müsste dann, man kann die aber in ein andere ordner machen dann müsste "erros" angepasst werden, liegt die im Root also wo auch index.php, portal.php ist dann dann kann man das "errors/" löschen so das es dann ggf. so aussieht

Code: Alles auswählen

ErrorDocument 404 /404.php

Solltes schon eine Datei mit dem name .htaccess haben so füge diese oben genannte Zeile einfach mit ein in die Datei :)

Sobald dann eine Datei aufrufst die nicht auf dein Server ist, wie z.B. www.deinedomain.de/blablabla.php kommt die Fehlermeldung und die Mail wird verschickt, allerdings müsste du auch in der 404.php die E-Mail Adressen anpassen da sonst der Giga4000 die E-Mail erhält.

@Giga4000 da weiss ich momentan auch kein Rat bin gerad noch dabei PHP zu verstehn :D Aber Oxpus oder Co. hat sicher ne erklärung für dich :)

Verfasst: Di 28.Mär, 2006 15:18
von oxpus
Zwei Dinge:

$_SERVER ist NICHT überall verfügbar und phpBB selber sperrt alle kurzen GLOBALS aus Sicherheitsgründen kategorisch aus!
Das wurde gemacht, da die beiden Varianten zwar zum Aufruf eines Scripts die gleichen Inhalte enthalten, aber getrennt voneinander bearbeitet/verändert werden können. Und das ist ebent nicht besonders sicher, bzw. eindeutig!
Daher immer die langen verwenden, also hier $HTTP_SERVER_VARS.

Und zum anderen ist, wie Christian_N schon schrieb, ein Fehlerdokument auf diese Weise sehr schnell selber eingebunden, sofern es die Webumgebung auch zulässt! Notfalls, wenn es eben nicht klappt, den Provider fragen.

Und warum wird dann das eigene Fehlerscript aufgerufen?
Weil der Webserver eine Anfrage erhält, diese auflöst, dann die gewünschte Datei lädt und einen 404-Fehler meldet, wenn diese fehlt, bzw. nicht an angegebener Stelle gefunden werden kann. Groß- und Kleinschreibung ist hierbei meistens auch wichtig!

Nun kann man die Standard-Seite des Webservers anzeigen lassen oder per .htaccess-Einstellung eben auf eine eigene Datei verzweigen.
Und die kann alles sein, was der Webserver ausführen kann.
Also neben HTML und PHP vielleicht sogar auch ASP, PL, CGI, etc...
Und diese Scripte werden dann auch ausgeführt, sprich: Verwendest Du ein PHP-Script, kannst Du, sofern es auch an phpBB angeschlsosen wird, Emails per emailer.php versenden.
Oder auch mit einem eigenen, selbst erstellten Email-Script (Was deutlich schwerer ist...).

Aber Achtung:
Sollte selbst diese Fehlerseite nicht aufrufbar sein, kann der Webserver in einer Endlosschleife landen oder andere Fehler erzeugen/anzeigen! Daher unbedingt vor der Einrichtung einer eigenen Fehlerseite auch testen, ob die wirklich verfügbar und aufrufbar ist!

Verfasst: Di 28.Mär, 2006 15:39
von Giga4000
Hmm ... aber wenn ich $HTTP_SERVER_VARS verwende kommt:

Code: Alles auswählen

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/errors/404.php on line 8

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/errors/404.php on line 9

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/errors/404.php on line 10

Notice: Undefined variable: HTTP_SERVER_VARS in /www/usersites/m-r/mx-forums/pub/errors/404.php on line 11

Verfasst: Di 28.Mär, 2006 19:36
von oxpus
Öhm, du bindest die 404.php nicht ins phpBB ein, denke ich mnal?
Dann füge mal diese Zeile in die Datei ein (also direkt nach "<?"!):

Code: Alles auswählen

error_reporting  (E_ERROR | E_WARNING | E_PARSE);

Verfasst: Di 28.Mär, 2006 22:02
von Giga4000
[quote="oxpus - Di 28.März, 2006 19:36";p="56833"]Öhm, du bindest die 404.php nicht ins phpBB ein, denke ich mnal?[/quote]

Ja, ist richtig !!!

[quote="oxpus - Di 28.März, 2006 19:36";p="56833"]
Dann füge mal diese Zeile in die Datei ein (also direkt nach "<?"!):

Code: Alles auswählen

error_reporting  (E_ERROR | E_WARNING | E_PARSE);
[/quote]

Ja, habe ich gemacht. Die Fehlermeldung ist nun verschwunden, allerdings kommen die Mails folgendermaßen an:

Code: Alles auswählen

Hallo, soeben gab es einen Error 404 auf deinem Server: 

URL: 
Browser: 
IP-Adresse: 
Hostadresse: 
Das aktuelle Script habe ich dir nocheinmal angehängt:

Verfasst: Di 28.Mär, 2006 22:40
von oxpus
Hm, das Script ist soweit i.O., aber komisch, daß die GLOBALS nicht verfügbar sind...
Das kann nur am Webserver oder den PHP-Einstellungen liegen.
Hast Du mal einen Link zur phpinfo?

Verfasst: Di 28.Mär, 2006 23:11
von Christian_N
@Oxpus - Beitrag #10 hatte er mal ein Link angegeben zur der PHP Info :)

EDIT: ist das mit den Server wirklich so underschiedlich?
Den hatte das selbe Script also auch ohne in phpBB eingebunden auch drauf gehabt beim all-inkl.com (SharedServer) und da ging es, ohne diese änderrung

Code: Alles auswählen

error_reporting  (E_ERROR | E_WARNING | E_PARSE);
nach "<?php" und da kam bei mir keine Fehlermeldung und wurde auch richtig in der Mail alles angezeigt.

Verfasst: Di 28.Mär, 2006 23:19
von oxpus
register_long_arrays Off
Die langen sind nicht möglich, überhaupt nicht.
Daher verwundert es mich nun, daß $_SERVER auch nicht gehen sollte.
Versuche es aber mal damit, die Fehlermeldung in Post #10 basiert ja auf einen falschen Index, also Wertvergleich...

Verfasst: Di 28.Mär, 2006 23:44
von Christian_N
Dann heißt das dass auch bei jemande wo dieses auf "Off" steht garkein phpBB benutzen kann (zumindeste nicht fehlerfrei), weil phpBB aus sicherheitsgründe die lange verwendet?
Weshalb schalte den paar anbieter solche funktionen ab überhaupt gerad wenn die lange sicherer sein sollen? *kopfkratzt*

Verfasst: Di 28.Mär, 2006 23:52
von oxpus
Öhm, nein, phpBB erkennt das, man sollte das aber nicht wirklich bewusst umgehen.

Verfasst: Mi 29.Mär, 2006 08:03
von Giga4000
Ach das sind diesen dummen Freehoster. Ich werde das Script jetzt erstmal bis zum Sommer draußen lassen. Im Juni oder Juli wollte ich mir richtigen Webspace kaufen. Ich denke mal, dass ich dann das Script Fehlerfrei einsetzten kann.

Danke an alle die mir geholfen haben Bild