2008-09-20 3 views
16

Ich möchte nicht PHP Fehler anzuzeigen/html, aber ich möchte sie in /html/beta/usercomponent angezeigt werden. Alles ist so eingerichtet, dass Fehler überhaupt nicht angezeigt werden. Wie kann ich Fehler bekommen, nur in diesem einen Ordner (und seinen Unterordnern) angezeigt zu werden?Wie kann ich PHP-Fehler Anzeige nur auf einem Unterordner

+1

Wenn alles andere fehlschlägt, 'set_error_handler (" var_dump ");'. Bei Syntaxfehlern im Aufrufskript muss vorher alles über php.ini/.htaccess/.user.ini konfiguriert werden. – mario

Antwort

28

In .htaccess:

php_value error_reporting 2147483647 

Diese Zahl, die Dokumentation nach sollten ‚alle‘ Fehler unabhängig von Version aktivieren, wenn Sie eine detailliertere Einstellung möchten, manuell oder die Werte zusammen, oder führen

php -r 'echo E_ALL | E_STRICT ;' 

um PHP den Wert für Sie berechnen zu lassen.

Sie benötigen

AllowOverride All 

in apaches Master-Konfiguration .htaccess-Dateien zu ermöglichen.

Mehr Lesen dazu finden Sie hier:


Hinweis Wenn Sie mit PHP-CGI , das funktioniert möglicherweise nicht wie angekündigt, und alle bekommen Sie ist ein interner Serverfehler, und Sie werden als andere, ohne viel Option gelassen werden entweder standortweit auf einer Pro-Skript Basis ermöglicht, mit

error_reporting(E_ALL | E_STRICT); 

oder ähnliche Konstrukte vor dem Fehler tritt ein.

Mein Rat ist zu deaktivieren Anzeige von Fehlern für den Benutzer, und verwenden stark php error_log-Funktion.

display_errors = 0 
error_logging = E_ALL | E_STRICT 
error_log = /var/log/php 

Wenn Sie Probleme mit dieser zu laut zu sein, ist dies nicht ein Zeichen ist, müssen Sie nur Fehler nehmen selektiv Berichterstattung ab, ist dies ein Zeichen sollte jemand den Code beheben.


@Roger

Ja, Sie es in einem < Verzeichnis> Konstrukt in apaches Konfiguration verwenden, jedoch ist die .htaccess in diesem Fall äquivalent, und macht es mehr tragbar, besonders wenn Sie haben mehrere funktionierende Checkout-Kopien derselben Codebasis und möchten diese Änderung an alle verteilen.

Wenn Sie mehrere virtuelle Hosts haben, werden Sie das Konstrukt in den jeweiligen virtuellen Hosts Definition wünschen, andernfalls ja

<Directory /path/to/wherever/on/filesystem> 
     <IfModule mod_php5.c> 
     php_value error_reporting 214748364 
     </IfModule> 
    </Directory> 

Das Zusatz „IfModule“ Befehle mit nur ein Sicherheitsnetz so das oben beschriebene Problem sind Apache sterben, wenn Sie nicht mod_php nicht auftreten.

+1

Hey, tut mir leid, ich gewöhne mich nur an dieses System. Ich versuche es in der httpd.conf-Datei zu tun, wenn möglich. Wäre das aussehen wie /html/beta/usercomponent"> php_value error_reporting 2147483647 Oder braucht es braucht in der .htaccess-Datei zu tun? –

+1

Wenn jemand anders nach PHP-CGI-Fehlern suchen möchte, können Sie jetzt (ab PHP 5.3) per-.user.user.ini-Dateien verwenden, die sehr ähnlich wie htaccess-Dateien arbeiten .Anstatt "php_flag display_errors on" zu schreiben, wird "display_errors = on" angezeigt. Weitere Informationen finden Sie hier: http://php.net/manual/en/configuration.file.per-user.php – PaulSkinner

+1

Beachten Sie auch, wie es in den Kommentaren dieser Seite heißt: "Die Änderungen können eine Weile dauern, bis sie an alle weitergegeben werden Prozesse, wenn Sie eine lange Prozesszeit haben. " also sei geduldig. – PaulSkinner

0

Ich glaube nicht, dass es eine einfache Antwort auf diese , aber ich möchte sicherlich falsch bewiesen werden.

edit: stellt sich heraus, dass dies von .htaccess-Dateien gesteuert werden kann. Danke Leute! :)

Sie können error_reporting() http://docs.php.net/manual/en/function.error-reporting.php verwenden, um die Einstellung für ein Skript jedoch nach Skript zu wechseln. Wenn Sie ein einzelnes Skript haben, das jedes Mal bei/html/beta/usercomponent enthalten ist, wird dies den Trick machen.

4

Der einfachste Weg wäre, die Fehlerberichte aus einer .htaccess-Datei zu steuern. Dies setzt jedoch voraus, dass Sie Apache verwenden und die Skripte in/html/beta/usercomponent von diesem Verzeichnis aus aufgerufen werden und nicht von woanders enthalten sind.

.htacess

php_value error_reporting [int] 

Sie den ganzzahligen Wert sich aus der Liste zusammenstellen müssen, wie in der Dokumentation error_reporting beschrieben, da die Konstanten wie E_ERROR nicht definiert sind, wenn Apache die .htaccess interpretiert.

Es ist ein einfaches bitweises Flag, also wäre ein Wert von 12 beispielsweise E_WARNING + E_PARSE + E_NOTICE.

4

können Sie dies tun, indem Sie eine Umgebungsvariable verwenden. Auf diese Weise können Sie mehr Möglichkeiten haben, als nur die Fehlerberichterstattung für ein spezielles Verzeichnis zu aktivieren oder zu deaktivieren. In Ihrem Code, wo immer Sie ein Verhalten für eine bestimmte Gruppe von Directoris ändern oder Modi ausführen möchten, prüfen Sie, ob eine Umgebungsvariable gesetzt ist oder nicht. wie folgt aus:

if ($_ENV['MY_PHP_APP_MODE'] == 'devel') { 
    // show errors and debugging info 
} elseif ($_ENV['MY_PHP_APP_MODE'] == 'production') { 
// show some cool message to the user so he won't freak out 
// log the errors and send email to the admin 
} 

und wenn Sie Ihre Anwendung in der Entwicklungsumgebung ausgeführt wird, können Sie eine Umgebungsvariable in der .htaccess-Datei wie folgt festgelegt:

setenv MY_PHP_APP_MODE devel 

oder wenn Sie in der Produktion evn sind :

setenv MY_PHP_APP_MODE production 

die gleiche Technik gilt für Ihre Situation. In Verzeichnissen, in denen Sie etwas Spezielles tun möchten (aktivieren Sie die Fehlerberichterstattung), legen Sie eine env-Variable fest, und prüfen Sie in Ihrem Code nach.

Verwandte Themen