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)