errores - php error_log no funciona
php logger (14)
Compruebe que PHP-FPM no está configurando explícitamente error_log
:
Asegúrese de que el archivo /etc/php-fpm.d/www.conf
no contenga la configuración de php_admin_value
para error_log. Busque lo siguiente y coméntelos utilizando un punto y coma:
; NOTE: If these are set, ini_set(''error_log'', ''path'') will have no effect
; inside your php code, and this will be forced to be the value always.
; php_admin_value[error_log] = /var/log/php-fpm/www-error.log
; php_admin_flag[log_errors] = on
Luego reinicie php-fpm:
systemctl restart php-fpm
Verifique que los archivos .htaccess de Apache no están configurando el valor error_log
usando
php_admin_value
configuración de php_admin_value
en los archivos de configuración de apache no se puede anular, así que asegúrese de no tener ningún php_admin_value para la configuración error_log
en los archivos de configuración de Apache. También revisa la configuración de php_value
por php_value
acaso.
Sitio web de PHP - Cómo cambiar los ajustes de configuración
Esto se ha pedido 1000 veces y he examinado las diferentes publicaciones antes de publicar esto, pero no he encontrado una respuesta. Mientras he estado preparando PHP, esta siempre ha sido una pesadilla para trabajar. ¿Puede alguien decirme qué estoy haciendo mal aquí?
Tengo error_log configurado en el archivo ini junto con error_reporting = E_ALL | E_STRICT
¿Qué más me estoy perdiendo? Esto usualmente me lo dio. Quiero este conjunto en el archivo ini y no en mis scripts.
Otra cosa interesante que está sucediendo es que cuando intento intencionalmente lanzar un error en uno de mis scripts, Apache se reinicia una y otra vez.
Este es mi registro de eventos después de un error. Saquear en la marca de tiempo
Wed Nov 04 19:34:23 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:23 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:23 2009] [notice] Parent: Created child process 1700
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Child process is running
[Wed Nov 04 19:34:23 2009] [notice] Child 3008: Released the start mutex
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Acquired the start mutex.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting 64 worker threads.
[Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting thread to listen on port 80.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: All worker threads have exited.
[Wed Nov 04 19:34:24 2009] [notice] Child 3008: Child process is exiting
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:53 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:53 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:53 2009] [notice] Parent: Created child process 3656
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Child process is running
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Acquired the start mutex.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting 64 worker threads.
[Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting thread to listen on port 80.
[Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 3980
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting thread to listen on port 80.
[Wed Nov 04 19:34:54 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 1600
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Child process is running
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Acquired the start mutex.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting 64 worker threads.
[Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 1068
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Child process is running
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Acquired the start mutex.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting 64 worker threads.
[Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting thread to listen on port 80.
[Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08
[Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 3220
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Child process is running
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Acquired the start mutex.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting 64 worker threads.
[Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting thread to listen on port 80.
Aquí está mi guía de solución de problemas para las llamadas error_log()
no funcionan.
Mire la configuración de su servidor para averiguar dónde está el archivo de registro de errores predeterminado.
Esto depende del servidor que estés usando. Para comenzar, eche un vistazo a la opción
ErrorLog
de Apache si está usando la opciónerror_log
Apache o Nginx si está usando Nginx. Asegúrese de que está establecido en un archivo. Si está utilizando una herramienta como Valet, tenga en cuenta que está utilizando software de servidor como Nginx detrás de escena.Compruebe los permisos del archivo de registro de errores de su servidor .
En sistemas similares a Unix, debe poder escribirse por el usuario y grupo correctos, y los permisos del directorio principal y todos sus ancestros también deben ser correctos. Usa
chmod
ychown
.Compruebe la configuración de PHP en los archivos
.ini
.Específicamente, compruebe
log_errors = On
yerror_reporting = E_ALL | E_STRICT
error_reporting = E_ALL | E_STRICT
yerror_log = /tmp/example/php_errors.log
(consulte la documentación para los ajustes de configuración delog_errors
,error_reporting
yerror_log
). Para encontrar el archivo.ini
, mire la salida dephpinfo();
. Sierror_log
no está configurado, por defecto va al registro de errores del servidor, mencionado en los pasos anteriores. Sierror_log
se establece en un archivo, ya debería existir y ser escribible, como en los pasos anteriores. Recuerde reiniciar el servidor después de los cambios de configuración.Verifique que las configuraciones de PHP no estén siendo cambiadas por la configuración del servidor .
La configuración de su servidor (incluso
.htaccess
) puede cambiar los ajustes de configuración de PHP. En Apache, esto se hace usandophp_admin_value
yphp_admin_flag
( docs ). Por ejemplo, puede encontrar en su archivo.htaccess
esta línea:php_admin_flag[log_errors] = off
. Recuerde reiniciar el servidor después de los cambios de configuración.En este punto, debería poder crear un archivo de prueba
test.php
con el contenido<?php error_log("test");
, reinicie su servidor y abra la URL en su navegador, y debería poder ver latest
en su registro de errores (ya sea el servidor o el especificado porerror_log =
). Pero sigue leyendo.Verifique que las configuraciones de PHP no se estén cambiando en tiempo de ejecución .
La opción
log_errors
se puede cambiar en tiempo de ejecución ejecutandoini_set(''log_errors'', 1);
, y también las otras opciones de configuraciónerror_reporting
yerror_log
. También tenga en cuenta que hay una función PHP especial deerror_reporting()
que cambia la configuración en tiempo de ejecución. Busque en su base de código cualquier invocación deini_set
oerror_reporting
. WordPress, por ejemplo, ejecuta estos dependiendo del valor deWP_DEBUG
.
Otras cosas a tener en cuenta: Es posible que tenga problemas con los permisos en SELinux (consulte esta respuesta ).
Asegúrate y también establece
display_errors = On
Y prueba
error_reporting(E_ALL);
En su código. Muchas veces incluyo un script de configuración de error de tiempo de ejecución que activa los errores cuando estoy desarrollando, y los desactiva cuando no lo estoy. Se ve algo más o menos así:
if ($debugmode == ''on'') {
error_reporting(E_ALL);
ini_set("display_errors", 1);
}else {
error_reporting(0);
ini_set("display_errors", 0);
}
Espero que esto ayude.
** No leí eso correctamente, quieres registrar errores en lugar de mostrar, en ese caso, la respuesta de Chaos es lo que estás buscando.
Como dijo bradym, verifique si tiene permisos de escritura en el directorio donde se encuentra el registro de errores de PHP para el usuario de apache. Si creó un archivo de registro con permisos escritos, no es suficiente, el directorio también debería tenerlos.
El error_log = "C: / php / Log / error.log" tampoco me funcionaba. La solución para mí fue que usted no debería crear el error.log usted mismo, porque PHP lo hará por usted. Ver el tablero de mensajes de PHP. Estoy usando PHP 5.2 en un servidor Windows 2008
El problema que encontré fue que el registro de errores que había designado estaba protegido contra escritura. Todas las configuraciones de .htaccess eran correctas, PHP simplemente no podía escribir en el registro de errores porque no tenía permisos. Esto lo arregló para mí:
chmod 777 watermellon-app-errors.log
Obviamente, querrá cambiar el .log a cualquier archivo que esté usando para un registro.
En caso de que alguien más esté teniendo problemas para lograr que su entorno de desarrollo local registre errores, esto es lo que lo solucionó para mí:
En Windows, error_log
debe establecer en la ruta completa al registro para que error_log()
funcione ( error_log = c:/apache/php_errors.log
). Sin embargo, si error_log = php_errors.log
sin ruta, php aún podrá registrar errores de inicio, como
PHP Startup: Unable to load dynamic library ''ext/php_mysqli.dll'' - The specified module could not be found
En mi caso, en un servidor de desarrollo CentOS, después de una yum update
completa de yum update
el permiso en / var / log / http se cambió a 700 y el usuario a ''root'', por lo que el usuario ''apache'' no pudo ingresar ni escribir en ello. Todavía podía escribir en el archivo existente /var/log/httpd/error.log pero no fue capaz de crear un nuevo archivo, ya que uso archivos de registro con sufijo de fecha. Emitiendo el comando
chown apache /var/log/httpd
resuelve el problema.
Esto hizo el truco para mí.
setsebool -P httpd_unified 1
Tenga en cuenta que este sería el método preferido a continuación para probar primero:
semanage fcontext -a -t httpd_sys_rw_content_t ''errorLogNameHere.error.log
restorecon -v ''errorLogNameHere.error.log''
Esta respuesta se derivó de los registros de la ejecución de esta línea de comando:
journalctl -xe
Más información sobre el sistema que estaba ejecutando en: PHP 7.0 y CentOS 7
No estoy seguro de si no es obvio, pero el problema era la configuración de Apache para escribir archivos. Intenté chmod 777, chmod a + w en el directorio de registro, pero esto no funcionó para mí.
Espero que esto pueda ayudar a alguien.
La forma en que funciona en mi ubuntu (Apache 2.4.7, PHP 5.5.9) es la siguiente:
script de línea de comando:
- escribe el registro en la ruta señalada por
error_log
silog_errors = On
. Configuraciones en/etc/php5/cli/php.ini
;
Solicitud web vía apache:
- Si
log_errors = On
(/etc/php5/apache2/php.ini
), el error se agrega a la ruta señalada por la directiva de apacheErrorLog
en el host virtual. Si esa directiva no existe, se usa la ruta php.inierror_log
; - si
log_errors = Off
no se escriben registros en ninguna parte;
Por lo que recuerdo, casi funcionó de esta manera en la mayoría de las pilas de Linux
No entiendo por qué , pero el registro de errores ahora está funcionando. Aquí esta lo que hice. Renuncié y comenté la directiva error_log y cerré el archivo ini. Ejecuté la secuencia de comandos con el error de análisis para ver si Apache aún se bloqueaba y obtuve el error de PHP en el archivo de registro. Esto es raro porque el archivo ini ya no tiene habilitado error_log y mi script no usa ini_set ().
¿Alguien tiene una explicación para esta locura? Además, Apache ya no se bloquea.
Si está utilizando Fedora, SELinux (habilitado de manera predeterminada) evitará que apache / httpd agregue errores a su archivo de registro, incluso cuando su archivo esté especificado en php.ini y su directorio contenga todos los permisos permitidos.
Puede ver si esto sucede mirando el archivo de registro del sistema en / var / log / messages
La solución ideal es configurar SELinux para permitir el acceso al archivo de registro.
La solución más rápida es deshabilitar SELinux en / etc / selinux / config configurando SELINUX en deshabilitado.
Deberá reiniciar su sistema después de hacer esto para que el cambio surta efecto.
Si se establece la directiva error_log, el archivo se usará para registrar errores de php, cuando no se establezca, los errores se registrarán en el registro de Apache. Eche un vistazo a http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-log .
El archivo error_log y el directorio en el que se encuentra deben poder ser escritos por el usuario con el que se ejecuta Apache. Si el archivo no se está creando, probablemente se deba a un problema de permisos.
No estoy seguro de por qué Apache se estrellaría contigo, pero supongo que es un problema de permisos de algún tipo.
También debe configurar log_errors = On
en php.ini.