¿Dónde almacena PHP el registro de errores? (php5, apache, fastcgi, cpanel)

392

Estoy en alojamiento compartido y tengo Cpanel, Apache, PHP ejecutado por fastcgi. ¿Dónde almacena PHP el registro de errores?

¿Hay alguna otra manera de encontrar el registro de errores en el entorno de alojamiento compartido en lugar de tener que revisar toda la estructura del sitio para buscar archivos error_log?

Tengo acceso a php.ini(estoy usando PHP versión 5.2.16).

PHPLOVER
fuente
25
En Linux, ya sea /var/log/httpd/error_logo /var/log/apache2/error.log. Estos archivos son propiedad de root, por lo que debe ser root o usar sudopara verlos o leerlos.
Eric Leschinski
112
php --info | grep error
sjas
8
Para aquellos que buscan una solución de Windows, use php --info | findstr /r /c:"error_log"para ver dónde está el archivo de registro.
Auge
1
Es bastante extraño para mí ... He alojado el sitio web y los registros de PHP se almacenan en el mismo archivo que los registros de Apache ... En mi panel de administración, en los registros, hay una opción para mostrar el registro completo de errores de Apache, cuando hago clic en él, existen errores sobre usuarios que ingresan a lugares donde no deberían, por ejemplo. Pero, también, en el mismo archivo hay errores que muestra PHP.
RedClover
@soaku si usa fastcgi apache en sí mismo no ejecuta PHP. cuando usa mod_php que es un módulo de apache, apache maneja php. Eso significa que los errores pueden y probablemente estarán en los registros de Apache cuando se usa mod_php, pero ese no será el caso cuando se use cgi o fastcgi
Gall Annonim

Respuestas:

314

PHP almacena registros de error /var/log/apache2si PHP es un módulo apache2. Los hosts compartidos a menudo almacenan archivos de registro en la /logsubcarpeta del directorio raíz . Pero ... si tiene acceso a un php.iniarchivo, puede hacer esto:

error_log = /var/log/php-scripts.log

Según el comentario de rinogo : si está utilizando cPanel, el archivo de registro maestro que probablemente esté buscando se almacena (de forma predeterminada) en

/usr/local/apache/logs/error_log

Si todo lo demás falla, puede verificar la ubicación del archivo de registro utilizando

<?php phpinfo(); ?>
Adam Arold
fuente
20
"Php almacena registros de error en / var / log / apache2 si php es un apache2", no en RHEL, etc., donde el nombre del paquete es 'httpd'. Uno realmente no puede suponer que el nombre de un paquete es consistente en todas las distribuciones.
chelmertz
28
Para su información a Googlers: si está utilizando cPanel, el archivo de registro maestro que probablemente esté buscando se almacena (de forma predeterminada) en/usr/local/apache/logs/error_log
rinogo el
55
pero revise la sección 'error_log' de <?php phpinfo(); ?>para confirmar la ruta
duda1ejack
¿Qué pasa si no es un módulo apache2? por ejemplo, puede ser un paquete fpm de debian ejecutándose en nginx.
n611x007
2
¿Dónde en la sección phpinfo lo mostrará? en error_log todo lo que veo para la clave / valor es 'error_log' y no hay una ruta real
Robert Sinclair
86

Pruebe phpinfo()y verifique "error_log"

chelmertz
fuente
13
Simplemente dice error_log sin ruta especificada. Supongo que tal vez porque está en un entorno de alojamiento compartido y si tuviéramos acceso a él, veríamos todos los errores del sitio.
PHPLOVER
8
@PHPLOVER ¿dice lo mismo si lo intentas echo ini_get('error_log');?
chelmertz
No lo intenté, pero decía lo mismo en el archivo php.ini, así que lo que hice fue cambiar la ruta en el archivo php.ini y verifiqué si estaba funcionando y si funciona. ¿Sigue registrando todos los errores aunque cambié la ruta a los errores de registro (fuera de la raíz del documento)? gracias phplover
PHPLOVER
2
@PHPLOVER: puede controlar fácilmente el nivel de informes con la configuración error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz
3
El mío también dice error_log, no tengo idea de dónde buscarlo. Esto golpea nr uno en google pero no responde.
HMR
54

Linux

php --info | grep error 

El terminal generará la ubicación del registro de errores.

Ventanas

php --info | findstr /r /c:"error_log"

El símbolo del sistema generará la ubicación del registro de errores

Para establecer la ubicación del registro

Abra su php.iniy agregue la siguiente línea:

error_log = /log/myCustomLog.log

Gracias @chelmertez , @Boom por estos (comentarios sobre la pregunta).

Cullub
fuente
55
Estoy en Linux. esto no menciona una ubicación de registro para mí.
Sirex
1
@Sirex ¿genera php -infoalgo? php
Debe
1
Además, es posible que php no esté registrando nada actualmente. Si ese es el caso, puede abrir su php.ini, y conjunto error_reportinga E_ALL & ~E_DEPRECATED & ~E_STRICT, o lo que los errores que usted quiere ver, a continuación, establecer error_logla ruta de acceso al directorio en el que desea que sus errores de sesión de usuario. (Nota: esta no es una ruta completa a un archivo, solo a un directorio).
Cullub
1
Solo encontré registros antiguos en / var / log / httpd / donde la mayoría de las personas recomiendan buscar, pero la ejecución php --info | grep logme apuntó hacia / var / www / logs donde se encontraban los registros más recientes.
ChrisBob
1
Una vez que establezca la ubicación del registro, no olvide reiniciar Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE
31

En un entorno LAMP, los errores de php se dirigen por defecto a este archivo a continuación.

/var/log/httpd/error_log

Todos los registros de acceso se encuentran en:

/var/log/httpd/access_log
Allie
fuente
Entonces, ¿comente la especificación del archivo de registro de errores de php y simplemente escribirá aquí?
Usuario
17

Cómo encontrar su registro de errores de PHP en Linux:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

Otra forma equivalente:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log
Eric Leschinski
fuente
12

Parece que, por defecto, php no registra errores en ninguna parte, elerror_log clave en php.ini se comenta en todas las instalaciones que he visto.

Generalmente yo:

  1. Busque archivos php.ini. locate php.ini.
  2. Busque en estos archivos el error_reportingvalor;

    Que debe establecerse en cualquier combinación de niveles de registro de php que sea suficiente para usted. ,

    P.ej: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. Verifique el error_logvalor para asegurarse de que apunta a un lugar real y no está comentado.

    El valor predeterminado no proporciona una ruta completa, solo un nombre de archivo, no sé dónde se resuelve esta ruta normalmente. Probablemente /var/log/.

ThorSummoner
fuente
11

Debe usar la ruta absoluta al configurar la variable error_log en su archivo php.ini, de lo contrario, los registros de errores se almacenarán de acuerdo con su ruta relativa.

error_log = /var/log/php.errors

Otra solución sería escribir un script simple que enumere todos los archivos de registro de errores del árbol de directorios.

mailo
fuente
10

También puede ser /var/log/apache2/error.logsi estás en Google Compute Engine.

Y puedes ver la cola así:

tail -f /var/log/apache2/error.log
Vivek
fuente
5

Si ha compilado Apache y PHP desde la fuente, entonces los registros de error se generan por defecto en su ${Apache install dir}/logs/error_logie, generalmente /usr/local/apache2/logs/error_log. De lo contrario, si lo ha instalado desde el repositorio, lo encontrará en /var/log/apache2/error_log. Puede configurar la ruta en su php.initambién y verificarlo invocando phpinfo().

Abhishek
fuente
5

La mejor manera es buscar en su archivo httpd.conf y ver cuál es el valor predeterminado. También podría ser anulado por su host virtual específico. Empiezo mirando /etc/httpd/conf/httpd.confo /etc/apache2/httpd.confy busco error_log. Puede aparecer como / var / log / httpd / error_log o /var/log/apache2/error_logtambién puede aparecer como simplemente logs/error_log.

En este caso, es una ruta relativa, lo que significa que estará debajo /etc/httpd/logs/error_log. Si aún no puede encontrarlo, verifique la parte inferior de su archivo httpd.conf y vea dónde están incluidos sus hosts virtuales. Puede estar en /etc/httpd/conf.d/<- como "otro" o "extra". Su host virtual podría anularlo luego con ErrorLog "/ ruta / a / error_log".

Thomas Bennett
fuente
4

Al configurar su archivo de registro de errores en php.ini, puede usar una ruta absoluta o una ruta relativa. Una ruta relativa se resolverá en función de la ubicación de la secuencia de comandos generadora, y obtendrá un archivo de registro en cada directorio en el que tenga secuencias de comandos. Si desea que todos sus mensajes de error vayan al mismo archivo, use una ruta absoluta para el archivo.

Ver más aquí: http://www.php.net/manual/en/ref.errorfunc.php#53025

anemone928
fuente
Gracias, esto resolvió mi problema. Realmente un comportamiento poco convincente para definiciones relativas, tener archivos de registro distribuidos por toda la carpeta htdocs, y no tener idea de por dónde empezar a mirar. Hubiera esperado ser relativo a la carpeta de instalación, como otras configuraciones. +1.
Eduardo
4

NGINX generalmente lo almacena en /var/log/nginx/error.log o access.log. (En Ubuntu en cualquier caso)

Neurona Oscura
fuente
4
php --info | grep error

Esto es útil. comentado por sjas en cuestión. así que lo incluí como respuesta.

J4GD33P 51NGH
fuente
2
(Parece) esto genera el valor de la configuración de la línea de comandos de PHP (por ejemplo, /etc/php/7.1/cli/php.ini) en lugar de la configuración de Apache.
BrianHenryIE
3

Si usa el registro de php5-fpm, el valor predeterminado debe estar en

/var/log/php5-fpm.log
mateusz.szymborski
fuente
2

donde lo desee, si configura su función, llame a: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');

cfphpflex
fuente
2

Busque el archivo httpd.conf ErrorLogejecutándolo cat <file location> | grep ErrorLogen la línea de comando. Por ejemplo:

$ cat /etc/apache2/httpd.conf | grep ErrorLog

Salida:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

Encuentra la línea que comienza ErrorLogy ahí está tu respuesta.

Nota: Para los hosts virtuales, puede editar el archivo de hosts virtuales httpd-vhosts.confpara especificar una ubicación de archivo de registro diferente.

jkdev
fuente
2

Los registros de errores de cPanel se encuentran en:

/ usr / local / cpanel / logs /

/ usr / local / apache / logs /

Por defecto, los registros de Apche se encuentran dentro de:

/ var / log / apache

o

/ var / log / apache2

Si alguien usa una ubicación de registro personalizada, puede verificarla ejecutando este comando:

cat / etc / apache2 / conf /httpd.conf | grep ErrorLog

Si recibe un error de que el directorio apache2 no existe, puede ejecutar este comando para encontrar la ubicación correcta:

whereis apache

o

whereis apache2

Dewlance
fuente
1
  1. puede ir a la carpeta de registros de verificación del Administrador de archivos.
  2. verifique el archivo de registro en la carpeta public_html.
  3. compruebe el archivo "php phpinfo ()" donde se almacena el registro.
Bhojani malvado
fuente
1

Está en un entorno compartido y no puede encontrar el registro de errores, siempre verifique si cPanel tiene la opción Errores en su panel de cPanel. Si no puede encontrar el registro de errores, puede encontrarlo allí.

En la barra de búsqueda de cPanel, busque Error, mostrará Páginas de error que son básicamente listas de diferentes páginas de error http y otro Error es donde se muestran los registros de error.

Otros lugares para buscar en un entorno compartido: / home / yourusername / logs / home / yourusername / public_html / error_log

Krishna Pariyar
fuente
1

algo como esto :

sudo locate error.log | xargs -IX grep -iH "errorlog" X

o

sudo locate error_log | xargs -IX grep -iH "errorlog" X

o

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X
Hombre libre
fuente