Codeigniter 显示空白页而不是错误消息
Posted
技术标签:
【中文标题】Codeigniter 显示空白页而不是错误消息【英文标题】:Codeigniter displays a blank page instead of error messages 【发布时间】:2012-03-24 03:36:54 【问题描述】:我正在使用 Codeigniter,而不是错误消息,我只是得到一个空白页。有什么方法可以显示 php 错误消息吗?当我没有收到反馈时,很难调试。
我的环境是带有 Apache 的 Ubuntu。
【问题讨论】:
如何提供您的环境的详细信息?我的猜测是它在带有 IIS 的 Windows 上..? 不,我有 ubuntu 和 apache。 那么请务必用相关细节更新您的问题,因为我的猜测是错误的。 @FlyingCat - 我注意到您尚未接受答案。我遇到了同样的问题,也许我的解决方案最终对你有用? 在database.php中使用mysqli驱动代替mysql 【参考方案1】:由于到目前为止似乎没有任何解决方案适合您,请尝试以下解决方案:
ini_set('display_errors', 1);
http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
这明确告诉 PHP 显示错误。某些环境可以默认禁用此功能。
这就是我在index.php
中的环境设置:
/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*/
define('ENVIRONMENT', 'development');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*/
if (defined('ENVIRONMENT'))
switch (ENVIRONMENT)
case 'development':
// Report all errors
error_reporting(E_ALL);
// Display errors in output
ini_set('display_errors', 1);
break;
case 'testing':
case 'production':
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);
// Don't display errors (they can still be logged)
ini_set('display_errors', 0);
break;
default:
exit('The application environment is not set correctly.');
【讨论】:
+1 因为 a) 您的解决方案有效,b) UhOh 钩子是一个非常有用的 CI 错误处理实用程序。 太棒了。这应该是他们核心代码的一部分。实际打开错误显示。谁会想到? 谢谢!错误报告使用这个更详细 你救我! tks 谢谢 .. 你节省了我一整天和宝贵的时间。亲爱的。【参考方案2】:确保已安装php5-mysql
。
【讨论】:
我遇到了同样的问题,经过 20 分钟的调试(使用其他答案中提供的提示),我发现 CodeIgniter 提供空白页面只是因为缺少 php5-mysql。所以我希望我的回答能节省一些人的时间。 我遇到过同样的问题几次。 Codeigniter 确实需要针对这种行为的补丁。事实上,我要拉他们的回购并自己研究一下。 +1 先生。 虽然不是我的问题,但关系非常密切。对于 Windows 用户,请确保在 PATH 变量中包含您的 php 和 php\ext 文件夹,然后重新启动 apache.... +1 给亚历山大,谢谢。在这里为 LLMP(Lighttpd,Mariadb)安装同样的问题。你会心烦意乱,然后输入“sudo apt-get install php5-cgi”并错过“php5-mysql”。很遗憾,如果您还没有一个基本的非 codeigniter php5 数据库示例可以运行,那么没有什么可以告诉您刚刚发生了什么。 你拯救了我的一天!非常感谢。【参考方案3】:我遇到了同样的问题,正如 Shayan Husaini 指出的那样,我有一个未检测到的语法错误。
我在终端使用 php linter 解决了这个问题:
php -l file.php
您也可以使用类似的方法在某个文件夹中的每个文件中使用 linter:
find -type f -name "*.php" -exec php -l '' \;
只过滤有错误的:
find -type f -name "*.php" -exec php -l '' \; | grep '^[^N]'
这应该显示有解析错误的文件和错误所在的行。
【讨论】:
你可能需要引用 *.php 部分find -type f -name '*.php' -exec php -l '' \; | grep '^[^N]'
出色的解决方案,这对我来说非常有效
这是最后的最佳选择,我最终在 Atom 中安装了一个 php lint 扩展,它改变了一切。【参考方案4】:
当您的代码中有基本的 php 语法错误时,就会出现这种情况。如果您有语法错误,php 解析器不会完全解析代码并且没有显示任何内容,因此上述所有建议仅在您有语法错误以外的情况下才有效。
【讨论】:
我同意。我只需要显示我想念的那些基本语法错误;或'很多。 +1 我多次遇到同样的情况,但没有发现任何工作。我的建议是使用像dreamweaver CS5这样的优秀IDE,它会提示你语法错误。【参考方案5】:可以在主index.php中设置
define('ENVIRONMENT', 'development');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*
* Different environments will require different levels of error reporting.
* By default development will show errors but testing and live will hide them.
*/
if (defined('ENVIRONMENT'))
switch (ENVIRONMENT)
case 'development':
error_reporting(E_ALL);
break;
case 'testing':
case 'production':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
【讨论】:
谢谢,当我打开我的 index.php 时,我已经有了这些代码。不知道为什么错误不会显示。虽然 +1。 尝试将相同的代码放入您使用和测试的每个控制器中,这样您应该可以看到错误在哪里 是的,但效率不是很高,我只是希望 php 错误处理能够工作。【参考方案6】:每当我在 autoload.php 中自动加载诸如“数据库”之类的东西时,都会发生这种情况
要解决此问题,如果您使用的是 Windows 操作系统
打开你的 php.ini。
搜索并取消注释此行 - extension=php_mysql.dll
(请同时检查 PHP 指令是否指向您的扩展所在的位置。
我的是extension_dir = "C:\php-5.4.8-Win32-VC9-x86\ext"
)
重启 Apache 并刷新页面
【讨论】:
这帮助我解决了我尝试使用 WT-NMP 打开的 CI 项目的这个问题。【参考方案7】:几天前我遇到了同样的问题。我的开发环境是Win8,网站运行正常,但是当我将文件上传到生产服务器(Linux)时显示一个空白页面。
原来是models and controllers's filenames should start with a uppercase letter。
该文件必须名为“Blog.php”,大写“B”。
类名必须以大写字母开头。
在windows环境下windows does not differentiate uppercase and lowercase就没有问题了,但是在linux环境下,文件就不会显示了。
希望我有所帮助。
【讨论】:
这解决了我的问题,但没有解决这个问题。【参考方案8】:尝试将其添加到您的 index.php 文件中
error_reporting(E_ALL);
【讨论】:
【参考方案9】:确保您的根文件夹中没有空白 index.html 文件。它发生了:)
【讨论】:
天哪,它确实发生了。就我而言,干净安装的灯单元上有一个默认的 index.html。感谢您指出我显然应该检查 8-D【参考方案10】:检查服务器上的 error_reporting 是否为 ON,如果该 id 关闭,您将不会收到任何错误并且只是空白页。如果您在共享服务器上,则可以通过 htaccess 启用错误报告。在 codeIgniter 在你的 htaccess 中添加以下内容
php_flag display_errors On
设置
error_reporting(E_ERROR); ## or what ever setting desired in php
希望对你有用
【讨论】:
【参考方案11】:首先你需要给你的Codeigniter文件夹的权限,这可能是权限问题,然后启动你的服务器。
【讨论】:
这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 这是我在发布之前遇到的确切问题。在我的情况下,也没有显示错误消息,只有空白页出现。我已授予 ubantu 中 CI 文件夹的权限并重新启动了 apache 服务器并且它可以工作。【参考方案12】:如果您使用的是 CI 2.0 或更高版本,您可以将 ENVIRONMENT
中的 index.php
类型更改为 define('ENVIRONMENT', 'testing');
。
或者,您可以将 php_flag display_errors on
添加到您的 .htaccess
文件中。
【讨论】:
谢谢 Vyrautas,我尝试了你的方法,如果我有错误,它现在给了我服务器错误 500。仍然不显示 php 错误消息。虽然 +1。【参考方案13】:在您的 index.php
文件中添加以下行:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
【讨论】:
【参考方案14】:在system/core/Common.php
中有一个异常处理程序,其代码块如下所示:
// We don't bother with "strict" notices since they tend to fill up
// the log file with excess information that isn't normally very helpful.
if ($severity == E_STRICT)
return;
通过删除if
和return
以及不正确的评论,我能够得到一条错误消息,而不仅仅是一个空白页。这个项目没有使用最新版本的 CodeIgniter,希望他们现在已经修复了这个错误。
【讨论】:
【参考方案15】:当你创建一个函数时加载你的 url helper 例如,
visibility function_name ()
$this->load->helper('url');
它将向您显示错误或您加载的视图。
【讨论】:
【参考方案16】:你在任何地方都使用@符号吗?
如果你有类似的东西:
@include('page_with_error.php');
你会得到一个空白页。
【讨论】:
【参考方案17】:我遇到了这个问题,因为我有一个通过 cron 作为 root 用户运行的 CLI,因此使用 root:root 创建了日志文件。当您尝试导航到 URI 时,一切正常,但 CI 显示空白页可能是因为它没有对日志文件的写入权限。
【讨论】:
【参考方案18】:当我引用一个不存在的视图时,Codeigniter 似乎没有抛出错误消息。
在我的示例中,我的控制器中有:
$this->load->view('/admin/index/access_controls/groups/add');
由于文件不存在,我得到一个空白的“出现错误页面”。我将代码更改为:
$this->load->view('/admin/access_controls/groups/add');
这就是我解决您似乎遇到的相同问题的方法,希望有一天这对某人有所帮助。
【讨论】:
【参考方案19】:我也面临同样的问题并尝试了几乎所有的东西,但最后我重新启动了我的服务器,我发现一切都开始正常了..我不知道怎么......我认为这是一些服务器端问题这就是为什么我的 PHP 代码没有给出任何错误的原因。
【讨论】:
【参考方案20】:如果你的 php.ini 中有这个:
display_error = On;
你的 CI 应用程序中同时有这个
error_reporting(0);
你会得到 HTTP/1.1 200 OK 和一个完整的银行页面。
这是因为当 display_error 打开时,php-fpm 总是返回 HTTP 代码 200。 error_reporting(0) 禁止所有错误输出。
对于CI应用,入口index.php设置运行环境如下:
if(isset($_SERVER['SERVER_ENV']))
define('ENVIRONMENT', $_SERVER['SERVER_ENV']);
else
define('ENVIRONMENT', 'development');
if (defined('ENVIRONMENT'))
switch (ENVIRONMENT)
case 'development':
error_reporting(E_ALL);
ini_set('display_errors', 1);
break;
case 'testing':
case 'production':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
简而言之,当您在网络服务器的 conf 中设置 ENV 指令时,比如 nginx 的 fastcgi_params:
fastcgi_param SERVER_ENV production;
然后CI会自动设置
error_reporting(0);
【讨论】:
【参考方案21】:另一种方法是查看您是否意外超出了代码中的错误检查。在所有代码中搜索任何 error_reporting() 实例。如果你不带参数调用它,它只是返回当前级别,并且是无害的。如果你用调用它一个参数,比如0(零),它会关闭错误报告。
您可以在 CodeIgnitor 中对此进行测试,方法是查看 ../system/core/Common.php 下的核心库并找到大约在第 615 行的部分,如下所示:
if (($severity & error_reporting()) !== $severity)
return;
添加类似:
if (($severity & error_reporting()) !== $severity)
echo "Suppressing errors!";
return;
您应该能够捕获超出的错误,并从那里进行调试。
【讨论】:
【参考方案22】:通常当 codeigniter 什么都不显示时,会出现语法错误。大多数情况下,如果该应用程序之前无缝运行,只需查看您最近的编辑。对我来说,这次的体验是整个应用程序,而不仅仅是一个页面。因此,我对我最近完成的编辑和反向工作进行了快速的大脑扫描,审查了我今天工作的每个文件。原来是两个模型文件中的一些“where”子句:例如,我有
$this->db->where('Type' => 'Blog'); rather than $this->db->where('Type', 'Blog');
【讨论】:
【参考方案23】:我遇到了同样的问题,我安装了最新的 xamp 版本,发现我的网站无法正常工作,经过研究和浪费时间后我发现了。
我需要在 php.ini 文件中打开以下标签 short_open_tag=On
确保在执行此操作后重新启动 apache。
希望这会有所帮助,如果您的网站已经像其他面临类似问题的人一样运行,这些问题大部分与 php.ini 文件或全新安装有关。
【讨论】:
【参考方案24】:安装 xamp/wamp 后,您可能会注意到一些类似性质的错误。如果您的网站已经在运行,请不要担心,这是与配置相关的问题。
1) 检查应用程序文件夹内 database.php 文件中的数据库连接 2) 检查 config.php 文件检查 url 是否正确? 3) 默认情况下,短标签在新安装中是关闭的,然后按照以下步骤进行操作
在 php.ini 文件中将“short_open_tag=Off”更改为“short_open_tag=On”
确保在执行此操作后重新启动 apache。
希望这会有所帮助。
【讨论】:
【参考方案25】:在我的情况下,发生错误是因为我的 Apache 服务器配置为以 Fast CGI
运行 PHP
,我将其更改为 FPM
并且它工作正常。
【讨论】:
【参考方案26】:仅适用于仍在寻找答案的人:
$db['default']['dbdriver'] = 'mysqli'; (确保使用 mysqli,而不是 mysql)。 (数据库.php)
【讨论】:
【参考方案27】:如果您在控制台中得到 net::ERR_CONTENT_DECODING_FAILED,则说明您在 .htaccess 文件中使用 gzip,但 gzip 编码已关闭。
在php.ini
中启用zlib.output_compression=On
并重启Apache
【讨论】:
【参考方案28】:请检查错误文件夹是否在应用程序文件夹中 在我的情况下,我替换应用程序文件夹中的错误文件夹
【讨论】:
以上是关于Codeigniter 显示空白页而不是错误消息的主要内容,如果未能解决你的问题,请参考以下文章
codeigniter DOMPDF 显示空白屏幕,没有错误,html 生成正确但 pdf 不生成
防止在 Codeigniter 中显示默认的 CSRF 错误页面
当我点击索引页面而不是错误消息时,我只是得到一个空白页面。PHP