3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * test that filemtime() returns Unix timestamp (UTC) on current system */ $nowHour = isset($_SERVER['REQUEST_TIME']) ? $_SERVER['REQUEST_TIME'] : time(); $hostname = php_uname('n'); $formatRfc = 'D, d M Y H:i:s O'; $timestampStartOfUnixEpoch = 0; // start of the Unix epoch. $timestampRequest = 3600 * (int)($nowHour / 3600); $testFile = sprintf('%s/%s', php_sys_get_temp_dir(), 'test-filemtime'); if ($hostname !== 'php_shell') { printf("PHP version is %s and OS is %s\n", PHP_VERSION, PHP_OS); } printf("Testfile is '%s'.\n", $testFile); touch($testFile, $timestampStartOfUnixEpoch); php_clearstatcache(false, $testFile); $mtime = filemtime($testFile); printf("Testfile '%s' mtime should be from touch %d, is %d.\n", basename($testFile), $timestampStartOfUnixEpoch, $mtime); printf("The mtime represents %s\n", date($formatRfc, $mtime)); touch($testFile, $timestampRequest); php_clearstatcache(false, $testFile); $mtime = filemtime($testFile); printf("Testfile '%s' mtime should be from touch %d, is %d.\n", basename($testFile), $timestampRequest, $mtime); printf("The mtime represents %s\n", date($formatRfc, $mtime)); unlink($testFile); /** * NOTE: This function is incomplete, the fallback is to '/tmp' which targets Unix-like. * * @return string */ function php_sys_get_temp_dir() { // (PHP 5 >= 5.2.1) if (function_exists('sys_get_temp_dir')) { return sys_get_temp_dir(); } // (PHP 4 >= 4.3.0, PHP 5) if (function_exists('stream_get_meta_data')) { $handle = tmpfile(); // (PHP 4, PHP 5) $meta = stream_get_meta_data($handle); // (PHP 5 >= 5.1.0) if (isset($meta['uri'])) { return dirname($meta['uri']); } } // emulate PHP 4 <= 4.0.6 tempnam() behavior, fragile foreach(array('TMPDIR', 'TMP') as $key) { if (isset($_ENV[$key])) { return $_ENV[$key]; } } // fallback for Unix-like (php_shell specifically) return '/tmp'; } /** * @param $clear_realpath_cache * @param $filename * @link http://php.net/manual/en/function.version-compare.php */ function php_clearstatcache($clear_realpath_cache, $filename) { if (version_compare(PHP_VERSION, '5.3.0') >= 0) { clearstatcache($clear_realpath_cache, $filename); } else { clearstatcache(); } }
Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.2 - 5.1.6, 5.2.0 - 5.2.17, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.31, 7.4.0 - 7.4.25, 8.0.0 - 8.0.12
Testfile is '/tmp/test-filemtime'. Testfile 'test-filemtime' mtime should be from touch 0, is 1408899611. The mtime represents Sun, 24 Aug 2014 17:00:11 +0000 Testfile 'test-filemtime' mtime should be from touch 1408899600, is 1408899611. The mtime represents Sun, 24 Aug 2014 17:00:11 +0000
Output for 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Testfile is '/tmp/test-filemtime'. Testfile 'test-filemtime' mtime should be from touch 0, is 1408899611. Warning: date(): 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 the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /in/jGmdV on line 24 The mtime represents Sun, 24 Aug 2014 17:00:11 +0000 Testfile 'test-filemtime' mtime should be from touch 1408899600, is 1408899611. Warning: date(): 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 the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /in/jGmdV on line 30 The mtime represents Sun, 24 Aug 2014 17:00:11 +0000
Output for 5.3.0 - 5.3.29
Testfile is '/tmp/test-filemtime'. Testfile 'test-filemtime' mtime should be from touch 0, is 1408899611. Warning: date(): 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 'UTC' for 'UTC/0.0/no DST' instead in /in/jGmdV on line 24 The mtime represents Sun, 24 Aug 2014 17:00:11 +0000 Testfile 'test-filemtime' mtime should be from touch 1408899600, is 1408899611. Warning: date(): 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 'UTC' for 'UTC/0.0/no DST' instead in /in/jGmdV on line 30 The mtime represents Sun, 24 Aug 2014 17:00:11 +0000
Output for 5.1.0 - 5.1.1
Testfile is '/tmp/test-filemtime'. Testfile 'test-filemtime' mtime should be from touch 0, is 1408899611. The mtime represents Sun, 24 Aug 2014 18:00:11 +0100 Testfile 'test-filemtime' mtime should be from touch 1408899600, is 1408899611. The mtime represents Sun, 24 Aug 2014 18:00:11 +0100

preferences:
255.97 ms | 402 KiB | 386 Q