【问题标题】:display_errors for php5-fpm not working with nginxphp5-fpm 的 display_errors 不适用于 nginx
【发布时间】:2012-12-05 10:38:29
【问题描述】:

我正在使用 php5-fpm 运行 nginx,并希望启用 display_errors。 我正在运行一个虚拟主机,所以请帮助找到启用display_errorsdisplay_startup_errors 的方法。

我尝试修改/etc/php5/fpm/php.ini

;display_errors
Default Value: On
Development Value: On
;Production Value: Off 
;display_startup_errors
Default Value: On
Development Value: On
;Production Value: Off
;error_reporting
Default Value: E_ALL
Development Value: E_ALL
;Production Value: E_ALL & ~E_DEPRECATED
;html_errors
Default Value: On
Development Value: On
;Production value: Off
;log_errors
Default Value: On
Development Value: On
;Production Value: On

每个不同的虚拟主机是否需要多个ini文件,vhost对php配置有什么影响吗?

我也在尝试 set_ini() ,但它没有显示任何效果。修改php.ini文件后重启了nginx和php5-fpm。

【问题讨论】:

  • 检查 phpinfo() 输出的 php.ini - 请记住 php ini 值可以在“附加 ini (dir) 文件”、php-fpm.conf 文件、.user 中覆盖.ini 文件,当然还有内部执行的 php 脚本文件

标签: nginx php


【解决方案1】:

PHP-FPM 7 的更新(在 Debian 下)

  1. 转到/etc/php/[VERSION]/fpm/pool.d
  2. 编辑文件www.conf(或者如果您设置了其他池,请编辑它们)。
  3. 你想要php_flag[display_errors] = on
  4. 使用sudo service php[VERSION]-fpm restart 重新启动

【讨论】:

    【解决方案2】:

    在我的例子中 Zend 错误和 NGinX - php5 fpm,像这样工作:

    只有我输入public/index.php

    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', 1);
    

    没有If(){...}

    但是如果只放上面的代码,显示错误,会报这个:

    Parse error: syntax error, unexpected '}', expecting ',' or ';' in /usr/local/nginx/html/ZendSkeletonApplication/module/Album/src/Album/Controller/AlbumController.php on line 12
    

    另一件事!设置此代码:

    'display_not_found_reason' => true,
    'display_exceptions'       => true,
    

    在 module.config.php 中像这样:

    'view_manager' => array(
         'template_path_stack' => array(
             'album' => __DIR__ . '/../view',
             'display_not_found_reason' => true,
             'display_exceptions'       => true,
         ),
     ),
    

    我在屏幕上看到 error.log 的所有错误:

    Fatal error: Uncaught exception 'Zend\View\Exception\InvalidArgumentException' with message 'Invalid path provided; must be a string, received boolean' in /usr/local/nginx/html/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/View/Resolver/TemplatePathStack.php:201 Stack trace: #0 /usr/local/nginx/html/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/View/Resolver/TemplatePathStack.php(149): Zend\View\Resolver\TemplatePathStack->addPath(true) #1 /usr/local/nginx/html/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/Mvc/Service/ViewTemplatePathStackFactory.php(38): Zend\View\Resolver\TemplatePathStack->addPaths(Array) #2 [internal function]: Zend\Mvc\Service\ViewTemplatePathStackFactory->createService(Object(Zend\ServiceManager\ServiceManager), 'viewtemplatepat...', 'ViewTemplatePat...') #3 /usr/local/nginx/html/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(939): call_user_func(Array, Object(Zend in /usr/local/nginx/html/ZendSkeletonApplication/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 946
    

    我没有在系统(Ubuntu 14.04)中将配置文件触摸为 php-fpm。

    【讨论】:

      【解决方案3】:

      如果您有 /etc/php5/fpm/php.ini(用于 Debian,Ubuntu 风格的配置),那么对该文件的更改应该会生效,并且可以通过更改特定的 /etc/php5/fpm/pool.d/*.conf 文件来进一步覆盖每个池的配置。

      【讨论】:

        【解决方案4】:

        php.ini 对 php-fpm 没有任何作用。

        如果您使用的是 php-fpm: 您必须在与您的 Web 应用程序关联的 fpm 池配置中提供配置更改。这些位置取决于您的系统。可能的位置是:

        • /etc/php-fpm.d/mydomain.conf(如果一切都安排妥当)
        • /etc/php-fpm.conf(如果你只使用一个 conf 用于 php-fpm)

        你的配置路径与我的不同,所以四处看看你有什么。如果/etc/php-fpm.d/ 中存在合适的配置,请勿在/etc/php-fpm.conf 中进行更改。

        如果您不使用 php-fpm: 使用正确的配置更新 php.ini。

        更正您的配置:在问题中显示的配置中,您有未注释的文档,而不是提供正确的设置。您最好撤消这些更改,因为 PHP 不会理解它们。

        php-fpm 的正确行是:

            ; enable display of errors
            php_flag[display_errors] = on
            php_flag[display_startup_errors] = on
        

        正常php的正确行是:

            ; enable display of errors
            display_errors = On
            display_startup_errors = On
        

        建议:不要在生产环境中使用这些选项。最良好的祝愿。

        【讨论】:

        • 注意,将这些添加到; FPM Configuration ;而不是; Global Options ;
        • 为什么?我在; FPM Configuration ; 下添加了php_flag[html_errors]=off,但我发现它不起作用:php-fpm -i |grep html_errors html_errors => On => On
        • 由于某种原因,我不得不使用 php_admin_flag 而不是 php_flag,希望这对与我同船的人有所帮助
        • 这是特定于 nginx 或 PHP 5 的吗?或者也许发行版特定?我在 Rocky Linux(CentOS 衍生产品)上运行 apache2 + php-fpm,在我的例子中是 PHP 7,它会在 php.ini 中加载设置。唯一的区别是重新启动 httpd 不会强制重新加载 php.ini,为此您需要重新启动 php-fpm。它会忽略这个文件对我来说似乎很奇怪,至少我的系统设置方式 php-fpm 配置文件是最小的,它仍然使用 php.ini 进行大多数设置。
        • @cazort 我相信 php-fpm 会加载 /etc/php/7.4/fpm/php.ini,或者根据您的发行版加载类似内容。不幸的是,我不是最新的,所以 YMMV。
        猜你喜欢
        • 2014-09-27
        • 2016-06-28
        • 1970-01-01
        • 2016-06-11
        • 2011-05-02
        • 2016-02-24
        • 1970-01-01
        • 2014-02-28
        • 2016-12-26
        相关资源
        最近更新 更多