-
- // Get the hostname from the Host header or server config.
- // Fallback is to omit the server name and use a relative URI,
- // although this is not RFC 2616 compliant.
- if(isset($HTTP_HOST) && !empty($HTTP_HOST)) {
- $location = $proto . $HTTP_HOST . $path;
- } else if(isset($SERVER_NAME) && !empty($SERVER_NAME)) {
- $location = $proto . $SERVER_NAME . $path;
- } else {
- $location = $path;
+
+ /* Global. */
+ sq_mt_seed((int)((double) microtime() * 1000000));
+ sq_mt_seed(md5($REMOTE_PORT . $REMOTE_ADDR . getmypid()));
+
+ /* getrusage */
+ if (function_exists('getrusage')) {
+ // Avoid warnings with Win32
+ $dat = @getrusage();
+ if (isset($dat) && is_array($dat)) {
+ $Str = '';
+ foreach ($dat as $k => $v)
+ {
+ $Str .= $k . $v;
+ }
+ sq_mt_seed(md5($Str));
+ }
+ }
+
+ // Apache-specific
+ sq_mt_seed(md5($UNIQUE_ID));
+
+ $randomized = 1;
+ }
+
+ function OneTimePadCreate ($length=100) {
+ sq_mt_randomize();
+
+ $pad = '';
+ for ($i = 0; $i < $length; $i++) {
+ $pad .= chr(mt_rand(0,255));
+ }
+
+ return base64_encode($pad);
+ }
+
+ /**
+ * Check if we have a required PHP-version. Return TRUE if we do,
+ * or FALSE if we don't.
+ *
+ * To check for 4.0.1, use sqCheckPHPVersion(4,0,1)
+ * To check for 4.0b3, use sqCheckPHPVersion(4,0,-3)
+ *
+ * Does not handle betas like 4.0.1b1 or development versions
+ */
+ function sqCheckPHPVersion($major, $minor, $release) {
+
+ $ver = phpversion();
+ eregi('^([0-9]+)\\.([0-9]+)(.*)', $ver, $regs);
+
+ /* Parse the version string. */
+ $vmajor = strval($regs[1]);
+ $vminor = strval($regs[2]);
+ $vrel = $regs[3];
+ if($vrel[0] == ".") {
+ $vrel = strval(substr($vrel, 1));
+ }
+ if($vrel[0] == 'b' || $vrel[0] == 'B') {
+ $vrel = - strval(substr($vrel, 1));
+ }
+ if($vrel[0] == 'r' || $vrel[0] == 'R') {
+ $vrel = - strval(substr($vrel, 2))/10;
+ }
+
+ /* Compare major version. */
+ if ($vmajor < $major) { return false; }
+ if ($vmajor > $major) { return true; }
+
+ /* Major is the same. Compare minor. */
+ if ($vminor < $minor) { return false; }
+ if ($vminor > $minor) { return true; }
+
+ /* Major and minor is the same as the required one. Compare release */
+ if ($vrel >= 0 && $release >= 0) { // Neither are beta
+ if($vrel < $release) return false;
+ } else if($vrel >= 0 && $release < 0) { // This is not beta, required is beta
+ return true;
+ } else if($vrel < 0 && $release >= 0){ // This is beta, require not beta
+ return false;
+ } else { // Both are beta
+ if($vrel > $release) return false;