【问题标题】:How do PHP releases match "API=yyyymmdd" signature/tag?PHP 版本如何匹配“API=yyyymmdd”签名/标签?
【发布时间】:2014-02-26 18:31:03
【问题描述】:

是否有明确可靠的来源可以查明哪个 PHP 发行版本 x.y.z 带有/使用哪个“API=yyyymmdd”签名/标签?

【问题讨论】:

    标签: php api versioning


    【解决方案1】:

    PHP 的版本控制存储库是 PHP 版本及其 API 日期版本之间相关性的权威来源。请记住,只有 PHP 的主要版本(例如 7.4)具有唯一的日期版本。

    新的和改进的

    (对于懒惰和不负责任的人)

     curl https://gist.githubusercontent.com/tox2ik/8bafc9132fec4200312bc65005aec99c/raw/b7d921f157320b0cf451ae53577923bdf92801fc/ver.sh | bash
    

    2021 年 1 月的结果

    $ time bash ver.sh 
    php-4.0.3   19990421  4.0.3
    php-4.0.6   20010119  4.0.6
    php-4.2.3   20010901  4.2.3
    php-4.4.9   20020918  4.4.9
    php-5.0.5   20031224  5.0.5
    php-5.2.17  20041225  5.2.17
    php-5.3.29  20090626  5.3.29
    php-5.4.45  20100412  5.4.45
    php-5.5.38  20121113  5.5.38
    php-5.6.40  20131106  5.6.40
    php-7.0.33  20151012  7.0.33
    php-7.1.33  20160303  7.1.33
    php-7.2.34  20170718  7.2.34
    php-7.3.27  20180731  7.3.27
    php-7.4.15  20190902  7.4.15
    php-8.0.2   20200930  8.0.2
    time: Real 0m1.1s  User 0m0.8s  System 0m0.7s
    
    

    从 php git repo 运行的脚本:

    $ cat ver.sh 
    git tag \
      | grep -Eo 'php-([0-9]+\.?){3}$' \
      | sort -ut. -k1.5,1n -k2,2n -k3,3n \
      | while read tag; do
      echo $tag `
      git show $tag:main/php.h | sed -n ' /#define PHP_API_VERSION /{ s///; p; q } '
      ` `
      git show $tag:main/php_version.h | sed -n " /#define PHP_VERSION /{ s///; s/[\"']//g; p; q } "
      `
    done \
     | awk '{ ap[$2]=$0 } END { for (i in ap) { print ap[i] } }' \
     | column -t
    

    删除最后一个 awk 部分以列出所有 x.y.z 版本。


    下面的原始答案


    (假设是 bash)

    获取 PHP。

    git clone https://github.com/php/php-src.git
    cd php-src
    

    相关标签列表

    tags() {
        git tag |
        sed -En ' /(RC|alpha|beta)/d ; /php-5/p ; ' | 
        sort -t. -k1,1n -k2,2n -k3,3n
    }
    

    main/php.h 的大约 270 个日志条目(其中定义了 API 版本)。

    go_crazy() {
        git log  main/php.h | 
        awk '/^commit / { print $2 }' | 
        tac
    }
    

    匹配相关行并删除杂项。

    api() { 
        sed -n ' /#define PHP_API_VERSION /{
            s///; p; q } ' main/php.h
    }
    
    php_version () { 
        sed -n " /#define PHP_VERSION /{ 
            s///; 
            s/[\"']//g; 
            p; q 
        } " main/php_version.h
    }
    

    去做吧!

    for i in `tags`
    do
        
        git co -f $i
        echo $i `api`
    
    done  > /tmp/tag.apis; 
    
    for i in `go_crazy`
    do
        
        git co -f $i
        echo `php_version` `api`
    
    done > /tmp/many.versions
    

    结果

    $ awk '{ print $2, $1 }' /tmp/many.versions /tmp/tag.apis  | sort -u -k1,1
    19990421 4.0pa1
    20010119 4.0.5-dev
    20010901 4.0.8-dev
    20020307 4.3.0-dev
    20020918 4.3.0-dev
    20030518 5.0.0-dev
    20030820 5.0.0b2-dev
    20031103 5.0.0b3-dev
    20031224 5.0.0RC1-dev
    20041225 5.1.0-dev
    20090626 5.3.0
    20100412 5.3.99-dev
    20121113 5.5.0-dev
    20131106 5.6.0-dev
    20131218 5.7.0-dev
     4.0pa1
     php-5.0.1b1
    

    对于好奇的人

    以 php- 开头的版本是 git 标签,可能是官方版本。

    $ awk 'NF==2 { print $2, $1 }' /tmp/tag.apis /tmp/many.versions  | sort 
      
    19990421 4.0.0
    19990421 4.0.1
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.1-dev
    19990421 4.0.2
    19990421 4.0.2
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.2-dev
    19990421 4.0.3-dev
    19990421 4.0.4-dev
    19990421 4.0.4-dev
    19990421 4.0.5-dev
    19990421 4.0.5-dev
    19990421 4.0B1
    19990421 4.0B2
    19990421 4.0b2-dev
    19990421 4.0b2-dev
    19990421 4.0b2-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-dev
    19990421 4.0B3-RC2
    19990421 4.0b3-RC5
    19990421 4.0b3-RC5
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-dev
    19990421 4.0b4-rc1
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0b5-dev
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0pa1
    19990421 4.0RC1
    19990421 4.0RC1
    19990421 4.0RC2
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    19990421 4.0RC2-dev
    20010119 4.0.5-dev
    20010119 4.0.5-dev
    20010119 4.0.5-dev
    20010119 4.0.5-dev
    20010119 4.0.5-dev
    20010119 4.0.6-dev
    20010119 4.0.6-dev
    20010119 4.0.6-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010119 4.0.7-dev
    20010901 4.0.8-dev
    20010901 4.0.8-dev
    20010901 4.0.8-dev
    20010901 4.2.0-dev
    20010901 4.2.1-dev
    20010901 4.2.1-dev
    20010901 4.2.1-dev
    20010901 4.2.1-dev
    20010901 4.2.1-dev
    20010901 4.2.1-dev
    20010901 4.3.0-dev
    20010901 4.3.0-dev
    20010901 4.3.0-dev
    20010901 4.3.0-dev
    20010901 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020307 4.3.0-dev
    20020918 4.3.0-dev
    20020918 4.4.0-dev
    20020918 4.4.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20020918 5.0.0-dev
    20030518 5.0.0b2-dev
    20030518 5.0.0b2-dev
    20030518 5.0.0-dev
    20030518 5.0.0-dev
    20030518 5.0.0-dev
    20030518 php-5.0.0b1
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 5.0.0b2-dev
    20030820 php-5.0.0b2
    20031103 5.0.0b3-dev
    20031103 php-5.0.0b3
    20031224 5.0.0RC1-dev
    20031224 5.0.0RC1-dev
    20031224 5.0.0RC1-dev
    20031224 5.1.0-dev
    20031224 5.1.0-dev
    20031224 5.1.0-dev
    20031224 5.1.0-dev
    20031224 5.1.0-dev
    20031224 5.1.0-dev
    20031224 php-5.0.0
    20031224 php-5.0.0b4
    20031224 php-5.0.1
    20031224 php-5.0.2
    20031224 php-5.0.3
    20031224 php-5.0.4
    20031224 php-5.0.5
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.0-dev
    20041225 5.1.2-dev
    20041225 5.1.2RC2-dev
    20041225 5.1.3-dev
    20041225 5.1.3-dev
    20041225 5.2.0-dev
    20041225 5.2.0-dev
    20041225 5.2.0RC4-dev
    20041225 5.2.1-dev
    20041225 5.2.1-dev
    20041225 5.2.1RC2-dev
    20041225 5.2.1RC2-dev
    20041225 5.2.5-dev
    20041225 5.3.0alpha2-dev
    20041225 5.3.0alpha2-dev
    20041225 5.3.0alpha2-dev
    20041225 5.3.0alpha2-dev
    20041225 5.3.0alpha2-dev
    20041225 5.3.0alpha3-dev
    20041225 5.3.0alpha4-dev
    20041225 5.3.0-dev
    20041225 5.3.0-dev
    20041225 5.3.0-dev
    20041225 5.3.0-dev
    20041225 5.3.0-dev
    20041225 php-5.1.0
    20041225 php-5.1.0b1
    20041225 php-5.1.0b2
    20041225 php-5.1.0b3
    20041225 php-5.1.1
    20041225 php-5.1.2
    20041225 php-5.1.3
    20041225 php-5.1.4
    20041225 php-5.1.5
    20041225 php-5.1.6
    20041225 php-5.2.0
    20041225 php-5.2.1
    20041225 php-5.2.10
    20041225 php-5.2.11
    20041225 php-5.2.12
    20041225 php-5.2.13
    20041225 php-5.2.14
    20041225 php-5.2.15
    20041225 php-5.2.16
    20041225 php-5.2.17
    20041225 php-5.2.2
    20041225 php-5.2.3
    20041225 php-5.2.4
    20041225 php-5.2.5
    20041225 php-5.2.6
    20041225 php-5.2.7
    20041225 php-5.2.8
    20041225 php-5.2.9
    20090626 5.3.0
    20090626 5.3.3-dev
    20090626 5.3.3-dev
    20090626 5.3.3-dev
    20090626 5.3.3-dev
    20090626 5.3.3-dev
    20090626 5.3.99-dev
    20090626 php-5.3.0
    20090626 php-5.3.1
    20090626 php-5.3.10
    20090626 php-5.3.11
    20090626 php-5.3.12
    20090626 php-5.3.13
    20090626 php-5.3.14
    20090626 php-5.3.15
    20090626 php-5.3.16
    20090626 php-5.3.17
    20090626 php-5.3.18
    20090626 php-5.3.19
    20090626 php-5.3.2
    20090626 php-5.3.20
    20090626 php-5.3.21
    20090626 php-5.3.22
    20090626 php-5.3.23
    20090626 php-5.3.24
    20090626 php-5.3.25
    20090626 php-5.3.26
    20090626 php-5.3.27
    20090626 php-5.3.28
    20090626 php-5.3.3
    20090626 php-5.3.4
    20090626 php-5.3.5
    20090626 php-5.3.6
    20090626 php-5.3.7
    20090626 php-5.3.8
    20090626 php-5.3.9
    20100412 5.3.99-dev
    20100412 5.3.99-dev
    20100412 5.3.99-dev
    20100412 5.3.99-dev
    20100412 5.3.99-dev
    20100412 5.3.99-dev
    20100412 5.5.0-dev
    20100412 5.5.0-dev
    20100412 5.5.0-dev
    20100412 5.5.0-dev
    20100412 5.5.0-dev
    20100412 php-5.4.0
    20100412 php-5.4.1
    20100412 php-5.4.10
    20100412 php-5.4.11
    20100412 php-5.4.12
    20100412 php-5.4.13
    20100412 php-5.4.14
    20100412 php-5.4.15
    20100412 php-5.4.16
    20100412 php-5.4.17
    20100412 php-5.4.18
    20100412 php-5.4.19
    20100412 php-5.4.2
    20100412 php-5.4.20
    20100412 php-5.4.21
    20100412 php-5.4.22
    20100412 php-5.4.23
    20100412 php-5.4.24
    20100412 php-5.4.25
    20100412 php-5.4.26
    20100412 php-5.4.3
    20100412 php-5.4.4
    20100412 php-5.4.5
    20100412 php-5.4.6
    20100412 php-5.4.7
    20100412 php-5.4.8
    20100412 php-5.4.9
    20121113 5.5.0-dev
    20121113 5.5.0-dev
    20121113 5.6.0-dev
    20121113 5.6.0-dev
    20121113 php-5.5.0
    20121113 php-5.5.1
    20121113 php-5.5.10
    20121113 php-5.5.2
    20121113 php-5.5.3
    20121113 php-5.5.4
    20121113 php-5.5.5
    20121113 php-5.5.6
    20121113 php-5.5.7
    20121113 php-5.5.8
    20121113 php-5.5.9
    20131106 5.6.0-dev
    20131106 5.6.0-dev
    20131106 5.6.0-dev
    20131106 5.6.0-dev
    20131218 5.7.0-dev
    20131218 5.7.0-dev
    20131218 5.7.0-dev
    

    【讨论】:

    • 我的 2 美分:PHP 扩展 20121212 PHP 版本 5.5.6
    【解决方案2】:

    我过去曾寻找过这样的东西,但没有找到任何真正好的来源。 (搜索一些 API 版本显示 a post I made a while back listing them 是热门歌曲之一!)以下是所有最新版本:

    • PHP 5.2:20060613
    • PHP 5.3:20090626
    • PHP 5.4:20100525
    • PHP 5.5:20120211
    • PHP 5.6:20131226(截至 5.6.0alpha3)

    【讨论】:

    • 所以你想说这些是你个人研究的结果?
    • 我不得不承认,我什至没有想到要扫描 SO 中的任何一个标签。我不知何故有一个(天真的?)想法,我会在 php.org 或 zend.org 之类的地方找到权威答案。
    • 个人研究?我想。您可以通过挖掘旧版本的 PHP 源代码来找到它们,但我在其他任何地方都没有找到这样的编译。顺便说一句,我所说的“搜索”实际上是指一般的 Google 搜索,而不仅仅是 StackOverflow!
    • 查看您的列表,您可能会觉得某个次要版本的所有微版本都具有相同的签名。你会倾向于确认这一点吗?
    • @alk:这适用于所有最近的 PHP 非开发版本。 (不过,对于某些旧版本而言,情况并非如此。)更改 API 版本需要重新构建扩展,因此 PHP 开发人员正试图避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多