tutorial programacion lenguaje descargar caracteristicas php

programacion - PHP-FPM no escribe en el registro de errores



php tutorial (9)

Acabo de instalar un servidor nginx + php-fpm. Todo parece correcto, excepto que PHP-FPM nunca escribe un error en su registro.

fpm.conf

[default] listen = /var/run/php-fpm/default.sock listen.allowed_clients = 127.0.0.1 listen.owner = webusr listen.group = webusr listen.mode = 0666 user = webusr group = webusr pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.status_path = /php/fpm/status ping.path = /php/fpm/ping request_terminate_timeout = 30s request_slowlog_timeout = 10s slowlog = /var/log/php-fpm/default/slow.log chroot = /var/www/sites/webusr catch_workers_output = yes env[HOSTNAME] = mapsvr.mapking.com php_flag[display_errors] = on php_admin_value[error_log] = /var/log/php-fpm/default/error.log php_admin_flag[log_errors] = on

nginx.conf

server { listen 80 default_server; server_name _; charset utf-8; access_log /var/log/nginx/access.log rest; include conf.d/drops.conf.inc; location / { root /var/www/sites/webusr/htdocs; index index.html index.htm index.php; } # pass the PHP scripts to FastCGI server listening on socket # location ~ /.php$ { root /var/www/sites/webusr/htdocs; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /htdocs/$fastcgi_script_name; if (-f $request_filename) { fastcgi_pass unix:/var/run/php-fpm/default.sock; } } location = /php/fpm/status { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } location = /php/fpm/ping { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/default.sock; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

Hice una secuencia de comandos de PHP errónea y la ejecuté, y veo el resultado del error en el navegador web. También el registro de errores de nginx establece la salida de stderr de fpm con el mismo mensaje. Compruebo que el usuario tiene permiso de escritura (incluso he intentado 777) para la carpeta de registro designada. Incluso el archivo error.log designado ha sido creado con éxito por php-fpm. Sin embargo, el archivo de registro siempre está vacío, sin importar qué escandaloso error se haya cometido desde el script php.

¿Que esta pasando?

[Encontré el motivo bastante tiempo después]

Fue un permiso. Cambió el propietario a los usuarios de los sitios resuelto el problema.


Consulte el directorio Propietario de "PHP-FPM"

Tu puedes hacer:

ls -lah /var/log/php-fpm/ chown -R webusr:webusr /var/log/php-fpm/ chmod -R 777 /var/log/php-fpm/


Esto funcionó para mí:

; Redirect worker stdout and stderr into main error log. If not set, stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no catch_workers_output = yes

Editar:

El archivo para editar es el archivo que configura su grupo deseado. Por defecto es: /etc/php-fpm.d/www.conf


Hay un error https://bugs.php.net/bug.php?id=61045 en php-fpm desde v5.3.9 y hasta ahora (5.3.14 y 5.4.4). El arreglo prometido por el desarrollador se lanzará en la próxima versión. Si no desea esperar, use el parche en esa página y vuelva a compilar o revertir a 5.3.8.


Hay varios archivos de configuración php, pero ESTE es el que necesita editar:

/etc/php(version)?/fpm/pool.d/www.conf

Descomenta la línea que dice:

catch_workers_output

Eso permitirá que PHP stderr vaya al registro de errores de php-fpm en lugar de / dev / null.



Recopilé ideas de un montón de respuestas aquí y presento una solución integral:

Entonces, si configura nginx con php5-fpm y registra un mensaje usando error_log() , puede verlo en /var/log/nginx/error.log de manera predeterminada.

Puede surgir un problema si desea registrar una gran cantidad de datos (por ejemplo, una matriz) utilizando error_log(print_r($myArr, true)); . Si una matriz es lo suficientemente grande, parece que nginx truncará su entrada de registro.

Para evitar esto, puede configurar fpm ( php.net fpm config ) para administrar los registros. Aquí están los pasos para hacerlo.

  1. Abre /etc/php5/fpm/pool.d/www.conf :

    $ sudo nano /etc/php5/fpm/pool.d/www.conf

  2. Descomente las dos líneas siguientes quitando ; al comienzo de la línea: (error_log se define aquí: php.net )

    ;php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on

  3. Crear /var/log/fpm-php.www.log :

    $ sudo touch /var/log/fpm-php.www.log;

  4. Cambia la propiedad de /var/log/fpm-php.www.log para que php5-fpm pueda editarlo:

    $ sudo chown vagrant /var/log/fpm-php.www.log

    Nota: vagrant es el usuario al que debo otorgarle la propiedad. Puede ver qué usuario debería ser para usted ejecutando $ ps aux | grep php.*www $ ps aux | grep php.*www y mirando la primera columna.

  5. Reiniciar php5-fpm:

    $ sudo service php5-fpm restart

Ahora sus registros estarán en /var/log/fpm-php.www.log .


Tuve un problema similar y tuve que hacer lo siguiente al archivo pool.d/www.conf

php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on

Todavía no estaba escribiendo el archivo de registro, así que de hecho tuve que crearlo touch /var/log/fpm-php.www.log luego estableciendo el propietario correcto. sudo chown www-data.www-data /var/log/fpm-php.www.log .

Una vez hecho esto, y se reinició php5-fpm, se reanudó el registro.


en mi caso, muestro que el registro de errores iba a /var/log/php-fpm/www-error.log . así que comenté esta línea en /etc/php-fpm.d/www.conf

php_flag[display_errors] is commented php_flag[display_errors] = on log will be at /var/log/php-fpm/www-error.log

y como dije anteriormente también comenté esta línea

catch_workers_output = yes

Ahora puedo ver los registros en el archivo especificado por nginx.


en su archivo fpm.conf no ha configurado 2 variables que solo son para el registro de errores

estas variables son error_log (ruta del archivo de su archivo de registro de errores) log_level (nivel de registro de errores)

; Archivo de registro de errores; Nota: el prefijo predeterminado es / usr / local / php / var; Valor predeterminado: log / php-fpm.log

error_log = log/php-fpm.log

; Nivel de registro ; Valores posibles: alerta, error, advertencia, aviso, depuración; Valor predeterminado: aviso

log_level = notice