2008-09-20 12 views
16

No deseo que se muestren los errores PHP/html, pero quiero que se muestren en /html/beta/usercomponent. Todo está configurado para que los errores no se muestren en absoluto. ¿Cómo puedo obtener errores para que aparezcan en esa única carpeta (y sus subcarpetas)?¿Cómo puedo activar los errores de PHP que se muestran solo en una subcarpeta?

+1

Si todo lo demás falla, 'set_error_handler (" var_dump ");'. A pesar de los errores de sintaxis en el script de invocación, todo debe ser configurado a través de php.ini/.htaccess/.user.ini de antemano. – mario

Respuesta

28

En .htaccess:

php_value error_reporting 2147483647 

Este número, según la documentación debería permitir a 'todos' los errores, independientemente de la versión, si quieres un entorno más granular, de forma manual o los valores juntos, o ejecutar

php -r 'echo E_ALL | E_STRICT ;' 

para que php calcule el valor por usted.

Usted necesita

AllowOverride All 

en la configuración maestra apaches para que los archivos .htaccess.

Más lectura sobre esto se puede encontrar aquí:


Aviso Si está usando PHP-CGI en lugar de mod_php , esto puede no funcionar como se anuncia, y lo único que conseguirá es un error interno del servidor, y se le dejó sin mucha opción diferente a lo que le de todo el sitio, ya sea sobre una base per-guión con

error_reporting(E_ALL | E_STRICT); 

o similares construcciones antes del error ocurre.

Mi consejo es desactivar mostrando errores para el usuario, y utilizar la característica error_log de php.

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

Si tiene problemas con este ser demasiado ruidoso, esto no es una señal de que necesita para tomar sólo el informe de errores de forma selectiva, esto es un signo de que alguien debe fijar el código.


@Roger

Sí, se puede usar en un < Directorio> construcción en la configuración apaches también, sin embargo, el .htaccess en este caso es equivalente, y hace que sea más portátil especialmente si tener varias copias de comprobación de trabajo de la misma base de código y desea distribuir este cambio a todas ellas.

Si usted tiene múltiples hosts virtuales, querrá el constructo en la respectiva definición hosts virtuales, de lo contrario, sí

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

El adicional "IfModule" comandos son sólo una red de seguridad por lo que el problema anterior con apache muriendo si no tienes mod_php no ocurrirá.

+1

Oye, lo siento, me estoy acostumbrando a este sistema. Estoy tratando de hacerlo en el archivo httpd.conf si es posible. Se vería eso como /html/beta/UserComponent"> php_value error_reporting 2147483647 o es necesario que tenga que ser hecho en el archivo .htaccess? –

+1

Como nota aquí, en caso de que alguien más esté buscando cómo activar los errores de PHP-CGI: ahora puede (a partir de PHP 5.3) usar archivos .user.ini por directorio que funcionan de una manera muy similar a los archivos htaccess .Pero en lugar de escribir 'php_flag display_errors on' pones' display_errors = on'. Más información aquí: http://php.net/manual/en/configuration.file.per-user.php – PaulSkinner

+1

También tenga en cuenta, como se dice en los comentarios de esa página: "los cambios pueden tardar un tiempo en propagarse a todos procesos si tiene un largo tiempo de espera de proceso ". Sé paciente. – PaulSkinner

0

No creo que haya una respuesta simple a este , pero ciertamente me gustaría que se demuestre que está mal.

editar: resulta que esto se puede controlar desde archivos .htaccess. ¡Gracias gente! :)

Puede usar error_reporting() http://docs.php.net/manual/en/function.error-reporting.php para cambiar la configuración en un script por script. Si tiene un solo script que se incluye cada vez en/html/beta/usercomponent, esto hará el truco.

4

La manera más fácil sería controlar el informe de errores desde un archivo .htaccess. Pero esto supone que está utilizando Apache y los scripts en/html/beta/usercomponent se invocan desde ese directorio y no se incluyen desde ningún otro lugar.

Htacess

php_value error_reporting [int] 

Usted tendrá que componer el valor entero a sí mismo de la lista como se describe en la documentación error_reporting, ya que las constantes como E_ERROR no se definen cuando se interpreta el Apache .htaccess.

Es una bandera bit a bit simple, por lo que un valor de 12, por ejemplo, sería E_WARNING + E_PARSE + E_NOTICE.

4

puede hacerlo utilizando una variable de entorno. De esta forma, puede tener más opciones que solo activar/desactivar la generación de informes de errores para un directorio especial. en su código donde quiera que quiera cambiar cualquier comportamiento para un conjunto específico de directoris, o modos de ejecución, verifique si una variable de entorno está configurada o no. de esta manera:

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 
} 

y cuando se está ejecutando la aplicación en su entorno de desarrollo, se puede establecer una variable de entorno en el archivo .htaccess así:

setenv MY_PHP_APP_MODE devel 

o cuando se encuentre en la producción EVN :

setenv MY_PHP_APP_MODE production 

la misma técnica se aplica a su situación. en directorios en los que desea hacer algo especial (activar reportes de errores) configure alguna variable env y en su código, verifique eso.

Cuestiones relacionadas