At one of companies where I administrate few servers, we are in process of optimizing the server performance to stretch out the maximum out of server hardware and save money from unnecessery hardware costs and thus looking for ways to make server performance better.
On couple of web-sites hosted on few of the production servers, administrating, I've noticed dozens of PHP Notice errors, making the error.log quickly grow to Gigabytes and putting useless hard drive I/O overhead. Most of the php notice warnings are caused by unitialized php variables.
I'm aware having an unitialized values is a horrible security hole, however the websites are running fine even though the notice warnings and currently the company doesn't have the necessery programmers resource to further debug and fix all this undefined php vars, thus what happens is monthly a couple of hundreds megabytes of useless same php notice warnings are written in error.log.
That error.log errors puts an extra hardship for awstats which is later generating server access statistics while generating the 404 errors statistics and thus awstats script has to read and analyze huge files with plenty of records which doesn't have nothing to do with 404 error
We found this PHP Notice warnings logged is one of the things we can optimize had to be disabled.
Here is how this is done:
On the servers running Debian Wheezy stable to disable php notices.
I had to change in /etc/php5/apache2/php.ini error_reporting variable.
Setting was to log everything (including PHP critical errors, warning and notices) like so:
vi /etc/php5/apache2/php.ini
error_reporting = E_ALL & ~E_DEPRECATED
to
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
On CentOS, RHEL, SuSE based servers, edit instead /etc/php.ini.
This setting makes Apache to only log in error.log critical errors, php core dump (thread) errors and php code compilation (interpretation errors)
To make settings take affect on Debian host Apache webserver:
/etc/init.d/apache2 restart
On CentOS, RHEL Linux, had to restart Apache with:
/etc/init.d/httpd restart
For other servers running Nginx and Lighttpd webservers, after changing php.ini:
service nginx reload
service lighttpd restart
To disable php notices errors only on some websites, where .htaccess enabled, you can use also place in website DocumentRoot .htaccess:
php_value error_reporting 2039
Other way to disable via .htaccess is by adding to it code:
php_flag display_errors off
Also for hosted websites on some of the servers, where .htaccess is disabled, enabling / disabling php notices can be easily triggered by adding following php code to index.php
define('DEBUG', true);
if(DEBUG == true)
{
ini_set('display_errors', 'On');
error_reporting(E_ALL);
}
else
{
ini_set('display_errors', 'Off');
error_reporting(0);
}
More helpful Articles
Tags: Apache Nginx Lighttpd, CentOS, core dump, couple, DEBUG, init, log, servers, setting, statistics, www
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
Here is also full list of supported various levels of error reporting: