FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
wordpress-azure/wp-includes/class-wp-http-encoding.php at master · srgk0/wordpress-azure · GitHub
srgk0
/
wordpress-azure
Public
forked from
azureappserviceoss/wordpress-azure
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
1
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
wordpress-azure
/
wp-includes
/
class-wp-http-encoding.php
Copy path
More file actions
More file actions
Latest commit
History
History
History
228 lines (203 loc) · 6.29 KB
Breadcrumbs
wordpress-azure
/
wp-includes
/
class-wp-http-encoding.php
Copy path
File metadata and controls
228 lines (203 loc) · 6.29 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<?php
/**
* HTTP API: WP_Http_Encoding class
*
* @package WordPress
* @subpackage HTTP
* @since 4.4.0
*/
/**
* Core class used to implement deflate and gzip transfer encoding support for HTTP requests.
*
* Includes RFC 1950, RFC 1951, and RFC 1952.
*
* @since 2.8.0
*/
class
WP_Http_Encoding {
/**
* Compress raw string using the deflate format.
*
* Supports the RFC 1951 standard.
*
* @since 2.8.0
*
* @static
*
* @param string $raw String to compress.
* @param int $level Optional, default is 9. Compression level, 9 is highest.
* @param string $supports Optional, not used. When implemented it will choose the right compression based on what the server supports.
* @return string|false False on failure.
*/
public
static
function
compress
(
$
raw
,
$
level
=
9
,
$
supports
=
null
) {
return
gzdeflate
(
$
raw
,
$
level
);
}
/**
* Decompression of deflated string.
*
* Will attempt to decompress using the RFC 1950 standard, and if that fails
* then the RFC 1951 standard deflate will be attempted. Finally, the RFC
* 1952 standard gzip decode will be attempted. If all fail, then the
* original compressed string will be returned.
*
* @since 2.8.0
*
* @static
*
* @param string $compressed String to decompress.
* @param int $length The optional length of the compressed data.
* @return string|bool False on failure.
*/
public
static
function
decompress
(
$
compressed
,
$
length
=
null
) {
if
(
empty
(
$
compressed
) )
return
$
compressed
;
if
(
false
!== (
$
decompressed
= @
gzinflate
(
$
compressed
) ) )
return
$
decompressed
;
if
(
false
!== (
$
decompressed
=
self
::
compatible_gzinflate
(
$
compressed
) ) )
return
$
decompressed
;
if
(
false
!== (
$
decompressed
= @
gzuncompress
(
$
compressed
) ) )
return
$
decompressed
;
if
(
function_exists
(
'
gzdecode
'
) ) {
$
decompressed
= @
gzdecode
(
$
compressed
);
if
(
false
!==
$
decompressed
)
return
$
decompressed
;
}
return
$
compressed
;
}
/**
* Decompression of deflated string while staying compatible with the majority of servers.
*
* Certain Servers will return deflated data with headers which PHP's gzinflate()
* function cannot handle out of the box. The following function has been created from
* various snippets on the gzinflate() PHP documentation.
*
* Warning: Magic numbers within. Due to the potential different formats that the compressed
* data may be returned in, some "magic offsets" are needed to ensure proper decompression
* takes place. For a simple progmatic way to determine the magic offset in use, see:
* https://core.trac.wordpress.org/ticket/18273
*
* @since 2.8.1
* @link https://core.trac.wordpress.org/ticket/18273
* @link https://secure.php.net/manual/en/function.gzinflate.php#70875
* @link https://secure.php.net/manual/en/function.gzinflate.php#77336
*
* @static
*
* @param string $gzData String to decompress.
* @return string|bool False on failure.
*/
public
static
function
compatible_gzinflate
(
$
gzData
) {
// Compressed data might contain a full header, if so strip it for gzinflate().
if
(
substr
(
$
gzData
,
0
,
3
) ==
"\x1f\x8b\x08"
) {
$
i
=
10
;
$
flg
=
ord
(
substr
(
$
gzData
,
3
,
1
) );
if
(
$
flg
>
0
) {
if
(
$
flg
&
4
) {
list
(
$
xlen
) =
unpack
(
'
v
'
,
substr
(
$
gzData
,
$
i
,
2
) );
$
i
=
$
i
+
2
+
$
xlen
;
}
if
(
$
flg
&
8
)
$
i
=
strpos
(
$
gzData
,
"\0"
,
$
i
) +
1
;
if
(
$
flg
&
16
)
$
i
=
strpos
(
$
gzData
,
"\0"
,
$
i
) +
1
;
if
(
$
flg
&
2
)
$
i
=
$
i
+
2
;
}
$
decompressed
= @
gzinflate
(
substr
(
$
gzData
,
$
i
, -
8
) );
if
(
false
!==
$
decompressed
)
return
$
decompressed
;
}
// Compressed data from java.util.zip.Deflater amongst others.
$
decompressed
= @
gzinflate
(
substr
(
$
gzData
,
2
) );
if
(
false
!==
$
decompressed
)
return
$
decompressed
;
return
false
;
}
/**
* What encoding types to accept and their priority values.
*
* @since 2.8.0
*
* @static
*
* @param string $url
* @param array $args
* @return string Types of encoding to accept.
*/
public
static
function
accept_encoding
(
$
url
,
$
args
) {
$
type
=
array
();
$
compression_enabled
=
self
::
is_available
();
if
( !
$
args
[
'
decompress
'
] )
// Decompression specifically disabled.
$
compression_enabled
=
false
;
elseif
(
$
args
[
'
stream
'
] )
// Disable when streaming to file.
$
compression_enabled
=
false
;
elseif
(
isset
(
$
args
[
'
limit_response_size
'
] ) )
// If only partial content is being requested, we won't be able to decompress it.
$
compression_enabled
=
false
;
if
(
$
compression_enabled
) {
if
(
function_exists
(
'
gzinflate
'
) )
$
type
[] =
'
deflate;q=1.0
'
;
if
(
function_exists
(
'
gzuncompress
'
) )
$
type
[] =
'
compress;q=0.5
'
;
if
(
function_exists
(
'
gzdecode
'
) )
$
type
[] =
'
gzip;q=0.5
'
;
}
/**
* Filters the allowed encoding types.
*
* @since 3.6.0
*
* @param array $type Encoding types allowed. Accepts 'gzinflate',
* 'gzuncompress', 'gzdecode'.
* @param string $url URL of the HTTP request.
* @param array $args HTTP request arguments.
*/
$
type
=
apply_filters
(
'
wp_http_accept_encoding
'
,
$
type
,
$
url
,
$
args
);
return
implode
(
'
,
'
,
$
type
);
}
/**
* What encoding the content used when it was compressed to send in the headers.
*
* @since 2.8.0
*
* @static
*
* @return string Content-Encoding string to send in the header.
*/
public
static
function
content_encoding
() {
return
'
deflate
'
;
}
/**
* Whether the content be decoded based on the headers.
*
* @since 2.8.0
*
* @static
*
* @param array|string $headers All of the available headers.
* @return bool
*/
public
static
function
should_decode
(
$
headers
) {
if
(
is_array
(
$
headers
) ) {
if
(
array_key_exists
(
'
content-encoding
'
,
$
headers
) && !
empty
(
$
headers
[
'
content-encoding
'
] ) )
return
true
;
}
elseif
(
is_string
(
$
headers
) ) {
return
(
stripos
(
$
headers
,
'
content-encoding:
'
) !==
false
);
}
return
false
;
}
/**
* Whether decompression and compression are supported by the PHP version.
*
* Each function is tested instead of checking for the zlib extension, to
* ensure that the functions all exist in the PHP version and aren't
* disabled.
*
* @since 2.8.0
*
* @static
*
* @return bool
*/
public
static
function
is_available
() {
return
(
function_exists
(
'
gzuncompress
'
) ||
function_exists
(
'
gzdeflate
'
) ||
function_exists
(
'
gzinflate
'
) );
}
}
Back
|
FazBrowse Home
|
New Git URL