Codeigniter显示空白页而不是错误消息

时间:2012-03-06 16:06:42

标签: php codeigniter

我正在使用Codeigniter,而不是错误消息,我只是得到一个空白页面。有没有办法显示PHP错误消息?当我得不到任何反馈时,很难调试。

我的环境是使用Apache的Ubuntu。

28 个答案:

答案 0 :(得分:90)

由于到目前为止没有一个解决方案似乎适合你,试试这个:

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 :(得分:29)

确保已安装php5-mysql

答案 2 :(得分:8)

我有同样的问题,正如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]'

这应该显示具有解析错误的文件和错误所在的行。

答案 3 :(得分:7)

当您的代码中有基本的PHP语法错误时,会发生此行为。如果你有语法错误,php解析器不完全解析代码并且没有显示任何内容,所以只有当你有语法错误以外时,所有上述建议才会起作用。

答案 4 :(得分:6)

你可以在主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.');
}
}

答案 5 :(得分:5)

每当我在autoload.php中自动加载内容时,就会发生这种情况,例如'数据库'

要解决此问题,请执行以下操作

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

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

  2. 重启Apache并刷新页面

答案 6 :(得分:4)

几天前我遇到了同样的问题。我的开发环境是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环境中,文件不会显示。

希望我帮助过。

答案 7 :(得分:3)

尝试将此添加到index.php文件

error_reporting(E_ALL);

答案 8 :(得分:3)

确保根文件夹中没有空白的index.html文件。它发生了:))

答案 9 :(得分:2)

如果您使用的是CI 2.0或更新版本,则可以将ENVIRONMENT中的index.php更改为define('ENVIRONMENT', 'testing');
或者,您可以将php_flag display_errors on添加到.htaccess文件中。

答案 10 :(得分:2)

检查服务器上的error_reporting是否为ON,如果该id为off,则不会出现任何错误,只会出现空白页。如果您在共享服务器上,则可以通过htaccess启用错误报告。在codeIgniter中,在htaccess中添加以下内容

php_flag display_errors On

并设置

error_reporting(E_ERROR); ## or what ever setting desired in php

希望它适合你

答案 11 :(得分:2)

首先,您需要授予Codeigniter文件夹的权限,这可能是权限问题,然后启动您的服务器。

答案 12 :(得分:1)

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,希望他们现在已修复了该错误。

答案 13 :(得分:0)

通常,当codeigniter不显示任何内容时,会出现语法错误。大多数情况下,如果应用程序之前无缝运行,请查看最近的编辑内容。对我来说,这次的体验是整个应用程序,而不仅仅是一个页面。所以我对我做过的最新编辑进行了快速脑部扫描,然后回顾了我今天工作的每个文件。原来是两个模型文件中的'where'子句:例如,我有

$this->db->where('Type' => 'Blog'); rather than $this->db->where('Type', 'Blog');

答案 14 :(得分:0)

如果您在控制台中看到 net::ERR_CONTENT_DECODING_FAILED,那么您在 .htaccess 文件中使用了 gzip,但 gzip 编码处于关闭状态。

zlib.output_compression=On 中启用 php.ini 并重新启动 Apache

答案 15 :(得分:0)

我遇到了同样的问题,在研究和浪费时间后,我发现最新的xamp版本安装了,发现我的网站无法正常工作。

我需要打开php.ini文件short_open_tag = On

中的以下标记

执行此操作后,请确保重新启动apache。

希望这会有所帮助,如果您的网站已经像其他人一样面临着类似的问题,那么大多数问题都与php.ini文件或全新安装有关。

答案 16 :(得分:0)

在安装xamp / wamp之后,您可能会注意到几乎没有类似性质的错误。如果您的网站已经在运行,请不要担心,这是与配置有关的问题。

1)检查应用程序文件夹内的database.php文件中的数据库连接 2)检查config.php文件中检查URL是否正确? 3)默认情况下,短标签在新安装中处于关闭状态,然后按照以下步骤操作

在php.ini文件中,将“ short_open_tag = Off”更改为“ short_open_tag = On”

执行此操作后,请确保重新启动apache。

希望这会有所帮助。

答案 17 :(得分:0)

就我而言,发生此错误是因为将我的Apache服务器配置为以PHP的身份运行Fast CGI,我将其更改为FPM并可以正常工作。

答案 18 :(得分:0)

仅适用于仍在寻找答案的任何人:

$ db ['default'] ['dbdriver'] ='mysqli'; (确保使用mysqli,而不是mysql)。 (database.php)

答案 19 :(得分:0)

在您的index.php文件中,添加以下行:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

答案 20 :(得分:0)

另一种方法是查看您是否意外地超出了代码中的错误检查。搜索所有代码以查找error_reporting()的任何实例。如果你在没有参数的情况下调用它,它只返回当前的级别,并且是无害的。如果您使用参数(例如0(零))将其命名为,则会关闭错误报告。

您可以在CodeIgnitor中通过查看../system/core/Common.php下的核心库并找到一个类似于第615行的部分来测试:

if (($severity & error_reporting()) !== $severity)
{
   return;
} 

添加如下内容:

if (($severity & error_reporting()) !== $severity)
{
   echo "Suppressing errors!";
   return;
} 

并且您应该能够捕获超出的错误,并从那里进行调试。

答案 21 :(得分:0)

如果你的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);

答案 22 :(得分:0)

我也面临着同样的问题,并尝试了几乎所有的事情,但最后我重新启动了我的服务器,我发现一切正常工作..我不知道如何.....我认为这是一些服务器端问题这就是我的PHP代码没有给出任何错误的原因。

答案 23 :(得分:0)

当我引用一个不存在的视图时,Codeigniter似乎没有抛出错误消息。

在我的例子中,我在我的控制器中:

$this->load->view('/admin/index/access_controls/groups/add');

因为文件不存在,我得到一个空白的“发生错误页面”。我将代码更改为:

$this->load->view('/admin/access_controls/groups/add');

这就是我解决你似乎遇到的同样问题的方法,希望有一天能帮助某人。

答案 24 :(得分:0)

我碰到了这个,因为我有一个通过cron作为root用户运行的CLI,从而创建了root:root的日志文件。当您尝试导航到URI时,一切都会正常工作,但CI显示空白页可能是因为它没有对日志文件的写入权限。

答案 25 :(得分:0)

你在任何地方使用@符号吗?

如果你有类似的话:

@include('page_with_error.php');

您将获得一个空白页面。

答案 26 :(得分:0)

在创建函数时加载url帮助器 例如,

visibility function_name () {

     $this->load->helper('url');
}

它会显示错误或您加载的视图。

答案 27 :(得分:-1)

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