<?php
class Web {
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 function get($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'
);
else if ($ext==
"png"
) header('Content-Type: image/png'
);
else if ($ext==
"jpg"
) header('Content-Type: image/jpeg'
);
else if ($ext==
"css"
) header('Content-Type: text/css'
);
else if ($ext==
"js"
) header('Content-Type: text/javascript'
);
self::
notModified($file);
flush();
readfile($file);
exit;
}
const NO_COOKIE=0
;
const NO_DEFAULT=null;
public static function param($name, $default=FALSE
, $expire=0
, $pattern=FALSE
, $query=FALSE
) {
$value=FALSE
;
if (strpos($name, '.'
) !==
FALSE
) $name=strtr($name, '.'
, '_'
);
if(isset($_GET[$name])) $value=$_GET[$name];
if(isset($_POST[$name])) $value=$_POST[$name];
if ($value) {
if (get_magic_quotes_gpc()) $value = stripslashes($value);
}
if ($pattern &&
$value &&
!preg_match($pattern, $value)) $value=FALSE
;
if (!$expire) {
}
else if ($value) {
if ($expire > 60
) setcookie($name, $value, time()+ $expire);
else setcookie($name, $value);
}
else if ($value===
""
) {
setcookie ($name);
}
else {
if(isset($_COOKIE[$name])) $value=$_COOKIE[$name];
}
if(!$value &&
$default) $value=$default;
return $value;
}
public static function params( $name=FALSE
, $query=FALSE
, $expire=0
) {
if (!$query) $query=Web::
query();
$params=array();
$a = explode('&'
, $query);
if(!$a ||
count($a)==
0
||
!$a[0
]);
else foreach ($a as $p) {
list($k, $v) = preg_split('/=/'
, $p);
$k=urldecode($k);
$v=urldecode($v);
if (preg_match('/[\xC0-\xFD]/'
, $k+$v)) {
$k=utf8_encode ($k);
$v=utf8_encode ($v);
}
$params[$k][]=$v;
}
if (!$name) return $params;
else if (isset($params[$name])) $params=$params[$name];
else $params=array();
if(!$expire);
else if (count($params)==
1
&&
!$params[0
]) {
setcookie($name);
}
else if (count($params)) {
if ($expire > 60
) setcookie($name, serialize($params), time()+ $expire);
else setcookie($name, serialize($params));
}
else if(isset($_COOKIE[$name])) $params=unserialize($_COOKIE[$name]);
return $params;
}
public static function notModified($file, $force=false) {
if (!$file) return false;
$filemtime=false;
if (is_int($file)) $filemtime=$file;
else if (is_array($file)) foreach($file as $f) {
if (!file_exists($f)) continue;
$i=filemtime($f);
if ($i &&
$i > $filemtime) $filemtime=$i;
}
else $filemtime=filemtime($file);
if(!$filemtime) return $filemtime;
header("X-File: "
. basename($_SERVER['SCRIPT_FILENAME'
]));
if (filemtime($_SERVER['SCRIPT_FILENAME'
]) > $filemtime) {
$filemtime=filemtime($_SERVER['SCRIPT_FILENAME'
]);
}
$modification=gmdate('D, d M Y H:i:s'
, $filemtime).' GMT'
;
header("Last-Modified: $modification");
$etag = '"'
.md5($modification).'"'
;
header("ETag: $etag");
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;
if ( ($if_none_match &&
$if_none_match ==
$etag) ||
$if_modified_since ==
$modification) {
header('HTTP/1.x 304 Not Modified'
);
exit;
}
}
public static function noCache() {
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='
;
return false;
}
public static function query($p1=false, $p2=false) {
if ($p2) {
$exclude=$p2;
$query=preg_replace( '/&/'
, '&'
, $p1);
}
else if ($_SERVER['REQUEST_METHOD'
] ==
"POST"
) {
$exclude=$p1;
if (isset($HTTP_RAW_POST_DATA)) $query=$HTTP_RAW_POST_DATA;
else $query = file_get_contents("php://input"
);
}
else {
$exclude=$p1;
$query=$_SERVER['QUERY_STRING'
];
}
if (strlen($exclude)) $query=preg_replace( '/&('
.$exclude.')=[^&]*/'
, ''
, '&'
.$query);
if ($exclude) $query=preg_replace( array('/[^&=]+=&/'
, '/&$/'
), array(''
, ''
), $query.'&'
);
return $query;
}
public static function qsa($exclude=false) {
$qsa=self::
query($exclude);
$qsa=preg_replace( '/&[^=&]*=&/'
, '&'
, '&'
.$qsa.'&'
);
return preg_replace('/&/'
, '&'
, $qsa);
}
public static function pathinfo() {
$pathinfo=""
;
if (!isset($_SERVER['REQUEST_URI'
])) return $pathinfo; 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'
]));
else if (strpos($request, dirname($_SERVER['SCRIPT_NAME'
])) ===
0
)
$pathinfo=substr($request, strlen(dirname($_SERVER['SCRIPT_NAME'
])));
if ($pathinfo); else if (isset($_SERVER['PATH_ORIG_INFO'
])) $pathinfo=$_SERVER['PATH_ORIG_INFO'
];
else if (isset($_SERVER['PATH_INFO'
])) $pathinfo=$_SERVER['PATH_INFO'
];
else if (isset($_REQUEST['id'
])) $pathinfo=$_REQUEST['id'
];
return ltrim($pathinfo, '/'
);
}
}
?>