Seite 1 von 2

Error Reporting - undefined index / undefined variable

Verfasst: 13.09.2005 13:30
von mgutt
Nachdem diverse Seite extrem hohe Ladezeiten aufwiesen, habe ich mich mal ran gemacht diese genauer zur analysieren und tatsächlich sind genau diese Seiten mit "undefined index" Fehlern geschmückt, nachdem ich mit Error Reporting alle Fehler anzeigen lies.

Jetzt eine Verständnisfrage dazu.

Ein Beispiel:
Ich habe den Select Language Mod installiert. In der common.php ist folgende Zeile:

Code: Alles auswählen

$language = ( isset($HTTP_POST_VARS['language']) ) ? $HTTP_POST_VARS['language'] : $HTTP_GET_VARS['language'];
Dabei ist der index "language" aber undefiniert. Jetzt ist die Frage was ich da machen könnte. Einfach den Fehler per @ deaktivieren?

Wäre das die richtige Fehlerbehebung?

Zweites Beispiel:
Ebenfalls SLM und die common.php:

Code: Alles auswählen

if ($language) 
{ 
	$language=trim(strip_tags($language));
	$board_config['default_lang'] = $language; 
	setcookie($board_config['cookie_name'].'_default_lang',$language , (time()+21600), $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
} else 
{
	if (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']) ) 
	{
	   $board_config['default_lang']=$HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']; 
	} else
	{
		$dir = opendir($phpbb_root_path.'language');
		$lang_d = array();
		while (false !== ($file = readdir($dir)))
		{
			if ( ereg("^lang_", $file) && !is_file($dirname . "/" . $file) && !is_link($dirname . "/" . $file) )
Hier verursacht die leere variable $dirname den Fehler.

Also habe ich das so angepasst:

Code: Alles auswählen

if ($language) 
{ 
	$language=trim(strip_tags($language));
	$board_config['default_lang'] = $language; 
	setcookie($board_config['cookie_name'].'_default_lang',$language , (time()+21600), $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); 
} else 
{
	if (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']) ) 
	{
	   $board_config['default_lang']=$HTTP_COOKIE_VARS[$board_config['cookie_name'].'_default_lang']; 
	} else
	{
		$dir = opendir($phpbb_root_path.'language');
		$lang_d = array();
		$dirname= "language";
		while (false !== ($file = readdir($dir)))
		{
			if ( ereg("^lang_", $file) && !is_file($dirname . "/" . $file) && !is_link($dirname . "/" . $file) )

Error Reporting aktivieren:
Wer Error Reporting aktivieren möchte kann das wie folgt machen:

common.php:

Code: Alles auswählen

error_reporting  (E_ERROR | E_WARNING | E_PARSE); // This will NOT report uninitialized variables
ändern in:

Code: Alles auswählen

error_reporting  (E_ALL); // This will report all errors

Re: Error Reporting - undefined index / undefined variable

Verfasst: 15.09.2005 02:47
von alcaeus
Moin,

dieser Code:
mgutt hat geschrieben:

Code: Alles auswählen

$language = ( isset($HTTP_POST_VARS['language']) ) ? $HTTP_POST_VARS['language'] : $HTTP_GET_VARS['language'];

Code: Alles auswählen

$language = ( isset($HTTP_POST_VARS['language']) ) ? $HTTP_POST_VARS['language'] : (( isset($HTTP_GET_VARS['language']) ) ? $HTTP_GET_VARS['language'] : '');
Der Code prueft einfach, ob per Post was gekommen ist, wenn nicht dann wird einfach Get verwendet. Allerdings muss man da nochmal mit isset arbeiten, der letzte Wert ist dann der Default-Wert, der verwendet wird wenn nichts uebergeben wurde.

Greetz
alcaeus

Verfasst: 15.09.2005 21:33
von mgutt
ahh ja logisch. fehlt die "leere" zuweisung. hätte ich auch drauf kommen können.

Verfasst: 17.09.2005 11:56
von rabbit
hmmm, ist es möglich, dass man keinerlei fehler hat? mit error reporting ON bekomme ich dennoch keine meldungen, egal bei welchen seiten. hab' besonders die seiten geprüft, die durch MODs verändert oder hinzugekommen sind.

Verfasst: 17.09.2005 23:24
von mgutt
Ich glaube die Fehler sind erst so massig geworden, seit dem ich diesen Extended Template Mod von ptirhiik installiert habe.

Kann aber auch schon vorher gewesen sein, weil ich es vorher nie getestet habe.

Nach der Installation waren nämlich auch Fehler aufgetaucht, wie doppelt genutzte Variablen von verschiedenen Mods in vollkommen unabhängigen Dateien. Liegt wahrscheinlich am Cachen der Seiten.

Dennoch ist ein fehlerfreier Code sicherlich lobenswert. Normalerweise denke ich schon, dass viele Mods Fehler auslösen müssten.

Der Album Mod von Smartor z.B. hat viele Fehler wenn man auch die Categories installiert hat. Der Select Language Mod hat Fehler und noch einige andere Mods mehr.

Verfasst: 18.09.2005 10:17
von alcaeus
@Rabbit: du musst error_reporting(E_ALL) einschalten, dann siehst du auch Hinweise zu nicht initialisierten Variablen. Ich waere damit aber vorsichtig, das ACP kannst du mit der Einstellung nicht mehr verwenden :lol:

Greetz
alcaeus

Verfasst: 18.09.2005 10:24
von rabbit
@ alcaeus: genau das habe ich getan auf meinem test env und bekomme zum einen keine fehlermeldungen und zum anderen komme ich weiterhin ins acp... :-?

extended template nutze ich nicht, wohl aber extreme styles und mein board ist ziemlich stark geMODded.

Verfasst: 19.09.2005 08:08
von alcaeus
rabbit hat geschrieben:zum anderen komme ich weiterhin ins acp... :-?
Moooment. Ich hab nicht gesagt, dass man nicht mehr ins ACP kommt. Ich hab nur gesagt, dass man es nicht mehr ordentlich verwenden kann ;)
rabbit hat geschrieben:extended template nutze ich nicht, wohl aber extreme styles und mein board ist ziemlich stark geMODded.
Hmm...dann sollten erst recht Meldungen kommen. Bei einem Vanilla-phpBB kommt schon auf dem Index eine, wenn du auch nur einem Forum keine besonderen Berechtigungen (Private) gegeben hast.

Greetz
alcaeus

Verfasst: 19.09.2005 09:26
von mgutt
Gabs beim Error Reporting nicht noch eine "Master" Einstellung auf dem Server?

Verfasst: 19.09.2005 11:32
von rabbit
mgutt hat geschrieben:Gabs beim Error Reporting nicht noch eine "Master" Einstellung auf dem Server?
wenn, dann her damit! :) auf meinem test env kann ich das ja umstellen, sofern ich weiß, wie...

wie gesagt, bei mir sind wirklich keinerlei meldungen zu verzeichnen.