00001 <?php 00002 // +----------------------------------------------------------------------+ 00003 // | PHP Version 4 | 00004 // +----------------------------------------------------------------------+ 00005 // | Copyright (c) 1997-2004 The PHP Group | 00006 // +----------------------------------------------------------------------+ 00007 // | This source file is subject to version 3.0 of the PHP license, | 00008 // | that is bundled with this package in the file LICENSE, and is | 00009 // | available at through the world-wide-web at | 00010 // | http://www.php.net/license/3_0.txt. | 00011 // | If you did not receive a copy of the PHP license and are unable to | 00012 // | obtain it through the world-wide-web, please send a note to | 00013 // | license@php.net so we can mail you a copy immediately. | 00014 // +----------------------------------------------------------------------+ 00015 // | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com> | 00016 // | Aidan Lister <aidan@php.net> | 00017 // +----------------------------------------------------------------------+ 00018 // 00019 // $Id: version_compare.php 2 2009-03-16 20:22:51Z ggiunta $ 00020 00021 00034 if (!function_exists('version_compare')) { 00035 function version_compare($version1, $version2, $operator = '<') 00036 { 00037 // Check input 00038 if (!is_scalar($version1)) { 00039 user_error('version_compare() expects parameter 1 to be string, ' . 00040 gettype($version1) . ' given', E_USER_WARNING); 00041 return; 00042 } 00043 00044 if (!is_scalar($version2)) { 00045 user_error('version_compare() expects parameter 2 to be string, ' . 00046 gettype($version2) . ' given', E_USER_WARNING); 00047 return; 00048 } 00049 00050 if (!is_scalar($operator)) { 00051 user_error('version_compare() expects parameter 3 to be string, ' . 00052 gettype($operator) . ' given', E_USER_WARNING); 00053 return; 00054 } 00055 00056 // Standardise versions 00057 $v1 = explode('.', 00058 str_replace('..', '.', 00059 preg_replace('/([^0-9\.]+)/', '.$1.', 00060 str_replace(array('-', '_', '+'), '.', 00061 trim($version1))))); 00062 00063 $v2 = explode('.', 00064 str_replace('..', '.', 00065 preg_replace('/([^0-9\.]+)/', '.$1.', 00066 str_replace(array('-', '_', '+'), '.', 00067 trim($version2))))); 00068 00069 // Replace empty entries at the start of the array 00070 while (empty($v1[0]) && array_shift($v1)) {} 00071 while (empty($v2[0]) && array_shift($v2)) {} 00072 00073 // Release state order 00074 // '#' stands for any number 00075 $versions = array( 00076 'dev' => 0, 00077 'alpha' => 1, 00078 'a' => 1, 00079 'beta' => 2, 00080 'b' => 2, 00081 'RC' => 3, 00082 '#' => 4, 00083 'p' => 5, 00084 'pl' => 5); 00085 00086 // Loop through each segment in the version string 00087 $compare = 0; 00088 for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) { 00089 if ($v1[$i] == $v2[$i]) { 00090 continue; 00091 } 00092 $i1 = $v1[$i]; 00093 $i2 = $v2[$i]; 00094 if (is_numeric($i1) && is_numeric($i2)) { 00095 $compare = ($i1 < $i2) ? -1 : 1; 00096 break; 00097 } 00098 // We use the position of '#' in the versions list 00099 // for numbers... (so take care of # in original string) 00100 if ($i1 == '#') { 00101 $i1 = ''; 00102 } elseif (is_numeric($i1)) { 00103 $i1 = '#'; 00104 } 00105 if ($i2 == '#') { 00106 $i2 = ''; 00107 } elseif (is_numeric($i2)) { 00108 $i2 = '#'; 00109 } 00110 if (isset($versions[$i1]) && isset($versions[$i2])) { 00111 $compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1; 00112 } elseif (isset($versions[$i1])) { 00113 $compare = 1; 00114 } elseif (isset($versions[$i2])) { 00115 $compare = -1; 00116 } else { 00117 $compare = 0; 00118 } 00119 00120 break; 00121 } 00122 00123 // If previous loop didn't find anything, compare the "extra" segments 00124 if ($compare == 0) { 00125 if (count($v2) > count($v1)) { 00126 if (isset($versions[$v2[$i]])) { 00127 $compare = ($versions[$v2[$i]] < 4) ? 1 : -1; 00128 } else { 00129 $compare = -1; 00130 } 00131 } elseif (count($v2) < count($v1)) { 00132 if (isset($versions[$v1[$i]])) { 00133 $compare = ($versions[$v1[$i]] < 4) ? -1 : 1; 00134 } else { 00135 $compare = 1; 00136 } 00137 } 00138 } 00139 00140 // Compare the versions 00141 if (func_num_args() > 2) { 00142 switch ($operator) { 00143 case '>': 00144 case 'gt': 00145 return (bool) ($compare > 0); 00146 break; 00147 case '>=': 00148 case 'ge': 00149 return (bool) ($compare >= 0); 00150 break; 00151 case '<=': 00152 case 'le': 00153 return (bool) ($compare <= 0); 00154 break; 00155 case '==': 00156 case '=': 00157 case 'eq': 00158 return (bool) ($compare == 0); 00159 break; 00160 case '<>': 00161 case '!=': 00162 case 'ne': 00163 return (bool) ($compare != 0); 00164 break; 00165 case '': 00166 case '<': 00167 case 'lt': 00168 return (bool) ($compare < 0); 00169 break; 00170 default: 00171 return; 00172 } 00173 } 00174 00175 return $compare; 00176 } 00177 } 00178 00179 ?>
Copyright © 2003 - 2009 MyOOS [Shopsystem]. All rights reserved. MyOOS [Shopsystem] is Free Software released under the GNU/GPL License. Webmaster: info@r23.de (Impressum) |
|