繁体   English   中英

当php代码位于html标记内时,PHP静默失败

[英]PHP fails silently when php-code is within html tag

问题已更新,请阅读以下

由于某些原因,我的配置项在加载视图时会静默失败。
只需从控制器调用加载视图

$this->load->view('templates/default.php');

现在。 除非还加载了适当的帮助程序,否则在加载的视图中有一些未定义的功能。 通常,php会抛出一个错误,但是在这里它默默地失败了。 我不知道为什么。 模板被输出直到包含未定义函数的行。

我花了很长时间才意识到我的脚本失败了。

这是我的设置:

  • Windows 7旗舰版
  • 阿帕奇2.2.15
  • PHP 5.3.2具有以下错误报告设置:
    • display_errors = On
    • display_startup_errors = On
    • error_reporting = E_ALL | E_STRICT
  • CodeIgniter 1.7.2

任何想法为什么会这样?


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行。

进一步测试显示:

  • IE8在浏览器中正常显示错误(实际上是错误的,因为它应该仅在源代码中可见)
  • Firefox 3.6在源代码中显示错误
  • Opera 10.53在源代码中显示错误

再次感谢你的帮助。

/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM