在 Ubuntu 14.04 上使用 php-fpm + nginx 时无法获取错误堆栈跟踪或错误日志

Toj*_*cko 5 php nginx 14.04 php-fpm

我在 Ubuntu 14.04 机器上使用 php-fpm 5.5.9 和 nginx 1.4.6。我已经使用 apt-get 包管理器安装了它们。我无法获取我的 index.php 脚本在错误日志中以及浏览器上遇到的错误的堆栈跟踪。我从 stackoverflow 和其他文章中搜索并实现了几个解决方案,但没有一个对我有用。这是我的 nginx conf 和 php-fpm conf 文件。如果我犯了任何愚蠢的错误,请帮助我。

Nginx 配置:

location ~ \.php$ {
        # With php5-fpm:
                #try_files $uri =404;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_read_timeout 600;
        fastcgi_send_timeout 600;
        proxy_connect_timeout  600;
        proxy_send_timeout  600s;
        proxy_read_timeout  600s;
        fastcgi_pass 127.0.0.1:7777;
        fastcgi_index index.php;
    }
Run Code Online (Sandbox Code Playgroud)

PHP-FPM 配置:

error_log = /tmp/php5-fpm.log
Run Code Online (Sandbox Code Playgroud)

PHP-FPM池配置:

catch_workers_output = yes 
slowlog = /var/log/php-fpm/$pool.log.slow
listen = 127.0.0.1:7777

php_flag[display_errors] = On 
php_admin_value[error_log] = /tmp/fpm-php.www.log 
php_admin_flag[log_errors] = On
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Ste*_*f K 2

尝试将以下内容放入服务器指令中的站点配置中:

access_log  /var/log/nginx/your_site.log;

error_log   /var/log/nginx/your_site.log;
Run Code Online (Sandbox Code Playgroud)

将 替换your_site.log为您的虚拟主机的名称 - 域名。

完整示例:

php-fpm

/etc/php5/fpm/php-fpm.conf

[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
include=/etc/php5/fpm/pool.d/*.conf
Run Code Online (Sandbox Code Playgroud)

/etc/php5/fpm/pool.d

[www]
user = www-data
group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Run Code Online (Sandbox Code Playgroud)

虚拟主机

access_log  /var/log/nginx/your_site.log;

error_log   /var/log/nginx/your_site.log;
Run Code Online (Sandbox Code Playgroud)


bis*_*oco 0

如果您想要脚本的执行错误,请在/etc/php5/fpm/php.ini.

如果您希望日志文件中出现错误,请编辑php.ini

display_errors  = off 
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_log = /path/to/some/file.log
Run Code Online (Sandbox Code Playgroud)

如果您希望它们出现在浏览器上,请编辑php.ini

display_errors  = on
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

或者,将其添加到脚本顶部:

ini_set('display_errors',1);
error_reporting( E_ALL & ~E_DEPRECATED & ~E_STRICT );
Run Code Online (Sandbox Code Playgroud)

我不知道如何直接在 logfile 上记录堆栈跟踪,但这里有一种方法可以让您实现定义自己的错误处理程序。