Skip to content

Instantly share code, notes, and snippets.

@tolleiv
Last active August 29, 2015 14:19
Show Gist options
  • Save tolleiv/96c5ad592f196e128975 to your computer and use it in GitHub Desktop.
Save tolleiv/96c5ad592f196e128975 to your computer and use it in GitHub Desktop.
Cache Header Demo
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /cms.php

Dummy CMS Script

This just acts as a little CMS emulator to play with Caching headers and various content types.

  • Requests to *.png will get a image as response.
  • Requests to *.html will get a cachable page as response.
  • Requests to *.php will geta page with a session cookie and should not be cached.

*.html and *.php will deliver the same "randomized" content based on the first three letters of the filename.

<?php
ini_set("display_errors", 1);
ini_set("track_errors", 1);
ini_set("html_errors", 1);
error_reporting(E_ALL^E_NOTICE);
$cms = new CMS();
switch(pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION)) {
case "png":
$cms->cache(60);
$cms->image();
break;
case "html":
$cms->cache(5);
$cms->content();
break;
case "php":
$cms->no_cache();
$cms->session();
$cms->content("Uncachable page");
break;
}
class CMS {
function no_cache() {
header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
}
function cache($duration) {
$exp_gmt = gmdate("D, d M Y H:i:s", time() + $duration * 60) ." GMT";
$mod_gmt = gmdate("D, d M Y H:i:s", getlastmod()) ." GMT";
header("Expires: " . $exp_gm);
header("Last-Modified: " . $mod_gmt);
header("Cache-Control: public, max-age=" . $duration * 60);
}
function session() {
$lifetime=600;
session_set_cookie_params($lifetime);
session_start();
}
function content($headline="Cacheable page") {
header("Content-Type: text/html");
$c= "Damit Ihr indess erkennt, woher dieser ganze Irrthum gekommen ist, und weshalb man die Lust anklagt und den Schmerz lobet, so will ich Euch Alles eröffnen und auseinander setzen, was jener Begründer der Wahrheit und gleichsam Baumeister des glücklichen Lebens selbst darüber gesagt hat. Niemand, sagt er, verschmähe, oder hasse, oder fliehe die Lust als solche, sondern weil grosse Schmerzen ihr folgen, wenn man nicht mit Vernunft ihr nachzugehen verstehe. Ebenso werde der Schmerz als solcher von Niemand geliebt, gesucht und verlangt, sondern weil mitunter solche Zeiten eintreten, dass man mittelst Arbeiten und Schmerzen eine grosse Lust sich zu verschaften suchen müsse. Um hier gleich bei dem Einfachsten stehen zu bleiben, so würde Niemand von uns anstrengende körperliche Uebungen vornehmen, wenn er nicht einen Vortheil davon erwartete. Wer dürfte aber wohl Den tadeln, der nach einer Lust verlangt, welcher keine Unannehmlichkeit folgt, oder der einem Schmerze ausweicht, aus dem keine Lust hervorgeht?
</p><p> </p><p> </p><p> </p><p> </p><p>
Dagegen tadelt und hasst man mit Recht Den, welcher sich durch die Lockungen einer gegenwärtigen Lust erweichen und verführen lässt, ohne in seiner blinden Begierde zu sehen, welche Schmerzen und Unannehmlichkeiten seiner deshalb warten. Gleiche Schuld treffe Die, welche aus geistiger Schwäche, d.h. um der Arbeit und dem Schmerze zu entgehen, ihre Pflichten verabsäumen. Man kann hier leicht und schnell den richtigen Unterschied treffen; zu einer ruhigen Zeit, wo die Wahl der Entscheidung völlig frei ist und nichts hindert, das zu thun, was den Meisten gefällt, hat man jede Lust zu erfassen und jeden Schmerz abzuhalten; aber zu Zeiten trifft es sich in Folge von schuldigen Pflichten oder von sachlicher Noth, dass man die Lust zurückweisen und Beschwerden nicht von sich weisen darf. Deshalb trifft der Weise dann eine Auswahl, damit er durch Zurückweisung einer Lust dafür eine grössere erlange oder durch Uebernahme gewisser Schmerzen sich grössere erspare.";
$c = explode(" ",$c);
// shuffle($c);
$u = $_SERVER['REQUEST_URI'];
mt_srand(sprintf('%d%d%d', ord($u[0]),ord($u[1]),ord($u[2])));
$order = array_map(create_function('$val', 'return mt_rand();'), range(1, count($c)));
array_multisort($order, $c);
echo sprintf('<html><head><title>%1$s</title></head><body><h1>%1$s</h1><h2>%2$s</h2><p>', $headline, date("r"));
echo join(" ", $c);
echo "</p></body></html>";
}
function image() {
header("Content-Type: image/png");
readfile("cms.png");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment