0xFFFFFFFF ? $id >> 32 : 0); // 32 bit big endian, top $idb = ($id & 0xFFFFFFFF); // 32 bit big endian, bottom $id = pack ('N', $ida) . pack ('N', $idb); $id = preg_replace('/^\000+/', '', "$id"); // omit high-order NUL bytes $id = base64_encode ($id); $id = str_replace ('+', '-', $id); // encode URL-unsafe "+" "/" $id = str_replace ('/', '_', $id); $id = preg_replace ('/=+$/', '', $id); // omit trailing padding bytes return $id; } /** * Decode a base64-encoded big-endian integer of up to 64 bits. * * @see https://www.jwz.org/base64-shortlinks/ * @param string $id * @return int */ static function b64sl_unpack_id(string $id): int { $id = str_replace ('-', '+', $id); // decode URL-unsafe "+" "/" $id = str_replace ('_', '/', $id); $id = base64_decode ($id); while (strlen($id) < 8) { $id = "\000$id"; } // pad with leading NULs $a = unpack ('N*', $id); // 32 bit big endian $id = ($a[1] << 32) | $a[2]; // pack top and bottom word return $id; } /** * a very simple HTTP_AUTH authentication. * Needs FRONTEND_USERNAME and FRONTEND_PASSWORD defined */ static function simpleAuth(): void { if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] !== FRONTEND_USERNAME || $_SERVER['PHP_AUTH_PW'] !== FRONTEND_PASSWORD ) { header('WWW-Authenticate: Basic realm="Protected area"'); header('HTTP/1.0 401 Unauthorized'); echo 'No Access.'; exit; } } }