【问题标题】:Codeigniter displays a blank page instead of error messagesCodeigniter 显示空白页而不是错误消息
【发布时间】:2012-03-24 03:36:54
【问题描述】:

我正在使用 Codeigniter,而不是错误消息,我只是得到一个空白页。有什么方法可以显示 PHP 错误消息吗?当我没有收到反馈时,很难调试。

我的环境是带有 Apache 的 Ubuntu。

【问题讨论】:

  • 如何提供您的环境的详细信息?我的猜测是它在带有 IIS 的 Windows 上..?
  • 不,我有 ubuntu 和 apache。
  • 那么请务必用相关细节更新您的问题,因为我的猜测是错误的。
  • @FlyingCat - 我注意到您尚未接受答案。我遇到了同样的问题,也许我的解决方案最终对你有用?
  • 在database.php中使用mysqli驱动代替mysql

标签: php codeigniter


【解决方案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 操作系统

  1. 打开你的 php.ini。 搜索并取消注释此行 - extension=php_mysql.dll

    (请同时检查 PHP 指令是否指向您的扩展所在的位置。
    我的是extension_dir = "C:\php-5.4.8-Win32-VC9-x86\ext")

  2. 重启 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】:

                                    请检查错误文件夹是否在应用程序文件夹中 在我的情况下,我替换应用程序文件夹中的错误文件夹

                                    【讨论】:

                                      猜你喜欢
                                      • 2023-03-04
                                      • 2021-09-04
                                      • 2022-06-10
                                      • 2023-03-12
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2015-08-31
                                      相关资源
                                      最近更新 更多