簡體   English   中英

Codeigniter 顯示空白頁而不是錯誤消息

[英]Codeigniter displays a blank page instead of error messages

我正在使用 Codeigniter,但我得到的不是錯誤消息,而是一個空白頁面。 有什么辦法可以顯示 PHP 錯誤消息嗎? 當我沒有得到反饋時,很難調試。

我的環境是 Ubuntu 和 Apache。

由於到目前為止似乎沒有任何解決方案適合您,請嘗試以下解決方案:

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.');
    }
}

確保安裝了php5-mysql

我遇到了同樣的問題,正如 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 語法錯誤時,就會發生此行為。 如果您遇到語法錯誤,php 解析器不會完全解析代碼並且不顯示任何內容,因此上述所有建議僅在您有語法錯誤以外的情況下才有效。

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

每當我在 autoload.php 中自動加載諸如“數據庫”之類的內容時,就會發生這種情況

要解決此問題,如果您使用的是 Windows 操作系統

  1. 打開你的 php.ini。 搜索並取消注釋這一行 - extension=php_mysql.dll

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

  2. 重啟 Apache 並刷新頁面

幾天前我遇到了同樣的問題。 我的開發環境是 Win8 並且網站運行良好,但是當我將文件上傳到生產服務器 (Linux) 時顯示一個空白頁面。

原來模型和控制器的文件名應該以大寫字母開頭

該文件必須命名為“Blog.php”,大寫字母“B”。

類名必須以大寫字母開頭。

在 windows 環境中這無關緊要,因為windows 不區分大小寫,但在 linux 環境中,文件不會顯示。

希望我有所幫助。

確保根文件夾中沒有空白的 index.html 文件。 它發生了:)

嘗試將其添加到您的 index.php 文件中

error_reporting(E_ALL);

首先,您需要授予您的 Codeigniter 文件夾的權限,這可能是權限問題,然后啟動您的服務器。

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

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

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

檢查服務器上的 error_reporting 是否打開,如果該 ID 關閉,您將不會收到任何錯誤,只會出現空白頁面。 如果您在共享服務器上,則可以通過 htaccess 啟用錯誤報告。 在 codeIgniter 中,在您的 htaccess 中添加以下內容

php_flag display_errors On

並設置

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

希望它對你有用

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,希望他們現在已經修復了這個錯誤。

創建函數時加載您的 url 助手,例如,

visibility function_name () {

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

它將顯示錯誤或加載的視圖。

您是否在任何地方使用@ 符號?

如果你有類似的東西:

@include('page_with_error.php');

你會得到一個空白頁。

我遇到了這個問題,因為我有一個通過 cron 以 root 用戶身份運行的 CLI,從而使用 root:root 創建日志文件。 當您嘗試導航到 URI 時,一切正常,但 CI 顯示空白頁可能是因為它沒有對日志文件的寫權限。

當我引用一個不存在的視圖時,Codeigniter 似乎沒有拋出錯誤消息。

在我的示例中,我的控制器中有:

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

因為文件不存在,我得到一個空白的“發生錯誤頁面”。 我將代碼更改為:

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

這就是我解決您似乎遇到的相同問題的方法,希望有一天能對某人有所幫助。

我也面臨同樣的問題並嘗試了幾乎所有的事情,但最后我重新啟動了我的服務器,我發現一切都開始正常工作......我不知道如何......我認為這是一些服務器端問題,這就是為什么我的PHP CODE 沒有給出任何錯誤。

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

另一種方法是查看是否意外超出了代碼中的錯誤檢查。 在所有代碼中搜索 error_reporting() 的任何實例。 如果你不帶參數調用它,它只會返回當前級別,並且是無害的。 如果您使用參數調用它,例如 0(零),它將關閉錯誤報告。

您可以在 CodeIgnitor 中通過查看 ../system/core/Common.php 下的核心庫並找到大約在第 615 行的部分,進行測試,如下所示:

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

添加如下內容:

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

並且您應該能夠捕獲超出的錯誤,並從那里進行調試。

通常當 codeigniter 什么都不顯示時,就會出現語法錯誤。 大多數情況下,如果應用程序之前無縫運行,只需查看您最近的編輯。 對我來說,這次的體驗是整個應用程序,而不僅僅是一個頁面。 因此,我對最近所做的編輯進行了快速的腦部掃描,然后向后工作,查看我今天處理的每個文件。 結果是兩個模型文件中的一些“where”子句:例如,我有

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

我遇到了同樣的問題,我安裝了最新的 xamp 版本,發現我的網站無法正常工作,經過研究和浪費時間,我發現了這一點。

我需要在 php.ini 文件中打開以下標簽 short_open_tag=On

確保在執行此操作后重新啟動 apache。

希望這會有所幫助,如果您的站點已經像其他面臨類似問題的人一樣運行,那么大多數這些問題都與 php.ini 文件或全新安裝有關。

安裝 xamp/wamp 后,您可能會注意到一些類似性質的錯誤。 如果您的網站已經在運行,請不要擔心,這是一個與配置相關的問題。

1) 檢查應用程序文件夾內 database.php 文件中的數據庫連接 2) 檢查 config.php 文件檢查 url 是否正確? 3) 默認情況下,短標簽在新安裝中是關閉的,然后按照以下步驟操作

在 php.ini 文件中將“short_open_tag=Off”更改為“short_open_tag=On”

確保在執行此操作后重新啟動 apache。

希望這可以幫助。

就我而言,發生錯誤是因為我的 Apache 服務器配置為以Fast CGI運行PHP ,我將其更改為FPM並且可以正常工作。

僅適用於仍在尋找答案的任何人:

$db['default']['dbdriver'] = 'mysqli'; (確保您使用 mysqli,而不是 mysql)。 (數據庫.php)

如果您在控制台中看到 net::ERR_CONTENT_DECODING_FAILED,那么您在 .htaccess 文件中使用了 gzip,但 gzip 編碼處於關閉狀態。

php.ini啟用zlib.output_compression=On並重新啟動 Apache

請檢查錯誤文件夾是否在應用程序文件夾中,而不是在我的情況下我替換應用程序文件夾中的錯誤文件夾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM