强制 Smarty 显示 PHP 错误

Posted

技术标签:

【中文标题】强制 Smarty 显示 PHP 错误【英文标题】:Force Smarty to show PHP errors 【发布时间】: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 实际显示该错误?

【问题讨论】:

【参考方案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 变量。

见http://www.smarty.net/docsv2/en/variable.error.reporting.tpl

【讨论】:

对不起,我应该在哪里设置呢?在文件本身中执行$error_reporting = 1; 似乎没有任何作用。添加$smarty-&gt;error_reporting = E_ALL &amp; ~E_NOTICE; 也无济于事。

以上是关于强制 Smarty 显示 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP模板引擎,Smarty定义

smarty详细使用教程(韩顺平smarty模板技术笔记)

PHP模版引擎 – Twig

PHP 强制PHP错误

强制PHP错误

PHP 强制仪表板仅显示单个列