<?php// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2004 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 3.0 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/3_0.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com> |// | Aidan Lister <aidan@php.net> |// +----------------------------------------------------------------------+//// $Id: version_compare.php,v 1.13 2005/08/01 12:21:14 aidan Exp $/*** Replace version_compare()** @category PHP* @package PHP_Compat* @link http://php.net/function.version_compare* @author Philippe Jausions <Philippe.Jausions@11abacus.com>* @author Aidan Lister <aidan@php.net>* @version $Revision: 1.13 $* @since PHP 4.1.0* @require PHP 4.0.5 (user_error)*/if (!function_exists('version_compare')) {function version_compare($version1, $version2, $operator = '<'){// Check inputif (!is_scalar($version1)) {user_error('version_compare() expects parameter 1 to be string, ' .gettype($version1) . ' given', E_USER_WARNING);return;}if (!is_scalar($version2)) {user_error('version_compare() expects parameter 2 to be string, ' .gettype($version2) . ' given', E_USER_WARNING);return;}if (!is_scalar($operator)) {user_error('version_compare() expects parameter 3 to be string, ' .gettype($operator) . ' given', E_USER_WARNING);return;}// Standardise versions$v1 = explode('.',str_replace('..', '.',preg_replace('/([^0-9\.]+)/', '.$1.',str_replace(array('-', '_', '+'), '.',trim($version1)))));$v2 = explode('.',str_replace('..', '.',preg_replace('/([^0-9\.]+)/', '.$1.',str_replace(array('-', '_', '+'), '.',trim($version2)))));// Replace empty entries at the start of the arraywhile (empty($v1[0]) && array_shift($v1)) {}while (empty($v2[0]) && array_shift($v2)) {}// Release state order// '#' stands for any number$versions = array('dev' => 0,'alpha' => 1,'a' => 1,'beta' => 2,'b' => 2,'RC' => 3,'#' => 4,'p' => 5,'pl' => 5);// Loop through each segment in the version string$compare = 0;for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) {if ($v1[$i] == $v2[$i]) {continue;}$i1 = $v1[$i];$i2 = $v2[$i];if (is_numeric($i1) && is_numeric($i2)) {$compare = ($i1 < $i2) ? -1 : 1;break;}// We use the position of '#' in the versions list// for numbers... (so take care of # in original string)if ($i1 == '#') {$i1 = '';} elseif (is_numeric($i1)) {$i1 = '#';}if ($i2 == '#') {$i2 = '';} elseif (is_numeric($i2)) {$i2 = '#';}if (isset($versions[$i1]) && isset($versions[$i2])) {$compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1;} elseif (isset($versions[$i1])) {$compare = 1;} elseif (isset($versions[$i2])) {$compare = -1;} else {$compare = 0;}break;}// If previous loop didn't find anything, compare the "extra" segmentsif ($compare == 0) {if (count($v2) > count($v1)) {if (isset($versions[$v2[$i]])) {$compare = ($versions[$v2[$i]] < 4) ? 1 : -1;} else {$compare = -1;}} elseif (count($v2) < count($v1)) {if (isset($versions[$v1[$i]])) {$compare = ($versions[$v1[$i]] < 4) ? -1 : 1;} else {$compare = 1;}}}// Compare the versionsif (func_num_args() > 2) {switch ($operator) {case '>':case 'gt':return (bool) ($compare > 0);break;case '>=':case 'ge':return (bool) ($compare >= 0);break;case '<=':case 'le':return (bool) ($compare <= 0);break;case '==':case '=':case 'eq':return (bool) ($compare == 0);break;case '<>':case '!=':case 'ne':return (bool) ($compare != 0);break;case '':case '<':case 'lt':return (bool) ($compare < 0);break;default:return;}}return $compare;}}?>