MongoDB Codeigniter MongoDB Codeigniter mongodb mongodb

MongoDB Codeigniter


The specific notice messages here have been removed in the MongoDB PHP driver 1.2.11 or later (see PHP-431). Upgrading your MongoDB driver to the latest should remove the excessive notice logging.

General notes on proper settings for Code Igniter logging in production still apply...

The E_NOTICE level of error reporting is intended to warn you about possible bugs or typos. It is typically only used as a development setting rather than for production messages.

The default error_reporting setting in PHP4 and PHP5 is actually set to ignore these:

E_ALL & ~E_NOTICE

The Code Igniter index.php has an application environment setting which normally shows all errors for development and suppresses error reporting for testing and production. You should set this appropriately:

define('ENVIRONMENT', 'production');

If you actually want to capture these messages for a production environment you should update the production settings in your index.php so that instead of error_reporting(0) you have:

For example, in index.php you could have:

case 'production':    error_reporting(E_ALL);    ini_set('display_errors','Off');    ini_set('log_errors','On');    ini_set('error_log','/var/log/php5.log');break;

That way the messages/notices will still be saved to the error_log if you want to review them, but they will not be shown to the end user.


Off the top of my head, there are a few things you could do. This is not an answer regarding a fix to the MongoDB error you are receveing, but rather regarding some methods in which you could hide the errors.

a) Use the '@' operator to ignore any error outputs from the method being called in which outputs the errors you are receiving. This would result in you renaming the method call to the following @method_outputting_mongodb_error($foo,$bar);.

b) Turn off error reporting in CodeIgniter. This is not the best method as all other errors will not be outputted.

There is a good link here re: how you can turn off error reporting: http://phpdog.blogspot.fr/2012/02/codeigniter-error-reporting-handling.html


As @Stennie mentions this has been fixed in later versions of the driver: https://jira.mongodb.org/browse/PHP-431

Try and upgrade.

Also this only existed on the Windows driver and only start happening after v1.2.1. I know that because the guy who made that JIRA also tried 1.2.1 on my advice and he didn't get those E_NOTICEs. I remember having the conversation that actually triggered that JIRA now :).

Unlike others I don't think you should "hide" these errors with E_ALL & ~E_NOTICE. No one is quite decided on hiding E_NOTICE however the general concensus is that it is not the best thing. Of course you would not want your logs to be filled with all this debug info about the MongoDB extension, instead the MongoDB extension should be silent (as you think it should).

Another reason I would not hide E_NOTICE is because of the php.ini of later versions of PHP:

; error_reporting;   Default Value: E_ALL & ~E_NOTICE;   Development Value: E_ALL | E_STRICT;   Production Value: E_ALL & ~E_DEPRECATED

By default PHP will actually install for Production Value (as it does for me) as such the default for PHP error reporting is:

E_ALL & ~E_DEPRECATED

This is the value I have for error_reporting on both my AWS and my local Ubuntu server 12.04 and I have not changed the values since installing as such the default value I gain from installing PHP from both repo and source is:

error_reporting = E_ALL & ~E_DEPRECATED

So the recommended default setup for production for later PHP versions (and probably future ones) actually shows E_NOTICE, which is useful but not if the logs are being filled with stuff from the Mongo extension.

Edit: Downvoter care to explain? I have basically given the same answer as @Stennie, why the downvote?

I have edited my answer to actually take the conversation in the comments on this answer and @Stennie's answer into consideration so the answer makes more sense now.