我希望能够在应用程序中显示它是否运行最新的PHP版本,方法是将phpversion()
的返回值与http://php.net/ChangeLog-5.php的最新值进行比较 - 我能否更好地检查一下解析上述网址的HTML?
答案 0 :(得分:10)
更新了答案
访问http://www.php.net/releases时,我注意到在右侧面板上显示:
想要一个PHP序列化的PHP版本列表吗?
将
?serialize
添加到网址
只想要PHP 5版本?&version=5
最后3?&max=3
想要一个PHP版本的JSON列表吗?
将
?json
添加到网址
只想要PHP 5版本?&version=5
最后3?&max=3
因此,无论您是使用PHP序列化版本还是JSON,都可以使用http://www.php.net/releases?serialize或http://www.php.net/releases?json
如果您只想查看版本5.x.x,可以使用:
http://www.php.net/releases?json&version=5(如果您想使用JSON,请将json
替换为serialize
)
原始答案(严重,请参阅Nannes评论)
解析HTML结构当然是个坏主意,因为当引入php.net的新主页时,标签的结构可能会发生变化。
在搜索解决方案时,我遇到了这个Atom供稿:http://php.net/releases/feed.php
由于这是一个Atom Feed,因此结构不会改变,因为它是由标准的 1] 定义的。然后,您可以使用PHP的默认XML函数 2] 来解析feed > entry:first-child > php:version
(CSS-Syntax用于演示目的。:first-child
是第一个子选择器{{1直接子选择器)然后使用PHP >
3] 。
更多信息:
答案 1 :(得分:0)
这是YMMV的概念验证。但是假设您有curl
可用,您可以查询GitHub API,从GitHub PHP Mirror检索,过滤和排序最新的标签。不需要身份验证。
或者你可以检索所有分支,但粗略一瞥就表明标记了最新版本。
这里有一些代码可以帮助您入门:
<?php
$endpoint = 'https://api.github.com/repos/php/php-src/tags';
$userAgent = 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $endpoint);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if (200 !== $code) {
throw new RuntimeException('HTTP response code %d encountered', $code);
}
$data = json_decode($json, true);
$tags = array_column($data, 'name');
// exclude all RC/alpha/beta and any tag not starting with php-*
$filtered = preg_grep('/^php-\d+.\d+.\d+$/', $tags);
rsort($filtered, SORT_NATURAL);
var_dump($filtered);
这会产生类似的结果:
array(10) {
[0] =>
string(10) "php-5.6.12"
[1] =>
string(10) "php-5.6.11"
[2] =>
string(10) "php-5.6.10"
[3] =>
string(9) "php-5.6.9"
[4] =>
string(9) "php-5.6.8"
[5] =>
string(9) "php-5.6.7"
[6] =>
string(9) "php-5.6.6"
[7] =>
string(9) "php-5.6.5"
[8] =>
string(9) "php-5.6.4"
[9] =>
string(9) "php-5.6.3"
}
请注意,我明确设置了用户代理,因为GitHub在没有用户代理的情况下无法返回200
响应。
一旦你有这个,你可以随意使用它; e.g:
$latest = array_shift($filtered);
printf('The latest version of PHP is %s. You are using %s', $latest, phpversion());
最新版本的PHP是php-5.6.12。您正在使用5.6.9
希望这会有所帮助:)
答案 2 :(得分:0)
$data = @file_get_contents('https://www.php.net/releases/?json');
$data = @json_decode($data, true);
$data = current($data);
echo 'Latest version: ' . $data['version'];