`
beatzues
  • 浏览: 5158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP_VERSION_ID是如何定义的

    博客分类:
  • PHP
 
阅读更多
PHP_VERSION_ID是一个整数,表示当前PHP的版本,从php5.2.7版本开始使用的,比如50207表示5.2.7。
和PHP版本相关的宏定义在文件 phpsrcdir/main/php_version.h里,如下

// 文件位置: phpsrc/main/php_version.h
/* automatically generated by configure */
 /* edit configure.in to change version number */
 #define PHP_MAJOR_VERSION 5
 #define PHP_MINOR_VERSION 6
 #define PHP_RELEASE_VERSION 24
 #define PHP_EXTRA_VERSION ""
 #define PHP_VERSION "5.6.24"
 #define PHP_VERSION_ID 50624

从注释可以看到,文件phpsrcdir/main/php_version.h是在configure后生成的,以下是configure.in下的相关内容:
dnl 文件位置:phpsrcdir/confiugre.in
  117 #undef PTHREADS
  118 ])
  119
  120 PHP_MAJOR_VERSION=5
  121 PHP_MINOR_VERSION=6
  122 PHP_RELEASE_VERSION=24
  123 PHP_EXTRA_VERSION=""
  124 PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
  125 PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 +                [$]PHP_RELEASE_VERSION`
  126
  127 dnl Allow version values to be used in Makefile
  128 PHP_SUBST(PHP_MAJOR_VERSION)
  129 PHP_SUBST(PHP_MINOR_VERSION)
  130 PHP_SUBST(PHP_RELEASE_VERSION)
  131 PHP_SUBST(PHP_EXTRA_VERSION)
....
....
  139 dnl Setting up the PHP version based on the information above.
  140 dnl -------------------------------------------------------------------------
  141
  142 echo "/* automatically generated by configure */" > php_version.h.new
  143 echo "/* edit configure.in to change version number */" >> php_version.h.new
  144 echo "#define PHP_MAJOR_VERSION $PHP_MAJOR_VERSION" >> php_version.h.new
  145 echo "#define PHP_MINOR_VERSION $PHP_MINOR_VERSION" >> php_version.h.new
  146 echo "#define PHP_RELEASE_VERSION $PHP_RELEASE_VERSION" >> php_version.h.new
  147 echo "#define PHP_EXTRA_VERSION \"$PHP_EXTRA_VERSION\"" >> php_version.h.new
  148 echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new
  149 echo "#define PHP_VERSION_ID $PHP_VERSION_ID" >> php_version.h.new
  150 cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1
  151 if test $? -ne 0 ; then
  152   rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \
  153   echo 'Updated main/php_version.h'
  154 else
  155   rm -f php_version.h.new
  156 fi
  157
  158

由以上可以看到php的版本信息是在configure.in中定义的,
120-125行
首先定义了主版本号PHP_MAJOR_VERSION,子版本号PHP_MINOR_VERSION,发布版本号PHP_RELEASE_VERSION,还有PHP_EXTRA_VERSION为空;
PHP_VERSION由以上的版本号用符号”.”连接起来,也就是我们常见的版本号,如5.6.24;
PHP_VERSION_ID则是由PHP_MAJOR_VERSION*10000+PHP_MINOR_VERSION*100+PHP_RELEASE_VERSION计算出来的一个5位数的整数,比如50624, 在php内核或者扩展源码里经常用到PHP_VERSION_ID。

127-131行
提交给Makefile

139-156行
生成文件$phpsrcdir/main/php_version.h

php内核定义的所有常量:http://php.net/manual/en/reserved.constants.php

文章地址:http://blog.beatzeus.com/?p=449
分享到:
评论

相关推荐

    display-php-version_woocommerceplugin_

    本文将深入探讨“display-php-version”这个特定的 WooCommerce 插件功能,以及它如何帮助导入类别。 标题“display-php-version_woocommerceplugin_”暗示我们关注的是一个与显示PHP版本相关的 WooCommerce 插件...

    ThinkPHP5联合(关联)查询、多条件查询与聚合查询实例详解

    ->where("project_id = $Project_version['project_id'] and version_id = $Project_version['version_id'] and status > 1") ->order('create_time desc') ->find();" ``` ### 聚合查询 聚合查询经常用于统计...

    PHP HTTP_USER_AGENT

    `id` INT AUTO_INCREMENT PRIMARY KEY, `user_agent` TEXT NOT NULL, `browser_name` VARCHAR(255), `browser_version` VARCHAR(50), `os_name` VARCHAR(255), `device_type` ENUM('desktop', 'mobile', '...

    开发PHP扩展详细教程

    最后是在PHP_FUNCTION宏定义中放我们声明函数的具体实现。具体实现时难点也就是参数的传入和结果传出,还好PHP已经为我们做了很好的抽象。在Zend的教程中也有详尽的说明,俺就不啰嗦了。关键代码照搬icbc的test.c就...

    php5.6中文手册

    5. **新常量**:包括`PHP_BINARY`和`PHP_VERSION_ID`等常量,分别用于获取当前PHP二进制的完整路径和版本号的整数值。 6. **改进的错误处理**:PHP 5.6引入了异常处理,使得错误能更像异常一样被捕获,提高了程序的...

    支付宝最新SDK整合(包含APP,PC,WAP) PHP

    //wap 结果string(880) "https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626",...

    APISpace 人像对比 API接口 PHP调用示例代码

    在这段代码中,你需要将`id_number`、`name`、`selfie_url`、`image`和`selfie_auto_rotate`替换为实际的身份证号码、姓名、自拍照URL以及是否自动旋转自拍照的参数。 2. **人像对比服务**: 这个服务用于比较...

    wordpress代码调用大全更新到_3.0版[定义].pdf

    - `<?php bloginfo('version'); ?>`:输出WordPress的版本号。 - `<?php bloginfo('atom_url'); ?>`:返回Atom feed地址。 - `<?php bloginfo('rss2_url'); ?>`:返回RSS2 feed地址。 - `<?php bloginfo('url');...

    APISpace 语音通知 API接口 PHP调用示例代码

    在这个示例中,你需要替换 `mobile`、`templateId` 等参数来指定接收者电话号码、模板ID(用于定制语音消息内容)和其他可选参数,如呼叫时间限制、账单地址、播放次数等。 2. 单个语音通知 如果只是需要向单个电话...

    APISpace 动态活体检测 API接口 PHP调用示例代码

    其中,`imageId`参数可能需要替换为实际的图片ID或URL。`X-APISpace-Token`和`Authorization-Type`头部需要填入你的API密钥,确保只有授权的用户可以访问API。 ### 2. 动态活体检测调用示例 ```php <?php $curl = ...

    APISpace 身份证校验 API接口 PHP调用示例代码

    在这个示例中,`CURLOPT_URL`定义了请求的API地址,`CURLOPT_POSTFIELDS`用于设置请求的POST数据,即需要校验的姓名和身份证号码。`CURLOPT_HTTPHEADER`则添加了必要的HTTP头,包括API密钥和Content-Type。 3. 处理...

    php注入 php漏洞

    给大家演示一个PHP注入的原理。那么怎么来利用呢,我们先来检查一下...查询Mysql版本:SELECT * FROM `news` where `id` = 1 and ord(mid(version(),1,1))>51 /* 我们把 id=3的数据也读取出来了,这就是注入漏洞。

    APISpace 驾驶证信息核验 API接口 PHP调用示例代码

    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "Name=&licenseNo=&recordId=", CURLOPT_HTTPHEADER => array( "X-APISpace-Token:", ...

    php函数大全 word版本

    - `uniqid`:生成一个唯一的标识符,常用于创建唯一ID。 - `usleep`:以微秒为单位暂停脚本,比`sleep`更精确。 2. **Apache函数**: - `apache_child_terminate`:在Apache子进程中结束当前请求。 - `apache_...

    支付宝php-sdk demo原版

    开发者可以通过实例化这个类,设置必要的参数如应用ID、商户私钥、支付宝公钥等,然后调用相应的方法来发起支付请求或者进行其他业务操作。 `version.txt`文件通常记录了SDK的版本信息,这对于跟踪更新和排查问题...

    APISpace 运营商三要素 API接口 PHP调用示例代码

    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // 使用HTTP 1.1协议 CURLOPT_CUSTOMREQUEST => "POST", // 使用POST方法发送请求 CURLOPT_POSTFIELDS => "name=&idNum=&mobile=", // 填写需要验证的姓名、...

    PHP接入支付宝单笔订单查询接口

    // 定义请求参数 $param = [ 'app_id' => $appid, 'method' => 'alipay.trade.query', 'format' => 'JSON', 'charset' => 'UTF-8', 'timestamp' => date('Y-m-d H:i:s'), 'version' => '1.0', 'sign_type' =>...

    Laravel开发-laravel-facebook

    在 Laravel 项目的 `config/services.php` 文件中,添加一个新的配置项来存储 Facebook 的 App ID 和 App Secret: ```php 'facebook' => [ 'client_id' => env('FACEBOOK_CLIENT_ID'), 'client_secret' => env('...

Global site tag (gtag.js) - Google Analytics