[英]How do I turn off PHP Notices?
Notice: Constant DIR_FS_CATALOG already defined
我已經在php.ini
中注釋掉了display_errors
,但是沒有用。
如何使 PHP 不是 output 之類的東西到瀏覽器?
更新
我把display_errors = Off
放在那里,但它仍在報告此類通知,
這是 PHP 5.3 的問題嗎?
也報告了許多調用堆棧..
從 PHP 文檔( error_reporting ):
<?php
// Turn off all error reporting
error_reporting(0);
?>
該功能的其他有趣選項:
<?php
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
您可以將display_errors
設置為0
或使用error_reporting()
函數。
然而,通知很煩人(我可以部分地同情)但它們是有目的的。 您不應該兩次定義常量,第二次將不起作用並且常量將保持不變!
對於命令行 php,設置
error_reporting = E_ALL & ~E_NOTICE
在/etc/php5/cli/php.ini
命令php
執行然后忽略通知。
<?php
// Turn off all error reporting
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
在您的代碼中使用這一行
error_reporting(E_ALL ^ E_NOTICE);
我認為它對你來說已經足夠了。
我不想在我的代碼中設置error_reporting
。 但在一種情況下,一個遺留產品,有太多的通知,他們必須隱藏。
因此,我使用以下代碼段為error_reporting
設置服務器端配置值,但減去E_NOTICE
s。
error_reporting(error_reporting() & ~E_NOTICE);
現在可以在php.ini
或.htaccess
進一步配置錯誤報告設置。 只有通知將始終被禁用。
您正在尋找:
php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
您可以設置ini_set('display_errors',0);
在您的腳本中或定義您希望使用error_reporting()
顯示哪些錯誤。
我最近發現了這個技巧。 在可能產生警告/錯誤的行開頭敲擊@。
仿佛施了魔法一樣,它們消失了。
對於 PHP 代碼:
<?php
error_reporting(E_ALL & ~E_NOTICE);
對於php.ini
配置:
error_reporting = E_ALL & ~E_NOTICE
通過不引起錯誤:
defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');
如果您真的必須這樣做,請使用 error_reporting() 將錯誤報告更改為 E_ALL^E_NOTICE。
使用 phpinfo() 並搜索Configuration File (php.ini) Path
以查看使用的 php 配置文件路徑。 PHP 可以有多個配置文件,具體取決於它運行的環境。 通常,對於控制台,它是:
/etc/php5/cli/php.ini
對於由 apache 運行的 php,它是:
/etc/php5/apache2/php.ini
然后按照您需要的方式設置error_reporting
:
http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini-文件
正如一些人所提到的,如果您是代碼作者,您應該更正所有這些錯誤、通知等,因為從長遠來看,這會給您帶來比不修復它們更多的問題(尤其是當您升級操作系統時)。 對於您的服務器,您應該只在日志中顯示錯誤,而不是在客戶端的屏幕中。
因此,為了避免瀏覽器中的錯誤,您可以使用已經發現的display_errors
標志:
display_errors = Off
現在真正的問題是當您運行其他人的代碼時。 在這種情況下,每次升級該代碼時,修改代碼很可能會被覆蓋。 這使得維護該代碼變得乏味。
就我而言,我正在使用crontab
運行 PHP,以便wp-cron.php
運行wp-cron.php
腳本。 我的電子郵件收到錯誤消息,當您每 10 分鍾收到一封電子郵件時,這會變得很乏味! 但是,在這種情況下,Wordpress 系統有一個包含WP_DEBUG
的配置文件,它們會調用error_reporting()
函數,因此嘗試在命令行上更改error_reporting
變量將不起作用。 相反,您必須編輯根文件夾中的wp-config.php
文件,並確保WP_DEBUG
設置為false
。 否則,您將一直收到所有這些警告和通知。
您可以使用以下方法檢查常量是否已定義:
<?php
if (!defined('MYCONST'))
define('MYCONST', 'Weeha!');
?>
我相信在 php.ini 中注釋掉 display_errors 是行不通的,因為默認值為 On。 您必須將其設置為“關閉”。
不要忘記重新啟動 Apache 以應用配置更改。
另請注意,雖然您可以在運行時設置 display_errors,但在此處更改它不會影響 FATAL 錯誤。
正如其他人所指出的,理想情況下,在開發過程中,您應該在最高級別運行 error_reporting 並啟用 display_errors。 雖然剛開始時很煩人,但這些錯誤、警告、通知和嚴格的編碼建議都會加起來,使您能夠成為更好的編碼員。
雙重定義的常量
要修復此處的特定錯誤,您可以在定義常量之前檢查它是否已定義:
if ( ! defined( 'DIR_FS_CATALOG' ) )
define( 'DIR_FS_CATALOG', 'something...' );
我個人首先在代碼庫中搜索常量DIR_FS_CATALOG
,然后用這個替換雙重定義。
逐案隱藏 PHP 通知
PHP 提供了@
控制運算符,您可以使用它來忽略導致通知或警告的特定函數。
使用此功能,您可以在代碼中逐個忽略/禁用通知和警告,這對於有意、計划或非常煩人且無法從源頭解決的錯誤或通知的情況非常有用. 在引起通知的函數或 var 之前放置一個@
,它將被忽略。
下面是一個例子:
// Intentional file error
$missing_file = @file( 'non_existent_file' );
可以在PHP 的 Error Control Operators文檔中找到更多關於此的信息。
錯誤報告(E_ERROR); 為我工作。
如果您從命令行運行,則可以執行以下操作:
php -d display_errors="0" script.php 2>/dev/null
您必須包含 -d display_errors="0" 以及將 stderr 重定向到 null,很奇怪
設置 display_errors=Off 並重啟 xampp 服務器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.