Is it possible in php to get server php version release date?
So let's say I've got php 5.3.28.
Than something like phpdate() should return 11 Jul 2013.
You mean Build Date?
function phpdate($format="d M Y")
{
ob_start(); phpinfo(1);
if(preg_match('~Build Date (?:=> )?\K.*~', strip_tags(ob_get_clean()), $out))
return date($format, strtotime($out[0]));
}
echo phpdate();
04 Mar 2013
Test at eval.in (link expires soon)
Update: To get the actual release date on Linux, could match phpversion() in the changelog:
// match phpversion() in changelog
function phpReleaseDate()
{
$log = `zgrep '^[0-9].*PHP' /usr/share/doc/php5/changelog.gz`;
$ver = preg_replace('/^\d+\.\d+\.\d+\K.*/', "", phpversion());
$find = '/^(\d{2} [A-Z][a-z]{2} \d{4}), PHP ('.preg_quote($ver).')/';
if(preg_match($find, $log, $out))
return array('ver' => $out[2], 'date' => $out[1]);
}
print_r(phpReleaseDate());
Array ( [ver] => 5.3.3 [date] => 22 Jul 2010 )
Tried this with Debian Linux.
I would use phpinfo() and get the Build Date from there.
There is a pretty good way of getting an array version of phpinfo in one of the examples here.
Once you have that function. Do:
$php_info = phpinfo_array(true);
$builddate = $php_info['PHP Configuration']['Build Date'];
Then I would make a feature request for it!
Basing on Antony D'Andrea link I've modified slightly phpinfo_array function so you can use it like phpinfo_array("Build Date");
I've also created phpdate($format) function that handles it.
function phpinfo_array($info=false){
/* Andale! Andale! Yee-Hah! */
ob_start();
phpinfo(-1);
$pi = preg_replace(
array('#^.*<body>(.*)</body>.*$#ms', '#<h2>PHP License</h2>.*$#ms',
'#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#',
"#[ \t]+#", '# #', '# +#', '# class=".*?"#', '%'%',
'#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>'
.'<h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#',
'#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#',
'#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#',
"# +#", '#<tr>#', '#</tr>#'),
array('$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ',
'<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$2</td></tr>'.
"\n".'<tr><td>PHP Egg</td><td>$1</td></tr>',
'<tr><td>PHP Credits Egg</td><td>$1</td></tr>',
'<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" .
'<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'),
ob_get_clean()
);
$sections = explode('<h2>', strip_tags($pi, '<h2><th><td>'));
unset($sections[0]);
$pi = array();
foreach($sections as $section){
$n = substr($section, 0, strpos($section, '</h2>'));
preg_match_all(
'#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#',
$section,
$askapache,
PREG_SET_ORDER
);
foreach($askapache as $m)
$pi[$m[1]]=(!isset($m[3])||$m[2]==$m[3])?$m[2]:array_slice($m,2);
}
if ( $info && isset( $pi[$info] ) ) return $pi[$info];
return $pi;
}
And phpdate function then
function phpdate($format = "d M Y") {
return date($format, strtotime( phpinfo_array("Build Date") ));
}
As I've just copied it, I have no idea what happens in this magic regex.
phpinfo_array("Build Date"); //returns Apr 10 2014 17:15:04
phpdate("d M Y"); //returns 10 Apr 2014