ID: 34700 Updated by: [EMAIL PROTECTED] Reported By: six at aegis-corp dot org -Status: Open +Status: Suspended Bug Type: Date/time related Operating System: linux 2.4 PHP Version: 5.1.0RC1 New Comment:
Right, the timezone lookup is currently slower. There needs to be a cache layer in front of it. It will come eventually. We know about it. Previous Comments: ------------------------------------------------------------------------ [2005-10-01 19:11:16] six at aegis-corp dot org sniper: the latest cvs exhibits the same problem. rasmus: $_SERVER["REQUEST_TIME"] is a nice addition, but in my case I just want to convert timestamps stored in a db to a readable format, hence no need for the current time at all ... the following patch address the unneeded call to time(NULL), strace confirms it, but the performance is still not on par with 5.0 --- php5-200510011430/ext/date/php_date.c.orig 2005-10-01 18:16:55.000000000 +0200 +++ php5-200510011430/ext/date/php_date.c 2005-10-01 18:17:48.000000000 +0200 @@ -479,11 +479,23 @@ { char *format; int format_len; - time_t ts = time(NULL); + time_t ts; char *string; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { - RETURN_FALSE; + switch (ZEND_NUM_ARGS()) { + case 2: + if (zend_parse_parameters(2 TSRMLS_CC, "sl", &format, &format_len, &ts) == FAILURE) { + RETURN_FALSE; + } + break; + case 1: + if (zend_parse_parameters(1 TSRMLS_CC, "s", &format, &format_len) == FAILURE) { + RETURN_FALSE; + } + ts = time(NULL); + break; + default: + WRONG_PARAM_COUNT; } string = php_format_date(format, format_len, ts, localtime TSRMLS_CC); ------------------------------------------------------------------------ [2005-10-01 17:13:34] [EMAIL PROTECTED] One of the new things in PHP 5.1 is the $_SERVER['REQUEST_TIME'] variable that gets set to the request time. When running under Apache this comes directly from the time syscall Apache makes for every request, so by using this you can actually eliminate any time-related syscalls at the PHP level and still do time stuff in a PHP script. But yes, it looks like there are a few things that can be cleaned up here. ------------------------------------------------------------------------ [2005-10-01 17:05:36] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2005-10-01 16:07:27] six at aegis-corp dot org Description: ------------ performance of the date() function has taken a huge hit between PHP 5.0 and 5.1. i believe this is because of an unneeded syscall when a second argument is given. Reproduce code: --------------- <? for ($a = 0; $a < 100000; $a++) date("Y-m-d H:i:s", $a); ?> Expected result: ---------------- time /usr/local/bin/php-cli-5.0.4 datetest.php real 0m2.022s user 0m1.910s sys 0m0.000s Actual result: -------------- time /usr/local/bin/php-cli-5.1.0RC1 datetest.php real 0m10.001s user 0m8.120s sys 0m0.130s 5.1.0 takes more than 4x the time to complete than 5.0.4 with an strace, I can see that 5.1.0RC1 makes one (probably unneeded) time() syscall per call to date(), which 5.0.4 does not ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34700&edit=1