星期三, 九月 27, 2006

检测PHP版本 learn wordpress (6)

检测PHP版本
if ( !(phpversion() >= '4.1') )
{
header( 'Content-Type: text/html; charset=utf-8' );
die( '您的服务器正在运行 PHP 版本 ' . phpversion() . ',但是 WordPress 需要最小 4.1 版本。' );
}
-- wp-settings.php
检测当前使用的PHP的版本号,以防止因版本过低而产生的异常

这里可以看到phpversion的参考
[http://cn.php.net/manual/zh/function.version-compare.php]

// prints -1
echo version_compare("4.0.4", "4.0.6");

// these all print 1
echo version_compare("4.0.4", "4.0.6", "<");
echo
version_compare("4.0.6", "4.0.6", "eq");
?>

上面的例子基本上一看就懂了,使用version_compare 可以对 "." 间隔的数据进行比较
使用 phpversion 可以获取当前使用的 php 的版本号
建议在自己写的 php 页上使用 "." 分割的 version 并在被包含时使用 version_compare 进行版本比较,以便可以检测到一些不容易发现的遗留问题

在 修改 时,加上简要的更新内容说明也是一个很明智的方法。
:)

摘录一段 php.net 上的代码 ,绿色的是我加的一点注释,仅供参考 ;)

mina86 at tlen dot pl
01-Jul-2004 10:40
Here's a wrapper which is more tolerant as far as order of arguments is considered:

/**

* php 版本比较
* ver_cmp($version1,$compare,$version2);
* ver_cmp($compare,$version2);
* ver_cmp($version2);
*/
function ver_cmp($arg1, $arg2 = null, $arg3 = null) {
# 用于缓存 如果获取了一次 phpversion 就不必要再一次获取它了
static
$phpversion = null;
if (
$phpversion===null) $phpversion = phpversion(); #记录phpversion

# 根据实际调用的参数个数来判断执行什么操作
switch (
func_num_args()) {

# 比较输入的version2和当前的phpversion
case
1: return version_compare($phpversion, $arg1);

# 根据输入的操作方式对version2和phpversion进行比较
case
2:
# 自动适应操作符位置 操作符 $
compare 和 $version2 可以互换位置
# 如果没有找到操作符 则对 $version1 和 $version2 进行默认比较操作
if (preg_match('/^[lg][te]|[<>]=?|[!=]?=|eq|ne|<>$/i', $arg1))
return
version_compare($phpversion, $arg2, $arg1);
elseif (
preg_match('/^[lg][te]|[<>]=?|[!=]?=|eq|ne|<>$/i', $arg2))
return
version_compare($phpversion, $arg1, $arg2);
return
version_compare($arg1, $arg2);
default:
$ver1 = $arg1;
# 这句貌似没有什么用
# 自动适应操作符位置 允许操作符在第二个或第三个参数
if (
preg_match('/^[lg][te]|[<>]=?|[!=]?=|eq|ne|<>$/i', $arg2))
return
version_compare($arg1, $arg3, $arg2);
return
version_compare($arg1, $arg2, $arg3);
}
}


It also uses phpversion() as a default version if only one string is present. It can make your code look nicer 'cuz you can now write:
if (ver_cmp($version1, '>=', $version2)) something;
and to check a version string against the PHP's version you might use:
if (ver_cmp('>=', $version)) something;
instead of using phpversion().

没有评论: