2009-11-05 34 views
19

Esto se ha preguntado 1000 veces y he navegado por las diferentes publicaciones antes de publicar esto, pero no he encontrado una respuesta. Siempre que he estado programando con PHP, esto siempre ha sido una pesadilla para poder trabajar. ¿Puede alguien decirme qué estoy haciendo mal aquí?php error_log no funciona

Tengo error_log configurado en el archivo ini junto con error_reporting = E_ALL | E_STRICT

¿Qué más me echo de menos? Esto usualmente me lo dio a mí. Quiero este conjunto en el archivo ini y no en mis scripts.

Otra cosa interesante que está sucediendo es que cuando intencionalmente trato de arrojar 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. Botín 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. 

Respuesta

9

También es necesario establecer log_errors = On.

+3

Hola, Chaos, gracias. Ya tengo ese conjunto en Encendido. ¿Me estoy perdiendo algo más? – Jim

+0

Simplemente reinicie el servidor. – Aviator

-1

Asegúrese y también establecer

display_errors = On 

Y tratar

error_reporting(E_ALL); 

En su código. Muchas veces incluyo un script de configuración de error de tiempo de ejecución que enciende los errores cuando estoy desarrollando, y los desactiva cuando no lo estoy. Se ve algo así como esto:

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 lo leí correctamente, quiere registrar errores en lugar de mostrar, en ese caso la respuesta de Chaos es lo que está buscando.

+5

, por favor, elimine esta publicación. – mauris

+1

Hola Jeremy, gracias por la ayuda. :) – Jim

1

No entiendo por qué, pero el registro de errores está funcionando ahora. Aquí esta lo que hice. Me di por vencido y comencé a comentar la directiva error_log y cerré el archivo ini. Ejecuté el script con el error de análisis para ver que 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 error_log habilitado y mi script no está usando ini_set().

¿Alguien tiene una explicación para esta locura? Además, Apache ya no se bloquea.

+2

"Locura" es una buena explicación. –

4

Si se establece la directiva error_log, el archivo se utilizará para registrar los errores de php, cuando no se establece los errores se registrarán en el registro de Apache. Eche un vistazo al 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 ser de escritura por el usuario con el que Apache se está ejecutando. Si el archivo no se está creando, es probable que se deba a un problema de permisos.

No sé con certeza por qué Apache se estrellaría contigo, pero supongo que es un problema de permisos de algún tipo.

+0

Estoy corregido, gracias. He editado mi respuesta. – bradym

0

Como dijo bradym, compruebe si tiene permisos de escritura en el directorio donde está ubicado el registro de errores 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.

0

Error_log = "C: \ php \ Log \ error.log "no funcionaba para mí tampoco. La solución para mí fue que no deberías crear el error.log, porque PHP lo hará por ti. See the PHP message board. Estoy usando PHP 5.2 en un servidor de Windows 2008

7

El problema que encontré fue que el registro de errores que había designado estaba protegido contra escritura. Todas mis configuraciones de .htaccess eran correctas, PHP simplemente no podía escribir en el registro de errores porque no tenía permisos. Esto lo solucionó:

chmod 777 watermellon-app-errors.log 

Obviamente, usted va a querer cambiar el .log a cualquier archivo que está utilizando para un registro.

+4

¿Los registros realmente necesitan 777? ¿No es suficiente con 644? –

+1

Sí, estás en lo correcto. Por supuesto, 644 podría no ser suficiente si el propietario del archivo es otra persona. Podría usar 777 para probarlo, y luego bajar los permisos para ver qué funciona. –

+0

En mi caso, necesitaba 646 ...solo FYI en caso de que alguien más se encuentre con un problema como yo – FastTrack

8

En caso anyo ne más está teniendo problemas para conseguir su entorno de desarrollo local para registrar los errores, esto es lo fija para mí:

En las ventanas, error_log se debe establecer en la ruta completa en el registro de error_log() a trabajar (error_log = c:\apache\php_errors.log). Sin embargo, si error_log = php_errors.log con ninguna ruta, php todavía será capaz de registrar los errores de inicio como

PHP Startup: Unable to load dynamic library 'ext\php_mysqli.dll' - The specified module could not be found 
+0

Especifiqué la ruta completa y no creé el archivo por adelantado. Cuando reinicio WAMP, se crea el archivo de registro, pero WAMP muestra un icono amarillo y localhost no se carga. ¿Alguna idea de lo que podría ser? Cuando comento 'error_log' todo está bien, pero los errores de PHP aparecen en el registro de Apache. – thomthom

0

La forma en que funciona en mi ubuntu (Apache 2.4.7, PHP 5.5.9) es la siguiente:

comando de script de línea:

  • escribe el registro en el camino señalado por error_log si log_errors = On. Configuraciones en /etc/php5/cli/php.ini;

solicitud web a través de Apache:

  • si log_errors = On (/etc/php5/apache2/php.ini), el error se adjunta en el camino señalado por ErrorLog directiva de Apache en el host virtual. Si esa directiva no existe, se utiliza la ruta php.ini error_log;
  • if log_errors = Off los registros no se escriben en ningún lado;

Por lo que yo recuerdo, casi funcionó de esta manera en la mayor parte del Linux pilas

1

Si está usando Fedora, SELinux (habilitado por defecto) evitará apache/httpd de anexar los errores de su registro archivo incluso cuando su archivo está especificado en php.ini y su directorio contiene todos los permisos permitidos.

Puede ver si esto está sucediendo al mirar en su archivo de registro del sistema en /var/log/messages

enter image description here

La solución ideal es configurar SELinux para permitir el acceso en el archivo de registro .

La solución más rápida es deshabilitar SELinux en /etc/selinux/config estableciendo SELINUX en deshabilitado.

Tendrá que reiniciar su sistema después de hacer esto para que el cambio surta efecto.

+1

El consejo que dio en realidad tiene un sitio web para dejar de dar consejos. http://stopdisablingselinux.com –

+1

Lo sé, de ahí mi escritura "ideal". Todavía no estoy convencido de que un usuario doméstico que trabaja localmente necesite SELinux activado. – Anthony

0

Comprobar PHP-FPM no está estableciendo explícitamente error_log:

Asegúrese de que el archivo no contiene /etc/php-fpm.d/www.confphp_admin_value ajustes para error_log. Buscar los siguientes y comentar a cabo 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 

continuación, reinicie php-FPM:

systemctl restart php-fpm 

comprobar los archivos .htaccess de Apache no se están fijando el valor error_log usando

php_admin_value las configuraciones en los archivos de configuración de apache no pueden anularse, 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 verifique la configuración de php_value por si acaso.

PHP Website - How to change configuration settings

0

En mi caso, en un servidor de desarrollo de CentOS, después de una completa yum update el permiso en /var/log/http se cambió a 700 y que el usuario 'root', por lo que el usuario ' Apache 'no pudo ingresar ni escribir en él. Todavía fue posible escribir en el archivo existente /var/log/httpd/error.log pero no fue posible crear un archivo nuevo, ya que utilizo archivos de registro con sufijos de fecha. emisión del mandato

chown apache /var/log/httpd 

resuelto el problema.

0

Esto me sirvió de algo.

setsebool -P httpd_unified 1 

Tenga en cuenta, este sería el método preferido de abajo para intentar 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 comandos:

journalctl -xe 

Información en el sistema en el que me estaba ejecutando: PHP 7.0 y CentOS 7

No estoy seguro si no es obvio, pero el problema era la configuración de Apache para escribir archivos. Intenté con chmod 777, chmod a + w en el directorio de registro, pero esto no funcionó.

Espero que esto pueda ayudar a alguien.