Bug #54250 [Com]: date_default_timezone_set stat()'s whole /usr/share/zoneinfo upon first call

From: Date: Tue, 15 Mar 2011 12:01:55 +0000
Subject: Bug #54250 [Com]: date_default_timezone_set stat()'s whole /usr/share/zoneinfo upon first call
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-159487@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=54250&edit=1

 ID:                 54250
 Comment by:         maciej at wiercinski dot net
 Reported by:        maciej at wiercinski dot net
 Summary:            date_default_timezone_set stat()'s whole
                     /usr/share/zoneinfo upon first call
 Status:             Bogus
 Type:               Bug
 Package:            Date/time related
 Operating System:   Linux 2.6
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

Thanks for the update, it's indeed Debian's fault. 

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618462


Previous Comments:
------------------------------------------------------------------------
[2011-03-14 19:36:38] derick@php.net

Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system
is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

Complain at your distribution for messing it up.

------------------------------------------------------------------------
[2011-03-14 19:27:58] rasmus@php.net

I think this is going to make Derick's head explode :)
This is likely due to the fact that Ubuntu patches PHP to use the system
timezone 
info as opposed to the default bundled data. If you build a clean
version of PHP 
on Ubuntu using the code we actually distribute, I think you will find
that the 
problem goes away.

------------------------------------------------------------------------
[2011-03-14 19:11:29] maciej at wiercinski dot net

Description:
------------
Upon first call to date_default_timezone_set, PHP syscalls stat() on all
the 
files in /usr/share/zoneinfo. 

It can be easily checked by running: 

$ strace -s 100 -r php -n -r"date_default_timezone_set('GMT');" 2>&1 |
grep 
zoneinfo

On average Debian/Ubuntu system it accounts for little over 600
syscalls.

Reproduced on: 

PHP 5.3.5-1 with Suhosin-Patch (cli) (built: Feb 19 2011 01:57:59) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
    with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH

PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug  4 2010

03:25:57) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Xdebug v2.0.3, Copyright (c) 2002-2007, by Derick Rethans

PHP 5.3.2-1ubuntu4.7 with Suhosin-Patch (cli) (built: Jan 12 2011
18:36:08) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

*Not* reproduced on: 

PHP 5.3.3-0.dotdeb.1 with Suhosin-Patch (cli) (built: Oct  1 2010
08:49:29) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
    with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins
GmbH




Test script:
---------------
$ strace -s 100 -r php -n -r"date_default_timezone_set('GMT');" 2>&1 |
grep zoneinfo | head -10
     0.000190 open("/usr/share/zoneinfo/",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
     0.000046 stat64("/usr/share/zoneinfo//localtime",
{st_mode=S_IFREG|0644, st_size=3661, ...}) = 0
     0.000112 stat64("/usr/share/zoneinfo//Zulu", {st_mode=S_IFREG|0644,
st_size=118, ...}) = 0
     0.000101 stat64("/usr/share/zoneinfo//WET", {st_mode=S_IFREG|0644,
st_size=1873, ...}) = 0
     0.000100 stat64("/usr/share/zoneinfo//W-SU", {st_mode=S_IFREG|0644,
st_size=2194, ...}) = 0
     0.000098 stat64("/usr/share/zoneinfo//Universal",
{st_mode=S_IFREG|0644, st_size=118, ...}) = 0
     0.000101 stat64("/usr/share/zoneinfo//UTC", {st_mode=S_IFREG|0644,
st_size=118, ...}) = 0
     0.000099 stat64("/usr/share/zoneinfo//US", {st_mode=S_IFDIR|0755,
st_size=352, ...}) = 0
     0.000097 stat64("/usr/share/zoneinfo//UCT", {st_mode=S_IFREG|0644,
st_size=118, ...}) = 0
     0.000099 stat64("/usr/share/zoneinfo//Turkey",
{st_mode=S_IFREG|0644, st_size=2721, ...}) = 0

$ strace -s 100 -r php -n -r"date_default_timezone_set('GMT');" 2>&1 |
grep zoneinfo | wc -l
626






------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=54250&edit=1


Thread (11 messages)

« previous php.bugs (#159487) next »