[英]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 操作系統
打開你的 php.ini。 搜索並取消注釋這一行 - extension=php_mysql.dll
(另請檢查 PHP 指令是否指向您的擴展程序所在的位置。
我的是extension_dir = "C:\\php-5.4.8-Win32-VC9-x86\\ext"
)
重啟 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;
}
通過刪除if
和return
以及不正確的評論,我能夠收到一條錯誤消息,而不僅僅是一個空白頁。 這個項目沒有使用最新版本的 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.