classWeb{
static $mime=array("css"=>'Content-Type: text/css; charset=UTF-8',"html"=>'Content-Type: text/html; charset=UTF-8',"jpg"=>'Content-Type: image/jpeg',"png"=>'Content-Type: image/png',);
public static functionget($file){if(!is_file($file)||!is_readable($file)){header('HTTP/1.x 404 Not Found');exit;}header('Content-Length: '.filesize($file));$ext=explode('.',$file);$ext=array_pop($ext);if($ext=="html")header('Content-Type: text/html; charset=UTF-8');elseif($ext=="png")header('Content-Type: image/png');elseif($ext=="jpg")header('Content-Type: image/jpeg');elseif($ext=="css")header('Content-Type: text/css');elseif($ext=="js")header('Content-Type: text/javascript');self::notModified($file);// ob_clean(); // a l'air de déconner
flush();readfile($file);exit;}constNO_COOKIE=0;constNO_DEFAULT=null;
public static functionparam($name,$default=FALSE,$expire=0,$pattern=FALSE,$query=FALSE){$value=FALSE;// if key as a dot, hack php
if(strpos($name,'.')!==FALSE)$name=strtr($name,'.','_');// prendre le paramètre de requête
if(isset($_GET[$name]))$value=$_GET[$name];if(isset($_POST[$name]))$value=$_POST[$name];if($value){if(get_magic_quotes_gpc())$value=stripslashes($value);// is ISO ? find a best test
// if (preg_match('/[\xC0-\xFD]/', $value)) $value=utf8_encode ($value);
}// validate value against pattern
if($pattern&&$value&&!preg_match($pattern,$value))$value=FALSE;// if no expire, no cookie, neither read or write
if(!$expire){// if(!$value && isset($_COOKIE[$name])) $value=$_COOKIE[$name];
}// if a value, set cookie, do not $_COOKIE[$name]=$value
elseif($value){// if a number
if($expire>60)setcookie($name,$value,time()+$expire);// session time
elsesetcookie($name,$value);}// if empty, delete cookie
elseif($value===""){setcookie($name);}// if cookie stored, load it
else{if(isset($_COOKIE[$name]))$value=$_COOKIE[$name];}if(!$value&&$default)$value=$default;return$value;}
public static functionparams($name=FALSE,$query=FALSE,$expire=0){if(!$query)$query=Web::query();// remplir un tableau
$params=array();$a=explode('&',$query);// if empty, do not return now, wait for possible cookie store value
if(!$a||count($a)==0||!$a[0]);elseforeach($aas$p){
list($k,$v)=preg_split('/=/',$p);$k=urldecode($k);$v=urldecode($v);// semble une chaîne ISO, traduire les accents
if(preg_match('/[\xC0-\xFD]/',$k+$v)){$k=utf8_encode($k);$v=utf8_encode($v);}$params[$k][]=$v;}// no key requested, return all params, do not store cookies
if(!$name)return$params;// a param is requested, values found
elseif(isset($params[$name]))$params=$params[$name];// no param for this name
else$params=array();// no cookie store requested
if(!$expire);// if empty ?, delete cookie
elseif(count($params)==1&&!$params[0]){setcookie($name);}// if a value, set cookie, do not $_COOKIE[$name]=$value
elseif(count($params)){// if a number
if($expire>60)setcookie($name,serialize($params),time()+$expire);// session time
elsesetcookie($name,serialize($params));}// if cookie stored, load it
elseif(isset($_COOKIE[$name]))$params=unserialize($_COOKIE[$name]);return$params;}
public static functionnotModified($file,$force=false){if(!$file)returnfalse;$filemtime=false;// seems already a filemtime
if(is_int($file))$filemtime=$file;// if array of file, get the newest
elseif(is_array($file))foreach($fileas$f){// if not file exists, no error
if(!file_exists($f))continue;$i=filemtime($f);if($i&&$i>$filemtime)$filemtime=$i;}else$filemtime=filemtime($file);if(!$filemtime)return$filemtime;// take script file date
header("X-File: ".basename($_SERVER['SCRIPT_FILENAME']));// Default expires
if(filemtime($_SERVER['SCRIPT_FILENAME'])>$filemtime){$filemtime=filemtime($_SERVER['SCRIPT_FILENAME']);}// $modification=substr(date('r', $filemtime), 0, -5).'GMT';
$modification=gmdate('D, d M Y H:i:s',$filemtime).' GMT';// header("X-Date: ". substr(gmdate('r'), 0, -5).'GMT');
// date de modification
header("Last-Modified: $modification");// page key
$etag='"'.md5($modification).'"';header("ETag: $etag");// tests for 304
if($force)return;if(self::noCache())return;$if_modified_since=isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])?stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']):false;$if_none_match=isset($_SERVER['HTTP_IF_NONE_MATCH'])?stripslashes($_SERVER['HTTP_IF_NONE_MATCH']):false;// send 304
if(($if_none_match&&$if_none_match==$etag)||$if_modified_since==$modification){header('HTTP/1.x 304 Not Modified');exit;}}
public static functionnoCache(){// pas de cache en POST
if($_SERVER['REQUEST_METHOD']=='POST')return'POST';if(isset($_SERVER['HTTP_PRAGMA'])&&stripos($_SERVER['HTTP_PRAGMA'],"no-cache")!==false)return"Pragma: no-cache";if(isset($_SERVER['HTTP_CACHE_CONTROL'])&&stripos($_SERVER['HTTP_CACHE_CONTROL'],"no-cache")!==false)return"Cache-Control: no-cache";if(isset($_REQUEST['no-cache']))return'?no-cache=';if(isset($_REQUEST['force']))return'?force=';returnfalse;}
public static functionquery($p1=false,$p2=false){// query passée en variable
if($p2){$exclude=$p2;$query=preg_replace('/&/','&',$p1);}// query en POST
elseif($_SERVER['REQUEST_METHOD']=="POST"){$exclude=$p1;if(isset($HTTP_RAW_POST_DATA))$query=$HTTP_RAW_POST_DATA;else$query=file_get_contents("php://input");}// query en GET
else{$exclude=$p1;$query=$_SERVER['QUERY_STRING'];}// suppression de paramètres en regex
if(strlen($exclude))$query=preg_replace('/&('.$exclude.')=[^&]*/','','&'.$query);// supprimer les paramètres vides, ne pas chercher à matcher entre deux &, sinon le parser redémarre après pour le suisvant
if($exclude)$query=preg_replace(array('/[^&=]+=&/','/&$/'),array('',''),$query.'&');return$query;}
public static functionqsa($exclude=false){$qsa=self::query($exclude);$qsa=preg_replace('/&[^=&]*=&/','&','&'.$qsa.'&');returnpreg_replace('/&/','&',$qsa);}
public static functionpathinfo(){$pathinfo="";if(!isset($_SERVER['REQUEST_URI']))return$pathinfo;// ligne de commande
list($request)=explode('?',$_SERVER['REQUEST_URI']);if(strpos($request,'%')!==false)$request=urldecode($request);if(strpos($request,$_SERVER['SCRIPT_NAME'])===0)$pathinfo=substr($request,strlen($_SERVER['SCRIPT_NAME']));elseif(strpos($request,dirname($_SERVER['SCRIPT_NAME']))===0)$pathinfo=substr($request,strlen(dirname($_SERVER['SCRIPT_NAME'])));// if nothing found, try other variables
if($pathinfo);// something found, keep it
elseif(isset($_SERVER['PATH_ORIG_INFO']))$pathinfo=$_SERVER['PATH_ORIG_INFO'];elseif(isset($_SERVER['PATH_INFO']))$pathinfo=$_SERVER['PATH_INFO'];elseif(isset($_REQUEST['id']))$pathinfo=$_REQUEST['id'];// why trim last / ?
returnltrim($pathinfo,'/');}}?>