[英]PHP fails silently when php-code is within html tag
问题已更新,请阅读以下
由于某些原因,我的配置项在加载视图时会静默失败。
只需从控制器调用加载视图
$this->load->view('templates/default.php');
现在。 除非还加载了适当的帮助程序,否则在加载的视图中有一些未定义的功能。 通常,php会抛出一个错误,但是在这里它默默地失败了。 我不知道为什么。 模板被输出直到包含未定义函数的行。
我花了很长时间才意识到我的脚本失败了。
这是我的设置:
display_errors = On
display_startup_errors = On
error_reporting = E_ALL | E_STRICT
任何想法为什么会这样?
UPDATE
经过进一步调试后,事实证明,当php代码与HTML内联并且位于HTML标记内时,PHP无法报告任何错误。 现在,这很奇怪。
这将返回致命错误:
<p><?php echo $bogus(); ?></p>
这不会,并且会自动失败:
<p class="<?php echo $bogus(); ?>">paragraph</p>
为什么? :o
更新2
进一步的调查表明,如果在PHP中指定了error_log
,则实际上在该文件中报告了错误,但在浏览器中却未报告...同样,为什么?
更新3
实际上,我的代码应该稍有不同。 在完全不同的机器上检查了另一个PHP安装,并确认PHP错误。 在这里报告: http : //bugs.php.net/bug.php?id=52040
感谢所有帮助人员。 您不会相信问题出在哪里!
浏览器本身!!! 实际上是Chrome 6开发版。
它实际上是在完全剔除无效的html行。
进一步测试显示:
再次感谢你的帮助。
在/system/application/config/config.php
文件和/index.php
文件中查看,并检查CI指示PHP执行的错误报告级别。
以下是index.php文件的顶部,它应该可以解决您的问题:
/*
|---------------------------------------------------------------
| PHP ERROR REPORTING LEVEL
|---------------------------------------------------------------
|
| By default CI runs with error reporting set to ALL. For security
| reasons you are encouraged to change this when your site goes live.
| For more info visit: http://www.php.net/error_reporting
|
*/
error_reporting(E_ALL);
在配置文件中(出于完整性考虑)如下:
/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| If you have enabled error logging, you can set an error threshold to
| determine what gets logged. Threshold options are:
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
| 0 = Disables logging, Error logging TURNED OFF
| 1 = Error Messages (including PHP errors)
| 2 = Debug Messages
| 3 = Informational Messages
| 4 = All Messages
|
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 2;
我相信这仅用于日志记录,而不用于显示。
尝试访问不存在的对象将导致无提示(黑屏)错误。
原因确实很简单。 这是因为浏览器未呈现您的错误,但是如果右键单击->查看源代码,则可以在HTML源代码中看到该错误。
<p class="<?php echo $bogus(); ?>">paragraph</p>
将输出
<p class="Fatal error: Call to undefined function on line ...">paragraph</p>
或类似的东西。 浏览器只是认为这些单词是CSS类的集合,因此您在屏幕上看不到任何东西。 它包含在HTML属性中。
无需更改整个应用程序的错误显示策略,您可以添加
ini_set('display_errors', 1);
error_reporting(E_ALL); // Or what ever fits
//If one would like to log the errors one could use
ini_set('log_errors', 1);
ini_set('error_log', FILE_TO_LOG_TO);
到相关脚本。
查看错误处理文档,您可以获取CI来生成自己的错误报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.