在PHP中模拟asp的response类
习惯了asp或是asp.net开发的人, 他们会经常用到response类,这个类用于处理客户端的相应,可以实现跳转,输出等功能. 在php中没有这个类,但是确实可以通过函数来模拟这个类.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/*
* 作者: 雪狐博客
* 类用途: 实现类似于asp中的response功能
*/
final
class
Response {
private
$headers
=
array
();
private
$output
;
private
$level
= 0;
public
function
addHeader(
$key
,
$value
) {
$this
->headers[
$key
] =
$value
;
}
public
function
removeHeader(
$key
) {
if
(isset(
$this
->headers[
$key
])) {
unset(
$this
->headers[
$key
]);
}
}
public
function
redirect(
$url
) {
header(
'Location: '
.
$url
);
exit
;
}
public
function
setOutput(
$output
,
$level
= 0) {
$this
->output =
$output
;
$this
->level =
$level
;
}
private
function
compress(
$data
,
$level
= 0) {
if
(isset(
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
]) && (
strpos
(
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
],
'gzip'
) !== FALSE)) {
$encoding
=
'gzip'
;
}
if
(isset(
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
]) && (
strpos
(
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
],
'x-gzip'
) !== FALSE)) {
$encoding
=
'x-gzip'
;
}
if
(!isset(
$encoding
)) {
return
$data
;
}
if
(!
extension_loaded
(
'zlib'
) ||
ini_get
(
'zlib.output_compression'
)) {
return
$data
;
}
if
(headers_sent()) {
return
$data
;
}
if
(connection_status()) {
return
$data
;
}
$this
->addHeader(
'Content-Encoding'
,
$encoding
);
return
gzencode(
$data
, (int)
$level
);
}
public
function
output() {
if
(
$this
->level) {
$ouput
=
$this
->compress(
$this
->output,
$this
->level);
}
else
{
$ouput
=
$this
->output;
}
if
(!headers_sent()) {
foreach
(
$this
->headers
as
$key
=>
$value
) {
header(
$key
.
': '
.
$value
);
}
}
echo
$ouput
;
}
}
|