errors - php error log
¿Cómo puedo activar los errores de PHP en solo una subcarpeta? (4)
La forma 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]
Tendrá que compilar el valor entero usted mismo de la lista como se describe en la documentación error_reporting , ya que las constantes como E_ERROR no están definidas cuando Apache interpreta el .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.
No quiero que se muestren los errores de 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)?
puedes hacer esto usando una variable de entorno. De esta forma, puede tener más opciones que simplemente 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 en ejecución, verifique si una variable de entorno está configurada o no. Me gusta esto:
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 ejecuta su aplicación en su entorno de desarrollo, puede establecer una variable env en su archivo .htaccess de la siguiente manera:
setenv MY_PHP_APP_MODE devel
o cuando estás en 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.
No creo que haya una respuesta simple a esto , pero ciertamente quiero que se demuestre que estoy equivocado.
editar: resulta que esto se puede controlar desde archivos .htaccess. ¡Gracias gente! :)
Sin embargo, puede utilizar 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.
En .htaccess
:
php_value error_reporting 2147483647
Este número, de acuerdo con la documentación, debe permitir "todos" los errores independientemente de la versión, si desea una configuración más granular, manualmente O los valores en conjunto, o ejecute
php -r ''echo E_ALL | E_STRICT ;''
para que php calcule el valor por ti.
Necesitas
AllowOverride All
en la configuración maestra de apaches para habilitar los archivos .htaccess.
Puede leer más sobre esto aquí:
- Indicador de informe de php / error
- Php / Error Reporting values
- Php / Diferentes maneras de ajustes de sintonización
Aviso Si está usando Php-CGI en lugar de mod_php, es posible que esto no funcione como se anuncia, y todo lo que obtendrá es un error interno del servidor, y no tendrá más opción que habilitarlo en todo el sitio en una ubicación específica. secuencia de comandos con
error_reporting( E_ALL | E_STRICT );
o construcciones similares antes de que ocurra el error.
Mi consejo es desactivar la visualización de errores para el usuario y utilizar la función error_log de php.
display_errors = 0
error_logging = E_ALL | E_STRICT
error_log = /var/log/php
Si tiene problemas con el hecho de que esto es demasiado ruidoso, esto no es una señal de que solo necesita tomar informes de errores de forma selectiva, este es un signo de que alguien debería corregir el código.
@Roger
Sí, puedes usarlo en un <
Directory>
<
Directory>
<
Construir en configuración Apaches también, sin embargo, el .htaccess en este caso es equivalente y lo hace más portátil, especialmente si tiene varias copias de comprobación de la misma base de código y desea distribuir este cambio a todas ellas. Directory>
Si tiene múltiples hosts virtuales, querrá la construcción en la definición de hosts virtuales respectivos; de lo contrario, sí
<Directory /path/to/wherever/on/filesystem>
<IfModule mod_php5.c>
php_value error_reporting 214748364
</IfModule>
</Directory>
Los comandos adicionales de "ifmodule" son solo una red de seguridad por lo que el problema anterior con apache muriendo si no tiene mod_php no ocurrirá.