download this file: func.url.php view text/plain: func.url.php file encoding: UTF-8 [goback]
<?php
##
## this file name is 'func.url.php'
##
## url functions
##
## [author]
## - Chilbong Kim<san2(at)linuxchannel.net>
##
## [changes]
## - 2010.04.20 : some code-style change
## - 2009.11.12 : bug fixed header_cache()
## - 2003.09.24 : bug fixed
## - 2003.08.12 : add header_filecache()
## - 2003.06.10 : add header_nocache(), header_cache()
## - 2003.03.13 : new build
##
## [references]
##
## [usage]
##
## [example]
##
function url_refresh($url, $sec=0)
{
echo "<META http-equiv='Refresh' content='$sec; URL=$url'>";
exit;
}
function url_header($url)
{
Header('Location: '.$url);
exit;
}
## HTML page no cache
##
## use the 'action' PHP file header
## use GMT timezone instead of system default timezone(ex KST,...)
##
## echo '<META HTTP-EQUIV="Expires" CONTENT="Fri, Jun 12 1981 08:20:00 GMT">'."\n";
## echo '<META HTTP-EQUIV="Pragma" CONTENT="no-cache">'."\n";
## echo '<META HTTP-EQUIV="Cache-Control" CONTENT="no cache, must revalidate">."\n";
## or
## session_cache_limiter('nocache');
## session_start();
##
function header_nocache()
{
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT'); // alway past time
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache'); // HTTP/1.0
//header('Last-Modified: '.gmdate('D, d M Y H:i:s T')); // not need
return TRUE; // alway true
}
## HTML page cache
##
## use the 'write HTML FORM' file header
## use GMT timezone instead of system default timezone(ex KST,...)
##
## [same as]
## session_cache_limiter('private');
## session_start();
##
## [study]
## - if 'Expires' is futher time, then don't alway access(request) to server.
## - if 'Expires' is past time, it is alway access to server
##
## [refrences]
## - RFC 2616(HTTP/1.1) http://www.w3.org/Protocols/rfc2616/rfc2616.html
## - http://kr.php.net/manual/en/function.session-cache-limiter.php
##
## [argument]
## - $expire integer, expire seconds, default 86400 seconds(1 days), inputing time
##
## [return]
## - TRUE
##
function header_cache($expire=86400)
{
if(!$expire || $expire <= 0) $expire = 86400; // refer to 'session.cache_expire'
header('Last-Modified: '.gmdate('D, d M Y H:i:s T'));
header('Cache-control: private, max-age='.$expire.', pre-check='.$expire);
header('Expires: '.gmdate('D, d M Y H:i:s T',time()+$expire)); // past or future time
return TRUE; // alway true
}
## static or vitural image file caching
##
function header_filecache($days=1, $file='')
{
global $_SERVER; // for PHP/4.0.x
if($file && !@file_exists($file)) return FALSE;
$term = (int)$days; // alway $days > 0
$req = $_SERVER['HTTP_IF_MODIFIED_SINCE']; // request modified datetime
$time = array();
$time['expire'] = $term * 86400; // expire term, after cached
$time['client'] = $term * 300; // client 'think time', or keepalive
if($file)
{
$time['cur'] = $time['chk'] = @filemtime($file);
} else
{
$time['cur'] = time(); // virual file mtime
$time['chk'] = $time['cur'] - $time['expire'];
}
if($req && strtotime($req)>=$time['chk']) header('HTTP/1.1 304 Not Modified');
header('Expires: '.gmdate('D, d M Y H:i:s T',$time['cur']+$time['expire']));
header('Last-Modified: '.gmdate('D, d M Y H:i:s T',$time['cur'])); // GMT
header('Cache-control: private, max-age='.$time['client'].', pre-check='.$time['client']);
return TRUE; // alway true
}
## self print a image
##
function check_redirect_image()
{
global $_SERVER; // for PHP/4.0.x
if(!$_SERVER['PATH_INFO']) return;
list(,$type,$color) = explode('/',$_SERVER['PATH_INFO']);
if(!preg_match('/^im/i',$type)) return; // img, IMG, Img, images, image, ...
## check 304 HTTP status code
##
header_filecache(2); // term of 2 days
$color = preg_replace('/\.[^.]*$/','',strtolower($color));
## base64 encoded images
## http://linuxchannel.net/board/read.php?table=alpha&no=75
## 1 x 1, width:height, for center
##
$images['null'] = 'R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['pureblue'] = 'R0lGODlhAQABAIAAAD13swAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
/***
$images['blue'] = 'R0lGODlhAQABAIAAAAAA/wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['darkblue'] = 'R0lGODlhAQABAIAAAEpYogAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['brown'] = 'R0lGODlhAQABAIAAAHsAAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['green'] = 'R0lGODlhAQABAIAAAAB9RQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['grey'] = 'R0lGODlhAQABAIAAAOjs6AAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['lightgrey']= 'R0lGODlhAQABAIAAANHY0gAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['darkgrey'] = 'R0lGODlhAQABAIAAAIycjwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['margenta'] = 'R0lGODlhAQABAIAAANsAmgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['red'] = 'R0lGODlhAQABAIAAANxEHAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
$images['yellow'] = 'R0lGODlhAQABAIAAAP/3AAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';
***/
## 1 x 9, width:9, for width
##
$images['brown'] = 'R0lGODlhAQABAIAAAH8AAP///ywAAAAAAQABAAACAkQBADs=';
$images['blue'] = 'R0lGODlhAQAJAJEAAAAAAP///wAA/zc/PywAAAAAAQAJAAACA5RvUwA7';
$images['green'] = 'R0lGODlhAQAJAJEAAAAAAP///zc/PzF6CywAAAAAAQAJAAACA5xvUgA7';
$images['margenta'] = 'R0lGODlhAQAJAJEAAAAAAP///9MAizc/PywAAAAAAQAJAAACA5RvUwA7';
$images['yellow'] = 'R0lGODlhAQAJAJEAAAAAAP///zc/P/v8nywAAAAAAQAJAAACA5xvUgA7';
## 9 x 1, 9:height, for height
##
$images['h_pureblue'] = 'R0lGODlhCQABAIAAAD13szdQRSH5BAAAAAAALAAAAAAJAAEAAAIDhG9RADs=';
if(!$images[$color]) $color = 'null';
header('Content-type: image/gif');
echo base64_decode($images[$color]);
exit; // don't print any messages
}
?>