ID: 49996
User updated by: dor at videocells dot com
Reported By: dor at videocells dot com
-Status: Feedback
+Status: Open
Bug Type: Performance problem
Operating System: Centos 5.2 64 bit
PHP Version: 5.3.0
New Comment:
<?php
$timezoneArray = array (
"(GMT -12:00) International Date Line West" => "Etc/GMT+12",
"(GMT -11:00) Midway Island, Samoa" => "Pacific/Midway",
"(GMT -10:00) Hawaii" => "US/Hawaii",
// many many more time zones...
"(GMT +12:00) Auckland, Wellington" => "Pacific/Auckland",
"(GMT +12:00) Fiji, Kamchatka, Marshall Is." => "Asia/Kamchatka",
"(GMT +13:00) Nuku'alofa" => "Pacific/Tongatapu");
foreach ($timezoneArray as $TimezoneDescription => $TimezoneID)
{
$res = timezone_open($TimezoneID)
if($res)
{
$TimeInTimezone = new DateTime ("now",$res)
$microParts = explode(" ",microtime());
list($a,$b) = explode(".",$microParts[0]);
echo "before : ".strftime('%Y%m%d-%H%M%S',time()).".".$b;
//the following line takes alot of time :
$trans = $res->getTransitions();
$microParts_2 = explode(" ",microtime());
list($c,$d) = explode(".",$microParts_2[0]);
echo "before : ".strftime('%Y%m%d-%H%M%S',time()).".".$d; }
}
Previous Comments:
------------------------------------------------------------------------
[2009-10-26 22:49:11] [email protected]
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
And preferrably such which does not have several syntax errors and
missing parts..
------------------------------------------------------------------------
[2009-10-26 13:16:58] dor at videocells dot com
Description:
------------
Hi, it seems to me that the DateTimeZone::getTransitions() function
suffered a performance loss of some degree between php 5.2.9 and 5.3
each call to it takes about one tenth of a second.
I noticed this because I happen to have a function that recieves many
timezones and checks the transistions of each of them.
Recently I discovered a performance loss on my web gui, and after some
research i found out that for some reason the getTransitions() function
takes a noticable amount of time to run. much
more than with php 5.2.9 for the same request to complete.
note that since we worked with previous versions of php, it is called
without the new parameters added in php 5.3
Reproduce code:
---------------
$TimezonesToAdd = array (
"(GMT -12:00) International Date Line West" => "Etc/GMT+12", "(GMT
-11:00) Midway Island, Samoa" => "Pacific/Midway",
"(GMT -10:00) Hawaii" => "US/Hawaii",
// many many more time zones...
"(GMT +12:00) Auckland, Wellington" => "Pacific/Auckland",
"(GMT +12:00) Fiji, Kamchatka, Marshall Is." => "Asia/Kamchatka",
"(GMT +13:00) Nuku'alofa" => "Pacific/Tongatapu");
foreach ($TimezonesToAdd as $TimezoneDescription => $TimezoneID)
{
EnsureTimezoneExists ($TimezoneID);
self::$_AvailableTimezones [$TimezoneID] = $TimezoneDescription;
}
function EnsureTimezoneExists($TimezoneID)
{
$res = timezone_open($TimezoneID)
if($res)
{
$TimeInTimezone = new DateTime ("now",$res)
//the following line takes alot of time :
$trans = $res->getTransitions();
}
}
Expected result:
----------------
The $res->getTransitions() call should cost in the magnitude of 0.001
seconds, but instead it takes about 0.1 seconds, which is noticable.
Actual result:
--------------
microtime() calls before and after the function call, show that the
function takes about 0.1 seconds to run
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49996&edit=1