【问题标题】:Force Smarty to show PHP errors强制 Smarty 显示 PHP 错误
【发布时间】:2012-11-16 09:10:48
【问题描述】:

我使用 PHP 已经有一段时间了,但对 Smarty 来说还是个新手。

我正在与 Prestashop 合作,我注意到 Smarty 似乎吞噬了所有 PHP 错误 - 当 PHP 代码中出现错误时,.tpl 文件只会输出一个空白页。我一直在尝试,但即使有错误,我也无法让 Smarty 显示 PHP 代码输出的任何内容。

PHP 错误报告设置为显示错误。

因此,例如,假设这是 example.php 文件:

<?php
//included classes etc go here, irrelevant for this issue

error_reporting(E_ALL ^ E_NOTICE);

echo obvious wrong syntax"
?>

此文件连接到 example.tpl,它适合模板块中的输出。

显然,它应该抛出一个错误。如何让 Smarty 实际显示该错误?

【问题讨论】:

    标签: php smarty prestashop


    【解决方案1】:

    要激活调试模式,请转至config/config.inc.php

    找到以下行并将第一行的 off 更改为 on 并将第二行设置为 true

    /* Debug only */
    @ini_set('display_errors', 'on');
    define('_PS_DEBUG_SQL_', true);
    

    这将显示 PHP 和 SQL 错误(这可能足以让您解决“空白页”)。

    还有一个blog post on prestashop site about p() and d() methods and how to track exceptions

    要在 Prestashop 1.5 之前的版本中激活模板调试,请转到 config/smarty.config.inc.php

    找到以下行并将其设置为true

    $smarty->debugging = true;
    

    当你刷新页面时,themes/debug.tpl 应该会被渲染。

    要在 Prestashop 1.5+ 中激活模板调试,您可以通过管理面板启用 Smarty 调试

    首选项 > 性能 > Smarty

    并设置Always open console,但控制台将为所有人打开(不适合现场直播:)

    或设置 Open console with URL parameter (SMARTY_DEBUG) 并将 ?SMARTY_DEBUG 添加到 URL 的末尾以查看控制台

    希望这会有所帮助。

    【讨论】:

    • 这个 cofing/config.inc.php 文件在哪里。我正在使用 XAMPP。在 XAMPP 中只有 1 个 cofing.inc.php 文件位于 phpmyadmin 文件夹中,与此无关???
    • 我的回答是关于 Prestashop 1.5,只需查看下面@Rocker Maruf 对 Prestashop 1.6+ 的回答
    【解决方案2】:

    我已经看过@Sergei Guk 的回答,而且偏题了,这是一个很好的回答。但是,prestashop 已经发布了 1.6 版。

    所以如果你想显示 prestashop v 1.6.0.6 中的所有错误,你只需要去 config/defines.inc.php

    define('_PS_MODE_DEV_', false); 替换为define('_PS_MODE_DEV_', true);

    它实际上做的是设置一个常量,并在下一行检查“_PS_MODE_DEV_”是否为真,然后它将在 prestashop 中显示各种错误

    if (_PS_MODE_DEV_)
    {
      @ini_set('display_errors', 'on');
      @error_reporting(E_ALL | E_STRICT);
      define('_PS_DEBUG_SQL_', true);
    }
    else
    {
      @ini_set('display_errors', 'off');
      define('_PS_DEBUG_SQL_', false);
    }
    

    我已经测试过了,它工作正常。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 对不起,我应该在哪里设置呢?在文件本身中执行$error_reporting = 1; 似乎没有任何作用。添加$smarty-&gt;error_reporting = E_ALL &amp; ~E_NOTICE; 也无济于事。
      猜你喜欢
      • 2013-12-06
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2020-03-10
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多