如何closuresPHP通知?
Notice: Constant DIR_FS_CATALOG already defined
我已经在php.ini
中将display_errors
注释掉了,但是不起作用。
如何让PHP不输出这样的东西给浏览器?
UPDATE
我把display_errors = Off
,但它仍然报告这样的通知,
这是PHP 5.3的问题吗?
报告众多的调用堆栈
您可以将display_errors
设置为0
或使用error_reporting()
函数。
然而,通知是烦人的(我可以部分同情 ),但他们有一个目的。 你不应该定义一个常数两次,第二次将不会工作,常数将保持不变!
从PHP文档( error_reporting ):
<?php // Turn off all error reporting error_reporting(0); ?>
其他有趣的function选项:
<?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); ?>
对于命令行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); ?>
你可以设置ini_set('display_errors',0);
在你的脚本中定义你想用error_reporting()
显示的错误。
通过不造成错误:
defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');
如果您确实需要使用error_reporting()将错误报告更改为E_ALL ^ E_NOTICE。
您正在寻找:
php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
您可以检查常量是否已经定义使用:
<?php if (!defined('MYCONST')) define('MYCONST', 'Weeha!'); ?>
我相信在php.ini中注释display_errors将不起作用,因为默认值是On。 您必须将其设置为“关”。
不要忘记重新启动Apache来应用configuration更改。
另外请注意,尽pipe可以在运行时设置display_errors,但在此处更改并不会影响FATAL错误。
正如其他人所指出的那样,理想情况下在开发过程中,应该尽可能以最高级别运行error_reporting并启用display_errors。 虽然第一次出发时很烦人,但是这些错误,警告,通知和严格的编码build议都加起来,使您成为更好的编码器。
我最近发现了这个诡计。 在可能产生警告/错误的行的开始处敲击@。
仿佛通过魔法,他们消失。
使用phpinfo()并searchConfiguration File (php.ini) Path
来查看使用php的configuration文件path。 PHP可以有多个configuration文件,取决于它正在运行的环境。 通常,对于控制台来说:
/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
的configuration文件,并且它们调用了error_reporting()
函数,所以试图在命令行上更改error_reporting
variables将不起作用。 相反,您必须编辑根文件夹中的wp-config.php
文件,并确保将WP_DEBUG
设置为false
。 否则,你会一直得到所有的警告和通知。
对于PHP代码:
<?php error_reporting(E_ALL & ~E_NOTICE);
对于php.ini
configuration:
error_reporting = E_ALL & ~E_NOTICE
在代码中使用此行
error_reporting(E_ALL ^ E_NOTICE);
我认为它的全部给你。