强制 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->error_reporting = E_ALL & ~E_NOTICE;
也无济于事。以上是关于强制 Smarty 显示 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章