簡體   English   中英

如何關閉 PHP 通知?

[英]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);

?>

來源http://php.net/manual/en/function.error-reporting.php

在您的代碼中使用這一行

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.

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