<?php

include 'postfilter.php';

define ('TARGET_HOST''www.apachedev.ru');
define ('ONLY_FROM_CACHE'true);

function 
pass_headers ($heads) {

    
$savedheads = array();

    foreach (
$heads as $line) {

        list (
$name$data) = explode (':'$line2);

        if (
in_array($name, array('Content-Type''Last-Modified'))) $savedheads[$name] = trim($data);

    }

    return 
$savedheads;
}

function 
geturi ($db$uri) {

    
$skey md5(implode (':', array('catcher'$uriTARGET_HOST)));

    
$res sqlite_query($dbsprintf("SELECT * FROM storage WHERE loc = '%s'"$skey));

    if (
sqlite_num_rows($res) == 1) {
        
$array sqlite_fetch_array($res);
        return array(
$array['fdata'], unserialize($array['heads']));
    }

    
$remotehref sprintf ("http://%s/%s"TARGET_HOST$uri);

    if (
ONLY_FROM_CACHE) return false;

    if (
false === $fdata = @file_get_contents ($remotehref)) {
        return 
false;
    }

    
$heads pass_headers ($http_response_header);

    
sqlite_query ($dbsprintf (
        
"INSERT INTO storage(loc, fdata, heads, location) VALUES ('%s', '%s', '%s', '%s')"
        
$skeysqlite_escape_string($fdata), sqlite_escape_string(serialize($heads)), sqlite_escape_string($uri)
    ));

    return array(
$fdata$heads);
}

// вот тут все начинается

if (false === $db = @sqlite_open("storage.db")) {
    echo 
"database error"; exit;
}

$uri substr($_SERVER['REQUEST_URI'], 1);

if (
false === $ret geturi ($db$uri)) {
    
header ($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
    echo 
file_get_contents ('404.html'); exit;
}

list (
$fdata$heads) = $ret;

//print_r ($heads);exit;

foreach ($heads as $name => $val) {
    
header (sprintf ('%s: %s'$name$val));
}

header ('Expires: ' gmdate ('D, d M Y H:i:s T'time() + 86400));

// если это html страница, то немножко подправим ее содержимое

if (isset($heads['Content-Type']) && strpos($heads['Content-Type'], 'text/html') !== false) {
    
$fdata postfilter ($fdata);
}

echo 
$fdata;

sqlite_close ($db);

?>