Search code examples
phpversionmaintainability

PHP - get current php version release date


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.


Solution

  • 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]+#", '#&nbsp;#', '#  +#', '# class=".*?"#', '%&#039;%',
              '#<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