過去リリースされているPHPの全バージョン一覧を取得

  • 5
    いいね
  • 1
    コメント

http://php.net には、リリースされているPHPのバージョン一覧が載っている。

http://jp2.php.net/releases/

実はjsonやphp serialize形式でもこの結果を取得できるので、これを利用して、PHPのバージョン一覧を取得するスクリプトを書いた。

php-versions.php
<?php

function main($argc, array $argv)
{
    $host = getenv('PHP_NET_HOST');
    if (!$host) {
        $host = 'http://jp2.php.net';
    }

    $phpall = download($host . '/releases/index.php?serialize');
    $phpall = unserialize($phpall);
    foreach ($phpall as $major => $info) {
        $phpver = download("$host/releases/index.php?serialize&version=$major&max=1000");
        $phpver = unserialize($phpver);
        $phpver = array_keys($phpver);

        say("\n## $major");
        usort($phpver, 'version_compare');

        $miner = 0;
        $i = 0;
        $basever = "$major.$miner";
        say("### $basever");
        foreach ($phpver as $ver) {
            if (0 !== strncmp($ver, $basever, strlen($basever))) {
                ++$miner;
                $basever = "$major.$miner";
                say("\n\n### $basever");
                $i = 0;
            }
            echo "$ver\t";
            if (++$i > 9) {
                echo PHP_EOL;
                $i = 0;
            }
        }

        echo PHP_EOL;
    }

    return 0;
}

function say($str)
{
    echo $str, PHP_EOL;
}

interface CurlException
{
}

class ConnectException extends RuntimeException implements CurlException
{
}

class HttpException extends RuntimeException implements CurlException
{
}

function download($url) {
    static $ch;
    if (!$ch) $ch = curl_init();

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => '',
    ]);

    $response = curl_exec($ch);

    $errno = curl_errno($ch);
    if ($errno !== CURLE_OK) {
        throw new ConnectException(curl_error($ch), $errno);
    }

    $info = curl_getinfo($ch);
    if ($info['http_code'] >= 400) {
        throw new HttpException($info['http_code'], $response);
    }

    return $response;
}

die(main($argc, $argv));
php php-versions.php

実行結果例

こうやって見ると、PHP5.4/5.5時代が結構長かったんだなーと思う。

## 7
### 7.0
7.0.0   7.0.1   7.0.2   7.0.3   7.0.4   7.0.5   7.0.6   7.0.7   7.0.8   7.0.9   
7.0.10  7.0.11  7.0.12  7.0.13  

## 5
### 5.0
5.0.0   5.0.1   5.0.2   5.0.3   5.0.4   5.0.5   

### 5.1
5.1.0   5.1.1   5.1.2   5.1.3   5.1.4   5.1.5   5.1.6   

### 5.2
5.2.0   5.2.1   5.2.2   5.2.3   5.2.4   5.2.5   5.2.6   5.2.8   5.2.9   5.2.10  
5.2.11  5.2.12  5.2.13  5.2.14  5.2.15  5.2.16  5.2.17  

### 5.3
5.3.0   5.3.1   5.3.2   5.3.3   5.3.4   5.3.5   5.3.6   5.3.7   5.3.8   5.3.9   
5.3.10  5.3.11  5.3.12  5.3.13  5.3.14  5.3.15  5.3.16  5.3.17  5.3.18  5.3.19  
5.3.20  5.3.21  5.3.22  5.3.23  5.3.24  5.3.25  5.3.26  5.3.27  5.3.28  5.3.29  


### 5.4
5.4.0   5.4.1   5.4.2   5.4.3   5.4.4   5.4.5   5.4.6   5.4.7   5.4.8   5.4.9   
5.4.10  5.4.11  5.4.12  5.4.13  5.4.14  5.4.15  5.4.16  5.4.17  5.4.18  5.4.19  
5.4.20  5.4.21  5.4.22  5.4.23  5.4.24  5.4.25  5.4.26  5.4.27  5.4.28  5.4.29  
5.4.30  5.4.31  5.4.32  5.4.33  5.4.34  5.4.35  5.4.36  5.4.37  5.4.38  5.4.39  
5.4.40  5.4.41  5.4.42  5.4.43  5.4.44  5.4.45  

### 5.5
5.5.0   5.5.1   5.5.2   5.5.3   5.5.4   5.5.5   5.5.6   5.5.7   5.5.8   5.5.9   
5.5.10  5.5.11  5.5.12  5.5.13  5.5.14  5.5.15  5.5.16  5.5.17  5.5.18  5.5.19  
5.5.20  5.5.21  5.5.22  5.5.23  5.5.24  5.5.25  5.5.26  5.5.27  5.5.28  5.5.29  
5.5.30  5.5.31  5.5.32  5.5.33  5.5.34  5.5.35  5.5.36  5.5.37  5.5.38  

### 5.6
5.6.0   5.6.1   5.6.2   5.6.3   5.6.4   5.6.5   5.6.6   5.6.7   5.6.8   5.6.9   
5.6.10  5.6.11  5.6.12  5.6.13  5.6.14  5.6.15  5.6.16  5.6.17  5.6.18  5.6.19  
5.6.20  5.6.21  5.6.22  5.6.23  5.6.24  5.6.25  5.6.26  5.6.27  5.6.28  

## 4
### 4.0
4.0.0   4.0.1   4.0.2   4.0.3   4.0.4   4.0.5   4.0.6   

### 4.1
4.1.0   4.1.1   4.1.2   

### 4.2
4.2.0   4.2.1   4.2.2   4.2.3   

### 4.3
4.3.0   4.3.1   4.3.2   4.3.3   4.3.4   4.3.5   4.3.6   4.3.7   4.3.8   4.3.9   
4.3.10  4.3.11  

### 4.4
4.4.0   4.4.1   4.4.2   4.4.3   4.4.4   4.4.5   4.4.6   4.4.7   4.4.8   4.4.9   


## 3
### 3.0
3.0.x (latest)