LoginSignup
4
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-12

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

実は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)  
4
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6