Seite 1 von 2

Weiße Seite bei PHP-Fehler, obwohl display_errors=on

Verfasst: 15.06.2010, 12:03
von Andreas I.
Hallo,

ich kriege auf einem Server bei Fehlern im PHP eine wenig hilfreiche weiße Seite. display_errors ist auf "on" und wird auch so von phpinfo() angezeigt:

display_errors: Local Value: On, Master Value: Off

(Eigentlich müsste er doch so Fehlermeldungen anzeigen, oder?)

Hilft nicht:
error_reporting(E_ALL);

Ohne Wirkung:
ini_set ('error_reporting', E_ALL);

Es ist ein PHP 5.2.13

Verfasst:
von

Verfasst: 15.06.2010, 13:30
von berni
machst du ein @include("script.php") [oder ähnliches] ?

wenn ein @ davor ist .... dann nimm das mal weg

Verfasst: 15.06.2010, 13:50
von Andreas I.
Nun, ich hatte bis eben gerade nur ein @-Zeichen im Script für die Datenbankanbindung_

Code: Alles auswählen

<?php
$db=@mysql_connect&#40;"***","***","***"&#41;;
mysql_select_db&#40;***,$db&#41;;
mysql_query&#40;"SET NAMES 'utf8'"&#41;;
?>
Aber das unterdrückt dann doch nur Fehlermeldungen im Zusammenhang mit der Datenbankverbindung, oder?

Na, ich hab mal auf Verdacht das @-Zeichen rausgenommen und es brachte keine Besserung.

@include mache ich nicht.

Verfasst: 15.06.2010, 14:02
von berni
genau, das @ unterdrückt die Fehlermeldung!

wenn deine index.php aber zB: folgendes beinhaltet:

Code: Alles auswählen

<?
@include&#40;"mysql-fkt.php"&#41;;
?>
und in der Datei "mysql-fkt.php" ein Fehler ist, würde dieser nicht ausgegeben werden

Verfasst: 15.06.2010, 14:09
von Synonym
Was hast Du denn zuletzt geändert? Vielleicht ein Update von PHP4 auf 5, Module geändert oder so etwas die Richtung?

Ansonsten... Schon mal nachgesehen ob vielleicht eine betroffene Datei mit einem BOM versehen ist. Der macht Probleme und liefert keine Fehlermeldung.

Bzw. teste doch mal mit einer anderer Minidatei ob die Fehlerausgabe überhaupt geht.

<?php
echo 'Semikolon fehlt'
?>

Wenn da dann auch kein Fehler angezeigt wird, dann ist die Fehlerausgabe definitiv nicht aktiv. Schau dann einfach ins Log, was der Fehler überhaupt ist.

Eventuell auch ein Speicherproblem. Also nicht "memory_limit", sondern direkt der Server-Speicher. Wenn der aufgebraucht ist, dann gibt es auch keine Fehlermeldung von PHP.

Verfasst: 15.06.2010, 14:18
von Andreas I.
Nein, da habe ich nur u.a.

Code: Alles auswählen

<?php...
include&#40;"../PHP/db.php"&#41;;
...
?>
Und das @-Zeichen wäre dann in der db.php gewesen (siehe oben)...
Die Fehlerunterdrückungsmimik des @-Zeichen pflanzt sich dann aber nicht ins Hauptscript fort, oder?

Naja, aktuell ist auch im includierten Script kein @-Zeichen mehr, aber vielleicht muss man nur das ablaufen irgendwelcher Caches abwarten? So ganz den Einblick hat man bei shared hosting ja nicht.

Insgesamt glaube ich aber, dass es eher nicht am @-Zeichen liegt. Habe eben versuchsweise mal das db.php-script entfernt und es kam immer noch eine weiße Seite. (Und der Rest der Domain funktionierte für 10-20 Sekunden nicht) Also irgendwelche geheimnisvollen Caches kommen auch nicht in Frage.

Verfasst: 15.06.2010, 14:20
von Andreas I.
@Synonym:

Genau diesen Test mit fehlendem Semikolon habe ich durchgeführt. Es kommt eine weiße Seite und keine Fehlermeldung.

Verfasst: 15.06.2010, 14:24
von Synonym
Insgesamt glaube ich aber, dass es eher nicht am @-Zeichen liegt.
Ich auch nicht. Da wird auch nichts vererbt und einen "Cache" gibt es da auch nicht. Das mit dem Semikolon hätte einen Fehler bringen müssen und tut es nicht.

Schau ins Log, das ist die einfachste Möglichkeit.

Ich für meinen Fall hatte das vor ein paar Wochen. Update installiert und da war dann ein Modul nicht mehr kompatibel. Fehlermeldungen hatte ich da auch keine.

Verfasst: 15.06.2010, 14:37
von PHPSchmied
Schonmal daran gedacht das das Skript ordentlich durchläuft aber die Ausgabe am ende nicht stattfindet? Z.b ob_start? Eigenes Templatet system welches einfach die Templates nicht findet? Browserkomprimierung? Kein Flushing? Bau doch mal Schrittweise:

echo 'hi'; exit;

ein damit du den Fehler Lokalisieren kannst. Außerdem bitte absichtlich mal irgendwo ein Semikolon vergessen damit du die Fehlerausgabe testen kannst.

Verfasst: 15.06.2010, 14:47
von Andreas I.
Habe leider nur Zugriff auf das sendmail.log und die logs für die übertragenen webseiten.
Ein error.log gibt es nicht oder ich habe keinen Zugriff darauf.

Verfasst: 15.06.2010, 14:48
von Synonym
Außerdem bitte absichtlich mal irgendwo ein Semikolon vergessen damit du die Fehlerausgabe testen kannst.
Du hast aber schon gelesen vorher, oder? Genau das hat er schon gemacht.

Verfasst: 15.06.2010, 14:49
von Synonym
magst Du nicht mal die phpinfo() zeigen? Ansonsten, was ist denn das für ein Hoster... Keine Logfiles, das hatte ich noch nie.

Verfasst: 15.06.2010, 14:50
von Andreas I.
@PHPSchmied:

Dieses Script erzeugt eine weiße Seite, aber keinen Fehler:

Code: Alles auswählen

<?php
echo "abc"
echo "xyz"
?>

Verfasst: 15.06.2010, 17:41
von Andreas I.
@Synonym:
Hier mal phpinfo() als Bild:

Bild

Klicken zum Vergrößern, einige Daten unkenntliche gemacht.

Verfasst: 15.06.2010, 18:12
von Synonym
also versuch mal folgendes:

display_errors:
= on (ist vorhanden)

error_log:
Da kannst Du mal einen selbst definierten Pfad für das Logfile anlegen
ini_set ('error_log', '/var/www/dein/pfad/php_error.log');
php_error.log anlegen und Rechte auf 777 setzen

error_reporting:
Ist derzeit 81. Setze das mal auf 30719.
ini_set ('error_reporting', '30719'); (alternativ E_ALL)

log_errors:
Ist derzeit off
ini_set ('error_reporting', '1'); oder
ini_set ('error_reporting', 'true');

Eventuell auch mal das output_buffering ausschalten:
ini_set ('output_buffering', '0') (eventuell auch 'Off')