aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/startup.php
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2011-06-20 01:23:43 +0200
committerAndreas Fischer <bantu@phpbb.com>2011-06-25 17:42:52 +0200
commit9f3b159998a2ffeb5476cd77e08c372a196360a4 (patch)
tree0d4eb91cc9b08259b421b389ba2bc5841c97e0ed /phpBB/includes/startup.php
parent1ffa5865832c918e9b96dcf6ee58cc44603dcb65 (diff)
downloadforums-9f3b159998a2ffeb5476cd77e08c372a196360a4.tar
forums-9f3b159998a2ffeb5476cd77e08c372a196360a4.tar.gz
forums-9f3b159998a2ffeb5476cd77e08c372a196360a4.tar.bz2
forums-9f3b159998a2ffeb5476cd77e08c372a196360a4.tar.xz
forums-9f3b159998a2ffeb5476cd77e08c372a196360a4.zip
[ticket/7729] Prevent date/time functions from throwing E_WARNING on PHP 5.3.
PHPBB3-7729
Diffstat (limited to 'phpBB/includes/startup.php')
-rw-r--r--phpBB/includes/startup.php28
1 files changed, 28 insertions, 0 deletions
diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php
index be46c17ba6..ca9665da29 100644
--- a/phpBB/includes/startup.php
+++ b/phpBB/includes/startup.php
@@ -118,5 +118,33 @@ else
define('STRIP', (get_magic_quotes_gpc()) ? true : false);
}
+// Prevent date/time functions from throwing E_WARNING on PHP 5.3 by setting a default timezone
+if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get'))
+{
+ // For PHP 5.1.0 the date/time functions have been rewritten
+ // and setting a timezone is required prior to calling any date/time function.
+
+ // Since PHP 5.2.0 calls to date/time functions without having a timezone set
+ // result in E_STRICT errors being thrown.
+ // Note: We already exclude E_STRICT errors
+ // (to be exact: they are not included in E_ALL in PHP 5.2)
+
+ // In PHP 5.3.0 the error level has been raised to E_WARNING which causes problems
+ // because we show E_WARNING errors and do not set a default timezone.
+ // This is because we have our own timezone handling and work in UTC only anyway.
+
+ // So what we basically want to do is set our timezone to UTC,
+ // but we don't know what other scripts (such as bridges) are involved,
+ // so we check whether a timezone is already set by calling date_default_timezone_get().
+
+ // Unfortunately, date_default_timezone_get() itself might throw E_WARNING
+ // if no timezone has been set, so we have to keep it quiet with @.
+
+ // date_default_timezone_get() tries to guess the correct timezone first
+ // and then falls back to UTC when everything fails.
+ // We just set the timezone to whatever date_default_timezone_get() returns.
+ date_default_timezone_set(@date_default_timezone_get());
+}
+
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];