Thursday, 15 November 2012

Workaround for Symfony 2.1 composer.phar update timezone error


Every time I run "php composer.phar update", I get an error similar to:

Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PST/-8.0/no DST' instead in /path/to/symfony21/project/vendor/monolog/monolog/src/Monolog/Logger.php line 112

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception

[RuntimeException] An error occurred when executing the "'cache:clear --no-warmup'" command.

What's worse is that my php.ini file has a timezone already set. For instance, when I run the shell command "php -i | grep date.timezone", a timezone is produced, e.g. "date.timezone => America/Los_Angeles => America/Los_Angeles".


A quick workaround to this issue is to explicitly set a timezone in the app/console script. Open the app/console script in a text editor. In app/console, near the top (for instance, right before set_time_limit(0);), add the following line, replacing the example timezone from below with one of the valid PHP timezones found on the PHP docs page:


When you save your changes to app/console and run "php composer.phar update" once more, it should now work.


This workaround isn't by any means an ideal fix, and it will affect the timezone of all Symfony2 commands run using the app/console script. (A fortunate side-effect, however, would be the workaround of timezone issues in other scripts using app/console.) This workaround may or may not also affect any scripts that try to upgrade app/console. To reverse this change, simply remove the "date_default_timezone_set" line you inserted into app/console. (Or even better, prior to modifying app/console, copy the old app/console script, rename the copy to app/console.old, and replace the script with the copy if you need to revert.) This workaround was tested with Symfony 2.1.3, PHP version 5.3.6 using MAMP 2.0.5 under OS X 10.7. Your mileage may vary with other versions.


  1. You can fix this by setting the timezone in OSX's default PHP's timezone (Note: I have this error even it using MAMP's PHP installation) To fix it edit the default php.ini

    You should find it in /private/etc if it exists, otherwise:

    sudo cp /private/etc/php.ini.default /private/etc/php.ini

    Edit /private/etc/php.ini and set date.timezone.

    1. Just tested out your suggestion and it worked like a charm -- with the added benefit of not having to mess around with the app/console script that came with Symfony 2.1

      Thanks for the comment Andrew!

      Looks like despite invoking composer.phar using the MAMP PHP interpreter, some part ended up using the built-in OS X PHP interpreter.