查找PHP最新版本

查找PHP最新版本,php,Php,我希望通过比较phpversion()的返回值与最新的源代码,能够在应用程序中显示它是否运行最新的PHP版本-我可以用比解析所述URL的HTML更好的方法来检查这一点吗?更新的答案 参观时,我注意到右边的面板上写着: 想要PHP版本的PHP序列化列表吗? 添加?将序列化到url 只想要PHP5版本&version=5 最后三个&max=3 想要PHP版本的JSON列表吗? 将?json添加到url 只想要PHP5版本&version=5 最后三个&max=3 因此,无论您是希望使用PHP序列化版

我希望通过比较
phpversion()
的返回值与最新的源代码,能够在应用程序中显示它是否运行最新的PHP版本-我可以用比解析所述URL的HTML更好的方法来检查这一点吗?

更新的答案

参观时,我注意到右边的面板上写着:

想要PHP版本的PHP序列化列表吗?

添加
?将
序列化到url
只想要PHP5版本<代码>&version=5

最后三个<代码>&max=3

想要PHP版本的JSON列表吗?

?json
添加到url
只想要PHP5版本<代码>&version=5
最后三个<代码>&max=3

因此,无论您是希望使用PHP序列化版本还是JSON,都可以使用或

如果只想查看版本5.x.x,可以使用:

(如果要使用JSON,请将
JSON
替换为
序列化

原始答案(关键,见Nannes评论)

解析HTML结构当然是个坏主意,因为当引入新的php.net主页时,标签的结构可能会改变

在寻找解决方案时,我遇到了以下Atom提要:

由于这是Atom馈送,因此结构不会改变,因为它是由标准1]定义的。然后,您可以使用PHP的默认XML函数2]解析
feed>条目:first child>PHP:version
(用于演示的CSS语法。
:first child
是第一个子选择器,
是直接子选择器),然后使用PHP的
version\u compare

更多信息:

  • 1]
  • 2]
  • 3]

这是一个概念证明,所以YMMV。但是,假设您有可用的
curl
,您可以查询githubapi,以检索、过滤和排序来自数据库的最新标记。不需要身份验证

或者,您可以检索所有分支,但粗略地看一眼,就会发现最新版本已被标记

以下是一些让您开始学习的代码:

<?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);
注意,我显式地设置了一个用户代理,因为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


希望这有帮助:)

使用curl获取页面(或文件内容),加载到DOMDocument,创建xpath查询以查找节点并返回值。。。。傻瓜@RamRaider>你描述的是“解析HTML”,OP不希望看到…看我的更新答案,我找到了一个简单易用的官方支持的解决方案这似乎是目前最好的选择。结构当然可以改变,但可能性较小。这里可能存在的问题是,无法保证第一个子版本是最高版本,因为其中包含所有受支持版本的版本。因此,您可以检查所有条目并获取要检查的最高版本,或者(可能更好?)仅与您正在运行的主要版本进行比较,例如:仅检查5.5.x和5.5。?等等(但您应该添加一个“是否仍受支持”检查,这可能会更难)@Nanne首先,结构不会改变,因为它是根据
xmlns
验证到
http://www.w3.org/2005/Atom
,这是官方标准(有关更多信息,请参阅)。第二,你是对的,这可能会导致错误。但你的方法应该能解决问题。我会考虑一下,并相应地更新我的答案。感谢您的支持,我更新了我的答案,因为我发现了一个更好的解决方案,使用PHP.net
?serialize
?JSON
选项提供的PHP序列化或JSON。美好的那肯定是个赢家。伟大的工作:)代码转储不能得到好的答案。您应该解释这是如何以及为什么解决他们的问题的。我建议阅读“。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。在解释代码时,用户也可能会给予积极的反馈/支持。
$latest = array_shift($filtered);
printf('The latest version of PHP is %s. You are using %s', $latest, phpversion());
$data = @file_get_contents('https://www.php.net/releases/?json');
$data = @json_decode($data, true);
$data = current($data);
echo 'Latest version: ' . $data['version'];