Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当PHP代码位于html标记内时,PHP会自动失败_Php_Debugging_Codeigniter - Fatal编程技术网

当PHP代码位于html标记内时,PHP会自动失败

当PHP代码位于html标记内时,PHP会自动失败,php,debugging,codeigniter,Php,Debugging,Codeigniter,问题已更新,请阅读下面的内容 由于某些原因,我的CI在加载视图时会自动失败。 加载视图只是从控制器中调用 $this->load->view('templates/default.php'); 现在。加载的视图中有一些函数未定义,除非也加载了适当的辅助对象。通常,php会抛出一个错误,但在这里它会无声地失败。我不知道为什么。模板被输出到包含未定义函数的行 我花了很长时间才意识到我的剧本在哪里失败了 以下是我的设置: Windows7终极版 Apache 2.2.15 具有以下错误

问题已更新,请阅读下面的内容

由于某些原因,我的CI在加载视图时会自动失败。
加载视图只是从控制器中调用

$this->load->view('templates/default.php');
现在。加载的视图中有一些函数未定义,除非也加载了适当的辅助对象。通常,php会抛出一个错误,但在这里它会无声地失败。我不知道为什么。模板被输出到包含未定义函数的行

我花了很长时间才意识到我的剧本在哪里失败了

以下是我的设置:

  • Windows7终极版
  • Apache 2.2.15
  • 具有以下错误报告设置的PHP 5.3.2:
    • display\u errors=On
    • display\u startup\u errors=On
    • error_reporting=E_ALL | E_STRICT
  • 编码点火器1.7.2
你知道为什么吗


更新

经过进一步调试,当PHP代码与HTML内联并在HTML标记内时,PHP无法报告任何错误。现在这很奇怪

这将返回致命错误:

<p><?php echo $bogus(); ?></p>

这不会发生,并且会以静默方式失败:

<p class="<?php echo $bogus(); ?>">paragraph</p>

查看文档,您可以让CI生成自己的错误报告。

查看
/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源代码中看到错误


谢谢大家的帮助。你不会相信是什么问题
浏览器本身!!!事实上,Chrome 6-dev。
它实际上是完全剥离了无效的html行

进一步测试显示:

  • IE8通常在浏览器中显示错误(这是错误的,因为它应该只在源代码中可见)
  • Firefox 3.6在源代码中显示错误
  • Opera 10.53显示源中的错误

再次感谢您的帮助。

无需更改您可以添加的整个应用程序的错误显示策略

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的错误处理,但这与我的经历无关。失败的是php,而不是CI。整个渲染过程只是在包含未定义函数的行处停止,并在不返回任何错误的情况下静默退出。是的,它听起来好像无法在视图中找到您试图加载的文件。仔细检查文件是否位于application/views/templates/default.phpIt中,以正确查找该文件。解析文件时出现问题。原来CI和这件事无关。阅读my update.codeigniters错误处理不会捕获php错误/通知/警告。它更像是抛出异常的替代品。它被设置为4,但CI的最后一条消息仍然是:
DEBUG-2010-06-10 15:14:31-->控制器类已初始化
,而它应该显示
已加载的文件:
重新更新:它可能不会自动失败。它只是在浏览器中不可见。看一下源代码,检查过了。源代码在
bogus()
函数前面的一行结束。听起来您可能在引发PHP错误?或者,这可能是一个技巧,一个预先用美元表示的不存在函数被转换为变量?你可以试着用大括号(
{$bogus}()
)把它包起来。听起来我需要提出一个bug,但我不敢相信没有人注意到这一点!直接用函数名调用函数也没有任何区别。不过,错误只会出现在文件中。只有当您将PHP配置为不显示特定类型的错误时(可能通过显示错误禁用所有错误)。Michal已经在其问题下面的注释中指出,情况并非如此:“选中了。源代码在
bogus()
函数前面的一行结束。”现在一切都好了。检查我自己的答案以查看解决方案。