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;

通过删除ifreturn 以及不正确的评论,我能够得到一条错误消息,而不仅仅是一个空白页。这个项目没有使用最新版本的 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 错误页面

Codeigniter - 显示数组字段的单个错误消息

当我点击索引页面而不是错误消息时,我只是得到一个空白页面。PHP

在使用 codeigniter 时尝试显示数据库中的图像时收到错误消息

无法在Codeigniter中发送电子邮件,没有错误消息。本地或远程