2003-11-18 19:44:36 +00:00
|
|
|
<?php
|
2003-12-13 14:10:23 +00:00
|
|
|
/* $Id$ */
|
2003-11-18 19:44:36 +00:00
|
|
|
|
|
|
|
function conf_init() {
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Try finding a matching configuration file by stripping the website's
|
|
|
|
** URI from left to right. If no configuration file is found, return a
|
|
|
|
** default value 'conf'.
|
|
|
|
*/
|
|
|
|
|
|
|
|
$uri = $_SERVER["PHP_SELF"];
|
|
|
|
|
|
|
|
$file = strtolower(strtr($_SERVER["HTTP_HOST"] . substr($uri, 0, strrpos($uri, "/")), "/:", ".."));
|
|
|
|
|
|
|
|
while (strlen($file) > 4) {
|
|
|
|
if (file_exists("includes/$file.php")) {
|
|
|
|
return $file;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$file = substr($file, strpos($file, ".") + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return "conf";
|
|
|
|
}
|
|
|
|
|
|
|
|
function variable_init($conf = array()) {
|
|
|
|
$result = db_query("SELECT * FROM {variable} ");
|
|
|
|
while ($variable = db_fetch_object($result)) {
|
|
|
|
if (!isset($conf[$variable->name])) {
|
|
|
|
$conf[$variable->name] = unserialize($variable->value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $conf;
|
|
|
|
}
|
|
|
|
|
|
|
|
function variable_get($name, $default) {
|
|
|
|
global $conf;
|
|
|
|
|
|
|
|
return isset($conf[$name]) ? $conf[$name] : $default;
|
|
|
|
}
|
|
|
|
|
|
|
|
function variable_set($name, $value) {
|
|
|
|
global $conf;
|
|
|
|
|
|
|
|
db_query("DELETE FROM {variable} WHERE name = '%s'", $name);
|
|
|
|
db_query("INSERT INTO {variable} (name, value) VALUES ('%s', '%s')", $name, serialize($value));
|
|
|
|
|
|
|
|
$conf[$name] = $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
function variable_del($name) {
|
|
|
|
global $conf;
|
|
|
|
|
|
|
|
db_query("DELETE FROM {variable} WHERE name = '%s'", $name);
|
|
|
|
|
|
|
|
unset($conf[$name]);
|
|
|
|
}
|
|
|
|
|
|
|
|
function cache_get($key) {
|
|
|
|
$cache = db_fetch_object(db_query("SELECT data, created FROM {cache} WHERE cid = '%s'", $key));
|
|
|
|
return $cache->data ? $cache : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
function cache_set($cid, $data, $expire = 0) {
|
|
|
|
db_query("UPDATE {cache} SET data = '%s', created = %d, expire = %d WHERE cid = '%s'", $data, time(), $expire, $cid);
|
|
|
|
if (!db_affected_rows()) {
|
|
|
|
db_query("INSERT INTO {cache} (cid, data, created, expire) VALUES('%s', '%s', %d, %d)", $cid, $data, time(), $expire);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function cache_clear_all($cid = NULL) {
|
|
|
|
if (empty($cid)) {
|
|
|
|
db_query("DELETE FROM {cache} WHERE expire <> 0");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
db_query("DELETE FROM {cache} WHERE cid = '%s'", $cid);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function page_set_cache() {
|
|
|
|
global $user;
|
|
|
|
|
|
|
|
if (!$user->uid && $_SERVER["REQUEST_METHOD"] == "GET") {
|
|
|
|
if ($data = ob_get_contents()) {
|
|
|
|
cache_set(request_uri(), $data, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function page_get_cache() {
|
|
|
|
global $user;
|
|
|
|
|
|
|
|
$cache = NULL;
|
|
|
|
|
|
|
|
if (!$user->uid && $_SERVER["REQUEST_METHOD"] == "GET") {
|
|
|
|
$cache = cache_get(request_uri());
|
|
|
|
|
|
|
|
if (empty($cache)) {
|
|
|
|
ob_start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $cache;
|
|
|
|
}
|
|
|
|
|
|
|
|
function drupal_page_header() {
|
|
|
|
if (variable_get("dev_timer", 0)) {
|
|
|
|
timer_start();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (variable_get("cache", 0)) {
|
|
|
|
if ($cache = page_get_cache()) {
|
|
|
|
|
|
|
|
// Set default values:
|
|
|
|
$date = gmdate("D, d M Y H:i:s", $cache->created) ." GMT";
|
|
|
|
$etag = '"'. md5($date) .'"';
|
|
|
|
|
|
|
|
// Check http headers:
|
|
|
|
$modified_since = isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) ? $_SERVER["HTTP_IF_MODIFIED_SINCE"] == $date : NULL;
|
2003-12-13 14:10:23 +00:00
|
|
|
if (!empty($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && ($timestamp = strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"])) != -1) {
|
|
|
|
$modified_since = $cache->created <= $timestamp;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$modified_since = NULL;
|
|
|
|
}
|
|
|
|
$none_match = !empty($_SERVER["HTTP_IF_NONE_MATCH"]) ? $_SERVER["HTTP_IF_NONE_MATCH"] == $etag : NULL;
|
2003-11-18 19:44:36 +00:00
|
|
|
|
|
|
|
// The type checking here is very important, be careful when changing entries.
|
|
|
|
if (($modified_since !== NULL || $none_match !== NULL) && $modified_since !== false && $none_match !== false) {
|
|
|
|
header("HTTP/1.0 304 Not Modified");
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Send appropriate response:
|
|
|
|
header("Last-Modified: $date");
|
|
|
|
header("ETag: $etag");
|
|
|
|
print $cache->data;
|
|
|
|
|
|
|
|
/*
|
|
|
|
** call all init() and exit() hooks without including all modules
|
|
|
|
** only use those hooks for critical operations
|
|
|
|
*/
|
|
|
|
foreach (module_list(0, 1) as $module) {
|
|
|
|
if (is_array($module) && $module['bootstrap']) {
|
|
|
|
include_once $module['filename'];
|
|
|
|
foreach (bootstrap_hooks() as $hook) {
|
|
|
|
module_invoke($module['name'], $hook);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// critical hooks called even when serving a cached page
|
|
|
|
function bootstrap_hooks() {
|
|
|
|
return array('init', 'exit');
|
|
|
|
}
|
|
|
|
|
|
|
|
function referer_uri() {
|
|
|
|
if (isset($_SERVER["HTTP_REFERER"])) {
|
2003-12-13 14:10:23 +00:00
|
|
|
return check_url($_SERVER["HTTP_REFERER"]);
|
2003-11-18 19:44:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function arg($index) {
|
2003-12-16 21:06:34 +00:00
|
|
|
static $arguments, $q;
|
2003-11-18 19:44:36 +00:00
|
|
|
|
2003-12-16 21:06:34 +00:00
|
|
|
if (empty($arguments) || $q != $_GET["q"]) {
|
2003-11-18 19:44:36 +00:00
|
|
|
$arguments = explode("/", $_GET["q"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $arguments[$index];
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_query($text) {
|
|
|
|
return addslashes($text);
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_url($uri) {
|
|
|
|
$uri = htmlspecialchars($uri, ENT_QUOTES);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** We replace ( and ) with their entity equivalents to prevent XSS
|
|
|
|
** attacks.
|
|
|
|
*/
|
|
|
|
|
|
|
|
$uri = strtr($uri, array("(" => "&040;", ")" => "&041;"));
|
|
|
|
|
|
|
|
return $uri;
|
|
|
|
}
|
|
|
|
|
|
|
|
function request_uri() {
|
|
|
|
/*
|
|
|
|
** Since request_uri() is only available on Apache, we generate
|
|
|
|
** equivalent using other environment vars.
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (isset($_SERVER["REQUEST_URI"])) {
|
|
|
|
$uri = $_SERVER["REQUEST_URI"];
|
|
|
|
}
|
|
|
|
else {
|
2003-12-11 21:28:49 +00:00
|
|
|
$uri = $_SERVER["PHP_SELF"] ."?". $_SERVER["argv"][0];
|
2003-11-18 19:44:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return check_url($uri);
|
|
|
|
}
|
2003-12-13 14:10:23 +00:00
|
|
|
|
2003-11-18 19:44:36 +00:00
|
|
|
function timer_start() {
|
|
|
|
global $timer;
|
|
|
|
list($usec, $sec) = explode(" ", microtime());
|
|
|
|
$timer = (float)$usec + (float)$sec;
|
|
|
|
}
|
|
|
|
|
2003-12-10 23:09:31 +00:00
|
|
|
function watchdog($type, $message, $link = NULL) {
|
|
|
|
global $user;
|
2003-12-18 13:58:59 +00:00
|
|
|
db_query("INSERT INTO {watchdog} (uid, type, message, link, location, hostname, timestamp) VALUES (%d, '%s', '%s', '%s', '%s', '%s', %d)", $user->uid, $type, $message, $link, request_uri(), $_SERVER['REMOTE_ADDR'], time());
|
2003-12-10 23:09:31 +00:00
|
|
|
}
|
|
|
|
|
2003-11-18 19:44:36 +00:00
|
|
|
unset($conf);
|
|
|
|
$config = conf_init();
|
|
|
|
|
|
|
|
include_once "includes/$config.php";
|
|
|
|
include_once "includes/database.inc";
|
|
|
|
include_once "includes/session.inc";
|
|
|
|
include_once "includes/module.inc";
|
|
|
|
|
|
|
|
// initialize configuration variables, using values from conf.php if available:
|
|
|
|
$conf = variable_init(isset($conf) ? $conf : array());
|
|
|
|
?>
|