Version Description
- Added preview feature so all cache settings can be reviewed prior to deployment
- Added minify configuration wizard (help button on minify tab)
- Added "never cache the following pages" to database and object cache
- Added minify option to JavaScript embed after <body>
- Added minify error notifications
- Added drag and drop dependency resolution for minify CSS / JavaScript groups
- Added object caching
- Added option to automatically page cache prime (preload) with or without XML sitemap
- Added support for multiple CNAMEs to CDN
- Added support for minifcation of any respective theme installed a single site
- Added support for page caching of multiple themes for various user agent groups
- Added support for theme switching / redirection based on groups of user agents
- Added compatibility with WP Super Cache fragment caching method (disk basic mode only)
- Added HTTP compression and headers for AWS S3
- Added ignored comment stems field, with Google AdSense default value to HTML minify
- Added support for varnish purging
- Added Rackspace CloudFiles support
- Added native NetDNA / MaxCDN integration
- Added option to cache 404 pages
- Added changed files auto-upload to CDN
- Added option to handle 404 errors for static objects directly with the web server
- Added support for gravity forms to database cache default settings
- Added changed file auto-upload to CDN
- Database connection errors now return internal server (500) error response and are thus not cached
- Incomplete plugin installation / removal no longer generates public errors
- Unterminated string errors no longer display publicly
- Support tab improvements
- Install tab improvements
- Resolved conflicts with disk enhanced .htaccess directives insertion
- Improved compatibility with all mobile plugins
- Improved AWS reliability
- Improved browser caching support and management
- Improved directory management for disk caching methods for increased performance
- Improved handling of missing minify files
- Improved Media Library import
- Improved Multi Site support
- Improved SSL interoperability
Download this release
Release Info
Developer | fredericktownes |
Plugin | W3 Total Cache |
Version | 0.9.0 |
Comparing to | |
See all releases |
Code changes from version 0.8.5.2 to 0.9.0
- inc/css/lightbox.css +5 -7
- inc/css/options.css +193 -6
- inc/define.php +1145 -537
- inc/email/minify_error_notification.html +7 -0
- inc/{options/support_email.phtml → email/support_request.phtml} +13 -3
- inc/images/logo.png +0 -0
- inc/images/logo_small.png +0 -0
- inc/js/lightbox.js +184 -30
- inc/js/options.js +681 -342
- inc/js/popup.js +26 -22
- inc/lightbox/minify_recommendations.phtml +130 -0
- inc/lightbox/self_test.phtml +343 -0
- inc/lightbox/support_us.phtml +1 -1
- inc/lightbox/tweet.phtml +3 -3
- inc/mime/all.php +624 -0
- inc/mime/cssjs.php +9 -0
- inc/mime/html.php +14 -0
- inc/{mime.php → mime/other.php} +31 -36
- inc/options/about.phtml +6 -7
- inc/options/browsercache.phtml +270 -0
- inc/options/cdn.phtml +59 -26
- inc/options/cdn/cf.phtml +33 -30
- inc/options/cdn/common/cnames.phtml +43 -0
- inc/options/cdn/ftp.phtml +45 -43
- inc/options/cdn/mirror.phtml +12 -7
- inc/options/cdn/netdna.phtml +24 -0
- inc/options/cdn/rscf.phtml +32 -0
- inc/options/cdn/s3.phtml +37 -33
- inc/options/common/header.phtml +28 -21
- inc/options/common/help.phtml +15 -0
- inc/options/dbcache.phtml +30 -20
- inc/options/faq.phtml +16 -569
- inc/options/faq.xml +701 -0
- inc/options/general.phtml +197 -69
- inc/options/install.phtml +275 -134
- inc/options/minify.phtml +184 -83
- inc/options/mobile.phtml +86 -0
- inc/options/objectcache.phtml +94 -0
- inc/options/pgcache.phtml +102 -44
- inc/options/support.phtml +26 -95
- inc/options/support/bug_report.phtml +80 -0
- inc/options/support/email_support.phtml +80 -0
- inc/options/support/linux_config.phtml +68 -0
- inc/options/support/new_feature.phtml +45 -0
- inc/options/support/phone_support.phtml +80 -0
- inc/options/support/plugin_config.phtml +76 -0
- inc/options/support/theme_config.phtml +76 -0
- inc/options/support_payment.phtml +33 -0
- inc/options/support_select.phtml +34 -0
- inc/popup/cdn_export_file.phtml +1 -1
- inc/popup/cdn_export_library.phtml +1 -1
- inc/popup/cdn_import_library.phtml +3 -3
- inc/popup/cdn_queue.phtml +4 -4
- inc/popup/cdn_rename_domain.phtml +1 -1
- inc/popup/common/header.phtml +3 -3
- ini/_htaccess +0 -126
- ini/apc.ini +2 -2
- ini/eaccelerator.ini +2 -1
- ini/xcache.ini +1 -1
- lib/CF/cacert.pem +3113 -0
- lib/CF/cloudfiles.php +2137 -0
- lib/CF/cloudfiles_exceptions.php +41 -0
- lib/CF/cloudfiles_http.php +1338 -0
- lib/Minify/HTTP/ConditionalGet.php +235 -185
- lib/Minify/HTTP/Encoder.php +2 -6
- lib/Minify/Minify.php +6 -7
- lib/Minify/Minify/CSS/Compressor.php +26 -2
- lib/Minify/Minify/CSS/UriRewriter.php +2 -2
- lib/Minify/Minify/Cache/File.php +10 -3
- lib/Minify/Minify/CombineOnly.php +1 -1
- lib/Minify/Minify/Controller/MinApp.php +1 -1
- lib/Minify/Minify/HTML.php +83 -55
- lib/S3.php +2 -5
- lib/W3/Cache/Apc.php +3 -3
- lib/W3/Cache/Base.php +3 -3
- lib/W3/Cache/Eaccelerator.php +3 -3
- lib/W3/Cache/File.php +44 -9
- lib/W3/Cache/File/Manager.php +6 -4
- lib/W3/Cache/File/PgCache.php +43 -6
- lib/W3/Cache/Memcached.php +3 -3
- lib/W3/Cache/Xcache.php +3 -3
- lib/W3/Cdn.php +30 -12
- lib/W3/Cdn/Base.php +315 -16
- lib/W3/Cdn/Cf.php +57 -21
- lib/W3/Cdn/Ftp.php +44 -34
- lib/W3/Cdn/Mirror.php +11 -21
- lib/W3/Cdn/Netdna.php +138 -0
- lib/W3/Cdn/Rscf.php +304 -0
- lib/W3/Cdn/S3.php +169 -54
- lib/W3/Config.php +313 -138
inc/css/lightbox.css
CHANGED
@@ -3,7 +3,8 @@
|
|
3 |
}
|
4 |
|
5 |
.lightbox {
|
6 |
-
|
|
|
7 |
padding: 10px 20px;
|
8 |
border: 1px solid #bbb;
|
9 |
border-radius: 11px;
|
@@ -12,10 +13,11 @@
|
|
12 |
}
|
13 |
|
14 |
.lightbox-close {
|
15 |
-
cursor: hand;
|
16 |
cursor: pointer;
|
|
|
17 |
text-decoration: underline;
|
18 |
-
|
|
|
19 |
}
|
20 |
|
21 |
.lightbox-loader {
|
@@ -23,7 +25,3 @@
|
|
23 |
background-position: center center;
|
24 |
background-repeat: no-repeat;
|
25 |
}
|
26 |
-
|
27 |
-
.lightbox th {
|
28 |
-
width: 80px;
|
29 |
-
}
|
3 |
}
|
4 |
|
5 |
.lightbox {
|
6 |
+
position: absolute;
|
7 |
+
background: #fdfdfd;
|
8 |
padding: 10px 20px;
|
9 |
border: 1px solid #bbb;
|
10 |
border-radius: 11px;
|
13 |
}
|
14 |
|
15 |
.lightbox-close {
|
|
|
16 |
cursor: pointer;
|
17 |
+
position: absolute;
|
18 |
text-decoration: underline;
|
19 |
+
top: 25px;
|
20 |
+
right: 20px;
|
21 |
}
|
22 |
|
23 |
.lightbox-loader {
|
25 |
background-position: center center;
|
26 |
background-repeat: no-repeat;
|
27 |
}
|
|
|
|
|
|
|
|
inc/css/options.css
CHANGED
@@ -5,10 +5,6 @@
|
|
5 |
width: 36px
|
6 |
}
|
7 |
|
8 |
-
.w3tc-options-menu-selected {
|
9 |
-
font-weight: 700
|
10 |
-
}
|
11 |
-
|
12 |
.w3tc-enabled {
|
13 |
color: #090;
|
14 |
font-weight: 700
|
@@ -36,6 +32,59 @@
|
|
36 |
padding: 5px
|
37 |
}
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
#w3tc acronym {
|
40 |
border-bottom: 1px dotted #666
|
41 |
}
|
@@ -53,6 +102,20 @@
|
|
53 |
font-style: 400
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
#w3tc h5 {
|
57 |
margin: 0
|
58 |
}
|
@@ -110,6 +173,7 @@
|
|
110 |
|
111 |
#w3tc fieldset {
|
112 |
margin: 1em 0;
|
|
|
113 |
padding: 0 1em 1em 1em;
|
114 |
border: 1px solid #bbb;
|
115 |
border-radius: 11px;
|
@@ -122,12 +186,135 @@
|
|
122 |
padding: 0;
|
123 |
}
|
124 |
|
125 |
-
#w3tc legend {
|
126 |
color: #999;
|
127 |
padding: 0 5px;
|
128 |
font-weight: bold;
|
129 |
}
|
130 |
|
131 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
width: 400px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
}
|
5 |
width: 36px
|
6 |
}
|
7 |
|
|
|
|
|
|
|
|
|
8 |
.w3tc-enabled {
|
9 |
color: #090;
|
10 |
font-weight: 700
|
32 |
padding: 5px
|
33 |
}
|
34 |
|
35 |
+
.w3tc-test-ok,.w3tc-test-warn,.w3tc-test-error {
|
36 |
+
font-weight: bold;
|
37 |
+
}
|
38 |
+
|
39 |
+
.w3tc-test-ok {
|
40 |
+
color: #090;
|
41 |
+
}
|
42 |
+
|
43 |
+
.w3tc-test-warn {
|
44 |
+
color: #f90;
|
45 |
+
}
|
46 |
+
|
47 |
+
.w3tc-test-error {
|
48 |
+
color: #f00;
|
49 |
+
}
|
50 |
+
|
51 |
+
#w3tc-help ul {
|
52 |
+
float: left;
|
53 |
+
width: 29%;
|
54 |
+
list-style-type: disc;
|
55 |
+
margin: 1em 2% 1em 2%;
|
56 |
+
}
|
57 |
+
|
58 |
+
#w3tc-help li {
|
59 |
+
margin: 0;
|
60 |
+
}
|
61 |
+
|
62 |
+
#w3tc-help a {
|
63 |
+
text-decoration: none;
|
64 |
+
}
|
65 |
+
|
66 |
+
#w3tc-help a:hover {
|
67 |
+
text-decoration: underline;
|
68 |
+
}
|
69 |
+
|
70 |
+
#w3tc-nav select {
|
71 |
+
background: #f9f9f9 !important;
|
72 |
+
border: 0;
|
73 |
+
color: #333;
|
74 |
+
font-size: 1em;
|
75 |
+
font-weight: bold;
|
76 |
+
}
|
77 |
+
|
78 |
+
#w3tc-nav optgroup {
|
79 |
+
background: #fff;
|
80 |
+
font-style: normal;
|
81 |
+
padding: 3px;
|
82 |
+
}
|
83 |
+
|
84 |
+
#w3tc-nav option {
|
85 |
+
background: #fff;
|
86 |
+
}
|
87 |
+
|
88 |
#w3tc acronym {
|
89 |
border-bottom: 1px dotted #666
|
90 |
}
|
102 |
font-style: 400
|
103 |
}
|
104 |
|
105 |
+
#w3tc optgroup {
|
106 |
+
font-style: normal;
|
107 |
+
}
|
108 |
+
|
109 |
+
#w3tc optgroup option {
|
110 |
+
text-indent: 20px;
|
111 |
+
}
|
112 |
+
|
113 |
+
#w3tc h2 span {
|
114 |
+
font-size: 0.6em;
|
115 |
+
font-style: normal;
|
116 |
+
text-shadow: none;
|
117 |
+
}
|
118 |
+
|
119 |
#w3tc h5 {
|
120 |
margin: 0
|
121 |
}
|
173 |
|
174 |
#w3tc fieldset {
|
175 |
margin: 1em 0;
|
176 |
+
background: #fdfdfd;
|
177 |
padding: 0 1em 1em 1em;
|
178 |
border: 1px solid #bbb;
|
179 |
border-radius: 11px;
|
186 |
padding: 0;
|
187 |
}
|
188 |
|
189 |
+
#w3tc fieldset legend {
|
190 |
color: #999;
|
191 |
padding: 0 5px;
|
192 |
font-weight: bold;
|
193 |
}
|
194 |
|
195 |
+
#w3tc fieldset legend a:hover {
|
196 |
+
text-decoration: none;
|
197 |
+
}
|
198 |
+
|
199 |
+
#w3tc pre.code {
|
200 |
+
color: #000;
|
201 |
+
margin: 1em 0;
|
202 |
+
overflow: auto;
|
203 |
+
background: #eee;
|
204 |
+
padding: 12px 15px;
|
205 |
+
border: 1px solid #ccc;
|
206 |
+
}
|
207 |
+
|
208 |
+
#w3tc pre.console {
|
209 |
+
color: #ccc;
|
210 |
+
margin: 1em 0;
|
211 |
+
overflow: auto;
|
212 |
+
background: #000;
|
213 |
+
padding: 12px 15px;
|
214 |
+
border: 1px solid #ccc;
|
215 |
+
}
|
216 |
+
|
217 |
+
#w3tc-cdn-general th {
|
218 |
width: 400px;
|
219 |
+
}
|
220 |
+
|
221 |
+
#cdn_cnames li {
|
222 |
+
padding: 5px;
|
223 |
+
cursor: ns-resize;
|
224 |
+
}
|
225 |
+
|
226 |
+
#cdn_cnames li:hover {
|
227 |
+
background: #f9f9f9;
|
228 |
+
}
|
229 |
+
|
230 |
+
#cdn_cnames li span {
|
231 |
+
color: #999;
|
232 |
+
}
|
233 |
+
|
234 |
+
#mobile_groups li {
|
235 |
+
cursor: ns-resize;
|
236 |
+
list-style: none;
|
237 |
+
background: #f9f9f9;
|
238 |
+
margin-bottom: 1em;
|
239 |
+
border-radius: 8px;
|
240 |
+
-webkit-border-radius: 8px;
|
241 |
+
-moz-border-radius: 8px;
|
242 |
+
}
|
243 |
+
|
244 |
+
#mobile_groups li:hover {
|
245 |
+
background: #f3f3f3;
|
246 |
+
}
|
247 |
+
|
248 |
+
#mobile_groups li table {
|
249 |
+
margin: 0;
|
250 |
+
}
|
251 |
+
|
252 |
+
.mobile_group {
|
253 |
+
font-weight: bold;
|
254 |
+
}
|
255 |
+
|
256 |
+
#recom_container,#self_test_container {
|
257 |
+
overflow: auto;
|
258 |
+
}
|
259 |
+
|
260 |
+
#self_test_container fieldset {
|
261 |
+
width: 70%;
|
262 |
+
}
|
263 |
+
|
264 |
+
.monospace {
|
265 |
+
font-family: monospace;
|
266 |
+
}
|
267 |
+
|
268 |
+
.w3tc-rules {
|
269 |
+
display: none;
|
270 |
+
margin: 1em 0;
|
271 |
+
padding: 0;
|
272 |
+
background: none;
|
273 |
+
}
|
274 |
+
|
275 |
+
.minify-files li {
|
276 |
+
padding: 2px;
|
277 |
+
cursor: ns-resize;
|
278 |
+
list-style: none;
|
279 |
+
}
|
280 |
+
|
281 |
+
.minify-files li:hover {
|
282 |
+
background: #f9f9f9;
|
283 |
+
}
|
284 |
+
|
285 |
+
.minify-files th,.minify-files td {
|
286 |
+
line-height: normal;
|
287 |
+
border: 0;
|
288 |
+
padding: 0;
|
289 |
+
margin: 0;
|
290 |
+
}
|
291 |
+
|
292 |
+
.minify-files th {
|
293 |
+
width: auto;
|
294 |
+
color: #aaa !important;
|
295 |
+
font-size: 10px;
|
296 |
+
font-weight: normal;
|
297 |
+
text-align: left;
|
298 |
+
}
|
299 |
+
|
300 |
+
.minify-files td {
|
301 |
+
font-size: 13px;
|
302 |
+
}
|
303 |
+
|
304 |
+
th.minify-files-add,td.minify-files-add {
|
305 |
+
width: 40px;
|
306 |
+
text-align: center;
|
307 |
+
}
|
308 |
+
|
309 |
+
.minify-files-exists input,.minify-files-exists select {
|
310 |
+
color: red;
|
311 |
+
}
|
312 |
+
|
313 |
+
#support_loading {
|
314 |
+
height: 32px;
|
315 |
+
background: url(../images/loader.gif) left center no-repeat;
|
316 |
+
padding-left: 38px;
|
317 |
+
line-height: 32px;
|
318 |
+
margin: 1em 0;
|
319 |
+
font-weight: bold;
|
320 |
}
|
inc/define.php
CHANGED
@@ -1,13 +1,15 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
define('W3TC_VERSION', '0.
|
4 |
define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
|
5 |
define('W3TC_EMAIL', 'w3tc@w3-edge.com');
|
|
|
|
|
6 |
define('W3TC_LINK_URL', 'http://www.w3-edge.com/wordpress-plugins/');
|
7 |
define('W3TC_LINK_NAME', 'WordPress Plugins');
|
8 |
define('W3TC_FEED_URL', 'http://feeds.feedburner.com/W3TOTALCACHE');
|
9 |
define('W3TC_README_URL', 'http://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/readme.txt?format=txt');
|
10 |
-
define('W3TC_TWITTER_STATUS', 'I
|
11 |
define('W3TC_SUPPORT_US_TIMEOUT', 2592000);
|
12 |
|
13 |
define('W3TC_PHP5', PHP_VERSION >= 5);
|
@@ -18,56 +20,54 @@ define('W3TC_FILE', 'w3-total-cache/w3-total-cache.php');
|
|
18 |
define('W3TC_LIB_DIR', W3TC_DIR . '/lib');
|
19 |
define('W3TC_LIB_W3_DIR', W3TC_LIB_DIR . '/W3');
|
20 |
define('W3TC_LIB_MINIFY_DIR', W3TC_LIB_DIR . '/Minify');
|
|
|
21 |
define('W3TC_PLUGINS_DIR', W3TC_DIR . '/plugins');
|
22 |
define('W3TC_INSTALL_DIR', W3TC_DIR . '/wp-content');
|
23 |
define('W3TC_INSTALL_MINIFY_DIR', W3TC_INSTALL_DIR . '/w3tc/min');
|
24 |
|
25 |
-
|
26 |
-
'page',
|
27 |
-
'comments',
|
28 |
-
'blog',
|
29 |
-
'wp-admin',
|
30 |
-
'wp-includes',
|
31 |
-
'wp-content',
|
32 |
-
'files',
|
33 |
-
'feed'
|
34 |
-
);
|
35 |
-
|
36 |
define('W3TC_BLOGNAME', w3_get_blogname());
|
37 |
-
define('
|
38 |
|
39 |
defined('WP_CONTENT_DIR') || define('WP_CONTENT_DIR', realpath(W3TC_DIR . '/../..'));
|
|
|
40 |
define('WP_CONTENT_DIR_NAME', basename(WP_CONTENT_DIR));
|
41 |
-
define('W3TC_CONTENT_DIR_NAME', WP_CONTENT_DIR_NAME . '/w3tc' .
|
42 |
-
define('W3TC_CONTENT_DIR',
|
43 |
define('W3TC_CONTENT_MINIFY_DIR_NAME', W3TC_CONTENT_DIR_NAME . '/min');
|
44 |
-
define('W3TC_CONTENT_MINIFY_DIR',
|
45 |
define('W3TC_CACHE_FILE_DBCACHE_DIR', W3TC_CONTENT_DIR . '/dbcache');
|
|
|
46 |
define('W3TC_CACHE_FILE_PGCACHE_DIR', W3TC_CONTENT_DIR . '/pgcache');
|
47 |
define('W3TC_CACHE_FILE_MINIFY_DIR', W3TC_CONTENT_DIR . '/min');
|
48 |
define('W3TC_LOG_DIR', W3TC_CONTENT_DIR . '/log');
|
49 |
define('W3TC_TMP_DIR', W3TC_CONTENT_DIR . '/tmp');
|
50 |
-
define('W3TC_CONFIG_PATH', WP_CONTENT_DIR . '/w3-total-cache-config' .
|
|
|
51 |
define('W3TC_CONFIG_MASTER_PATH', WP_CONTENT_DIR . '/w3-total-cache-config.php');
|
52 |
define('W3TC_MINIFY_LOG_FILE', W3TC_LOG_DIR . '/minify.log');
|
53 |
define('W3TC_CDN_COMMAND_UPLOAD', 1);
|
54 |
define('W3TC_CDN_COMMAND_DELETE', 2);
|
55 |
define('W3TC_CDN_TABLE_QUEUE', 'w3tc_cdn_queue');
|
56 |
|
57 |
-
ini_set('pcre.backtrack_limit', 4194304);
|
58 |
-
ini_set('pcre.recursion_limit', 4194304);
|
|
|
|
|
59 |
|
60 |
/**
|
61 |
* W3 activate error
|
62 |
-
*
|
63 |
* @param string $error
|
64 |
* @return void
|
65 |
*/
|
66 |
-
|
67 |
function w3_activate_error($error)
|
68 |
{
|
69 |
$active_plugins = (array) get_option('active_plugins');
|
70 |
|
|
|
|
|
|
|
71 |
$key = array_search(W3TC_FILE, $active_plugins);
|
72 |
|
73 |
if ($key !== false) {
|
@@ -79,6 +79,7 @@ function w3_activate_error($error)
|
|
79 |
do_action('deactivated_plugin', W3TC_FILE);
|
80 |
|
81 |
update_option('active_plugins', $active_plugins);
|
|
|
82 |
} else {
|
83 |
do_action('deactivate_' . W3TC_FILE);
|
84 |
}
|
@@ -112,64 +113,26 @@ function w3_writable_error($path)
|
|
112 |
}
|
113 |
|
114 |
/**
|
115 |
-
*
|
116 |
-
*
|
117 |
-
* @return
|
118 |
-
*/
|
119 |
-
function w3_microtime()
|
120 |
-
{
|
121 |
-
list ($usec, $sec) = explode(" ", microtime());
|
122 |
-
return ((float) $usec + (float) $sec);
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Check if URL is valid
|
127 |
-
*
|
128 |
-
* @param string $url
|
129 |
-
* @return boolean
|
130 |
*/
|
131 |
-
function
|
132 |
{
|
133 |
-
|
|
|
|
|
134 |
}
|
135 |
|
136 |
/**
|
137 |
-
*
|
138 |
*
|
139 |
-
* @
|
140 |
-
* @return string
|
141 |
*/
|
142 |
-
function
|
143 |
{
|
144 |
-
$
|
145 |
-
$
|
146 |
-
$extralen = 0;
|
147 |
-
|
148 |
-
if ($flags & 4) {
|
149 |
-
$extralen = unpack('v', substr($data, 10, 2));
|
150 |
-
$extralen = $extralen[1];
|
151 |
-
$headerlen += 2 + $extralen;
|
152 |
-
}
|
153 |
-
|
154 |
-
if ($flags & 8) {
|
155 |
-
$headerlen = strpos($data, chr(0), $headerlen) + 1;
|
156 |
-
}
|
157 |
-
|
158 |
-
if ($flags & 16) {
|
159 |
-
$headerlen = strpos($data, chr(0), $headerlen) + 1;
|
160 |
-
}
|
161 |
-
|
162 |
-
if ($flags & 2) {
|
163 |
-
$headerlen += 2;
|
164 |
-
}
|
165 |
-
|
166 |
-
$unpacked = gzinflate(substr($data, $headerlen));
|
167 |
-
|
168 |
-
if ($unpacked === FALSE) {
|
169 |
-
$unpacked = $data;
|
170 |
-
}
|
171 |
-
|
172 |
-
return $unpacked;
|
173 |
}
|
174 |
|
175 |
/**
|
@@ -187,13 +150,13 @@ function w3_mkdir($path, $mask = 0755, $curr_path = '')
|
|
187 |
$dirs = explode('/', $path);
|
188 |
|
189 |
foreach ($dirs as $dir) {
|
190 |
-
if (
|
191 |
return false;
|
192 |
}
|
193 |
|
194 |
$curr_path .= ($curr_path == '' ? '' : '/') . $dir;
|
195 |
|
196 |
-
if (
|
197 |
if (@mkdir($curr_path, $mask)) {
|
198 |
@chmod($curr_path, $mask);
|
199 |
} else {
|
@@ -207,7 +170,7 @@ function w3_mkdir($path, $mask = 0755, $curr_path = '')
|
|
207 |
|
208 |
/**
|
209 |
* Recursive remove dir
|
210 |
-
*
|
211 |
* @param string $path
|
212 |
* @param array $exclude
|
213 |
* @return void
|
@@ -217,11 +180,11 @@ function w3_rmdir($path, $exclude = array(), $remove = true)
|
|
217 |
$dir = @opendir($path);
|
218 |
|
219 |
if ($dir) {
|
220 |
-
while (($entry = @readdir($dir))) {
|
221 |
$full_path = $path . '/' . $entry;
|
222 |
|
223 |
-
if ($entry != '.' && $entry != '..' && !
|
224 |
-
if (is_dir($full_path)) {
|
225 |
w3_rmdir($full_path, $exclude);
|
226 |
} else {
|
227 |
@unlink($full_path);
|
@@ -239,7 +202,7 @@ function w3_rmdir($path, $exclude = array(), $remove = true)
|
|
239 |
|
240 |
/**
|
241 |
* Recursive empty dir
|
242 |
-
*
|
243 |
* @param string $path
|
244 |
* @param array $exclude
|
245 |
* @return void
|
@@ -255,13 +218,14 @@ function w3_emptydir($path, $exclude = array())
|
|
255 |
* @param string $content
|
256 |
* @return boolean
|
257 |
*/
|
258 |
-
function w3_is_xml(
|
259 |
{
|
260 |
return (stristr($content, '<?xml') !== false || stristr($content, '<html') !== false);
|
261 |
}
|
262 |
|
263 |
/**
|
264 |
* Returns true if it's WPMU
|
|
|
265 |
* @return boolean
|
266 |
*/
|
267 |
function w3_is_wpmu()
|
@@ -275,191 +239,148 @@ function w3_is_wpmu()
|
|
275 |
return $wpmu;
|
276 |
}
|
277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
/**
|
279 |
* Returns true if WPMU uses vhosts
|
|
|
280 |
* @return boolean
|
281 |
*/
|
282 |
function w3_is_vhost()
|
283 |
{
|
284 |
-
return (defined('VHOST') && VHOST == 'yes');
|
285 |
}
|
286 |
|
287 |
/**
|
288 |
-
*
|
289 |
*
|
290 |
-
* @
|
|
|
291 |
*/
|
292 |
-
function
|
293 |
{
|
294 |
-
|
295 |
-
|
296 |
-
if ($blogname === null) {
|
297 |
-
if (w3_is_wpmu()) {
|
298 |
-
$domain = w3_get_domain($_SERVER['HTTP_HOST']);
|
299 |
-
|
300 |
-
if (w3_is_vhost()) {
|
301 |
-
$blogname = $domain;
|
302 |
-
} else {
|
303 |
-
$uri = $_SERVER['REQUEST_URI'];
|
304 |
-
$site_path = w3_get_site_path();
|
305 |
-
|
306 |
-
if ($site_path != '' && strpos($uri, $site_path) === 0) {
|
307 |
-
$uri = substr_replace($uri, '/', 0, strlen($site_path));
|
308 |
-
}
|
309 |
-
|
310 |
-
$blogname = w3_get_blogname_from_uri($uri);
|
311 |
-
|
312 |
-
if ($blogname != '') {
|
313 |
-
$blogname = $blogname . '.' . $domain;
|
314 |
-
} else {
|
315 |
-
$blogname = $domain;
|
316 |
-
}
|
317 |
-
}
|
318 |
-
} else {
|
319 |
-
$blogname = '';
|
320 |
-
}
|
321 |
-
}
|
322 |
-
|
323 |
-
return $blogname;
|
324 |
}
|
325 |
|
326 |
/**
|
327 |
-
* Returns
|
328 |
-
*
|
329 |
-
* @
|
330 |
-
* @param string
|
331 |
*/
|
332 |
-
function
|
333 |
{
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
$uri = strtolower($uri);
|
339 |
-
|
340 |
-
if (preg_match('~^/([a-z0-9-]+)/~', $uri, $matches)) {
|
341 |
-
$blogname = $matches[1];
|
342 |
-
|
343 |
-
if (in_array($blogname, $w3_reserved_blognames) || file_exists($blogname)) {
|
344 |
-
$blogname = '';
|
345 |
-
}
|
346 |
}
|
347 |
|
348 |
-
return
|
349 |
}
|
350 |
|
351 |
/**
|
352 |
-
*
|
353 |
-
*
|
354 |
-
* @return
|
355 |
*/
|
356 |
-
function
|
357 |
{
|
358 |
-
|
359 |
-
|
360 |
-
if ($site_url === null) {
|
361 |
-
if (function_exists('get_option')) {
|
362 |
-
$site_url = get_option('siteurl');
|
363 |
-
} else {
|
364 |
-
$site_url = sprintf('http://%s%s', $_SERVER['HTTP_HOST'], w3_get_site_path());
|
365 |
-
}
|
366 |
-
|
367 |
-
$site_url = rtrim($site_url, '/');
|
368 |
-
}
|
369 |
|
370 |
-
return $
|
371 |
}
|
372 |
|
373 |
/**
|
374 |
-
*
|
375 |
-
*
|
376 |
-
* @
|
|
|
377 |
*/
|
378 |
-
function
|
379 |
{
|
380 |
-
$
|
381 |
-
|
382 |
-
if (w3_is_https()) {
|
383 |
-
$site_url = str_replace('http:', 'https:', $site_url);
|
384 |
-
}
|
385 |
-
|
386 |
-
return $site_url;
|
387 |
}
|
388 |
|
389 |
/**
|
390 |
-
* Returns
|
391 |
-
*
|
392 |
-
* @return
|
393 |
*/
|
394 |
-
function
|
395 |
{
|
396 |
-
|
397 |
-
$domain = preg_replace('~https?://~i', '', $site_url);
|
398 |
-
$regexp = 'https?://' . w3_preg_quote($domain);
|
399 |
-
return $regexp;
|
400 |
}
|
401 |
|
402 |
/**
|
403 |
-
*
|
404 |
-
*
|
405 |
-
* @return
|
406 |
*/
|
407 |
-
function
|
408 |
{
|
409 |
-
$
|
410 |
-
$path = str_replace($document_root, '', w3_path(ABSPATH));
|
411 |
-
$path = '/' . ltrim($path, '/');
|
412 |
-
|
413 |
-
if (substr($path, - 1) != '/') {
|
414 |
-
$path .= '/';
|
415 |
-
}
|
416 |
-
|
417 |
-
return $path;
|
418 |
}
|
419 |
|
420 |
/**
|
421 |
-
*
|
422 |
*
|
423 |
-
* @
|
|
|
424 |
*/
|
425 |
-
function
|
426 |
{
|
427 |
-
$
|
428 |
-
$site_url = w3_get_site_url();
|
429 |
|
430 |
-
$
|
431 |
-
$path = '/' . ltrim($path, '/');
|
432 |
|
433 |
-
if (
|
434 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
}
|
436 |
|
437 |
-
return
|
438 |
}
|
439 |
|
440 |
/**
|
441 |
-
*
|
442 |
-
*
|
|
|
|
|
443 |
*/
|
444 |
-
function
|
445 |
{
|
446 |
-
|
447 |
-
|
448 |
-
if ($document_root === null) {
|
449 |
-
if (isset($_SERVER['DOCUMENT_ROOT'])) {
|
450 |
-
$document_root = $_SERVER['DOCUMENT_ROOT'];
|
451 |
-
} elseif (isset($_SERVER['SCRIPT_FILENAME'])) {
|
452 |
-
$document_root = substr($_SERVER['SCRIPT_FILENAME'], 0, - strlen($_SERVER['PHP_SELF']));
|
453 |
-
} elseif (isset($_SERVER['PATH_TRANSLATED'])) {
|
454 |
-
$document_root = substr($_SERVER['PATH_TRANSLATED'], 0, - strlen($_SERVER['PHP_SELF']));
|
455 |
-
} else {
|
456 |
-
$document_root = ABSPATH;
|
457 |
-
}
|
458 |
-
|
459 |
-
$document_root = w3_path($document_root);
|
460 |
-
}
|
461 |
|
462 |
-
return $
|
463 |
}
|
464 |
|
465 |
/**
|
@@ -486,205 +407,651 @@ function w3_get_domain($host)
|
|
486 |
}
|
487 |
|
488 |
/**
|
489 |
-
*
|
490 |
-
*
|
491 |
-
* @return
|
492 |
*/
|
493 |
-
function
|
494 |
{
|
495 |
-
$
|
496 |
-
$parse_url = @parse_url($site_url);
|
497 |
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
|
|
|
|
503 |
|
504 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
505 |
}
|
506 |
|
507 |
-
return
|
508 |
}
|
509 |
|
510 |
/**
|
511 |
-
*
|
512 |
-
*
|
513 |
-
* @return
|
514 |
*/
|
515 |
-
function
|
516 |
{
|
517 |
-
$
|
518 |
-
|
519 |
-
|
520 |
-
return $regexp;
|
521 |
}
|
522 |
|
523 |
/**
|
524 |
-
*
|
525 |
-
*
|
526 |
-
* @
|
|
|
527 |
*/
|
528 |
-
function
|
529 |
{
|
530 |
-
|
|
|
|
|
531 |
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
$site_url = w3_get_site_url();
|
537 |
-
$upload_info['upload_url'] = trim(str_replace($site_url, '', $upload_info['baseurl']), '/');
|
538 |
-
$upload_info['upload_dir'] = trim(str_replace(ABSPATH, '', $upload_info['basedir']), '/');
|
539 |
-
} else {
|
540 |
-
$upload_info = false;
|
541 |
-
}
|
542 |
}
|
543 |
|
544 |
-
return $
|
|
|
|
|
545 |
}
|
546 |
|
547 |
/**
|
548 |
-
*
|
549 |
-
*
|
550 |
-
* @param string $url
|
551 |
-
* @param string $params
|
552 |
* @return string
|
553 |
*/
|
554 |
-
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
555 |
{
|
556 |
-
$
|
|
|
557 |
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
if (
|
574 |
-
|
575 |
-
}
|
576 |
-
|
577 |
-
if (! empty($parse_url['port']) && $parse_url['port'] != 80) {
|
578 |
-
$url .= ':' . (int) $parse_url['port'];
|
579 |
-
}
|
580 |
-
|
581 |
-
$url .= (! empty($parse_url['path']) ? $parse_url['path'] : '/');
|
582 |
-
|
583 |
-
if (! empty($parse_url['query'])) {
|
584 |
-
$old_params = array();
|
585 |
-
parse_str($parse_url['query'], $old_params);
|
586 |
-
|
587 |
-
$params = array_merge($old_params, $params);
|
588 |
}
|
589 |
-
|
590 |
-
|
591 |
-
|
|
|
592 |
}
|
593 |
-
} else {
|
594 |
-
$parse_url = array();
|
595 |
}
|
596 |
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
|
|
|
|
607 |
|
608 |
-
if ($
|
609 |
-
$
|
610 |
}
|
611 |
|
612 |
-
|
613 |
-
exit();
|
614 |
}
|
615 |
|
616 |
/**
|
617 |
-
* Returns
|
618 |
*
|
619 |
-
* @
|
620 |
-
* @return string
|
621 |
*/
|
622 |
-
function
|
623 |
{
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
case 'eaccelerator':
|
634 |
-
$engine_name = 'eaccelerator';
|
635 |
-
break;
|
636 |
-
|
637 |
-
case 'xcache':
|
638 |
-
$engine_name = 'xcache';
|
639 |
-
break;
|
640 |
-
|
641 |
-
case 'file':
|
642 |
-
$engine_name = 'disk';
|
643 |
-
break;
|
644 |
-
|
645 |
-
case 'file_pgcache':
|
646 |
-
$engine_name = 'disk (enhanced)';
|
647 |
-
break;
|
648 |
-
|
649 |
-
default:
|
650 |
-
$engine_name = 'N/A';
|
651 |
-
break;
|
652 |
}
|
653 |
|
654 |
-
return $
|
655 |
}
|
656 |
|
657 |
/**
|
658 |
-
*
|
659 |
*
|
660 |
-
* @param
|
661 |
* @return boolean
|
662 |
*/
|
663 |
-
function
|
664 |
{
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
case '-':
|
677 |
-
case '0':
|
678 |
-
case 'n':
|
679 |
-
case 'no':
|
680 |
-
case 'off':
|
681 |
-
case 'false':
|
682 |
-
case 'disabled':
|
683 |
-
return false;
|
684 |
}
|
685 |
}
|
686 |
|
687 |
-
return
|
688 |
}
|
689 |
|
690 |
/**
|
@@ -694,28 +1061,38 @@ function w3_to_boolean($value)
|
|
694 |
* @param string $url
|
695 |
* @param string $data
|
696 |
* @param string $auth
|
|
|
697 |
* @return string
|
698 |
*/
|
699 |
-
function
|
700 |
{
|
701 |
$status = 0;
|
702 |
$method = strtoupper($method);
|
703 |
|
704 |
-
if (
|
705 |
$ch = curl_init();
|
706 |
|
707 |
curl_setopt($ch, CURLOPT_URL, $url);
|
708 |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
709 |
curl_setopt($ch, CURLOPT_USERAGENT, W3TC_POWERED_BY);
|
710 |
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
|
711 |
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
|
|
|
|
|
712 |
|
713 |
-
|
714 |
-
|
715 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
716 |
}
|
717 |
|
718 |
-
if (
|
719 |
curl_setopt($ch, CURLOPT_USERPWD, $auth);
|
720 |
}
|
721 |
|
@@ -730,7 +1107,7 @@ function w3_url_request($method, $url, $data = '', $auth = '')
|
|
730 |
if ($parse_url && isset($parse_url['host'])) {
|
731 |
$host = $parse_url['host'];
|
732 |
$port = (isset($parse_url['port']) ? (int) $parse_url['port'] : 80);
|
733 |
-
$path = (!
|
734 |
$query = (isset($parse_url['query']) ? $parse_url['query'] : '');
|
735 |
$request_uri = $path . ($query != '' ? '?' . $query : '');
|
736 |
|
@@ -741,33 +1118,35 @@ function w3_url_request($method, $url, $data = '', $auth = '')
|
|
741 |
'Connection: close'
|
742 |
);
|
743 |
|
744 |
-
if (!
|
745 |
$request_headers_array[] = sprintf('Content-Length: %d', strlen($data));
|
746 |
}
|
747 |
|
748 |
-
if (!
|
749 |
$request_headers_array[] = sprintf('Authorization: Basic %s', base64_encode($auth));
|
750 |
}
|
751 |
|
752 |
$request_headers = implode("\r\n", $request_headers_array);
|
753 |
$request = $request_headers . "\r\n\r\n" . $data;
|
|
|
|
|
754 |
|
755 |
-
$fp = @fsockopen($host, $port);
|
756 |
|
757 |
-
if (
|
758 |
return false;
|
759 |
}
|
760 |
|
761 |
$response = '';
|
762 |
@fputs($fp, $request);
|
763 |
|
764 |
-
while (
|
765 |
$response .= @fgets($fp, 4096);
|
766 |
}
|
767 |
|
768 |
@fclose($fp);
|
769 |
|
770 |
-
list
|
771 |
|
772 |
$matches = null;
|
773 |
|
@@ -777,7 +1156,7 @@ function w3_url_request($method, $url, $data = '', $auth = '')
|
|
777 |
}
|
778 |
}
|
779 |
|
780 |
-
if ($status == 200) {
|
781 |
return $contents;
|
782 |
}
|
783 |
|
@@ -787,12 +1166,14 @@ function w3_url_request($method, $url, $data = '', $auth = '')
|
|
787 |
/**
|
788 |
* Download url via GET
|
789 |
*
|
790 |
-
* @param $url
|
|
|
|
|
791 |
* @return string
|
792 |
*/
|
793 |
-
function
|
794 |
{
|
795 |
-
return
|
796 |
}
|
797 |
|
798 |
/**
|
@@ -801,23 +1182,46 @@ function w3_url_get($url)
|
|
801 |
* @param string $url
|
802 |
* @param string $data
|
803 |
* @param string $auth
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
804 |
* @return string
|
805 |
*/
|
806 |
-
function
|
807 |
{
|
808 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
809 |
}
|
810 |
|
811 |
/**
|
812 |
* Downloads data to a file
|
813 |
-
*
|
814 |
* @param string $url
|
815 |
* @param string $file
|
816 |
* @return boolean
|
817 |
*/
|
818 |
function w3_download($url, $file)
|
819 |
{
|
820 |
-
$data =
|
821 |
|
822 |
if ($data !== false) {
|
823 |
return @file_put_contents($file, $data);
|
@@ -827,121 +1231,221 @@ function w3_download($url, $file)
|
|
827 |
}
|
828 |
|
829 |
/**
|
830 |
-
*
|
831 |
*
|
832 |
-
* @return
|
833 |
*/
|
834 |
-
function
|
835 |
{
|
836 |
-
$
|
837 |
|
838 |
-
if ($
|
839 |
-
|
840 |
-
|
841 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
842 |
}
|
843 |
}
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
859 |
}
|
860 |
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
/**
|
865 |
-
* Converts win path to unix
|
866 |
-
* @param string $path
|
867 |
-
* @return string
|
868 |
-
*/
|
869 |
-
function w3_path($path)
|
870 |
-
{
|
871 |
-
$path = preg_replace('~[/\\\]+~', '/', $path);
|
872 |
-
$path = rtrim($path, '/');
|
873 |
|
874 |
-
|
|
|
875 |
}
|
876 |
|
877 |
/**
|
878 |
-
* Returns
|
879 |
*
|
880 |
-
* @param
|
|
|
881 |
*/
|
882 |
-
function
|
883 |
{
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
897 |
}
|
898 |
|
899 |
-
return
|
900 |
}
|
901 |
|
902 |
/**
|
903 |
-
*
|
904 |
*
|
905 |
-
* @
|
|
|
906 |
*/
|
907 |
-
function
|
908 |
{
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
917 |
}
|
918 |
}
|
919 |
|
920 |
-
return $
|
921 |
}
|
922 |
|
923 |
/**
|
924 |
-
*
|
925 |
*
|
926 |
-
* @
|
927 |
-
* @return boolean
|
928 |
*/
|
929 |
-
function
|
930 |
{
|
931 |
-
$
|
932 |
-
$open_basedirs = w3_get_open_basedirs();
|
933 |
-
|
934 |
-
if (! count($open_basedirs)) {
|
935 |
-
return true;
|
936 |
-
}
|
937 |
|
938 |
-
|
939 |
-
|
940 |
-
|
|
|
|
|
941 |
}
|
|
|
942 |
}
|
943 |
-
|
944 |
-
return false;
|
945 |
}
|
946 |
|
947 |
/**
|
@@ -952,23 +1456,70 @@ function w3_check_open_basedir($path)
|
|
952 |
*/
|
953 |
function w3_get_mime_type($file)
|
954 |
{
|
955 |
-
$
|
956 |
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
966 |
}
|
|
|
|
|
967 |
}
|
968 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
969 |
}
|
970 |
|
971 |
-
return
|
972 |
}
|
973 |
|
974 |
/**
|
@@ -985,7 +1536,7 @@ function w3_twitter_status_update($username, $password, $status, &$error)
|
|
985 |
$data = sprintf('status=%s', urlencode($status));
|
986 |
$auth = sprintf('%s:%s', $username, $password);
|
987 |
|
988 |
-
$xml =
|
989 |
|
990 |
if ($xml) {
|
991 |
$matches = null;
|
@@ -1006,7 +1557,7 @@ function w3_twitter_status_update($username, $password, $status, &$error)
|
|
1006 |
|
1007 |
/**
|
1008 |
* Quotes regular expression string
|
1009 |
-
*
|
1010 |
* @param string $regexp
|
1011 |
* @return string
|
1012 |
*/
|
@@ -1020,56 +1571,9 @@ function w3_preg_quote($string, $delimiter = null)
|
|
1020 |
return $string;
|
1021 |
}
|
1022 |
|
1023 |
-
/**
|
1024 |
-
* Converts file path to relative
|
1025 |
-
*
|
1026 |
-
* @param string $file
|
1027 |
-
* @return string
|
1028 |
-
*/
|
1029 |
-
function w3_normalize_file($file)
|
1030 |
-
{
|
1031 |
-
if (w3_is_url($file)) {
|
1032 |
-
if (strstr($file, '?') === false) {
|
1033 |
-
$domain_url_regexp = '~' . w3_get_domain_url_regexp() . '~i';
|
1034 |
-
$file = preg_replace($domain_url_regexp, '', $file);
|
1035 |
-
}
|
1036 |
-
} else {
|
1037 |
-
$abspath = w3_path(ABSPATH);
|
1038 |
-
$file = w3_path($file);
|
1039 |
-
$file = str_replace($abspath, '', $file);
|
1040 |
-
}
|
1041 |
-
|
1042 |
-
$file = ltrim($file, '/');
|
1043 |
-
|
1044 |
-
return $file;
|
1045 |
-
}
|
1046 |
-
|
1047 |
-
/**
|
1048 |
-
* Translates URL to local path
|
1049 |
-
* @param string $url
|
1050 |
-
* @return string
|
1051 |
-
*/
|
1052 |
-
function w3_translate_file($url)
|
1053 |
-
{
|
1054 |
-
if (! w3_is_url($url)) {
|
1055 |
-
$url = w3_get_domain_url() . '/' . ltrim($url, '/\\');
|
1056 |
-
}
|
1057 |
-
|
1058 |
-
$site_url_regexp = '~' . w3_get_site_url_regexp() . '~i';
|
1059 |
-
|
1060 |
-
if (preg_match($site_url_regexp, $url) && strstr($url, '?') === false) {
|
1061 |
-
$url = preg_replace($site_url_regexp, '', $url);
|
1062 |
-
$url = w3_get_site_path() . ltrim($url, '/\\');
|
1063 |
-
}
|
1064 |
-
|
1065 |
-
$url = ltrim($url, '/');
|
1066 |
-
|
1067 |
-
return $url;
|
1068 |
-
}
|
1069 |
-
|
1070 |
/**
|
1071 |
* Returns true if zlib output compression is enabled otherwise false
|
1072 |
-
*
|
1073 |
* @return boolean
|
1074 |
*/
|
1075 |
function w3_zlib_output_compression()
|
@@ -1079,7 +1583,7 @@ function w3_zlib_output_compression()
|
|
1079 |
|
1080 |
/**
|
1081 |
* Recursive strips slahes from the var
|
1082 |
-
*
|
1083 |
* @param mixed $var
|
1084 |
* @return mixed
|
1085 |
*/
|
@@ -1094,14 +1598,14 @@ function w3_stripslashes($var)
|
|
1094 |
return $var;
|
1095 |
}
|
1096 |
|
1097 |
-
if (!
|
1098 |
-
if (!
|
1099 |
define('FILE_APPEND', 8);
|
1100 |
}
|
1101 |
|
1102 |
/**
|
1103 |
* Puts contents to the file
|
1104 |
-
*
|
1105 |
* @param string $filename
|
1106 |
* @param string $data
|
1107 |
* @param integer $flags
|
@@ -1124,6 +1628,7 @@ if (! function_exists('file_put_contents')) {
|
|
1124 |
|
1125 |
/**
|
1126 |
* Cleanup .htaccess rules
|
|
|
1127 |
* @param string $rules
|
1128 |
* @return string
|
1129 |
*/
|
@@ -1137,24 +1642,127 @@ function w3_clean_rules($rules)
|
|
1137 |
}
|
1138 |
|
1139 |
/**
|
1140 |
-
*
|
|
|
|
|
|
|
|
|
|
|
1141 |
*/
|
1142 |
-
function
|
1143 |
{
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1151 |
}
|
1152 |
|
1153 |
-
|
1154 |
}
|
1155 |
|
1156 |
-
|
1157 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1158 |
}
|
1159 |
|
1160 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
|
3 |
+
define('W3TC_VERSION', '0.9b');
|
4 |
define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
|
5 |
define('W3TC_EMAIL', 'w3tc@w3-edge.com');
|
6 |
+
define('W3TC_PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr');
|
7 |
+
define('W3TC_PAYPAL_BUSINESS', 'w3tc@w3-edge.com');
|
8 |
define('W3TC_LINK_URL', 'http://www.w3-edge.com/wordpress-plugins/');
|
9 |
define('W3TC_LINK_NAME', 'WordPress Plugins');
|
10 |
define('W3TC_FEED_URL', 'http://feeds.feedburner.com/W3TOTALCACHE');
|
11 |
define('W3TC_README_URL', 'http://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/readme.txt?format=txt');
|
12 |
+
define('W3TC_TWITTER_STATUS', 'YES! I optimized my #wordpress site\'s #performance using the W3 Total Cache #plugin by @w3edge. Check it out! http://j.mp/A69xX');
|
13 |
define('W3TC_SUPPORT_US_TIMEOUT', 2592000);
|
14 |
|
15 |
define('W3TC_PHP5', PHP_VERSION >= 5);
|
20 |
define('W3TC_LIB_DIR', W3TC_DIR . '/lib');
|
21 |
define('W3TC_LIB_W3_DIR', W3TC_LIB_DIR . '/W3');
|
22 |
define('W3TC_LIB_MINIFY_DIR', W3TC_LIB_DIR . '/Minify');
|
23 |
+
define('W3TC_LIB_CF_DIR', W3TC_LIB_DIR . '/CF');
|
24 |
define('W3TC_PLUGINS_DIR', W3TC_DIR . '/plugins');
|
25 |
define('W3TC_INSTALL_DIR', W3TC_DIR . '/wp-content');
|
26 |
define('W3TC_INSTALL_MINIFY_DIR', W3TC_INSTALL_DIR . '/w3tc/min');
|
27 |
|
28 |
+
define('W3TC_BLOGNAMES_PATH', WP_CONTENT_DIR . '/w3-total-cache-blognames.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
define('W3TC_BLOGNAME', w3_get_blogname());
|
30 |
+
define('W3TC_SUFFIX', (W3TC_BLOGNAME != '' ? '-' . W3TC_BLOGNAME : ''));
|
31 |
|
32 |
defined('WP_CONTENT_DIR') || define('WP_CONTENT_DIR', realpath(W3TC_DIR . '/../..'));
|
33 |
+
define('WP_CONTENT_DIR_PATH', dirname(WP_CONTENT_DIR));
|
34 |
define('WP_CONTENT_DIR_NAME', basename(WP_CONTENT_DIR));
|
35 |
+
define('W3TC_CONTENT_DIR_NAME', WP_CONTENT_DIR_NAME . '/w3tc' . W3TC_SUFFIX);
|
36 |
+
define('W3TC_CONTENT_DIR', WP_CONTENT_DIR_PATH . '/' . W3TC_CONTENT_DIR_NAME);
|
37 |
define('W3TC_CONTENT_MINIFY_DIR_NAME', W3TC_CONTENT_DIR_NAME . '/min');
|
38 |
+
define('W3TC_CONTENT_MINIFY_DIR', WP_CONTENT_DIR_PATH . '/' . W3TC_CONTENT_DIR_NAME . '/min');
|
39 |
define('W3TC_CACHE_FILE_DBCACHE_DIR', W3TC_CONTENT_DIR . '/dbcache');
|
40 |
+
define('W3TC_CACHE_FILE_OBJECTCACHE_DIR', W3TC_CONTENT_DIR . '/objectcache');
|
41 |
define('W3TC_CACHE_FILE_PGCACHE_DIR', W3TC_CONTENT_DIR . '/pgcache');
|
42 |
define('W3TC_CACHE_FILE_MINIFY_DIR', W3TC_CONTENT_DIR . '/min');
|
43 |
define('W3TC_LOG_DIR', W3TC_CONTENT_DIR . '/log');
|
44 |
define('W3TC_TMP_DIR', W3TC_CONTENT_DIR . '/tmp');
|
45 |
+
define('W3TC_CONFIG_PATH', WP_CONTENT_DIR . '/w3-total-cache-config' . W3TC_SUFFIX . '.php');
|
46 |
+
define('W3TC_CONFIG_PREVIEW_PATH', WP_CONTENT_DIR . '/w3-total-cache-config' . W3TC_SUFFIX . '-preview.php');
|
47 |
define('W3TC_CONFIG_MASTER_PATH', WP_CONTENT_DIR . '/w3-total-cache-config.php');
|
48 |
define('W3TC_MINIFY_LOG_FILE', W3TC_LOG_DIR . '/minify.log');
|
49 |
define('W3TC_CDN_COMMAND_UPLOAD', 1);
|
50 |
define('W3TC_CDN_COMMAND_DELETE', 2);
|
51 |
define('W3TC_CDN_TABLE_QUEUE', 'w3tc_cdn_queue');
|
52 |
|
53 |
+
@ini_set('pcre.backtrack_limit', 4194304);
|
54 |
+
@ini_set('pcre.recursion_limit', 4194304);
|
55 |
+
|
56 |
+
$_w3tc_actions = array();
|
57 |
|
58 |
/**
|
59 |
* W3 activate error
|
60 |
+
*
|
61 |
* @param string $error
|
62 |
* @return void
|
63 |
*/
|
|
|
64 |
function w3_activate_error($error)
|
65 |
{
|
66 |
$active_plugins = (array) get_option('active_plugins');
|
67 |
|
68 |
+
// workaround for WPMU deactivation bug
|
69 |
+
remove_action('deactivate_' . W3TC_FILE, 'deactivate_sitewide_plugin');
|
70 |
+
|
71 |
$key = array_search(W3TC_FILE, $active_plugins);
|
72 |
|
73 |
if ($key !== false) {
|
79 |
do_action('deactivated_plugin', W3TC_FILE);
|
80 |
|
81 |
update_option('active_plugins', $active_plugins);
|
82 |
+
|
83 |
} else {
|
84 |
do_action('deactivate_' . W3TC_FILE);
|
85 |
}
|
113 |
}
|
114 |
|
115 |
/**
|
116 |
+
* W3 Network activation error
|
117 |
+
*
|
118 |
+
* @return void
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
*/
|
120 |
+
function w3_network_activate_error()
|
121 |
{
|
122 |
+
echo '<p><strong>W3 Total Cache Error:</strong> plugin cannot be activated network-wide.</p>';
|
123 |
+
echo '<p><a href="javascript:history.back(-1);">Back</a>';
|
124 |
+
exit();
|
125 |
}
|
126 |
|
127 |
/**
|
128 |
+
* Returns current microtime
|
129 |
*
|
130 |
+
* @return float
|
|
|
131 |
*/
|
132 |
+
function w3_microtime()
|
133 |
{
|
134 |
+
list($usec, $sec) = explode(" ", microtime());
|
135 |
+
return ((float) $usec + (float) $sec);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
|
138 |
/**
|
150 |
$dirs = explode('/', $path);
|
151 |
|
152 |
foreach ($dirs as $dir) {
|
153 |
+
if ($dir == '') {
|
154 |
return false;
|
155 |
}
|
156 |
|
157 |
$curr_path .= ($curr_path == '' ? '' : '/') . $dir;
|
158 |
|
159 |
+
if (!@is_dir($curr_path)) {
|
160 |
if (@mkdir($curr_path, $mask)) {
|
161 |
@chmod($curr_path, $mask);
|
162 |
} else {
|
170 |
|
171 |
/**
|
172 |
* Recursive remove dir
|
173 |
+
*
|
174 |
* @param string $path
|
175 |
* @param array $exclude
|
176 |
* @return void
|
180 |
$dir = @opendir($path);
|
181 |
|
182 |
if ($dir) {
|
183 |
+
while (($entry = @readdir($dir)) !== false) {
|
184 |
$full_path = $path . '/' . $entry;
|
185 |
|
186 |
+
if ($entry != '.' && $entry != '..' && !in_array($full_path, $exclude)) {
|
187 |
+
if (@is_dir($full_path)) {
|
188 |
w3_rmdir($full_path, $exclude);
|
189 |
} else {
|
190 |
@unlink($full_path);
|
202 |
|
203 |
/**
|
204 |
* Recursive empty dir
|
205 |
+
*
|
206 |
* @param string $path
|
207 |
* @param array $exclude
|
208 |
* @return void
|
218 |
* @param string $content
|
219 |
* @return boolean
|
220 |
*/
|
221 |
+
function w3_is_xml(&$content)
|
222 |
{
|
223 |
return (stristr($content, '<?xml') !== false || stristr($content, '<html') !== false);
|
224 |
}
|
225 |
|
226 |
/**
|
227 |
* Returns true if it's WPMU
|
228 |
+
*
|
229 |
* @return boolean
|
230 |
*/
|
231 |
function w3_is_wpmu()
|
239 |
return $wpmu;
|
240 |
}
|
241 |
|
242 |
+
/**
|
243 |
+
* Returns true if it's WP with enabled Network mode
|
244 |
+
*
|
245 |
+
* @return boolean
|
246 |
+
*/
|
247 |
+
function w3_is_network_mode()
|
248 |
+
{
|
249 |
+
static $network_mode = null;
|
250 |
+
|
251 |
+
if ($network_mode === null) {
|
252 |
+
$network_mode = (defined('MULTISITE') && MULTISITE);
|
253 |
+
}
|
254 |
+
|
255 |
+
return $network_mode;
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Returns if there is multisite mode
|
260 |
+
*
|
261 |
+
* @return boolean
|
262 |
+
*/
|
263 |
+
function w3_is_multisite()
|
264 |
+
{
|
265 |
+
return (w3_is_wpmu() || w3_is_network_mode());
|
266 |
+
}
|
267 |
+
|
268 |
/**
|
269 |
* Returns true if WPMU uses vhosts
|
270 |
+
*
|
271 |
* @return boolean
|
272 |
*/
|
273 |
function w3_is_vhost()
|
274 |
{
|
275 |
+
return ((defined('SUBDOMAIN_INSTALL') && SUBDOMAIN_INSTALL) || (defined('VHOST') && VHOST == 'yes'));
|
276 |
}
|
277 |
|
278 |
/**
|
279 |
+
* Check if URL is valid
|
280 |
*
|
281 |
+
* @param string $url
|
282 |
+
* @return boolean
|
283 |
*/
|
284 |
+
function w3_is_url($url)
|
285 |
{
|
286 |
+
return preg_match('~^https?://~', $url);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
}
|
288 |
|
289 |
/**
|
290 |
+
* Returns true if current connection is secure
|
291 |
+
*
|
292 |
+
* @return boolean
|
|
|
293 |
*/
|
294 |
+
function w3_is_https()
|
295 |
{
|
296 |
+
switch (true) {
|
297 |
+
case (isset($_SERVER['HTTPS']) && w3_to_boolean($_SERVER['HTTPS'])):
|
298 |
+
case (isset($_SERVER['SERVER_PORT']) && (int) $_SERVER['SERVER_PORT'] == 443):
|
299 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300 |
}
|
301 |
|
302 |
+
return false;
|
303 |
}
|
304 |
|
305 |
/**
|
306 |
+
* Check if WP permalink directives exists
|
307 |
+
*
|
308 |
+
* @return boolean
|
309 |
*/
|
310 |
+
function w3_is_permalink_rules()
|
311 |
{
|
312 |
+
$path = w3_get_home_root() . '/.htaccess';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
313 |
|
314 |
+
return (($data = @file_get_contents($path)) && (strstr($data, 'add a trailing slash to') !== false || strstr($data, 'BEGIN WordPress') !== false));
|
315 |
}
|
316 |
|
317 |
/**
|
318 |
+
* Check if there was database error
|
319 |
+
*
|
320 |
+
* @param string $content
|
321 |
+
* @return boolean
|
322 |
*/
|
323 |
+
function w3_is_database_error(&$content)
|
324 |
{
|
325 |
+
return (stristr($content, '<title>Database Error</title>') !== false);
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
}
|
327 |
|
328 |
/**
|
329 |
+
* Returns true if preview config exists
|
330 |
+
*
|
331 |
+
* @return boolean
|
332 |
*/
|
333 |
+
function w3_is_preview_config()
|
334 |
{
|
335 |
+
return file_exists(W3TC_CONFIG_PREVIEW_PATH);
|
|
|
|
|
|
|
336 |
}
|
337 |
|
338 |
/**
|
339 |
+
* Retuns true if preview settings active
|
340 |
+
*
|
341 |
+
* @return boolean
|
342 |
*/
|
343 |
+
function w3_is_preview_mode()
|
344 |
{
|
345 |
+
return (w3_is_preview_config() && (defined('WP_ADMIN') || isset($_REQUEST['w3tc_preview']) || strstr($_SERVER['HTTP_REFERER'], 'w3tc_preview') !== false));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
}
|
347 |
|
348 |
/**
|
349 |
+
* Check if file is write-able
|
350 |
*
|
351 |
+
* @param string $path
|
352 |
+
* @return boolean
|
353 |
*/
|
354 |
+
function w3_is_writable($file)
|
355 |
{
|
356 |
+
$exists = file_exists($file);
|
|
|
357 |
|
358 |
+
$fp = @fopen($file, 'a');
|
|
|
359 |
|
360 |
+
if ($fp) {
|
361 |
+
fclose($fp);
|
362 |
+
|
363 |
+
if (!$exists) {
|
364 |
+
@unlink($file);
|
365 |
+
}
|
366 |
+
|
367 |
+
return true;
|
368 |
}
|
369 |
|
370 |
+
return false;
|
371 |
}
|
372 |
|
373 |
/**
|
374 |
+
* Cehck if dir is write-able
|
375 |
+
*
|
376 |
+
* @param string $dir
|
377 |
+
* @return boolean
|
378 |
*/
|
379 |
+
function w3_is_writable_dir($dir)
|
380 |
{
|
381 |
+
$file = $dir . '/' . uniqid(mt_rand()) . '.tmp';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
382 |
|
383 |
+
return w3_is_writable($file);
|
384 |
}
|
385 |
|
386 |
/**
|
407 |
}
|
408 |
|
409 |
/**
|
410 |
+
* Returns array of all available blognames
|
411 |
+
*
|
412 |
+
* @return array
|
413 |
*/
|
414 |
+
function w3_get_blognames()
|
415 |
{
|
416 |
+
global $wpdb;
|
|
|
417 |
|
418 |
+
$blognames = array();
|
419 |
+
|
420 |
+
$sql = sprintf('SELECT domain, path FROM %s', $wpdb->blogs);
|
421 |
+
$blogs = $wpdb->get_results($sql);
|
422 |
+
|
423 |
+
if ($blogs) {
|
424 |
+
$base_path = w3_get_base_path();
|
425 |
|
426 |
+
foreach ($blogs as $blog) {
|
427 |
+
$blogname = trim(str_replace($base_path, '', $blog->path), '/');
|
428 |
+
|
429 |
+
if ($blogname) {
|
430 |
+
$blognames[] = $blogname;
|
431 |
+
}
|
432 |
+
}
|
433 |
}
|
434 |
|
435 |
+
return $blognames;
|
436 |
}
|
437 |
|
438 |
/**
|
439 |
+
* Load blognames from file
|
440 |
+
*
|
441 |
+
* @return array
|
442 |
*/
|
443 |
+
function w3_load_blognames()
|
444 |
{
|
445 |
+
$blognames = include W3TC_BLOGNAMES_PATH;
|
446 |
+
|
447 |
+
return $blognames;
|
|
|
448 |
}
|
449 |
|
450 |
/**
|
451 |
+
* Save blognames into file
|
452 |
+
*
|
453 |
+
* @param string $blognames
|
454 |
+
* @return boolean
|
455 |
*/
|
456 |
+
function w3_save_blognames($blognames = null)
|
457 |
{
|
458 |
+
if (!$blognames) {
|
459 |
+
$blognames = w3_get_blognames();
|
460 |
+
}
|
461 |
|
462 |
+
$strings = array();
|
463 |
+
|
464 |
+
foreach ($blognames as $blogname) {
|
465 |
+
$strings[] = sprintf("'%s'", addslashes($blogname));
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
}
|
467 |
|
468 |
+
$data = sprintf('<?php return array(%s);', implode(', ', $strings));
|
469 |
+
|
470 |
+
return @file_put_contents(W3TC_BLOGNAMES_PATH, $data);
|
471 |
}
|
472 |
|
473 |
/**
|
474 |
+
* Detect WPMU blogname
|
475 |
+
*
|
|
|
|
|
476 |
* @return string
|
477 |
*/
|
478 |
+
function w3_get_blogname()
|
479 |
+
{
|
480 |
+
static $blogname = null;
|
481 |
+
|
482 |
+
if ($blogname === null) {
|
483 |
+
if (w3_is_multisite()) {
|
484 |
+
$host = w3_get_host();
|
485 |
+
$domain = w3_get_domain($host);
|
486 |
+
|
487 |
+
if (w3_is_vhost()) {
|
488 |
+
$blogname = $domain;
|
489 |
+
} else {
|
490 |
+
$uri = $_SERVER['REQUEST_URI'];
|
491 |
+
$base_path = w3_get_base_path();
|
492 |
+
|
493 |
+
if ($base_path != '' && strpos($uri, $base_path) === 0) {
|
494 |
+
$uri = substr_replace($uri, '/', 0, strlen($base_path));
|
495 |
+
}
|
496 |
+
|
497 |
+
$blogname = w3_get_blogname_from_uri($uri);
|
498 |
+
|
499 |
+
if ($blogname != '') {
|
500 |
+
$blogname = $blogname . '.' . $domain;
|
501 |
+
} else {
|
502 |
+
$blogname = $domain;
|
503 |
+
}
|
504 |
+
}
|
505 |
+
} else {
|
506 |
+
$blogname = '';
|
507 |
+
}
|
508 |
+
}
|
509 |
+
|
510 |
+
return $blogname;
|
511 |
+
}
|
512 |
+
|
513 |
+
/**
|
514 |
+
* Returns blogname from URI
|
515 |
+
*
|
516 |
+
* @param string $uri
|
517 |
+
* @param string
|
518 |
+
*/
|
519 |
+
function w3_get_blogname_from_uri($uri)
|
520 |
+
{
|
521 |
+
$blogname = '';
|
522 |
+
$matches = null;
|
523 |
+
$uri = strtolower($uri);
|
524 |
+
|
525 |
+
if (preg_match('~^/([a-z0-9-]+)/~', $uri, $matches)) {
|
526 |
+
if (file_exists(W3TC_BLOGNAMES_PATH)) {
|
527 |
+
// Get blognames from cache
|
528 |
+
$blognames = w3_load_blognames();
|
529 |
+
} elseif (isset($GLOBALS['wpdb'])) {
|
530 |
+
// Get blognames from DB
|
531 |
+
$blognames = w3_get_blognames();
|
532 |
+
} else {
|
533 |
+
$blognames = array();
|
534 |
+
}
|
535 |
+
|
536 |
+
if (is_array($blognames) && in_array($matches[1], $blognames)) {
|
537 |
+
$blogname = $matches[1];
|
538 |
+
}
|
539 |
+
}
|
540 |
+
|
541 |
+
return $blogname;
|
542 |
+
}
|
543 |
+
|
544 |
+
/**
|
545 |
+
* Returns URL regexp from URL
|
546 |
+
*
|
547 |
+
* @param string $url
|
548 |
+
* @return string
|
549 |
+
*/
|
550 |
+
function w3_get_url_regexp($url)
|
551 |
+
{
|
552 |
+
$url = preg_replace('~https?://~i', '', $url);
|
553 |
+
$url = preg_replace('~^www\.~i', '', $url);
|
554 |
+
|
555 |
+
$regexp = 'https?://(www\.)?' . w3_preg_quote($url);
|
556 |
+
|
557 |
+
return $regexp;
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* Returns SSL URL if current connection is https
|
562 |
+
* @param string $url
|
563 |
+
* @return string
|
564 |
+
*/
|
565 |
+
function w3_get_url_ssl($url)
|
566 |
+
{
|
567 |
+
if (w3_is_https()) {
|
568 |
+
$url = str_replace('http://', 'https://', $url);
|
569 |
+
}
|
570 |
+
|
571 |
+
return $url;
|
572 |
+
}
|
573 |
+
|
574 |
+
/**
|
575 |
+
* Get domain URL
|
576 |
+
*
|
577 |
+
* @return string
|
578 |
+
*/
|
579 |
+
|
580 |
+
function w3_get_domain_url()
|
581 |
+
{
|
582 |
+
$site_url = w3_get_site_url();
|
583 |
+
$parse_url = @parse_url($site_url);
|
584 |
+
|
585 |
+
if ($parse_url && isset($parse_url['scheme']) && isset($parse_url['host'])) {
|
586 |
+
$scheme = $parse_url['scheme'];
|
587 |
+
$host = $parse_url['host'];
|
588 |
+
$port = (isset($parse_url['port']) && $parse_url['port'] != 80 ? ':' . (int) $parse_url['port'] : '');
|
589 |
+
$domain_url = sprintf('%s://%s%s', $scheme, $host, $port);
|
590 |
+
|
591 |
+
return $domain_url;
|
592 |
+
}
|
593 |
+
|
594 |
+
return false;
|
595 |
+
}
|
596 |
+
|
597 |
+
/**
|
598 |
+
* Returns domain url regexp
|
599 |
+
*
|
600 |
+
* @return string
|
601 |
+
*/
|
602 |
+
function w3_get_domain_url_regexp()
|
603 |
+
{
|
604 |
+
$domain_url = w3_get_domain_url();
|
605 |
+
$regexp = w3_get_url_regexp($domain_url);
|
606 |
+
|
607 |
+
return $regexp;
|
608 |
+
}
|
609 |
+
|
610 |
+
/**
|
611 |
+
* Returns home URL
|
612 |
+
*
|
613 |
+
* No trailing slash!
|
614 |
+
*
|
615 |
+
* @return string
|
616 |
+
*/
|
617 |
+
function w3_get_home_url()
|
618 |
+
{
|
619 |
+
static $home_url = null;
|
620 |
+
|
621 |
+
if ($home_url === null) {
|
622 |
+
if (function_exists('get_option')) {
|
623 |
+
$home_url = get_option('home');
|
624 |
+
} else {
|
625 |
+
$home_url = w3_get_site_url();
|
626 |
+
}
|
627 |
+
|
628 |
+
$home_url = rtrim($home_url, '/');
|
629 |
+
}
|
630 |
+
|
631 |
+
return $home_url;
|
632 |
+
}
|
633 |
+
|
634 |
+
/**
|
635 |
+
* Returns SSL home url
|
636 |
+
*
|
637 |
+
* @return string
|
638 |
+
*/
|
639 |
+
function w3_get_home_url_ssl()
|
640 |
+
{
|
641 |
+
$home_url = w3_get_home_url();
|
642 |
+
$ssl = w3_get_url_ssl($home_url);
|
643 |
+
|
644 |
+
return $ssl;
|
645 |
+
}
|
646 |
+
|
647 |
+
/**
|
648 |
+
* Returns site URL
|
649 |
+
*
|
650 |
+
* No trailing slash!
|
651 |
+
*
|
652 |
+
* @return string
|
653 |
+
*/
|
654 |
+
function w3_get_site_url()
|
655 |
+
{
|
656 |
+
static $site_url = null;
|
657 |
+
|
658 |
+
if ($site_url === null) {
|
659 |
+
if (function_exists('get_option')) {
|
660 |
+
$site_url = get_option('siteurl');
|
661 |
+
} else {
|
662 |
+
$site_url = sprintf('http://%s%s', w3_get_host(), w3_get_base_path());
|
663 |
+
}
|
664 |
+
|
665 |
+
$site_url = rtrim($site_url, '/');
|
666 |
+
}
|
667 |
+
|
668 |
+
return $site_url;
|
669 |
+
}
|
670 |
+
|
671 |
+
/**
|
672 |
+
* Returns SSL site url
|
673 |
+
*
|
674 |
+
* @return string
|
675 |
+
*/
|
676 |
+
function w3_get_site_url_ssl()
|
677 |
+
{
|
678 |
+
$site_url = w3_get_site_url();
|
679 |
+
$ssl = w3_get_url_ssl($site_url);
|
680 |
+
|
681 |
+
return $ssl;
|
682 |
+
}
|
683 |
+
|
684 |
+
/**
|
685 |
+
* Returns site url regexp
|
686 |
+
*
|
687 |
+
* @return string
|
688 |
+
*/
|
689 |
+
function w3_get_site_url_regexp()
|
690 |
+
{
|
691 |
+
$site_url = w3_get_site_url();
|
692 |
+
$regexp = w3_get_url_regexp($site_url);
|
693 |
+
|
694 |
+
return $regexp;
|
695 |
+
}
|
696 |
+
|
697 |
+
/**
|
698 |
+
* Returns absolute path to document root
|
699 |
+
*
|
700 |
+
* No trailing slash!
|
701 |
+
*
|
702 |
+
* @return string
|
703 |
+
*/
|
704 |
+
function w3_get_document_root()
|
705 |
+
{
|
706 |
+
static $document_root = null;
|
707 |
+
|
708 |
+
if ($document_root === null) {
|
709 |
+
if (isset($_SERVER['DOCUMENT_ROOT'])) {
|
710 |
+
$document_root = $_SERVER['DOCUMENT_ROOT'];
|
711 |
+
} elseif (isset($_SERVER['SCRIPT_FILENAME'])) {
|
712 |
+
$document_root = substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['PHP_SELF']));
|
713 |
+
} elseif (isset($_SERVER['PATH_TRANSLATED'])) {
|
714 |
+
$document_root = substr($_SERVER['PATH_TRANSLATED'], 0, -strlen($_SERVER['PHP_SELF']));
|
715 |
+
} else {
|
716 |
+
$document_root = w3_get_site_root();
|
717 |
+
}
|
718 |
+
|
719 |
+
$document_root = realpath($document_root);
|
720 |
+
$document_root = w3_path($document_root);
|
721 |
+
}
|
722 |
+
|
723 |
+
return $document_root;
|
724 |
+
}
|
725 |
+
|
726 |
+
/**
|
727 |
+
* Returns absolute path to home directory
|
728 |
+
*
|
729 |
+
* Example:
|
730 |
+
*
|
731 |
+
* DOCUMENT_ROOT=/var/www/vhosts/domain.com
|
732 |
+
* Install dir=/var/www/vhosts/domain.com/site/blog
|
733 |
+
* home=http://domain.com/site
|
734 |
+
* siteurl=http://domain.com/site/blog
|
735 |
+
* return /var/www/vhosts/domain.com/site
|
736 |
+
*
|
737 |
+
* No trailing slash!
|
738 |
+
*
|
739 |
+
* @return string
|
740 |
+
*/
|
741 |
+
function w3_get_home_root()
|
742 |
+
{
|
743 |
+
$home_url = w3_get_home_url();
|
744 |
+
$site_url = w3_get_site_url();
|
745 |
+
|
746 |
+
if (w3_is_multisite()) {
|
747 |
+
$path = w3_get_base_path();
|
748 |
+
} else {
|
749 |
+
$path = w3_get_home_path();
|
750 |
+
}
|
751 |
+
|
752 |
+
$home_root = w3_get_document_root() . $path;
|
753 |
+
$home_root = realpath($home_root);
|
754 |
+
$home_root = w3_path($home_root);
|
755 |
+
|
756 |
+
return $home_root;
|
757 |
+
}
|
758 |
+
|
759 |
+
/**
|
760 |
+
* Returns absolute path to blog install dir
|
761 |
+
*
|
762 |
+
* Example:
|
763 |
+
*
|
764 |
+
* DOCUMENT_ROOT=/var/www/vhosts/domain.com
|
765 |
+
* install dir=/var/www/vhosts/domain.com/site/blog
|
766 |
+
* return /var/www/vhosts/domain.com/site/blog
|
767 |
+
*
|
768 |
+
* No trailing slash!
|
769 |
+
*
|
770 |
+
* @return string
|
771 |
+
*/
|
772 |
+
function w3_get_site_root()
|
773 |
+
{
|
774 |
+
$site_root = ABSPATH;
|
775 |
+
$site_root = realpath($site_root);
|
776 |
+
$site_root = w3_path($site_root);
|
777 |
+
|
778 |
+
return $site_root;
|
779 |
+
}
|
780 |
+
|
781 |
+
/**
|
782 |
+
* Returns blog path
|
783 |
+
*
|
784 |
+
* Example:
|
785 |
+
*
|
786 |
+
* siteurl=http://domain.com/site/blog
|
787 |
+
* return /site/blog/
|
788 |
+
*
|
789 |
+
* With trailing slash!
|
790 |
+
*
|
791 |
+
* @return string
|
792 |
+
*/
|
793 |
+
function w3_get_site_path()
|
794 |
+
{
|
795 |
+
$site_url = w3_get_site_url();
|
796 |
+
$parse_url = @parse_url($site_url);
|
797 |
+
|
798 |
+
if ($parse_url && isset($parse_url['path'])) {
|
799 |
+
$site_path = '/' . ltrim($parse_url['path'], '/');
|
800 |
+
} else {
|
801 |
+
$site_path = '/';
|
802 |
+
}
|
803 |
+
|
804 |
+
if (substr($site_path, -1) != '/') {
|
805 |
+
$site_path .= '/';
|
806 |
+
}
|
807 |
+
|
808 |
+
return $site_path;
|
809 |
+
}
|
810 |
+
|
811 |
+
/**
|
812 |
+
* Returns home path
|
813 |
+
*
|
814 |
+
* Example:
|
815 |
+
*
|
816 |
+
* home=http://domain.com/site/
|
817 |
+
* siteurl=http://domain.com/site/blog
|
818 |
+
* return /site/
|
819 |
+
*
|
820 |
+
* With trailing slash!
|
821 |
+
*
|
822 |
+
* @return string
|
823 |
+
*/
|
824 |
+
function w3_get_home_path()
|
825 |
+
{
|
826 |
+
$home_url = w3_get_home_url();
|
827 |
+
$parse_url = @parse_url($home_url);
|
828 |
+
|
829 |
+
if ($parse_url && isset($parse_url['path'])) {
|
830 |
+
$home_path = '/' . ltrim($parse_url['path'], '/');
|
831 |
+
} else {
|
832 |
+
$home_path = '/';
|
833 |
+
}
|
834 |
+
|
835 |
+
if (substr($home_path, -1) != '/') {
|
836 |
+
$home_path .= '/';
|
837 |
+
}
|
838 |
+
|
839 |
+
return $home_path;
|
840 |
+
}
|
841 |
+
|
842 |
+
/**
|
843 |
+
* Returns path to WP directory relative to document root
|
844 |
+
*
|
845 |
+
* Example:
|
846 |
+
*
|
847 |
+
* DOCUMENT_ROOT=/var/www/vhosts/domain.com/
|
848 |
+
* Install dir=/var/www/vhosts/domain.com/site/blog/
|
849 |
+
* return /site/blog/
|
850 |
+
*
|
851 |
+
* With trailing slash!
|
852 |
+
*
|
853 |
+
* @return string
|
854 |
+
*/
|
855 |
+
function w3_get_base_path()
|
856 |
+
{
|
857 |
+
$document_root = w3_get_document_root();
|
858 |
+
$site_root = w3_get_site_root();
|
859 |
+
|
860 |
+
$base_path = str_replace($document_root, '', $site_root);
|
861 |
+
$base_path = '/' . ltrim($base_path, '/');
|
862 |
+
|
863 |
+
if (substr($base_path, -1) != '/') {
|
864 |
+
$base_path .= '/';
|
865 |
+
}
|
866 |
+
|
867 |
+
return $base_path;
|
868 |
+
}
|
869 |
+
|
870 |
+
/**
|
871 |
+
* Returns server hostname
|
872 |
+
*
|
873 |
+
* @return string
|
874 |
+
*/
|
875 |
+
function w3_get_host()
|
876 |
+
{
|
877 |
+
static $host = null;
|
878 |
+
|
879 |
+
if ($host === null) {
|
880 |
+
$host = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']);
|
881 |
+
}
|
882 |
+
|
883 |
+
return $host;
|
884 |
+
}
|
885 |
+
|
886 |
+
/**
|
887 |
+
* Normalizes file name
|
888 |
+
*
|
889 |
+
* Relative to site root!
|
890 |
+
*
|
891 |
+
* @param string $file
|
892 |
+
* @return string
|
893 |
+
*/
|
894 |
+
function w3_normalize_file($file)
|
895 |
+
{
|
896 |
+
if (w3_is_url($file)) {
|
897 |
+
if (strstr($file, '?') === false) {
|
898 |
+
$site_url_regexp = '~' . w3_get_site_url_regexp() . '~i';
|
899 |
+
$file = preg_replace($site_url_regexp, '', $file);
|
900 |
+
}
|
901 |
+
}
|
902 |
+
|
903 |
+
if (!w3_is_url($file)) {
|
904 |
+
$file = w3_path($file);
|
905 |
+
$file = str_replace(w3_get_site_root(), '', $file);
|
906 |
+
$file = ltrim($file, '/');
|
907 |
+
}
|
908 |
+
|
909 |
+
return $file;
|
910 |
+
}
|
911 |
+
|
912 |
+
/**
|
913 |
+
* Normalizes file name for minify
|
914 |
+
*
|
915 |
+
* Relative to document root!
|
916 |
+
*
|
917 |
+
* @param string $file
|
918 |
+
* @return string
|
919 |
+
*/
|
920 |
+
function w3_normalize_file_minify($file)
|
921 |
+
{
|
922 |
+
if (w3_is_url($file)) {
|
923 |
+
if (strstr($file, '?') === false) {
|
924 |
+
$domain_url_regexp = '~' . w3_get_domain_url_regexp() . '~i';
|
925 |
+
$file = preg_replace($domain_url_regexp, '', $file);
|
926 |
+
}
|
927 |
+
}
|
928 |
+
|
929 |
+
if (!w3_is_url($file)) {
|
930 |
+
$file = w3_path($file);
|
931 |
+
$file = str_replace(w3_get_document_root(), '', $file);
|
932 |
+
$file = ltrim($file, '/');
|
933 |
+
}
|
934 |
+
|
935 |
+
return $file;
|
936 |
+
}
|
937 |
+
|
938 |
+
/**
|
939 |
+
* Translates remote file to local file
|
940 |
+
*
|
941 |
+
* @param string $file
|
942 |
+
* @return string
|
943 |
+
*/
|
944 |
+
function w3_translate_file($file)
|
945 |
+
{
|
946 |
+
if (!w3_is_url($file)) {
|
947 |
+
$file = '/' . ltrim($file, '/');
|
948 |
+
$regexp = '~^' . w3_preg_quote(w3_get_site_path()) . '~';
|
949 |
+
$file = preg_replace($regexp, w3_get_base_path(), $file);
|
950 |
+
$file = ltrim($file, '/');
|
951 |
+
}
|
952 |
+
|
953 |
+
return $file;
|
954 |
+
}
|
955 |
+
|
956 |
+
/**
|
957 |
+
* Converts win path to unix
|
958 |
+
*
|
959 |
+
* @param string $path
|
960 |
+
* @return string
|
961 |
+
*/
|
962 |
+
function w3_path($path)
|
963 |
{
|
964 |
+
$path = preg_replace('~[/\\\]+~', '/', $path);
|
965 |
+
$path = rtrim($path, '/');
|
966 |
|
967 |
+
return $path;
|
968 |
+
}
|
969 |
+
|
970 |
+
/**
|
971 |
+
* Returns realpath of given path
|
972 |
+
*
|
973 |
+
* @param string $path
|
974 |
+
*/
|
975 |
+
function w3_realpath($path)
|
976 |
+
{
|
977 |
+
$path = w3_path($path);
|
978 |
+
$parts = explode('/', $path);
|
979 |
+
$absolutes = array();
|
980 |
+
|
981 |
+
foreach ($parts as $part) {
|
982 |
+
if ('.' == $part) {
|
983 |
+
continue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
984 |
}
|
985 |
+
if ('..' == $part) {
|
986 |
+
array_pop($absolutes);
|
987 |
+
} else {
|
988 |
+
$absolutes[] = $part;
|
989 |
}
|
|
|
|
|
990 |
}
|
991 |
|
992 |
+
return implode('/', $absolutes);
|
993 |
+
}
|
994 |
+
|
995 |
+
/**
|
996 |
+
* Returns dirname of path
|
997 |
+
*
|
998 |
+
* @param string $path
|
999 |
+
* @return string
|
1000 |
+
*/
|
1001 |
+
function w3_dirname($path)
|
1002 |
+
{
|
1003 |
+
$dirname = dirname($path);
|
1004 |
|
1005 |
+
if ($dirname == '.' || $dirname == '/' || $dirname == '\\') {
|
1006 |
+
$dirname = '';
|
1007 |
}
|
1008 |
|
1009 |
+
return $dirname;
|
|
|
1010 |
}
|
1011 |
|
1012 |
/**
|
1013 |
+
* Returns open basedirs
|
1014 |
*
|
1015 |
+
* @return array
|
|
|
1016 |
*/
|
1017 |
+
function w3_get_open_basedirs()
|
1018 |
{
|
1019 |
+
$open_basedir_ini = ini_get('open_basedir');
|
1020 |
+
$open_basedirs = (W3TC_WIN ? preg_split('~[;,]~', $open_basedir_ini) : explode(':', $open_basedir_ini));
|
1021 |
+
$result = array();
|
1022 |
+
|
1023 |
+
foreach ($open_basedirs as $open_basedir) {
|
1024 |
+
$open_basedir = trim($open_basedir);
|
1025 |
+
if ($open_basedir != '') {
|
1026 |
+
$result[] = w3_realpath($open_basedir);
|
1027 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1028 |
}
|
1029 |
|
1030 |
+
return $result;
|
1031 |
}
|
1032 |
|
1033 |
/**
|
1034 |
+
* Checks if path is restricted by open_basedir
|
1035 |
*
|
1036 |
+
* @param string $path
|
1037 |
* @return boolean
|
1038 |
*/
|
1039 |
+
function w3_check_open_basedir($path)
|
1040 |
{
|
1041 |
+
$path = w3_realpath($path);
|
1042 |
+
$open_basedirs = w3_get_open_basedirs();
|
1043 |
+
|
1044 |
+
if (!count($open_basedirs)) {
|
1045 |
+
return true;
|
1046 |
+
}
|
1047 |
+
|
1048 |
+
foreach ($open_basedirs as $open_basedir) {
|
1049 |
+
if (strstr($path, $open_basedir) !== false) {
|
1050 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1051 |
}
|
1052 |
}
|
1053 |
|
1054 |
+
return false;
|
1055 |
}
|
1056 |
|
1057 |
/**
|
1061 |
* @param string $url
|
1062 |
* @param string $data
|
1063 |
* @param string $auth
|
1064 |
+
* @param boolean $check_status
|
1065 |
* @return string
|
1066 |
*/
|
1067 |
+
function w3_http_request($method, $url, $data = '', $auth = '', $check_status = true)
|
1068 |
{
|
1069 |
$status = 0;
|
1070 |
$method = strtoupper($method);
|
1071 |
|
1072 |
+
if (function_exists('curl_init')) {
|
1073 |
$ch = curl_init();
|
1074 |
|
1075 |
curl_setopt($ch, CURLOPT_URL, $url);
|
1076 |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
1077 |
curl_setopt($ch, CURLOPT_USERAGENT, W3TC_POWERED_BY);
|
1078 |
+
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
1079 |
+
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
|
1080 |
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
|
1081 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
1082 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
|
1083 |
|
1084 |
+
switch ($method) {
|
1085 |
+
case 'POST':
|
1086 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
1087 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
1088 |
+
break;
|
1089 |
+
|
1090 |
+
case 'PURGE':
|
1091 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
|
1092 |
+
break;
|
1093 |
}
|
1094 |
|
1095 |
+
if ($auth) {
|
1096 |
curl_setopt($ch, CURLOPT_USERPWD, $auth);
|
1097 |
}
|
1098 |
|
1107 |
if ($parse_url && isset($parse_url['host'])) {
|
1108 |
$host = $parse_url['host'];
|
1109 |
$port = (isset($parse_url['port']) ? (int) $parse_url['port'] : 80);
|
1110 |
+
$path = (!empty($parse_url['path']) ? $parse_url['path'] : '/');
|
1111 |
$query = (isset($parse_url['query']) ? $parse_url['query'] : '');
|
1112 |
$request_uri = $path . ($query != '' ? '?' . $query : '');
|
1113 |
|
1118 |
'Connection: close'
|
1119 |
);
|
1120 |
|
1121 |
+
if (!empty($data)) {
|
1122 |
$request_headers_array[] = sprintf('Content-Length: %d', strlen($data));
|
1123 |
}
|
1124 |
|
1125 |
+
if (!empty($auth)) {
|
1126 |
$request_headers_array[] = sprintf('Authorization: Basic %s', base64_encode($auth));
|
1127 |
}
|
1128 |
|
1129 |
$request_headers = implode("\r\n", $request_headers_array);
|
1130 |
$request = $request_headers . "\r\n\r\n" . $data;
|
1131 |
+
$errno = null;
|
1132 |
+
$errstr = null;
|
1133 |
|
1134 |
+
$fp = @fsockopen($host, $port, $errno, $errstr, 10);
|
1135 |
|
1136 |
+
if (!$fp) {
|
1137 |
return false;
|
1138 |
}
|
1139 |
|
1140 |
$response = '';
|
1141 |
@fputs($fp, $request);
|
1142 |
|
1143 |
+
while (!@feof($fp)) {
|
1144 |
$response .= @fgets($fp, 4096);
|
1145 |
}
|
1146 |
|
1147 |
@fclose($fp);
|
1148 |
|
1149 |
+
list($response_headers, $contents) = explode("\r\n\r\n", $response, 2);
|
1150 |
|
1151 |
$matches = null;
|
1152 |
|
1156 |
}
|
1157 |
}
|
1158 |
|
1159 |
+
if (!$check_status || $status == 200) {
|
1160 |
return $contents;
|
1161 |
}
|
1162 |
|
1166 |
/**
|
1167 |
* Download url via GET
|
1168 |
*
|
1169 |
+
* @param string $url
|
1170 |
+
* @param string $auth
|
1171 |
+
* $param boolean $check_status
|
1172 |
* @return string
|
1173 |
*/
|
1174 |
+
function w3_http_get($url, $auth = '', $check_status = true)
|
1175 |
{
|
1176 |
+
return w3_http_request('GET', $url, null, $auth, $check_status);
|
1177 |
}
|
1178 |
|
1179 |
/**
|
1182 |
* @param string $url
|
1183 |
* @param string $data
|
1184 |
* @param string $auth
|
1185 |
+
* @param boolean $check_status
|
1186 |
+
* @return string
|
1187 |
+
*/
|
1188 |
+
function w3_http_post($url, $data = '', $auth = '', $check_status = true)
|
1189 |
+
{
|
1190 |
+
return w3_http_request('POST', $url, $data, $auth, $check_status);
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
/**
|
1194 |
+
* Send PURGE request to Varnish server
|
1195 |
+
* @param string $url
|
1196 |
+
* @param string $auth
|
1197 |
+
* $param boolean $check_status
|
1198 |
* @return string
|
1199 |
*/
|
1200 |
+
function w3_http_purge($url, $auth = '', $check_status = true)
|
1201 |
{
|
1202 |
+
return w3_http_request('PURGE', $url, null, $auth, $check_status);
|
1203 |
+
}
|
1204 |
+
|
1205 |
+
/**
|
1206 |
+
* Returns GMT date
|
1207 |
+
* @param integer $time
|
1208 |
+
* @return string
|
1209 |
+
*/
|
1210 |
+
function w3_http_date($time)
|
1211 |
+
{
|
1212 |
+
return gmdate('D, d M Y H:i:s \G\M\T', $time);
|
1213 |
}
|
1214 |
|
1215 |
/**
|
1216 |
* Downloads data to a file
|
1217 |
+
*
|
1218 |
* @param string $url
|
1219 |
* @param string $file
|
1220 |
* @return boolean
|
1221 |
*/
|
1222 |
function w3_download($url, $file)
|
1223 |
{
|
1224 |
+
$data = w3_http_get($url);
|
1225 |
|
1226 |
if ($data !== false) {
|
1227 |
return @file_put_contents($file, $data);
|
1231 |
}
|
1232 |
|
1233 |
/**
|
1234 |
+
* Returns upload info
|
1235 |
*
|
1236 |
+
* @return array
|
1237 |
*/
|
1238 |
+
function w3_upload_info()
|
1239 |
{
|
1240 |
+
static $upload_info = null;
|
1241 |
|
1242 |
+
if ($upload_info === null) {
|
1243 |
+
$upload_info = @wp_upload_dir();
|
1244 |
+
|
1245 |
+
if (empty($upload_info['error'])) {
|
1246 |
+
$site_url = w3_get_site_url();
|
1247 |
+
|
1248 |
+
$parse_url = @parse_url($upload_info['baseurl']);
|
1249 |
+
|
1250 |
+
if ($parse_url) {
|
1251 |
+
$baseurlpath = (!empty($parse_url['path']) ? trim($parse_url['path'], '/') : '');
|
1252 |
+
} else {
|
1253 |
+
$baseurlpath = 'wp-content/uploads';
|
1254 |
+
}
|
1255 |
+
|
1256 |
+
$upload_info['baseurlpath'] = '/' . $baseurlpath . '/';
|
1257 |
+
} else {
|
1258 |
+
$upload_info = false;
|
1259 |
+
}
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
return $upload_info;
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
/**
|
1266 |
+
* Redirects to URL
|
1267 |
+
*
|
1268 |
+
* @param string $url
|
1269 |
+
* @param string $params
|
1270 |
+
* @return string
|
1271 |
+
*/
|
1272 |
+
function w3_redirect($url = '', $params = array())
|
1273 |
+
{
|
1274 |
+
$fragment = '';
|
1275 |
+
|
1276 |
+
if ($url != '' && ($parse_url = @parse_url($url))) {
|
1277 |
+
$url = '';
|
1278 |
+
|
1279 |
+
if (!empty($parse_url['scheme'])) {
|
1280 |
+
$url .= $parse_url['scheme'] . '://';
|
1281 |
+
}
|
1282 |
+
|
1283 |
+
if (!empty($parse_url['user'])) {
|
1284 |
+
$url .= $parse_url['user'];
|
1285 |
+
|
1286 |
+
if (!empty($parse_url['pass'])) {
|
1287 |
+
$url .= ':' . $parse_url['pass'];
|
1288 |
}
|
1289 |
}
|
1290 |
+
|
1291 |
+
if (!empty($parse_url['host'])) {
|
1292 |
+
$url .= $parse_url['host'];
|
1293 |
+
}
|
1294 |
+
|
1295 |
+
if (!empty($parse_url['port']) && $parse_url['port'] != 80) {
|
1296 |
+
$url .= ':' . (int) $parse_url['port'];
|
1297 |
+
}
|
1298 |
+
|
1299 |
+
$url .= (!empty($parse_url['path']) ? $parse_url['path'] : '/');
|
1300 |
+
|
1301 |
+
if (!empty($parse_url['query'])) {
|
1302 |
+
$old_params = array();
|
1303 |
+
parse_str($parse_url['query'], $old_params);
|
1304 |
+
|
1305 |
+
$params = array_merge($old_params, $params);
|
1306 |
+
}
|
1307 |
+
|
1308 |
+
if (!empty($parse_url['fragment'])) {
|
1309 |
+
$fragment = '#' . $parse_url['fragment'];
|
1310 |
+
}
|
1311 |
+
} else {
|
1312 |
+
$parse_url = array();
|
1313 |
+
}
|
1314 |
+
|
1315 |
+
if (($count = count($params))) {
|
1316 |
+
$query = '';
|
1317 |
+
|
1318 |
+
foreach ($params as $param => $value) {
|
1319 |
+
$count--;
|
1320 |
+
$query .= urlencode($param) . (!empty($value) ? '=' . urlencode($value) : '') . ($count ? '&' : '');
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
$url .= (strpos($url, '?') === false ? '?' : '&') . $query;
|
1324 |
}
|
1325 |
|
1326 |
+
if ($fragment != '') {
|
1327 |
+
$url .= $fragment;
|
1328 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1329 |
|
1330 |
+
@header('Location: ' . $url);
|
1331 |
+
exit();
|
1332 |
}
|
1333 |
|
1334 |
/**
|
1335 |
+
* Returns caching engine name
|
1336 |
*
|
1337 |
+
* @param $engine
|
1338 |
+
* @return string
|
1339 |
*/
|
1340 |
+
function w3_get_engine_name($engine)
|
1341 |
{
|
1342 |
+
switch ($engine) {
|
1343 |
+
case 'memcached':
|
1344 |
+
$engine_name = 'memcached';
|
1345 |
+
break;
|
1346 |
+
|
1347 |
+
case 'apc':
|
1348 |
+
$engine_name = 'apc';
|
1349 |
+
break;
|
1350 |
+
|
1351 |
+
case 'eaccelerator':
|
1352 |
+
$engine_name = 'eaccelerator';
|
1353 |
+
break;
|
1354 |
+
|
1355 |
+
case 'xcache':
|
1356 |
+
$engine_name = 'xcache';
|
1357 |
+
break;
|
1358 |
+
|
1359 |
+
case 'file':
|
1360 |
+
$engine_name = 'disk';
|
1361 |
+
break;
|
1362 |
+
|
1363 |
+
case 'file_pgcache':
|
1364 |
+
$engine_name = 'disk (enhanced)';
|
1365 |
+
break;
|
1366 |
+
|
1367 |
+
case 'mirror':
|
1368 |
+
$engine_name = 'mirror';
|
1369 |
+
break;
|
1370 |
+
|
1371 |
+
case 'netdna':
|
1372 |
+
$engine_name = 'mirror: netdna / maxcdn';
|
1373 |
+
break;
|
1374 |
+
|
1375 |
+
case 'ftp':
|
1376 |
+
$engine_name = 'self-hosted / file transfer protocol upload';
|
1377 |
+
break;
|
1378 |
+
|
1379 |
+
case 's3':
|
1380 |
+
$engine_name = 'amazon simple storage service (s3)';
|
1381 |
+
break;
|
1382 |
+
|
1383 |
+
case 'cf':
|
1384 |
+
$engine_name = 'amazon cloudfront';
|
1385 |
+
break;
|
1386 |
+
|
1387 |
+
case 'rscf':
|
1388 |
+
$engine_name = 'rackspace cloud files';
|
1389 |
+
break;
|
1390 |
+
|
1391 |
+
default:
|
1392 |
+
$engine_name = 'n/a';
|
1393 |
+
break;
|
1394 |
}
|
1395 |
|
1396 |
+
return $engine_name;
|
1397 |
}
|
1398 |
|
1399 |
/**
|
1400 |
+
* Converts value to boolean
|
1401 |
*
|
1402 |
+
* @param mixed $value
|
1403 |
+
* @return boolean
|
1404 |
*/
|
1405 |
+
function w3_to_boolean($value)
|
1406 |
{
|
1407 |
+
if (is_string($value)) {
|
1408 |
+
switch (strtolower($value)) {
|
1409 |
+
case '+':
|
1410 |
+
case '1':
|
1411 |
+
case 'y':
|
1412 |
+
case 'on':
|
1413 |
+
case 'yes':
|
1414 |
+
case 'true':
|
1415 |
+
case 'enabled':
|
1416 |
+
return true;
|
1417 |
+
|
1418 |
+
case '-':
|
1419 |
+
case '0':
|
1420 |
+
case 'n':
|
1421 |
+
case 'no':
|
1422 |
+
case 'off':
|
1423 |
+
case 'false':
|
1424 |
+
case 'disabled':
|
1425 |
+
return false;
|
1426 |
}
|
1427 |
}
|
1428 |
|
1429 |
+
return (boolean) $value;
|
1430 |
}
|
1431 |
|
1432 |
/**
|
1433 |
+
* Loads plugins
|
1434 |
*
|
1435 |
+
* @return void
|
|
|
1436 |
*/
|
1437 |
+
function w3_load_plugins()
|
1438 |
{
|
1439 |
+
$dir = @opendir(W3TC_PLUGINS_DIR);
|
|
|
|
|
|
|
|
|
|
|
1440 |
|
1441 |
+
if ($dir) {
|
1442 |
+
while (($entry = @readdir($dir)) !== false) {
|
1443 |
+
if (strrchr($entry, '.') === '.php') {
|
1444 |
+
require_once W3TC_PLUGINS_DIR . '/' . $entry;
|
1445 |
+
}
|
1446 |
}
|
1447 |
+
@closedir($dir);
|
1448 |
}
|
|
|
|
|
1449 |
}
|
1450 |
|
1451 |
/**
|
1456 |
*/
|
1457 |
function w3_get_mime_type($file)
|
1458 |
{
|
1459 |
+
static $cache = array();
|
1460 |
|
1461 |
+
if (!isset($cache[$file])) {
|
1462 |
+
$mime_type = false;
|
1463 |
+
|
1464 |
+
/**
|
1465 |
+
* Try to detect by extension (fast)
|
1466 |
+
*/
|
1467 |
+
$mime_types = include W3TC_DIR . '/inc/mime/all.php';
|
1468 |
+
|
1469 |
+
foreach ($mime_types as $extension => $type) {
|
1470 |
+
if (preg_match('~\.(' . $extension . ')$~i', $file)) {
|
1471 |
+
$mime_type = $type;
|
1472 |
+
break;
|
1473 |
+
}
|
1474 |
+
}
|
1475 |
+
|
1476 |
+
/**
|
1477 |
+
* Try to detect using file info function
|
1478 |
+
*/
|
1479 |
+
if (!$mime_type && function_exists('finfo_open')) {
|
1480 |
+
$finfo = @finfo_open(FILEINFO_MIME);
|
1481 |
+
|
1482 |
+
if (!$finfo) {
|
1483 |
+
$finfo = @finfo_open(FILEINFO_MIME);
|
1484 |
+
}
|
1485 |
+
|
1486 |
+
if ($finfo) {
|
1487 |
+
$mime_type = @finfo_file($finfo, $file);
|
1488 |
+
|
1489 |
+
if ($mime_type) {
|
1490 |
+
$extra_mime_type_info = strpos($mime_type, "; ");
|
1491 |
+
|
1492 |
+
if ($extra_mime_type_info) {
|
1493 |
+
$mime_type = substr($mime_type, 0, $extra_mime_type_info);
|
1494 |
+
}
|
1495 |
+
|
1496 |
+
if ($mime_type == 'application/octet-stream') {
|
1497 |
+
$mime_type = false;
|
1498 |
+
}
|
1499 |
}
|
1500 |
+
|
1501 |
+
@finfo_close($finfo);
|
1502 |
}
|
1503 |
}
|
1504 |
+
|
1505 |
+
/**
|
1506 |
+
* Try to detect using mime type function
|
1507 |
+
*/
|
1508 |
+
if (!$mime_type && function_exists('mime_content_type')) {
|
1509 |
+
$mime_type = @mime_content_type($file);
|
1510 |
+
}
|
1511 |
+
|
1512 |
+
/**
|
1513 |
+
* If detection failed use default mime type
|
1514 |
+
*/
|
1515 |
+
if (!$mime_type) {
|
1516 |
+
$mime_type = 'application/octet-stream';
|
1517 |
+
}
|
1518 |
+
|
1519 |
+
$cache[$file] = $mime_type;
|
1520 |
}
|
1521 |
|
1522 |
+
return $cache[$file];
|
1523 |
}
|
1524 |
|
1525 |
/**
|
1536 |
$data = sprintf('status=%s', urlencode($status));
|
1537 |
$auth = sprintf('%s:%s', $username, $password);
|
1538 |
|
1539 |
+
$xml = w3_http_post('http://twitter.com/statuses/update.xml', $data, $auth);
|
1540 |
|
1541 |
if ($xml) {
|
1542 |
$matches = null;
|
1557 |
|
1558 |
/**
|
1559 |
* Quotes regular expression string
|
1560 |
+
*
|
1561 |
* @param string $regexp
|
1562 |
* @return string
|
1563 |
*/
|
1571 |
return $string;
|
1572 |
}
|
1573 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1574 |
/**
|
1575 |
* Returns true if zlib output compression is enabled otherwise false
|
1576 |
+
*
|
1577 |
* @return boolean
|
1578 |
*/
|
1579 |
function w3_zlib_output_compression()
|
1583 |
|
1584 |
/**
|
1585 |
* Recursive strips slahes from the var
|
1586 |
+
*
|
1587 |
* @param mixed $var
|
1588 |
* @return mixed
|
1589 |
*/
|
1598 |
return $var;
|
1599 |
}
|
1600 |
|
1601 |
+
if (!function_exists('file_put_contents')) {
|
1602 |
+
if (!defined('FILE_APPEND')) {
|
1603 |
define('FILE_APPEND', 8);
|
1604 |
}
|
1605 |
|
1606 |
/**
|
1607 |
* Puts contents to the file
|
1608 |
+
*
|
1609 |
* @param string $filename
|
1610 |
* @param string $data
|
1611 |
* @param integer $flags
|
1628 |
|
1629 |
/**
|
1630 |
* Cleanup .htaccess rules
|
1631 |
+
*
|
1632 |
* @param string $rules
|
1633 |
* @return string
|
1634 |
*/
|
1642 |
}
|
1643 |
|
1644 |
/**
|
1645 |
+
* Erases text from start to end
|
1646 |
+
*
|
1647 |
+
* @param string $text
|
1648 |
+
* @param string $start
|
1649 |
+
* @param string $end
|
1650 |
+
* @return string
|
1651 |
*/
|
1652 |
+
function w3_erase_text($text, $start, $end)
|
1653 |
{
|
1654 |
+
$text = preg_replace('~' . w3_preg_quote($start) . '.*' . w3_preg_quote($end) . '~Us', '', $text);
|
1655 |
+
$text = trim($text);
|
1656 |
+
|
1657 |
+
return $text;
|
1658 |
+
}
|
1659 |
+
|
1660 |
+
/**
|
1661 |
+
* Return deafult htaccess rules for current WP version
|
1662 |
+
*
|
1663 |
+
* @return string
|
1664 |
+
*/
|
1665 |
+
function w3_get_permalink_rules()
|
1666 |
+
{
|
1667 |
+
$rules = '';
|
1668 |
+
$base_path = w3_get_base_path();
|
1669 |
+
|
1670 |
+
if (w3_is_wpmu()) {
|
1671 |
+
$rules .= "RewriteEngine On\n";
|
1672 |
+
$rules .= "RewriteBase " . $base_path . "\n\n";
|
1673 |
+
|
1674 |
+
$rules .= "#uploaded files\n";
|
1675 |
+
$rules .= "RewriteRule ^(.*/)?files/$ index.php [L]\n";
|
1676 |
+
$rules .= "RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*\n";
|
1677 |
+
$rules .= "RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]\n\n";
|
1678 |
+
|
1679 |
+
$rules .= "# add a trailing slash to /wp-admin\n";
|
1680 |
+
$rules .= "RewriteCond %{REQUEST_URI} ^.*/wp-admin$\n";
|
1681 |
+
$rules .= "RewriteRule ^(.+)$ $1/ [R=301,L]\n\n";
|
1682 |
+
|
1683 |
+
$rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n";
|
1684 |
+
$rules .= "RewriteCond %{REQUEST_FILENAME} -d\n";
|
1685 |
+
$rules .= "RewriteRule . - [L]\n";
|
1686 |
+
$rules .= "RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]\n";
|
1687 |
+
$rules .= "RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\\.php)$ $2 [L]\n";
|
1688 |
+
$rules .= "RewriteRule . index.php [L]\n\n";
|
1689 |
+
|
1690 |
+
$rules .= "<IfModule mod_security.c>\n";
|
1691 |
+
$rules .= "<Files async-upload.php>\n";
|
1692 |
+
$rules .= "SecFilterEngine Off\n";
|
1693 |
+
$rules .= "SecFilterScanPOST Off\n";
|
1694 |
+
$rules .= "</Files>\n";
|
1695 |
+
$rules .= "</IfModule>\n";
|
1696 |
+
} elseif (w3_is_network_mode()) {
|
1697 |
+
$rules .= "# BEGIN WordPress\n";
|
1698 |
+
$rules .= "<IfModule mod_rewrite.c>\n";
|
1699 |
+
$rules .= " RewriteEngine On\n";
|
1700 |
+
$rules .= " RewriteBase " . $base_path . "\n";
|
1701 |
+
$rules .= " RewriteRule ^index\\.php$ - [L]\n\n";
|
1702 |
+
|
1703 |
+
$rules .= " # uploaded files\n";
|
1704 |
+
$rules .= " RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file= [L]\n\n";
|
1705 |
+
|
1706 |
+
$rules .= " # add a trailing slash to /wp-admin\n";
|
1707 |
+
$rules .= " RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]\n\n";
|
1708 |
+
|
1709 |
+
$rules .= " RewriteCond %{REQUEST_FILENAME} -f [OR]\n";
|
1710 |
+
$rules .= " RewriteCond %{REQUEST_FILENAME} -d\n";
|
1711 |
+
$rules .= " RewriteRule ^ - [L]\n";
|
1712 |
+
$rules .= " RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) [L]\n";
|
1713 |
+
$rules .= " RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\\.php)$ [L]\n";
|
1714 |
+
$rules .= " RewriteRule . index.php [L]\n";
|
1715 |
+
$rules .= "</IfModule>\n";
|
1716 |
+
$rules .= "# END WordPress\n";
|
1717 |
+
} else {
|
1718 |
+
$home_path = w3_get_home_path();
|
1719 |
+
|
1720 |
+
$rules .= "# BEGIN WordPress\n";
|
1721 |
+
$rules .= "<IfModule mod_rewrite.c>\n";
|
1722 |
+
$rules .= " RewriteEngine On\n";
|
1723 |
+
$rules .= " RewriteBase " . $home_path . "\n";
|
1724 |
+
$rules .= " RewriteCond %{REQUEST_FILENAME} !-f\n";
|
1725 |
+
$rules .= " RewriteCond %{REQUEST_FILENAME} !-d\n";
|
1726 |
+
$rules .= " RewriteRule . " . $base_path . "index.php [L]\n";
|
1727 |
+
$rules .= "</IfModule>\n";
|
1728 |
+
$rules .= "# END WordPress\n";
|
1729 |
}
|
1730 |
|
1731 |
+
return $rules;
|
1732 |
}
|
1733 |
|
1734 |
+
/**
|
1735 |
+
* Add W3TC action callback
|
1736 |
+
*
|
1737 |
+
* @param string $action
|
1738 |
+
* @param mixed $callback
|
1739 |
+
* @return void
|
1740 |
+
*/
|
1741 |
+
function w3tc_add_action($action, $callback)
|
1742 |
+
{
|
1743 |
+
global $_w3tc_actions;
|
1744 |
+
|
1745 |
+
$_w3tc_actions[$action][] = $callback;
|
1746 |
}
|
1747 |
|
1748 |
+
/**
|
1749 |
+
* Do W3TC action
|
1750 |
+
*
|
1751 |
+
* @param string $action
|
1752 |
+
* @param mixed $value
|
1753 |
+
* @return mixed
|
1754 |
+
*/
|
1755 |
+
function w3tc_do_action($action, $value = null)
|
1756 |
+
{
|
1757 |
+
global $_w3tc_actions;
|
1758 |
+
|
1759 |
+
if (isset($_w3tc_actions[$action])) {
|
1760 |
+
foreach ((array) $_w3tc_actions[$action] as $callback) {
|
1761 |
+
if (is_callable($callback)) {
|
1762 |
+
$value = call_user_func($callback, $value);
|
1763 |
+
}
|
1764 |
+
}
|
1765 |
+
}
|
1766 |
+
|
1767 |
+
return $value;
|
1768 |
+
}
|
inc/email/minify_error_notification.html
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<html>
|
2 |
+
<head></head>
|
3 |
+
<body>
|
4 |
+
<p>Unfortunately an error occurred while creating the minify cache. Please check your settings to ensure your site is working as intended.</p>
|
5 |
+
<p>Thanks for using W3 Total Cache.</p>
|
6 |
+
</body>
|
7 |
+
</html>
|
inc/{options/support_email.phtml → email/support_request.phtml}
RENAMED
@@ -3,19 +3,29 @@
|
|
3 |
<body>
|
4 |
<p>
|
5 |
Date: <?php echo date('m/d/Y H:i:s'); ?><br />
|
6 |
-
Request type: <?php echo htmlspecialchars($
|
7 |
URL: <a href="<?php echo htmlspecialchars($url); ?>"><?php echo htmlspecialchars($url); ?></a><br />
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
<?php if ($request_data_url): ?>
|
9 |
-
Request data: <a href="<?php echo htmlspecialchars($request_data_url); ?>"><?php echo htmlspecialchars($request_data_url); ?></a
|
10 |
<?php endif; ?>
|
|
|
11 |
</p>
|
|
|
12 |
<p>
|
13 |
<?php echo nl2br(htmlspecialchars($description)); ?>
|
14 |
</p>
|
|
|
15 |
<hr />
|
|
|
16 |
<font size="-1" color="#ccc">
|
17 |
E-mail sent from IP: <?php echo htmlspecialchars($_SERVER['REMOTE_ADDR']); ?><br />
|
18 |
User Agent: <?php echo htmlspecialchars($_SERVER['HTTP_USER_AGENT']); ?>
|
19 |
</font>
|
20 |
</body>
|
21 |
-
</html>
|
3 |
<body>
|
4 |
<p>
|
5 |
Date: <?php echo date('m/d/Y H:i:s'); ?><br />
|
6 |
+
Request type: <?php echo htmlspecialchars($request_type_text); ?><br />
|
7 |
URL: <a href="<?php echo htmlspecialchars($url); ?>"><?php echo htmlspecialchars($url); ?></a><br />
|
8 |
+
Name: <?php echo htmlspecialchars($name); ?><br />
|
9 |
+
E-Mail: <a href="mailto:<?php echo htmlspecialchars($email); ?>"><?php echo htmlspecialchars($email); ?></a><br />
|
10 |
+
Phone: <?php echo htmlspecialchars($phone); ?><br />
|
11 |
+
<?php if ($forum_url): ?>
|
12 |
+
Forum Topic URL: <a href="<?php echo htmlspecialchars($forum_url); ?>"><?php echo htmlspecialchars($forum_url); ?></a><br />
|
13 |
+
<?php endif; ?>
|
14 |
<?php if ($request_data_url): ?>
|
15 |
+
Request data: <a href="<?php echo htmlspecialchars($request_data_url); ?>"><?php echo htmlspecialchars($request_data_url); ?></a><br />
|
16 |
<?php endif; ?>
|
17 |
+
Subject: <?php echo htmlspecialchars($subject); ?>
|
18 |
</p>
|
19 |
+
|
20 |
<p>
|
21 |
<?php echo nl2br(htmlspecialchars($description)); ?>
|
22 |
</p>
|
23 |
+
|
24 |
<hr />
|
25 |
+
|
26 |
<font size="-1" color="#ccc">
|
27 |
E-mail sent from IP: <?php echo htmlspecialchars($_SERVER['REMOTE_ADDR']); ?><br />
|
28 |
User Agent: <?php echo htmlspecialchars($_SERVER['HTTP_USER_AGENT']); ?>
|
29 |
</font>
|
30 |
</body>
|
31 |
+
</html>
|
inc/images/logo.png
CHANGED
Binary file
|
inc/images/logo_small.png
ADDED
Binary file
|
inc/js/lightbox.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
var
|
2 |
window: jQuery(window),
|
3 |
container: null,
|
4 |
options: null,
|
@@ -43,9 +43,7 @@ var Lightbox = {
|
|
43 |
callback: null
|
44 |
}, options);
|
45 |
|
46 |
-
|
47 |
-
this.create();
|
48 |
-
}
|
49 |
|
50 |
this.container.css( {
|
51 |
width: this.options.width,
|
@@ -58,17 +56,15 @@ var Lightbox = {
|
|
58 |
this.load(this.options.url, this.options.callback);
|
59 |
}
|
60 |
|
61 |
-
|
62 |
|
63 |
this.resize();
|
64 |
this.container.show();
|
65 |
-
currentLightbox = this;
|
66 |
},
|
67 |
|
68 |
close: function() {
|
69 |
-
this.container.
|
70 |
-
|
71 |
-
currentLightbox = null;
|
72 |
},
|
73 |
|
74 |
resize: function() {
|
@@ -76,6 +72,11 @@ var Lightbox = {
|
|
76 |
top: this.window.scrollTop() + this.options.offsetTop,
|
77 |
left: this.window.scrollLeft() + this.window.width() / 2 - this.container.width() / 2
|
78 |
});
|
|
|
|
|
|
|
|
|
|
|
79 |
},
|
80 |
|
81 |
load: function(url, callback) {
|
@@ -99,10 +100,8 @@ var Lightbox = {
|
|
99 |
if (width === undefined) {
|
100 |
return this.container.width();
|
101 |
} else {
|
102 |
-
|
103 |
-
|
104 |
-
left: this.window.scrollLeft() + this.window.width() / 2 - width / 2
|
105 |
-
});
|
106 |
}
|
107 |
},
|
108 |
|
@@ -110,10 +109,8 @@ var Lightbox = {
|
|
110 |
if (height === undefined) {
|
111 |
return this.container.height();
|
112 |
} else {
|
113 |
-
|
114 |
-
|
115 |
-
top: this.window.scrollTop() + this.options.offsetTop
|
116 |
-
});
|
117 |
}
|
118 |
},
|
119 |
|
@@ -122,7 +119,7 @@ var Lightbox = {
|
|
122 |
}
|
123 |
};
|
124 |
|
125 |
-
var
|
126 |
window: jQuery(window),
|
127 |
container: null,
|
128 |
|
@@ -152,16 +149,13 @@ var Overlay = {
|
|
152 |
},
|
153 |
|
154 |
show: function() {
|
155 |
-
|
156 |
-
this.create();
|
157 |
-
}
|
158 |
-
|
159 |
this.resize();
|
160 |
this.container.show();
|
161 |
},
|
162 |
|
163 |
hide: function() {
|
164 |
-
this.container.
|
165 |
},
|
166 |
|
167 |
resize: function() {
|
@@ -175,10 +169,10 @@ var Overlay = {
|
|
175 |
};
|
176 |
|
177 |
function w3tc_lightbox_support_us() {
|
178 |
-
|
179 |
width: 590,
|
180 |
height: 200,
|
181 |
-
url: '
|
182 |
callback: function(lightbox) {
|
183 |
jQuery('.button-tweet', lightbox.container).click(function(event) {
|
184 |
lightbox.close();
|
@@ -202,10 +196,10 @@ function w3tc_lightbox_support_us() {
|
|
202 |
}
|
203 |
|
204 |
function w3tc_lightbox_tweet() {
|
205 |
-
|
206 |
width: 550,
|
207 |
height: 340,
|
208 |
-
url: '
|
209 |
callback: function(lightbox) {
|
210 |
jQuery('form', lightbox.container).submit(function() {
|
211 |
var me = this, username = jQuery('#tweet_username').val(), password = jQuery('#tweet_password').val();
|
@@ -222,7 +216,7 @@ function w3tc_lightbox_tweet() {
|
|
222 |
|
223 |
jQuery('input', this).attr('disabled', 'disabled');
|
224 |
|
225 |
-
jQuery.post('
|
226 |
w3tc_action: 'twitter_status_update',
|
227 |
username: username,
|
228 |
password: password
|
@@ -243,9 +237,169 @@ function w3tc_lightbox_tweet() {
|
|
243 |
});
|
244 |
}
|
245 |
|
246 |
-
|
247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
w3tc_lightbox_tweet();
|
249 |
return false;
|
250 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
});
|
1 |
+
var W3tc_Lightbox = {
|
2 |
window: jQuery(window),
|
3 |
container: null,
|
4 |
options: null,
|
43 |
callback: null
|
44 |
}, options);
|
45 |
|
46 |
+
this.create();
|
|
|
|
|
47 |
|
48 |
this.container.css( {
|
49 |
width: this.options.width,
|
56 |
this.load(this.options.url, this.options.callback);
|
57 |
}
|
58 |
|
59 |
+
W3tc_Overlay.show(this);
|
60 |
|
61 |
this.resize();
|
62 |
this.container.show();
|
|
|
63 |
},
|
64 |
|
65 |
close: function() {
|
66 |
+
this.container.remove();
|
67 |
+
W3tc_Overlay.hide();
|
|
|
68 |
},
|
69 |
|
70 |
resize: function() {
|
72 |
top: this.window.scrollTop() + this.options.offsetTop,
|
73 |
left: this.window.scrollLeft() + this.window.width() / 2 - this.container.width() / 2
|
74 |
});
|
75 |
+
|
76 |
+
jQuery('.lightbox-content', this.container).css( {
|
77 |
+
width: this.width(),
|
78 |
+
height: this.height()
|
79 |
+
});
|
80 |
},
|
81 |
|
82 |
load: function(url, callback) {
|
100 |
if (width === undefined) {
|
101 |
return this.container.width();
|
102 |
} else {
|
103 |
+
this.container.css('width', width);
|
104 |
+
return this.resize();
|
|
|
|
|
105 |
}
|
106 |
},
|
107 |
|
109 |
if (height === undefined) {
|
110 |
return this.container.height();
|
111 |
} else {
|
112 |
+
this.container.css('height', height);
|
113 |
+
return this.resize();
|
|
|
|
|
114 |
}
|
115 |
},
|
116 |
|
119 |
}
|
120 |
};
|
121 |
|
122 |
+
var W3tc_Overlay = {
|
123 |
window: jQuery(window),
|
124 |
container: null,
|
125 |
|
149 |
},
|
150 |
|
151 |
show: function() {
|
152 |
+
this.create();
|
|
|
|
|
|
|
153 |
this.resize();
|
154 |
this.container.show();
|
155 |
},
|
156 |
|
157 |
hide: function() {
|
158 |
+
this.container.remove();
|
159 |
},
|
160 |
|
161 |
resize: function() {
|
169 |
};
|
170 |
|
171 |
function w3tc_lightbox_support_us() {
|
172 |
+
W3tc_Lightbox.open( {
|
173 |
width: 590,
|
174 |
height: 200,
|
175 |
+
url: 'admin.php?page=w3tc_general&w3tc_action=support_us',
|
176 |
callback: function(lightbox) {
|
177 |
jQuery('.button-tweet', lightbox.container).click(function(event) {
|
178 |
lightbox.close();
|
196 |
}
|
197 |
|
198 |
function w3tc_lightbox_tweet() {
|
199 |
+
W3tc_Lightbox.open( {
|
200 |
width: 550,
|
201 |
height: 340,
|
202 |
+
url: 'admin.php?page=w3tc_general&w3tc_action=tweet',
|
203 |
callback: function(lightbox) {
|
204 |
jQuery('form', lightbox.container).submit(function() {
|
205 |
var me = this, username = jQuery('#tweet_username').val(), password = jQuery('#tweet_password').val();
|
216 |
|
217 |
jQuery('input', this).attr('disabled', 'disabled');
|
218 |
|
219 |
+
jQuery.post('admin.php?page=w3tc_general', {
|
220 |
w3tc_action: 'twitter_status_update',
|
221 |
username: username,
|
222 |
password: password
|
237 |
});
|
238 |
}
|
239 |
|
240 |
+
var w3tc_minify_recommendations_checked = {};
|
241 |
+
|
242 |
+
function w3tc_lightbox_minify_recommendations() {
|
243 |
+
var min_height = 200;
|
244 |
+
var max_height = 1200;
|
245 |
+
|
246 |
+
var height = jQuery(window).height() - 220;
|
247 |
+
|
248 |
+
if (height < min_height) {
|
249 |
+
height = min_height;
|
250 |
+
} else if (height > max_height) {
|
251 |
+
height = max_height;
|
252 |
+
}
|
253 |
+
|
254 |
+
W3tc_Lightbox.open( {
|
255 |
+
width: 1000,
|
256 |
+
height: height,
|
257 |
+
url: 'admin.php?page=w3tc_minify&w3tc_action=minify_recommendations',
|
258 |
+
callback: function(lightbox) {
|
259 |
+
jQuery('#recom_container').css('height', height - 50);
|
260 |
+
|
261 |
+
var theme = jQuery('#recom_theme').val();
|
262 |
+
|
263 |
+
if (jQuery.ui && jQuery.ui.sortable) {
|
264 |
+
jQuery("#recom_js_files,#recom_css_files").sortable( {
|
265 |
+
axis: 'y',
|
266 |
+
stop: function() {
|
267 |
+
jQuery(this).find('li').each(function(index) {
|
268 |
+
jQuery(this).find('td:eq(1)').html((index + 1) + '.');
|
269 |
+
});
|
270 |
+
}
|
271 |
+
});
|
272 |
+
}
|
273 |
+
|
274 |
+
if (w3tc_minify_recommendations_checked[theme] !== undefined) {
|
275 |
+
jQuery('#recom_js_files :text,#recom_css_files :text').each(function() {
|
276 |
+
var hash = jQuery(this).parents('li').find('[name=recom_js_template]').val() + ':' + jQuery(this).val();
|
277 |
+
|
278 |
+
if (w3tc_minify_recommendations_checked[theme][hash] !== undefined) {
|
279 |
+
var checkbox = jQuery(this).parents('li').find(':checkbox');
|
280 |
+
|
281 |
+
if (w3tc_minify_recommendations_checked[theme][hash]) {
|
282 |
+
checkbox.attr('checked', 'checked');
|
283 |
+
} else {
|
284 |
+
checkbox.removeAttr('checked');
|
285 |
+
}
|
286 |
+
}
|
287 |
+
});
|
288 |
+
}
|
289 |
+
|
290 |
+
jQuery('#recom_theme').change(function() {
|
291 |
+
jQuery('#recom_js_files :checkbox,#recom_css_files :checkbox').each(function() {
|
292 |
+
var li = jQuery(this).parents('li');
|
293 |
+
var hash = li.find('[name=recom_js_template]').val() + ':' + li.find(':text').val();
|
294 |
+
|
295 |
+
if (w3tc_minify_recommendations_checked[theme] === undefined) {
|
296 |
+
w3tc_minify_recommendations_checked[theme] = {};
|
297 |
+
}
|
298 |
+
|
299 |
+
w3tc_minify_recommendations_checked[theme][hash] = jQuery(this).is(':checked');
|
300 |
+
});
|
301 |
+
|
302 |
+
lightbox.load('admin.php?page=w3tc_minify&w3tc_action=minify_recommendations&theme_key=' + jQuery(this).val(), lightbox.options.callback);
|
303 |
+
});
|
304 |
+
|
305 |
+
jQuery('#recom_js_check').click(function() {
|
306 |
+
if (jQuery('#recom_js_files :checkbox:checked').size()) {
|
307 |
+
jQuery('#recom_js_files :checkbox').removeAttr('checked');
|
308 |
+
} else {
|
309 |
+
jQuery('#recom_js_files :checkbox').attr('checked', 'checked');
|
310 |
+
}
|
311 |
+
|
312 |
+
return false;
|
313 |
+
});
|
314 |
+
|
315 |
+
jQuery('#recom_css_check').click(function() {
|
316 |
+
if (jQuery('#recom_css_files :checkbox:checked').size()) {
|
317 |
+
jQuery('#recom_css_files :checkbox').removeAttr('checked');
|
318 |
+
} else {
|
319 |
+
jQuery('#recom_css_files :checkbox').attr('checked', 'checked');
|
320 |
+
}
|
321 |
+
|
322 |
+
return false;
|
323 |
+
});
|
324 |
+
|
325 |
+
jQuery('.recom_apply', lightbox.container).click(function() {
|
326 |
+
var theme = jQuery('#recom_theme').val();
|
327 |
+
|
328 |
+
jQuery('#js_files li').each(function() {
|
329 |
+
if (jQuery(this).find(':text').attr('name').indexOf('js_files[' + theme + ']') != -1) {
|
330 |
+
jQuery(this).remove();
|
331 |
+
}
|
332 |
+
});
|
333 |
+
|
334 |
+
jQuery('#css_files li').each(function() {
|
335 |
+
if (jQuery(this).find(':text').attr('name').indexOf('css_files[' + theme + ']') != -1) {
|
336 |
+
jQuery(this).remove();
|
337 |
+
}
|
338 |
+
});
|
339 |
+
|
340 |
+
jQuery('#recom_js_files li').each(function() {
|
341 |
+
if (jQuery(this).find(':checkbox:checked').size()) {
|
342 |
+
w3tc_minify_js_file_add(theme, jQuery(this).find('[name=recom_js_template]').val(), jQuery(this).find('[name=recom_js_location]').val(), jQuery(this).find('[name=recom_js_file]').val());
|
343 |
+
}
|
344 |
+
});
|
345 |
+
|
346 |
+
jQuery('#recom_css_files li').each(function() {
|
347 |
+
if (jQuery(this).find(':checkbox:checked').size()) {
|
348 |
+
w3tc_minify_css_file_add(theme, jQuery(this).find('[name=recom_css_template]').val(), jQuery(this).find('[name=recom_css_file]').val());
|
349 |
+
}
|
350 |
+
});
|
351 |
+
|
352 |
+
w3tc_minify_js_theme(theme);
|
353 |
+
w3tc_minify_css_theme(theme);
|
354 |
+
|
355 |
+
w3tc_input_enable('.js_enabled', jQuery('#js_enabled:checked').size());
|
356 |
+
w3tc_input_enable('.css_enabled', jQuery('#css_enabled:checked').size());
|
357 |
+
|
358 |
+
lightbox.close();
|
359 |
+
});
|
360 |
+
}
|
361 |
+
});
|
362 |
+
}
|
363 |
+
|
364 |
+
function w3tc_lightbox_self_test() {
|
365 |
+
var min_height = 200;
|
366 |
+
var max_height = 800;
|
367 |
+
|
368 |
+
var height = jQuery(window).height() - 220;
|
369 |
+
|
370 |
+
if (height < min_height) {
|
371 |
+
height = min_height;
|
372 |
+
} else if (height > max_height) {
|
373 |
+
height = max_height;
|
374 |
+
}
|
375 |
+
|
376 |
+
W3tc_Lightbox.open( {
|
377 |
+
width: 800,
|
378 |
+
height: height,
|
379 |
+
url: 'admin.php?page=w3tc_general&w3tc_action=self_test',
|
380 |
+
callback: function(lightbox) {
|
381 |
+
jQuery('#self_test_container').css('height', height - 50);
|
382 |
+
|
383 |
+
jQuery('.button-primary', lightbox.container).click(function() {
|
384 |
+
lightbox.close();
|
385 |
+
});
|
386 |
+
}
|
387 |
+
});
|
388 |
+
}
|
389 |
+
|
390 |
+
jQuery(function() {
|
391 |
+
jQuery('.button-tweet').click(function() {
|
392 |
w3tc_lightbox_tweet();
|
393 |
return false;
|
394 |
});
|
395 |
+
|
396 |
+
jQuery('.button-minify-recommendations').click(function() {
|
397 |
+
w3tc_lightbox_minify_recommendations();
|
398 |
+
return false;
|
399 |
+
});
|
400 |
+
|
401 |
+
jQuery('.button-self-test').click(function() {
|
402 |
+
w3tc_lightbox_self_test();
|
403 |
+
return false;
|
404 |
+
});
|
405 |
});
|
inc/js/options.js
CHANGED
@@ -9,14 +9,20 @@ function w3tc_popup(url, name, width, height) {
|
|
9 |
return window.open(url, name, 'width=' + width + ',height=' + height + ',status=no,toolbar=no,menubar=no,scrollbars=yes');
|
10 |
}
|
11 |
|
12 |
-
function
|
13 |
jQuery(input).each(function() {
|
14 |
-
|
15 |
if (enabled) {
|
16 |
-
|
17 |
} else {
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
me.after(jQuery('<input />').attr( {
|
21 |
type: 'hidden',
|
22 |
name: me.attr('name')
|
@@ -26,486 +32,819 @@ function input_enable(input, enabled) {
|
|
26 |
});
|
27 |
}
|
28 |
|
29 |
-
function
|
30 |
-
jQuery('
|
31 |
-
jQuery(
|
32 |
-
}
|
|
|
|
|
33 |
}
|
34 |
|
35 |
-
function
|
36 |
-
jQuery('
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
var url = '';
|
42 |
-
if (/^https?:\/\//.test(file)) {
|
43 |
-
url = file;
|
44 |
-
} else {
|
45 |
-
url = '/' + file;
|
46 |
-
}
|
47 |
-
w3tc_popup(url, 'file_verify');
|
48 |
-
}
|
49 |
-
});
|
50 |
}
|
51 |
|
52 |
-
function
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
if (js[i] == c) {
|
60 |
-
duplicate = true;
|
61 |
-
break;
|
62 |
-
}
|
63 |
-
}
|
64 |
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
74 |
|
75 |
-
|
76 |
-
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
});
|
|
|
|
|
80 |
|
|
|
|
|
81 |
jQuery('#css_files :text').each(function() {
|
82 |
-
var
|
83 |
-
if (
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
break;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
css.push(c);
|
92 |
-
|
93 |
-
var qindex = v.indexOf('?');
|
94 |
-
if (qindex != -1) {
|
95 |
-
if (!/^https?:\/\//.test(v)) {
|
96 |
-
query_css.push(v);
|
97 |
-
}
|
98 |
-
v = v.substr(0, qindex);
|
99 |
-
}
|
100 |
-
|
101 |
-
if (!/\.css$/.test(v)) {
|
102 |
-
invalid_css.push(v);
|
103 |
-
}
|
104 |
}
|
105 |
});
|
|
|
|
|
106 |
|
107 |
-
|
108 |
-
|
109 |
-
return false;
|
110 |
-
}
|
111 |
|
112 |
-
|
113 |
-
|
114 |
-
return false;
|
115 |
-
}
|
116 |
-
}
|
117 |
|
118 |
-
|
119 |
-
|
120 |
-
return false;
|
121 |
-
}
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
|
|
|
|
128 |
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
}
|
133 |
|
134 |
-
return
|
135 |
}
|
136 |
|
137 |
-
function
|
138 |
-
|
139 |
-
jQuery('#js_files_empty').show();
|
140 |
-
} else {
|
141 |
-
jQuery('#js_files_empty').hide();
|
142 |
-
}
|
143 |
-
}
|
144 |
|
145 |
-
|
146 |
-
|
147 |
-
jQuery('#css_files_empty').show();
|
148 |
} else {
|
149 |
-
|
150 |
}
|
151 |
-
}
|
152 |
|
153 |
-
function
|
154 |
-
|
155 |
-
input_enable('.js_enabled', this.checked);
|
156 |
-
});
|
157 |
-
}
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
jQuery(this).parent().remove();
|
169 |
-
if (!jQuery('#js_files li').size()) {
|
170 |
-
js_file_clear();
|
171 |
-
}
|
172 |
-
}
|
173 |
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
jQuery(this).parent().remove();
|
182 |
-
if (!jQuery('#css_files li').size()) {
|
183 |
-
css_file_clear();
|
184 |
}
|
185 |
}
|
186 |
|
187 |
-
|
188 |
});
|
189 |
}
|
190 |
|
191 |
-
function
|
192 |
-
|
193 |
-
js_file_clear();
|
194 |
-
js_file_delete();
|
195 |
-
file_verify();
|
196 |
-
js_enabled();
|
197 |
-
js_file_location_change();
|
198 |
-
}
|
199 |
-
|
200 |
-
function css_file_add(group, file) {
|
201 |
-
jQuery('#css_files').append('<li><input class="css_enabled" type="text" name="css_files[' + group + '][include][]" value="' + file + '" size="100" \/> <input class="css_file_delete css_enabled button" type="button" value="Delete" /> <input class="css_file_verify css_enabled button" type="button" value="Verify URI" /><\/li>');
|
202 |
-
css_file_clear();
|
203 |
-
css_file_delete();
|
204 |
-
file_verify();
|
205 |
-
css_enabled();
|
206 |
-
}
|
207 |
-
|
208 |
-
function js_group(group) {
|
209 |
-
jQuery('#js_groups').val(group);
|
210 |
-
jQuery('#js_files :text').each(function() {
|
211 |
-
var input = jQuery(this);
|
212 |
-
if (input.attr('name').indexOf('js_files[' + group) != 0) {
|
213 |
-
input.parent().hide();
|
214 |
-
} else {
|
215 |
-
input.parent().show();
|
216 |
-
}
|
217 |
-
});
|
218 |
-
js_file_clear();
|
219 |
-
}
|
220 |
|
221 |
-
function
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
input.parent().hide();
|
227 |
-
} else {
|
228 |
-
input.parent().show();
|
229 |
-
}
|
230 |
-
});
|
231 |
-
css_file_clear();
|
232 |
-
}
|
233 |
-
|
234 |
-
jQuery(function($) {
|
235 |
-
// general page
|
236 |
-
$('.enabled').click(function() {
|
237 |
-
var checked = false;
|
238 |
-
$('.enabled').each(function() {
|
239 |
-
if (this.checked) {
|
240 |
-
checked = true;
|
241 |
}
|
242 |
});
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
|
|
245 |
});
|
246 |
});
|
247 |
|
248 |
-
|
249 |
-
var checked = this.checked;
|
250 |
-
|
251 |
-
|
|
|
|
|
|
|
|
|
252 |
});
|
253 |
});
|
|
|
|
|
|
|
|
|
|
|
254 |
|
255 |
jQuery('.button-rating').click(function() {
|
256 |
window.open('http://wordpress.org/extend/plugins/w3-total-cache/', '_blank');
|
257 |
});
|
258 |
|
259 |
-
//
|
260 |
-
|
261 |
-
|
262 |
-
|
|
|
|
|
263 |
|
264 |
-
|
265 |
-
|
266 |
-
|
|
|
267 |
|
268 |
-
|
269 |
-
|
270 |
|
271 |
-
|
272 |
-
|
|
|
273 |
|
274 |
-
|
275 |
-
|
|
|
276 |
|
277 |
-
|
278 |
-
|
|
|
279 |
|
280 |
-
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
});
|
283 |
|
284 |
-
|
285 |
-
|
286 |
});
|
287 |
|
288 |
-
|
289 |
-
|
290 |
});
|
291 |
|
292 |
-
|
293 |
-
|
294 |
});
|
295 |
|
296 |
-
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
-
|
299 |
-
$('.w3tc-tab').click(function() {
|
300 |
-
$('.w3tc-tab-content').hide();
|
301 |
-
$(this.rel).show();
|
302 |
});
|
303 |
|
304 |
-
|
305 |
-
|
306 |
-
|
|
|
|
|
|
|
307 |
|
308 |
-
|
309 |
-
w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_import_library', 'cdn_import_library');
|
310 |
});
|
311 |
|
312 |
-
|
313 |
-
|
314 |
});
|
315 |
|
316 |
-
|
317 |
-
|
318 |
});
|
319 |
|
320 |
-
|
321 |
-
|
322 |
});
|
323 |
|
324 |
-
|
325 |
-
|
326 |
-
status.removeClass('w3tc-error');
|
327 |
-
status.removeClass('w3tc-success');
|
328 |
-
status.addClass('w3tc-process');
|
329 |
-
status.html('Testing...');
|
330 |
-
$.post('options-general.php?page=w3-total-cache/w3-total-cache.php', {
|
331 |
-
w3tc_action: 'cdn_test_ftp',
|
332 |
-
host: $('#cdn_ftp_host').val(),
|
333 |
-
user: $('#cdn_ftp_user').val(),
|
334 |
-
path: $('#cdn_ftp_path').val(),
|
335 |
-
pass: $('#cdn_ftp_pass').val()
|
336 |
-
}, function(data) {
|
337 |
-
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
338 |
-
status.html(data.error);
|
339 |
-
}, 'json');
|
340 |
});
|
341 |
|
342 |
-
|
343 |
-
var
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
});
|
358 |
|
359 |
-
|
360 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
status.removeClass('w3tc-error');
|
362 |
status.removeClass('w3tc-success');
|
363 |
status.addClass('w3tc-process');
|
364 |
status.html('Testing...');
|
365 |
-
$.post('options-general.php?page=w3-total-cache/w3-total-cache.php', {
|
366 |
-
w3tc_action: 'cdn_test_cf',
|
367 |
-
key: $('#cdn_cf_key').val(),
|
368 |
-
secret: $('#cdn_cf_secret').val(),
|
369 |
-
bucket: $('#cdn_cf_bucket').val(),
|
370 |
-
id: $('#cdn_cf_id').val(),
|
371 |
-
cname: $('#cdn_cf_cname').val()
|
372 |
-
}, function(data) {
|
373 |
-
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
374 |
-
status.html(data.error);
|
375 |
-
}, 'json');
|
376 |
-
});
|
377 |
|
378 |
-
|
379 |
-
var status = $('#create_bucket_s3_status');
|
380 |
-
status.removeClass('w3tc-error');
|
381 |
-
status.removeClass('w3tc-success');
|
382 |
-
status.addClass('w3tc-process');
|
383 |
-
status.html('Creating bucket...');
|
384 |
-
$.post('options-general.php?page=w3-total-cache/w3-total-cache.php', {
|
385 |
-
w3tc_action: 'cdn_create_bucket',
|
386 |
-
type: 's3',
|
387 |
-
key: $('#cdn_s3_key').val(),
|
388 |
-
secret: $('#cdn_s3_secret').val(),
|
389 |
-
bucket: $('#cdn_s3_bucket').val()
|
390 |
-
}, function(data) {
|
391 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
392 |
status.html(data.error);
|
393 |
}, 'json');
|
394 |
});
|
395 |
|
396 |
-
|
397 |
-
var
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
status.removeClass('w3tc-error');
|
399 |
status.removeClass('w3tc-success');
|
400 |
status.addClass('w3tc-process');
|
401 |
-
status.html('Creating
|
402 |
-
|
403 |
-
|
404 |
-
type: 'cf',
|
405 |
-
key: $('#cdn_cf_key').val(),
|
406 |
-
secret: $('#cdn_cf_secret').val(),
|
407 |
-
bucket: $('#cdn_cf_bucket').val()
|
408 |
-
}, function(data) {
|
409 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
410 |
status.html(data.error);
|
|
|
|
|
|
|
|
|
411 |
}, 'json');
|
412 |
});
|
413 |
|
414 |
-
|
415 |
-
var status =
|
416 |
status.removeClass('w3tc-error');
|
417 |
status.removeClass('w3tc-success');
|
418 |
status.addClass('w3tc-process');
|
419 |
status.html('Testing...');
|
420 |
-
|
421 |
w3tc_action: 'test_memcached',
|
422 |
-
servers:
|
423 |
}, function(data) {
|
424 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
425 |
status.html(data.error);
|
426 |
}, 'json');
|
427 |
});
|
428 |
|
429 |
-
|
430 |
-
|
|
|
|
|
431 |
});
|
432 |
|
433 |
-
|
434 |
-
var
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
|
|
|
|
|
|
444 |
|
445 |
-
|
446 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
447 |
url.focus();
|
448 |
return false;
|
449 |
}
|
450 |
|
451 |
-
if (name.val() == '') {
|
452 |
alert('Please enter your name in the Name field.');
|
453 |
name.focus();
|
454 |
return false;
|
455 |
}
|
456 |
|
457 |
-
if (!/^[a-z0-9_\-\.]+@[a-z0-9-\.]+\.[a-z]{2,5}$/.test(email.val().toLowerCase())) {
|
458 |
alert('Please enter valid email address in the E-Mail field.');
|
459 |
email.focus();
|
460 |
return false;
|
461 |
}
|
462 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
if (request_type.val() == '') {
|
464 |
alert('Please select request type.');
|
465 |
request_type.focus();
|
|
|
466 |
return false;
|
467 |
}
|
468 |
|
469 |
-
|
470 |
-
|
471 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
472 |
return false;
|
473 |
}
|
474 |
|
475 |
-
|
476 |
-
|
477 |
-
alert('Please enter an administrator login. Remember you can create a temporary one just for this support case.');
|
478 |
-
wp_login.focus();
|
479 |
-
return false;
|
480 |
-
}
|
481 |
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
486 |
}
|
|
|
|
|
|
|
|
|
487 |
}
|
|
|
488 |
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
}
|
|
|
|
|
495 |
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
500 |
}
|
|
|
501 |
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
506 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
}
|
|
|
508 |
|
509 |
-
|
|
|
|
|
510 |
});
|
511 |
});
|
9 |
return window.open(url, name, 'width=' + width + ',height=' + height + ',status=no,toolbar=no,menubar=no,scrollbars=yes');
|
10 |
}
|
11 |
|
12 |
+
function w3tc_input_enable(input, enabled) {
|
13 |
jQuery(input).each(function() {
|
14 |
+
var me = jQuery(this);
|
15 |
if (enabled) {
|
16 |
+
me.removeAttr('disabled');
|
17 |
} else {
|
18 |
+
me.attr('disabled', 'disabled');
|
19 |
+
}
|
20 |
+
|
21 |
+
if (enabled) {
|
22 |
+
me.next('[type=hidden]').remove();
|
23 |
+
} else {
|
24 |
+
var t = me.attr('type');
|
25 |
+
if ((t != 'radio' && t != 'checkbox') || me.is(':checked')) {
|
26 |
me.after(jQuery('<input />').attr( {
|
27 |
type: 'hidden',
|
28 |
name: me.attr('name')
|
32 |
});
|
33 |
}
|
34 |
|
35 |
+
function w3tc_minify_js_file_clear() {
|
36 |
+
if (!jQuery('#js_files :visible').size()) {
|
37 |
+
jQuery('#js_files_empty').show();
|
38 |
+
} else {
|
39 |
+
jQuery('#js_files_empty').hide();
|
40 |
+
}
|
41 |
}
|
42 |
|
43 |
+
function w3tc_minify_css_file_clear() {
|
44 |
+
if (!jQuery('#css_files :visible').size()) {
|
45 |
+
jQuery('#css_files_empty').show();
|
46 |
+
} else {
|
47 |
+
jQuery('#css_files_empty').hide();
|
48 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
}
|
50 |
|
51 |
+
function w3tc_mobile_groups_clear() {
|
52 |
+
if (!jQuery('#mobile_groups li').size()) {
|
53 |
+
jQuery('#mobile_groups_empty').show();
|
54 |
+
} else {
|
55 |
+
jQuery('#mobile_groups_empty').hide();
|
56 |
+
}
|
57 |
+
}
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
+
function w3tc_minify_js_file_add(theme, template, location, file) {
|
60 |
+
var append = jQuery('<li><table><tr><th> </th><th>File URI:</th><th>Template:</th><th colspan="3">Embed Location:</th></tr><tr><td>' + (jQuery('#js_files li').size() + 1) + '.</td><td><input class="js_enabled" type="text" name="js_files[' + theme + '][' + template + '][' + location + '][]" value="" size="70" \/></td><td><select class="js_file_template js_enabled"></select></td><td><select class="js_file_location js_enabled"><optgroup label="Blocking:"><option value="include">Embed in <head></option><option value="include-body">Embed after <body></option><option value="include-footer">Embed before </body></option></optgroup><optgroup label="Non-Blocking:"><option value="include-nb">Embed in <head></option><option value="include-body-nb">Embed after <body></option><option value="include-footer-nb">Embed before </body></option></optgroup></select></td><td><input class="js_file_delete js_enabled button" type="button" value="Delete" /> <input class="js_file_verify js_enabled button" type="button" value="Verify URI" /></td></tr></table><\/li>');
|
61 |
+
append.find('input:text').val(file);
|
62 |
+
var select = append.find('.js_file_template');
|
63 |
+
for ( var i in minify_templates[theme]) {
|
64 |
+
select.append(jQuery('<option />').val(i).html(minify_templates[theme][i]));
|
65 |
+
}
|
66 |
+
select.val(template);
|
67 |
+
jQuery(append).find('.js_file_location').val(location);
|
68 |
+
jQuery('#js_files').append(append);
|
69 |
+
w3tc_minify_js_file_clear();
|
70 |
+
}
|
71 |
|
72 |
+
function w3tc_minify_css_file_add(theme, template, file) {
|
73 |
+
var append = jQuery('<li><table><tr><th> </th><th>File URI:</th><th colspan="2">Template:</th></tr><tr><td>' + (jQuery('#css_files li').size() + 1) + '.</td><td><input class="css_enabled" type="text" name="css_files[' + theme + '][' + template + '][include][]" value="" size="70" \/></td><td><select class="css_file_template css_enabled"></select></td><td><input class="css_file_delete css_enabled button" type="button" value="Delete" /></td><td><input class="css_file_verify css_enabled button" type="button" value="Verify URI" /></td></tr></table><\/li>');
|
74 |
+
append.find('input:text').val(file);
|
75 |
+
var select = append.find('.css_file_template');
|
76 |
+
for ( var i in minify_templates[theme]) {
|
77 |
+
select.append(jQuery('<option />').val(i).html(minify_templates[theme][i]));
|
78 |
+
}
|
79 |
+
select.val(template);
|
80 |
+
jQuery('#css_files').append(append);
|
81 |
+
w3tc_minify_css_file_clear();
|
82 |
+
}
|
83 |
|
84 |
+
function w3tc_minify_js_theme(theme) {
|
85 |
+
jQuery('#js_themes').val(theme);
|
86 |
+
jQuery('#js_files :text').each(function() {
|
87 |
+
var input = jQuery(this);
|
88 |
+
if (input.attr('name').indexOf('js_files[' + theme + ']') != 0) {
|
89 |
+
input.parents('li').hide();
|
90 |
+
} else {
|
91 |
+
input.parents('li').show();
|
92 |
}
|
93 |
});
|
94 |
+
w3tc_minify_js_file_clear();
|
95 |
+
}
|
96 |
|
97 |
+
function w3tc_minify_css_theme(theme) {
|
98 |
+
jQuery('#css_themes').val(theme);
|
99 |
jQuery('#css_files :text').each(function() {
|
100 |
+
var input = jQuery(this);
|
101 |
+
if (input.attr('name').indexOf('css_files[' + theme + ']') != 0) {
|
102 |
+
input.parents('li').hide();
|
103 |
+
} else {
|
104 |
+
input.parents('li').show();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
}
|
106 |
});
|
107 |
+
w3tc_minify_css_file_clear();
|
108 |
+
}
|
109 |
|
110 |
+
function w3tc_cdn_get_cnames() {
|
111 |
+
var cnames = [];
|
|
|
|
|
112 |
|
113 |
+
jQuery('#cdn_cnames input[type=text]').each(function() {
|
114 |
+
var cname = jQuery(this).val();
|
|
|
|
|
|
|
115 |
|
116 |
+
if (cname) {
|
117 |
+
var match = /^\*\.(.*)$/.exec(cname);
|
|
|
|
|
118 |
|
119 |
+
if (match) {
|
120 |
+
cnames = [];
|
121 |
+
for ( var i = 1; i <= 10; i++) {
|
122 |
+
cnames.push('cdn' + i + '.' + match[1]);
|
123 |
+
}
|
124 |
+
return false;
|
125 |
+
}
|
126 |
|
127 |
+
cnames.push(cname);
|
128 |
+
}
|
129 |
+
});
|
|
|
130 |
|
131 |
+
return cnames;
|
132 |
}
|
133 |
|
134 |
+
function w3tc_cdn_cnames_assign() {
|
135 |
+
var li = jQuery('#cdn_cnames li'), size = li.size();
|
|
|
|
|
|
|
|
|
|
|
136 |
|
137 |
+
if (size > 1) {
|
138 |
+
li.eq(0).find('.cdn_cname_delete').show();
|
|
|
139 |
} else {
|
140 |
+
li.eq(0).find('.cdn_cname_delete').hide();
|
141 |
}
|
|
|
142 |
|
143 |
+
jQuery(li).each(function(index) {
|
144 |
+
var label = '';
|
|
|
|
|
|
|
145 |
|
146 |
+
if (size > 1) {
|
147 |
+
switch (index) {
|
148 |
+
case 0:
|
149 |
+
label = '(reserved for CSS)';
|
150 |
+
break;
|
151 |
|
152 |
+
case 1:
|
153 |
+
label = '(reserved for JS in <head>)';
|
154 |
+
break;
|
|
|
|
|
|
|
|
|
|
|
155 |
|
156 |
+
case 2:
|
157 |
+
label = '(reserved for JS after <body>)';
|
158 |
+
break;
|
159 |
|
160 |
+
case 3:
|
161 |
+
label = '(reserved for JS before </body>)';
|
162 |
+
break;
|
|
|
|
|
|
|
163 |
}
|
164 |
}
|
165 |
|
166 |
+
jQuery(this).find('span').text(label);
|
167 |
});
|
168 |
}
|
169 |
|
170 |
+
function w3tc_toggle(name) {
|
171 |
+
var id = '#' + name, cls = '.' + name;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
|
173 |
+
jQuery(cls).click(function() {
|
174 |
+
var checked = true;
|
175 |
+
jQuery(cls).each(function() {
|
176 |
+
if (!jQuery(this).is(':checked')) {
|
177 |
+
checked = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
}
|
179 |
});
|
180 |
+
jQuery(id).each(function() {
|
181 |
+
if (checked) {
|
182 |
+
jQuery(this).attr('checked', 'checked');
|
183 |
+
} else {
|
184 |
+
jQuery(this).removeAttr('checked');
|
185 |
+
}
|
186 |
});
|
187 |
});
|
188 |
|
189 |
+
jQuery(id).click(function() {
|
190 |
+
var checked = jQuery(this).is(':checked');
|
191 |
+
jQuery(cls).each(function() {
|
192 |
+
if (checked) {
|
193 |
+
jQuery(this).attr('checked', 'checked');
|
194 |
+
} else {
|
195 |
+
jQuery(this).removeAttr('checked');
|
196 |
+
}
|
197 |
});
|
198 |
});
|
199 |
+
}
|
200 |
+
|
201 |
+
jQuery(function() {
|
202 |
+
// general page
|
203 |
+
w3tc_toggle('enabled');
|
204 |
|
205 |
jQuery('.button-rating').click(function() {
|
206 |
window.open('http://wordpress.org/extend/plugins/w3-total-cache/', '_blank');
|
207 |
});
|
208 |
|
209 |
+
// browsercache page
|
210 |
+
w3tc_toggle('browsercache_expires');
|
211 |
+
w3tc_toggle('browsercache_cache_control');
|
212 |
+
w3tc_toggle('browsercache_etag');
|
213 |
+
w3tc_toggle('browsercache_w3tc');
|
214 |
+
w3tc_toggle('browsercache_compression');
|
215 |
|
216 |
+
// minify page
|
217 |
+
w3tc_input_enable('.html_enabled', jQuery('#html_enabled:checked').size());
|
218 |
+
w3tc_input_enable('.js_enabled', jQuery('#js_enabled:checked').size());
|
219 |
+
w3tc_input_enable('.css_enabled', jQuery('#css_enabled:checked').size());
|
220 |
|
221 |
+
w3tc_minify_js_theme(jQuery('#js_themes').val());
|
222 |
+
w3tc_minify_css_theme(jQuery('#css_themes').val());
|
223 |
|
224 |
+
jQuery('#html_enabled').click(function() {
|
225 |
+
w3tc_input_enable('.html_enabled', this.checked);
|
226 |
+
});
|
227 |
|
228 |
+
jQuery('#js_enabled').click(function() {
|
229 |
+
w3tc_input_enable('.js_enabled', jQuery(this).is(':checked'));
|
230 |
+
});
|
231 |
|
232 |
+
jQuery('#css_enabled').click(function() {
|
233 |
+
w3tc_input_enable('.css_enabled', jQuery(this).is(':checked'));
|
234 |
+
});
|
235 |
|
236 |
+
jQuery('.js_file_verify,.css_file_verify').live('click', function() {
|
237 |
+
var file = jQuery(this).parents('li').find(':text').val();
|
238 |
+
if (file == '') {
|
239 |
+
alert('Empty URI');
|
240 |
+
} else {
|
241 |
+
var url = '';
|
242 |
+
if (/^https?:\/\//.test(file)) {
|
243 |
+
url = file;
|
244 |
+
} else {
|
245 |
+
url = '/' + file;
|
246 |
+
}
|
247 |
+
w3tc_popup(url, 'file_verify');
|
248 |
+
}
|
249 |
});
|
250 |
|
251 |
+
jQuery('.js_file_template').live('change', function() {
|
252 |
+
jQuery(this).parents('li').find(':text').attr('name', 'js_files[' + jQuery('#js_themes').val() + '][' + jQuery(this).val() + '][' + jQuery(this).parents('li').find('.js_file_location').val() + '][]');
|
253 |
});
|
254 |
|
255 |
+
jQuery('.css_file_template').live('change', function() {
|
256 |
+
jQuery(this).parents('li').find(':text').attr('name', 'css_files[' + jQuery('#css_themes').val() + '][' + jQuery(this).val() + '][include][]');
|
257 |
});
|
258 |
|
259 |
+
jQuery('.js_file_location').live('change', function() {
|
260 |
+
jQuery(this).parents('li').find(':text').attr('name', 'js_files[' + jQuery('#js_themes').val() + '][' + jQuery(this).parents('li').find('.js_file_template').val() + '][' + jQuery(this).val() + '][]');
|
261 |
});
|
262 |
|
263 |
+
jQuery('.js_file_delete').live('click', function() {
|
264 |
+
var parent = jQuery(this).parents('li');
|
265 |
+
if (parent.find('input[type=text]').val() == '' || confirm('Are you sure you want to delete JS file?')) {
|
266 |
+
parent.remove();
|
267 |
+
w3tc_minify_js_file_clear();
|
268 |
+
}
|
269 |
|
270 |
+
return false;
|
|
|
|
|
|
|
271 |
});
|
272 |
|
273 |
+
jQuery('.css_file_delete').live('click', function() {
|
274 |
+
var parent = jQuery(this).parents('li');
|
275 |
+
if (parent.find('input[type=text]').val() == '' || confirm('Are you sure you want to delete CSS file?')) {
|
276 |
+
parent.remove();
|
277 |
+
w3tc_minify_css_file_clear();
|
278 |
+
}
|
279 |
|
280 |
+
return false;
|
|
|
281 |
});
|
282 |
|
283 |
+
jQuery('#js_file_add').click(function() {
|
284 |
+
w3tc_minify_js_file_add(jQuery('#js_themes').val(), 'default', 'include', '');
|
285 |
});
|
286 |
|
287 |
+
jQuery('#css_file_add').click(function() {
|
288 |
+
w3tc_minify_css_file_add(jQuery('#css_themes').val(), 'default', '');
|
289 |
});
|
290 |
|
291 |
+
jQuery('#js_themes').change(function() {
|
292 |
+
w3tc_minify_js_theme(jQuery(this).val());
|
293 |
});
|
294 |
|
295 |
+
jQuery('#css_themes').change(function() {
|
296 |
+
w3tc_minify_css_theme(jQuery(this).val());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
});
|
298 |
|
299 |
+
jQuery('#minify_form').submit(function() {
|
300 |
+
var js = [], css = [], invalid_js = [], invalid_css = [], duplicate = false, query_js = [], query_css = [];
|
301 |
+
|
302 |
+
jQuery('#js_files :text').each(function() {
|
303 |
+
var v = jQuery(this).val(), n = jQuery(this).attr('name'), c = v + n, g = '';
|
304 |
+
var match = /js_files\[([a-z0-9_\/]+)\]/.exec(n);
|
305 |
+
if (match) {
|
306 |
+
g = '[' + jQuery('#js_themes option[value=' + match[1] + ']').text() + '] ' + v;
|
307 |
+
}
|
308 |
+
if (v != '') {
|
309 |
+
for ( var i = 0; i < js.length; i++) {
|
310 |
+
if (js[i] == c) {
|
311 |
+
duplicate = true;
|
312 |
+
break;
|
313 |
+
}
|
314 |
+
}
|
315 |
+
|
316 |
+
js.push(c);
|
317 |
+
|
318 |
+
var qindex = v.indexOf('?');
|
319 |
+
if (qindex != -1) {
|
320 |
+
if (!/^https?:\/\//.test(v)) {
|
321 |
+
query_js.push(g);
|
322 |
+
}
|
323 |
+
v = v.substr(0, qindex);
|
324 |
+
} else if (!/\.js$/.test(v)) {
|
325 |
+
invalid_js.push(g);
|
326 |
+
}
|
327 |
+
}
|
328 |
+
});
|
329 |
+
|
330 |
+
jQuery('#css_files :text').each(function() {
|
331 |
+
var v = jQuery(this).val(), n = jQuery(this).attr('name'), c = v + n, g = '';
|
332 |
+
var match = /css_files\[([a-z0-9_\/]+)\]/.exec(n);
|
333 |
+
if (match) {
|
334 |
+
g = '[' + jQuery('#css_themes option[value=' + match[1] + ']').text() + '] ' + v;
|
335 |
+
}
|
336 |
+
if (v != '') {
|
337 |
+
for ( var i = 0; i < css.length; i++) {
|
338 |
+
if (css[i] == c) {
|
339 |
+
duplicate = true;
|
340 |
+
break;
|
341 |
+
}
|
342 |
+
}
|
343 |
+
|
344 |
+
css.push(c);
|
345 |
+
|
346 |
+
var qindex = v.indexOf('?');
|
347 |
+
if (qindex != -1) {
|
348 |
+
if (!/^https?:\/\//.test(v)) {
|
349 |
+
query_css.push(g);
|
350 |
+
}
|
351 |
+
v = v.substr(0, qindex);
|
352 |
+
} else if (!/\.css$/.test(v)) {
|
353 |
+
invalid_css.push(g);
|
354 |
+
}
|
355 |
+
}
|
356 |
+
});
|
357 |
+
|
358 |
+
if (jQuery('#js_enabled:checked').size()) {
|
359 |
+
if (invalid_js.length && !confirm('The following files have invalid JS file extension:\r\n\r\n' + invalid_js.join('\r\n') + '\r\n\r\nAre you confident these files contain valid JS code?')) {
|
360 |
+
return false;
|
361 |
+
}
|
362 |
+
|
363 |
+
if (query_js.length) {
|
364 |
+
alert('We recommend using the entire URI for files with query string (GET) variables. You entered:\r\n\r\n' + query_js.join('\r\n'));
|
365 |
+
return false;
|
366 |
+
}
|
367 |
+
}
|
368 |
+
|
369 |
+
if (jQuery('#css_enabled:checked').size()) {
|
370 |
+
if (invalid_css.length && !confirm('The following files have invalid CSS file extension:\r\n\r\n' + invalid_css.join('\r\n') + '\r\n\r\nAre you confident these files contain valid CSS code?')) {
|
371 |
+
return false;
|
372 |
+
}
|
373 |
+
|
374 |
+
if (query_css.length) {
|
375 |
+
alert('We recommend using the entire URI for files with query string (GET) variables. You entered:\r\n\r\n' + query_css.join('\r\n'));
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
}
|
379 |
+
|
380 |
+
if (duplicate) {
|
381 |
+
alert('Duplicate files have been found in your minify settings, please check your settings and re-save.');
|
382 |
+
return false;
|
383 |
+
}
|
384 |
+
|
385 |
+
return true;
|
386 |
});
|
387 |
|
388 |
+
// CDN
|
389 |
+
jQuery('.w3tc-tab').click(function() {
|
390 |
+
jQuery('.w3tc-tab-content').hide();
|
391 |
+
jQuery(this.rel).show();
|
392 |
+
});
|
393 |
+
|
394 |
+
jQuery('#cdn_export_library').click(function() {
|
395 |
+
w3tc_popup('admin.php?page=w3tc_cdn&w3tc_action=cdn_export_library', 'cdn_export_library');
|
396 |
+
});
|
397 |
+
|
398 |
+
jQuery('#cdn_import_library').click(function() {
|
399 |
+
w3tc_popup('admin.php?page=w3tc_cdn&w3tc_action=cdn_import_library', 'cdn_import_library');
|
400 |
+
});
|
401 |
+
|
402 |
+
jQuery('#cdn_queue').click(function() {
|
403 |
+
w3tc_popup('admin.php?page=w3tc_cdn&w3tc_action=cdn_queue', 'cdn_queue');
|
404 |
+
});
|
405 |
+
|
406 |
+
jQuery('#cdn_rename_domain').click(function() {
|
407 |
+
w3tc_popup('admin.php?page=w3tc_cdn&w3tc_action=cdn_rename_domain', 'cdn_rename_domain');
|
408 |
+
});
|
409 |
+
|
410 |
+
jQuery('.cdn_export').click(function() {
|
411 |
+
w3tc_popup('admin.php?page=w3tc_cdn&w3tc_action=cdn_export&cdn_export_type=' + this.name, 'cdn_export_' + this.name);
|
412 |
+
});
|
413 |
+
|
414 |
+
jQuery('#cdn_test').click(function() {
|
415 |
+
var me = jQuery(this);
|
416 |
+
var cnames = w3tc_cdn_get_cnames();
|
417 |
+
var params = {
|
418 |
+
w3tc_action: 'cdn_test'
|
419 |
+
};
|
420 |
+
|
421 |
+
switch (true) {
|
422 |
+
case me.hasClass('cdn_mirror'):
|
423 |
+
jQuery.extend(params, {
|
424 |
+
engine: 'mirror',
|
425 |
+
'config[domain][]': cnames
|
426 |
+
});
|
427 |
+
break;
|
428 |
+
|
429 |
+
case me.hasClass('cdn_netdna'):
|
430 |
+
jQuery.extend(params, {
|
431 |
+
engine: 'netdna',
|
432 |
+
'config[domain][]': cnames
|
433 |
+
});
|
434 |
+
break;
|
435 |
+
|
436 |
+
case me.hasClass('cdn_ftp'):
|
437 |
+
jQuery.extend(params, {
|
438 |
+
engine: 'ftp',
|
439 |
+
'config[host]': jQuery('#cdn_ftp_host').val(),
|
440 |
+
'config[user]': jQuery('#cdn_ftp_user').val(),
|
441 |
+
'config[path]': jQuery('#cdn_ftp_path').val(),
|
442 |
+
'config[pass]': jQuery('#cdn_ftp_pass').val(),
|
443 |
+
'config[pasv]': jQuery('#cdn_ftp_pasv:checked').size(),
|
444 |
+
'config[domain][]': cnames
|
445 |
+
});
|
446 |
+
break;
|
447 |
+
|
448 |
+
case me.hasClass('cdn_s3'):
|
449 |
+
jQuery.extend(params, {
|
450 |
+
engine: 's3',
|
451 |
+
'config[key]': jQuery('#cdn_s3_key').val(),
|
452 |
+
'config[secret]': jQuery('#cdn_s3_secret').val(),
|
453 |
+
'config[bucket]': jQuery('#cdn_s3_bucket').val(),
|
454 |
+
'config[cname][]': cnames
|
455 |
+
});
|
456 |
+
break;
|
457 |
+
|
458 |
+
case me.hasClass('cdn_cf'):
|
459 |
+
jQuery.extend(params, {
|
460 |
+
engine: 'cf',
|
461 |
+
'config[key]': jQuery('#cdn_cf_key').val(),
|
462 |
+
'config[secret]': jQuery('#cdn_cf_secret').val(),
|
463 |
+
'config[bucket]': jQuery('#cdn_cf_bucket').val(),
|
464 |
+
'config[id]': jQuery('#cdn_cf_id').val(),
|
465 |
+
'config[cname][]': cnames
|
466 |
+
});
|
467 |
+
break;
|
468 |
+
|
469 |
+
case me.hasClass('cdn_rscf'):
|
470 |
+
jQuery.extend(params, {
|
471 |
+
engine: 'rscf',
|
472 |
+
'config[user]': jQuery('#cdn_rscf_user').val(),
|
473 |
+
'config[key]': jQuery('#cdn_rscf_key').val(),
|
474 |
+
'config[container]': jQuery('#cdn_rscf_container').val(),
|
475 |
+
'config[id]': jQuery('#cdn_rscf_id').val(),
|
476 |
+
'config[cname][]': cnames
|
477 |
+
});
|
478 |
+
break;
|
479 |
+
}
|
480 |
+
|
481 |
+
var status = jQuery('#cdn_test_status');
|
482 |
status.removeClass('w3tc-error');
|
483 |
status.removeClass('w3tc-success');
|
484 |
status.addClass('w3tc-process');
|
485 |
status.html('Testing...');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
486 |
|
487 |
+
jQuery.post('admin.php?page=w3tc_general', params, function(data) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
488 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
489 |
status.html(data.error);
|
490 |
}, 'json');
|
491 |
});
|
492 |
|
493 |
+
jQuery('#cdn_create_container').click(function() {
|
494 |
+
var me = jQuery(this);
|
495 |
+
var cnames = w3tc_cdn_get_cnames();
|
496 |
+
var container_id = null;
|
497 |
+
var params = {
|
498 |
+
w3tc_action: 'cdn_create_container'
|
499 |
+
};
|
500 |
+
|
501 |
+
switch (true) {
|
502 |
+
case me.hasClass('cdn_s3'):
|
503 |
+
jQuery.extend(params, {
|
504 |
+
engine: 's3',
|
505 |
+
'config[key]': jQuery('#cdn_s3_key').val(),
|
506 |
+
'config[secret]': jQuery('#cdn_s3_secret').val(),
|
507 |
+
'config[bucket]': jQuery('#cdn_s3_bucket').val(),
|
508 |
+
'config[cname][]': cnames
|
509 |
+
});
|
510 |
+
break;
|
511 |
+
|
512 |
+
case me.hasClass('cdn_cf'):
|
513 |
+
container_id = jQuery('#cdn_cf_id');
|
514 |
+
|
515 |
+
jQuery.extend(params, {
|
516 |
+
engine: 'cf',
|
517 |
+
'config[key]': jQuery('#cdn_cf_key').val(),
|
518 |
+
'config[secret]': jQuery('#cdn_cf_secret').val(),
|
519 |
+
'config[bucket]': jQuery('#cdn_cf_bucket').val(),
|
520 |
+
'config[cname][]': cnames
|
521 |
+
});
|
522 |
+
break;
|
523 |
+
|
524 |
+
case me.hasClass('cdn_rscf'):
|
525 |
+
container_id = jQuery('#cdn_rscf_id');
|
526 |
+
|
527 |
+
jQuery.extend(params, {
|
528 |
+
engine: 'rscf',
|
529 |
+
'config[user]': jQuery('#cdn_rscf_user').val(),
|
530 |
+
'config[key]': jQuery('#cdn_rscf_key').val(),
|
531 |
+
'config[container]': jQuery('#cdn_rscf_container').val(),
|
532 |
+
'config[cname][]': cnames
|
533 |
+
});
|
534 |
+
break;
|
535 |
+
}
|
536 |
+
|
537 |
+
var status = jQuery('#cdn_create_container_status');
|
538 |
status.removeClass('w3tc-error');
|
539 |
status.removeClass('w3tc-success');
|
540 |
status.addClass('w3tc-process');
|
541 |
+
status.html('Creating...');
|
542 |
+
|
543 |
+
jQuery.post('admin.php?page=w3tc_general', params, function(data) {
|
|
|
|
|
|
|
|
|
|
|
544 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
545 |
status.html(data.error);
|
546 |
+
|
547 |
+
if (container_id && container_id.size() && data.container_id) {
|
548 |
+
container_id.val(data.container_id);
|
549 |
+
}
|
550 |
}, 'json');
|
551 |
});
|
552 |
|
553 |
+
jQuery('#memcached_test').click(function() {
|
554 |
+
var status = jQuery('#memcached_test_status');
|
555 |
status.removeClass('w3tc-error');
|
556 |
status.removeClass('w3tc-success');
|
557 |
status.addClass('w3tc-process');
|
558 |
status.html('Testing...');
|
559 |
+
jQuery.post('admin.php?page=w3tc_general', {
|
560 |
w3tc_action: 'test_memcached',
|
561 |
+
servers: jQuery('#memcached_servers').val()
|
562 |
}, function(data) {
|
563 |
status.addClass(data.result ? 'w3tc-success' : 'w3tc-error');
|
564 |
status.html(data.error);
|
565 |
}, 'json');
|
566 |
});
|
567 |
|
568 |
+
// CDN cnames
|
569 |
+
jQuery('#cdn_cname_add').click(function() {
|
570 |
+
jQuery('#cdn_cnames').append('<li><input type="text" name="cdn_cnames[]" value="" size="30" /> <input class="button cdn_cname_delete" type="button" value="Delete" /> <span></span></li>');
|
571 |
+
w3tc_cdn_cnames_assign();
|
572 |
});
|
573 |
|
574 |
+
jQuery('.cdn_cname_delete').live('click', function() {
|
575 |
+
var p = jQuery(this).parent();
|
576 |
+
if (p.find('input[type=text]').val() == '' || confirm('Are you sure you want to delete JS file?')) {
|
577 |
+
p.remove();
|
578 |
+
w3tc_cdn_cnames_assign();
|
579 |
+
}
|
580 |
+
});
|
581 |
+
|
582 |
+
// support tabs
|
583 |
+
jQuery('#support_more_files').live('click', function() {
|
584 |
+
jQuery(this).before('<input type="file" name="files[]" /><br />');
|
585 |
+
|
586 |
+
return false;
|
587 |
+
});
|
588 |
|
589 |
+
jQuery('#support_form').live('submit', function() {
|
590 |
+
var url = jQuery('.required #support_url');
|
591 |
+
var name = jQuery('.required #support_name');
|
592 |
+
var email = jQuery('.required #support_email');
|
593 |
+
var phone = jQuery('.required #support_phone');
|
594 |
+
var subject = jQuery('.required #support_subject');
|
595 |
+
var description = jQuery('.required #support_description');
|
596 |
+
var wp_login = jQuery('.required #support_wp_login');
|
597 |
+
var wp_password = jQuery('.required #support_wp_password');
|
598 |
+
var ftp_host = jQuery('.required #support_ftp_host');
|
599 |
+
var ftp_login = jQuery('.required #support_ftp_login');
|
600 |
+
var ftp_password = jQuery('.required #support_ftp_password');
|
601 |
+
|
602 |
+
if (url.size() && url.val() == '') {
|
603 |
+
alert('Please enter the address of your site in the Site URL field.');
|
604 |
url.focus();
|
605 |
return false;
|
606 |
}
|
607 |
|
608 |
+
if (name.size() && name.val() == '') {
|
609 |
alert('Please enter your name in the Name field.');
|
610 |
name.focus();
|
611 |
return false;
|
612 |
}
|
613 |
|
614 |
+
if (email.size() && !/^[a-z0-9_\-\.]+@[a-z0-9-\.]+\.[a-z]{2,5}$/.test(email.val().toLowerCase())) {
|
615 |
alert('Please enter valid email address in the E-Mail field.');
|
616 |
email.focus();
|
617 |
return false;
|
618 |
}
|
619 |
|
620 |
+
if (phone.size() && !/^[0-9\-\.\ \(\)\+]+$/.test(phone.val())) {
|
621 |
+
alert('Please enter your phone in the phone field.');
|
622 |
+
phone.focus();
|
623 |
+
return false;
|
624 |
+
}
|
625 |
+
|
626 |
+
if (subject.size() && subject.val() == '') {
|
627 |
+
alert('Please enter subject in the subject field.');
|
628 |
+
subject.focus();
|
629 |
+
return false;
|
630 |
+
}
|
631 |
+
|
632 |
+
if (description.size() && description.val() == '') {
|
633 |
+
alert('Please describe the issue in the issue description field.');
|
634 |
+
description.focus();
|
635 |
+
return false;
|
636 |
+
}
|
637 |
+
|
638 |
+
if (wp_login.size() && wp_login.val() == '') {
|
639 |
+
alert('Please enter an administrator login. Remember you can create a temporary one just for this support case.');
|
640 |
+
wp_login.focus();
|
641 |
+
return false;
|
642 |
+
}
|
643 |
+
|
644 |
+
if (wp_password.size() && wp_password.val() == '') {
|
645 |
+
alert('Please enter WP Admin password, be sure it\'s spelled correctly.');
|
646 |
+
wp_password.focus();
|
647 |
+
return false;
|
648 |
+
}
|
649 |
+
|
650 |
+
if (ftp_host.size() && ftp_host.val() == '') {
|
651 |
+
alert('Please enter SSH or FTP host for your site.');
|
652 |
+
ftp_host.focus();
|
653 |
+
return false;
|
654 |
+
}
|
655 |
+
|
656 |
+
if (ftp_login.size() && ftp_login.val() == '') {
|
657 |
+
alert('Please enter SSH or FTP login for your server. Remember you can create a temporary one just for this support case.');
|
658 |
+
ftp_login.focus();
|
659 |
+
return false;
|
660 |
+
}
|
661 |
+
|
662 |
+
if (ftp_password.size() && ftp_password.val() == '') {
|
663 |
+
alert('Please enter SSH or FTP password for your FTP account.');
|
664 |
+
ftp_password.focus();
|
665 |
+
return false;
|
666 |
+
}
|
667 |
+
|
668 |
+
return true;
|
669 |
+
});
|
670 |
+
|
671 |
+
jQuery('#support_request_type').live('change', function() {
|
672 |
+
var request_type = jQuery(this);
|
673 |
+
|
674 |
if (request_type.val() == '') {
|
675 |
alert('Please select request type.');
|
676 |
request_type.focus();
|
677 |
+
|
678 |
return false;
|
679 |
}
|
680 |
|
681 |
+
var action = '';
|
682 |
+
|
683 |
+
switch (request_type.val()) {
|
684 |
+
case 'bug_report':
|
685 |
+
case 'new_feature':
|
686 |
+
action = 'options_support';
|
687 |
+
break;
|
688 |
+
|
689 |
+
case 'email_support':
|
690 |
+
case 'phone_support':
|
691 |
+
case 'plugin_config':
|
692 |
+
case 'theme_config':
|
693 |
+
case 'linux_config':
|
694 |
+
action = 'options_support_payment';
|
695 |
+
break;
|
696 |
+
}
|
697 |
+
|
698 |
+
if (action) {
|
699 |
+
jQuery('#support_container').html('<div id="support_loading">Loading...</div>').load('admin.php?page=w3tc_support&w3tc_action=' + action + '&request_type=' + request_type.val() + '&ajax=1');
|
700 |
+
|
701 |
return false;
|
702 |
}
|
703 |
|
704 |
+
return true;
|
705 |
+
});
|
|
|
|
|
|
|
|
|
706 |
|
707 |
+
jQuery('#support_cancel').live('click', function() {
|
708 |
+
jQuery('#support_container').html('<div id="support_loading">Loading...</div>').load('admin.php?page=w3tc_support&w3tc_action=options_support_select&ajax=1');
|
709 |
+
});
|
710 |
+
|
711 |
+
// mobile tab
|
712 |
+
jQuery('#mobile_form').submit(function() {
|
713 |
+
var error = false;
|
714 |
+
|
715 |
+
jQuery('#mobile_groups li').each(function() {
|
716 |
+
if (jQuery(this).find(':checked').size()) {
|
717 |
+
var group = jQuery(this).find('.mobile_group').text();
|
718 |
+
var theme = jQuery(this).find(':selected').val();
|
719 |
+
var redirect = jQuery(this).find('input[type=text]').val();
|
720 |
+
var agents = jQuery.trim(jQuery(this).find('textarea').val()).split("\n");
|
721 |
+
|
722 |
+
jQuery('#mobile_groups li').each(function() {
|
723 |
+
if (jQuery(this).find(':checked').size()) {
|
724 |
+
var compare_group = jQuery(this).find('.mobile_group').text();
|
725 |
+
if (compare_group != group) {
|
726 |
+
var compare_theme = jQuery(this).find(':selected').val();
|
727 |
+
var compare_redirect = jQuery(this).find('input[type=text]').val();
|
728 |
+
var compare_agents = jQuery.trim(jQuery(this).find('textarea').val()).split("\n");
|
729 |
+
|
730 |
+
if (compare_redirect == '' && redirect == '' && compare_theme != '' && compare_theme == theme) {
|
731 |
+
alert('Duplicate theme "' + compare_theme + '" found in the group "' + group + '".');
|
732 |
+
error = true;
|
733 |
+
return false;
|
734 |
+
}
|
735 |
+
|
736 |
+
if (compare_redirect != '' && compare_redirect == redirect) {
|
737 |
+
alert('Duplicate redirect "' + compare_redirect + '" found in the group "' + group + '".');
|
738 |
+
error = true;
|
739 |
+
return false;
|
740 |
+
}
|
741 |
+
|
742 |
+
jQuery.each(compare_agents, function(index, value) {
|
743 |
+
if (jQuery.inArray(value, agents) != -1) {
|
744 |
+
alert('Duplicate stem "' + value + '" found in the group "' + compare_group + '".');
|
745 |
+
error = true;
|
746 |
+
return false;
|
747 |
+
}
|
748 |
+
});
|
749 |
+
}
|
750 |
+
}
|
751 |
+
});
|
752 |
+
|
753 |
+
if (error) {
|
754 |
+
return false;
|
755 |
+
}
|
756 |
}
|
757 |
+
});
|
758 |
+
|
759 |
+
if (error) {
|
760 |
+
return false;
|
761 |
}
|
762 |
+
});
|
763 |
|
764 |
+
jQuery('#mobile_add').click(function() {
|
765 |
+
var group = prompt('Enter group name (only "0-9", "a-z", "_" symbols are allowed).');
|
766 |
+
|
767 |
+
if (group !== null) {
|
768 |
+
group = group.toLowerCase();
|
769 |
+
group = group.replace(/[^0-9a-z_]+/g, '_');
|
770 |
+
group = group.replace(/^_+/, '');
|
771 |
+
group = group.replace(/_+$/, '');
|
772 |
+
|
773 |
+
if (group) {
|
774 |
+
jQuery('.mobile_group').each(function() {
|
775 |
+
if (jQuery(this).html() == group) {
|
776 |
+
alert('Group already exists!');
|
777 |
+
return false;
|
778 |
+
}
|
779 |
+
});
|
780 |
+
|
781 |
+
var li = jQuery('<li id="mobile_group_' + group + '"><table class="form-table"><tr><th valign="top">Group name:</th><td><span class="mobile_group_number">' + (jQuery('#mobile_groups li').size() + 1) + '.</span> <span class="mobile_group">' + group + '</span> <input type="button" class="button mobile_delete" value="Delete group" /></td></tr><tr><th><label for="mobile_groups_' + group + '_enabled">Enabled:</label></th><td><input type="hidden" name="mobile_groups[' + group + '][enabled]" value="0" /><input id="mobile_groups_' + group + '_enabled" type="checkbox" name="mobile_groups[' + group + '][enabled]" value="1" checked="checked" /></td></tr><tr><th valign="top"><label for="mobile_groups_' + group + '_theme">Theme:</label></th><td><select id="mobile_groups_' + group + '_theme" name="mobile_groups[' + group + '][theme]"><option value="">-- Pass-through --</option></select><br /><span class="description">Assign this group of user agents to a specific them. Leaving this option "Active Theme" allows any plugins you have (e.g. mobile plugins) to properly handle requests for these user agents. If the "redirect users to" field is not empty, this setting is ignored.</span></td></tr><tr><th valign="top"><label for="mobile_groups_' + group + '_redirect">Redirect users to:</label></th><td><input id="mobile_groups_' + group + '_redirect" type="text" name="mobile_groups[' + group + '][redirect]" value="" size="60" /><br /><span class="description">A 302 redirect is used to send this group of users to another hostname (domain); recommended if a 3rd party service provides a mobile version of your site.</span></td></tr><tr><th valign="top"><label for="mobile_groups_' + group + '_agents">User agents:</label></th><td><textarea id="mobile_groups_' + group + '_agents" name="mobile_groups[' + group + '][agents]" rows="10" cols="50"></textarea><br /><span class="description">Specify the user agents for this group.</span></td></tr></table></li>');
|
782 |
+
var select = li.find('select');
|
783 |
+
|
784 |
+
jQuery.each(mobile_themes, function(index, value) {
|
785 |
+
select.append(jQuery('<option />').val(index).html(value));
|
786 |
+
});
|
787 |
+
|
788 |
+
jQuery('#mobile_groups').append(li);
|
789 |
+
w3tc_mobile_groups_clear();
|
790 |
+
|
791 |
+
window.location.hash = '#mobile_group_' + group;
|
792 |
+
} else {
|
793 |
+
alert('Empty group name!');
|
794 |
}
|
795 |
+
}
|
796 |
+
});
|
797 |
|
798 |
+
jQuery('.mobile_delete').live('click', function() {
|
799 |
+
if (confirm('Are you sure want to delete this group?')) {
|
800 |
+
jQuery(this).parents('#mobile_groups li').remove();
|
801 |
+
w3tc_mobile_groups_clear();
|
802 |
+
}
|
803 |
+
});
|
804 |
+
|
805 |
+
w3tc_mobile_groups_clear();
|
806 |
+
|
807 |
+
// add sortable
|
808 |
+
if (jQuery.ui && jQuery.ui.sortable) {
|
809 |
+
jQuery('#js_files,#css_files').sortable( {
|
810 |
+
axis: 'y',
|
811 |
+
stop: function() {
|
812 |
+
jQuery(this).find('li').each(function(index) {
|
813 |
+
jQuery(this).find('td:eq(0)').html((index + 1) + '.');
|
814 |
+
});
|
815 |
}
|
816 |
+
});
|
817 |
|
818 |
+
jQuery('#cdn_cnames').sortable( {
|
819 |
+
axis: 'y',
|
820 |
+
stop: w3tc_cdn_cnames_assign
|
821 |
+
});
|
822 |
+
|
823 |
+
jQuery('#mobile_groups').sortable( {
|
824 |
+
axis: 'y',
|
825 |
+
stop: function() {
|
826 |
+
jQuery('#mobile_groups .mobile_group_number').each(function(index) {
|
827 |
+
jQuery(this).html((index + 1) + '.');
|
828 |
+
});
|
829 |
}
|
830 |
+
});
|
831 |
+
}
|
832 |
+
|
833 |
+
// show hide rules
|
834 |
+
jQuery('.w3tc-show-rules').click(function() {
|
835 |
+
var btn = jQuery(this), rules = btn.parent().find('.w3tc-rules');
|
836 |
+
|
837 |
+
if (rules.is(':visible')) {
|
838 |
+
rules.css('display', 'none');
|
839 |
+
btn.val('view code');
|
840 |
+
} else {
|
841 |
+
rules.css('display', 'block');
|
842 |
+
btn.val('hide code');
|
843 |
}
|
844 |
+
});
|
845 |
|
846 |
+
// nav
|
847 |
+
jQuery('#w3tc-nav select').change(function() {
|
848 |
+
document.location.href = 'admin.php?page=' + jQuery(this).val();
|
849 |
});
|
850 |
});
|
inc/js/popup.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
function
|
2 |
var string = '', days = 0, hours = 0, minutes = 0;
|
3 |
days = Math.floor(seconds / 86400);
|
4 |
if (days) {
|
@@ -23,7 +23,7 @@ function seconds_to_string(seconds) {
|
|
23 |
return string;
|
24 |
}
|
25 |
|
26 |
-
var
|
27 |
paused: 0,
|
28 |
limit: 25,
|
29 |
offset: 0,
|
@@ -82,7 +82,7 @@ var Cdn_Export_File = {
|
|
82 |
if (this.upload_files.length) {
|
83 |
jQuery.ajax( {
|
84 |
type: 'POST',
|
85 |
-
url: '
|
86 |
data: {
|
87 |
w3tc_action: 'cdn_export_process',
|
88 |
'files[]': this.upload_files
|
@@ -149,7 +149,7 @@ var Cdn_Export_File = {
|
|
149 |
|
150 |
timer_callback: function() {
|
151 |
this.seconds_elapsed++;
|
152 |
-
this.set_elapsed(
|
153 |
},
|
154 |
|
155 |
init: function(files, cdn_url) {
|
@@ -171,6 +171,7 @@ var Cdn_Export_File = {
|
|
171 |
me.offset = 0;
|
172 |
me.seconds_elapsed = 0;
|
173 |
me.clear_log();
|
|
|
174 |
me.set_elapsed('-');
|
175 |
}
|
176 |
me.paused = 0;
|
@@ -186,7 +187,7 @@ var Cdn_Export_File = {
|
|
186 |
}
|
187 |
};
|
188 |
|
189 |
-
var
|
190 |
paused: 0,
|
191 |
limit: 25,
|
192 |
offset: 0,
|
@@ -240,7 +241,7 @@ var Cdn_Export_Library = {
|
|
240 |
var me = this;
|
241 |
jQuery.ajax( {
|
242 |
type: 'POST',
|
243 |
-
url: '
|
244 |
data: {
|
245 |
w3tc_action: 'cdn_export_library_process',
|
246 |
limit: this.limit,
|
@@ -309,7 +310,7 @@ var Cdn_Export_Library = {
|
|
309 |
|
310 |
timer_callback: function() {
|
311 |
this.seconds_elapsed++;
|
312 |
-
this.set_elapsed(
|
313 |
},
|
314 |
|
315 |
init: function() {
|
@@ -325,6 +326,7 @@ var Cdn_Export_Library = {
|
|
325 |
me.offset = 0;
|
326 |
me.seconds_elapsed = 0;
|
327 |
me.clear_log();
|
|
|
328 |
me.set_elapsed('-');
|
329 |
}
|
330 |
me.paused = 0;
|
@@ -340,7 +342,7 @@ var Cdn_Export_Library = {
|
|
340 |
}
|
341 |
};
|
342 |
|
343 |
-
var
|
344 |
paused: 0,
|
345 |
limit: 5,
|
346 |
offset: 0,
|
@@ -426,7 +428,7 @@ var Cdn_Import_Library = {
|
|
426 |
var me = this;
|
427 |
jQuery.ajax( {
|
428 |
type: 'POST',
|
429 |
-
url: '
|
430 |
data: {
|
431 |
w3tc_action: 'cdn_import_library_process',
|
432 |
limit: this.limit,
|
@@ -497,7 +499,7 @@ var Cdn_Import_Library = {
|
|
497 |
|
498 |
timer_callback: function() {
|
499 |
this.seconds_elapsed++;
|
500 |
-
this.set_elapsed(
|
501 |
},
|
502 |
|
503 |
init: function(cdn_host) {
|
@@ -514,6 +516,7 @@ var Cdn_Import_Library = {
|
|
514 |
me.offset = 0;
|
515 |
me.seconds_elapsed = 0;
|
516 |
me.clear_log();
|
|
|
517 |
me.clear_rules();
|
518 |
me.set_elapsed('-');
|
519 |
}
|
@@ -530,7 +533,7 @@ var Cdn_Import_Library = {
|
|
530 |
}
|
531 |
};
|
532 |
|
533 |
-
var
|
534 |
paused: 0,
|
535 |
limit: 25,
|
536 |
offset: 0,
|
@@ -588,7 +591,7 @@ var Cdn_Rename_Domain = {
|
|
588 |
var me = this;
|
589 |
jQuery.ajax( {
|
590 |
type: 'POST',
|
591 |
-
url: '
|
592 |
data: {
|
593 |
w3tc_action: 'cdn_rename_domain_process',
|
594 |
names: this.get_domain_names(),
|
@@ -658,7 +661,7 @@ var Cdn_Rename_Domain = {
|
|
658 |
|
659 |
timer_callback: function() {
|
660 |
this.seconds_elapsed++;
|
661 |
-
this.set_elapsed(
|
662 |
},
|
663 |
|
664 |
init: function(cdn_host) {
|
@@ -679,6 +682,7 @@ var Cdn_Rename_Domain = {
|
|
679 |
me.offset = 0;
|
680 |
me.seconds_elapsed = 0;
|
681 |
me.clear_log();
|
|
|
682 |
me.set_elapsed('-');
|
683 |
}
|
684 |
me.paused = 0;
|
@@ -694,19 +698,19 @@ var Cdn_Rename_Domain = {
|
|
694 |
}
|
695 |
};
|
696 |
|
697 |
-
jQuery(function(
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
});
|
704 |
|
705 |
-
|
706 |
return confirm('Are you sure you want to remove this file from the queue?');
|
707 |
});
|
708 |
|
709 |
-
|
710 |
return confirm('Are you sure you want to empty the queue?');
|
711 |
});
|
712 |
-
});
|
1 |
+
function w3tc_seconds_to_string(seconds) {
|
2 |
var string = '', days = 0, hours = 0, minutes = 0;
|
3 |
days = Math.floor(seconds / 86400);
|
4 |
if (days) {
|
23 |
return string;
|
24 |
}
|
25 |
|
26 |
+
var W3tc_Popup_Cdn_Export_File = {
|
27 |
paused: 0,
|
28 |
limit: 25,
|
29 |
offset: 0,
|
82 |
if (this.upload_files.length) {
|
83 |
jQuery.ajax( {
|
84 |
type: 'POST',
|
85 |
+
url: 'admin.php?page=w3tc_cdn',
|
86 |
data: {
|
87 |
w3tc_action: 'cdn_export_process',
|
88 |
'files[]': this.upload_files
|
149 |
|
150 |
timer_callback: function() {
|
151 |
this.seconds_elapsed++;
|
152 |
+
this.set_elapsed(w3tc_seconds_to_string(this.seconds_elapsed));
|
153 |
},
|
154 |
|
155 |
init: function(files, cdn_url) {
|
171 |
me.offset = 0;
|
172 |
me.seconds_elapsed = 0;
|
173 |
me.clear_log();
|
174 |
+
me.set_progress(0);
|
175 |
me.set_elapsed('-');
|
176 |
}
|
177 |
me.paused = 0;
|
187 |
}
|
188 |
};
|
189 |
|
190 |
+
var W3tc_Popup_Cdn_Export_Library = {
|
191 |
paused: 0,
|
192 |
limit: 25,
|
193 |
offset: 0,
|
241 |
var me = this;
|
242 |
jQuery.ajax( {
|
243 |
type: 'POST',
|
244 |
+
url: 'admin.php?page=w3tc_cdn',
|
245 |
data: {
|
246 |
w3tc_action: 'cdn_export_library_process',
|
247 |
limit: this.limit,
|
310 |
|
311 |
timer_callback: function() {
|
312 |
this.seconds_elapsed++;
|
313 |
+
this.set_elapsed(w3tc_seconds_to_string(this.seconds_elapsed));
|
314 |
},
|
315 |
|
316 |
init: function() {
|
326 |
me.offset = 0;
|
327 |
me.seconds_elapsed = 0;
|
328 |
me.clear_log();
|
329 |
+
me.set_progress(0);
|
330 |
me.set_elapsed('-');
|
331 |
}
|
332 |
me.paused = 0;
|
342 |
}
|
343 |
};
|
344 |
|
345 |
+
var W3tc_Popup_Cdn_Import_Library = {
|
346 |
paused: 0,
|
347 |
limit: 5,
|
348 |
offset: 0,
|
428 |
var me = this;
|
429 |
jQuery.ajax( {
|
430 |
type: 'POST',
|
431 |
+
url: 'admin.php?page=w3tc_cdn',
|
432 |
data: {
|
433 |
w3tc_action: 'cdn_import_library_process',
|
434 |
limit: this.limit,
|
499 |
|
500 |
timer_callback: function() {
|
501 |
this.seconds_elapsed++;
|
502 |
+
this.set_elapsed(w3tc_seconds_to_string(this.seconds_elapsed));
|
503 |
},
|
504 |
|
505 |
init: function(cdn_host) {
|
516 |
me.offset = 0;
|
517 |
me.seconds_elapsed = 0;
|
518 |
me.clear_log();
|
519 |
+
me.set_progress(0);
|
520 |
me.clear_rules();
|
521 |
me.set_elapsed('-');
|
522 |
}
|
533 |
}
|
534 |
};
|
535 |
|
536 |
+
var W3tc_Popup_Cdn_Rename_Domain = {
|
537 |
paused: 0,
|
538 |
limit: 25,
|
539 |
offset: 0,
|
591 |
var me = this;
|
592 |
jQuery.ajax( {
|
593 |
type: 'POST',
|
594 |
+
url: 'admin.php?page=w3tc_cdn',
|
595 |
data: {
|
596 |
w3tc_action: 'cdn_rename_domain_process',
|
597 |
names: this.get_domain_names(),
|
661 |
|
662 |
timer_callback: function() {
|
663 |
this.seconds_elapsed++;
|
664 |
+
this.set_elapsed(w3tc_seconds_to_string(this.seconds_elapsed));
|
665 |
},
|
666 |
|
667 |
init: function(cdn_host) {
|
682 |
me.offset = 0;
|
683 |
me.seconds_elapsed = 0;
|
684 |
me.clear_log();
|
685 |
+
me.set_progress(0);
|
686 |
me.set_elapsed('-');
|
687 |
}
|
688 |
me.paused = 0;
|
698 |
}
|
699 |
};
|
700 |
|
701 |
+
jQuery(function() {
|
702 |
+
jQuery('.tab').click(function() {
|
703 |
+
jQuery('.tab').removeClass('tab-selected');
|
704 |
+
jQuery('.tab-content').hide();
|
705 |
+
jQuery(this).addClass('tab-selected');
|
706 |
+
jQuery(this.rel).show();
|
707 |
});
|
708 |
|
709 |
+
jQuery('.cdn_queue_delete').click(function() {
|
710 |
return confirm('Are you sure you want to remove this file from the queue?');
|
711 |
});
|
712 |
|
713 |
+
jQuery('.cdn_queue_empty').click(function() {
|
714 |
return confirm('Are you sure you want to empty the queue?');
|
715 |
});
|
716 |
+
});
|
inc/lightbox/minify_recommendations.phtml
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3>Minify Help Wizard</h3>
|
2 |
+
|
3 |
+
<div id="recom_container">
|
4 |
+
<p>
|
5 |
+
To get started with minify, we've identified the following external CSS and JS objects in the
|
6 |
+
<select id="recom_theme">
|
7 |
+
<?php foreach ($themes as $_theme_key => $_theme_name): ?>
|
8 |
+
<option value="<?php echo htmlspecialchars($_theme_key); ?>"<?php selected($_theme_key, $theme_key); ?>><?php echo htmlspecialchars($_theme_name); ?><?php if ($_theme_key == $theme_key): ?> (active)<?php endif; ?></option>
|
9 |
+
<?php endforeach; ?>
|
10 |
+
</select>
|
11 |
+
theme. Select "add" the files you wish to minify, then click "apply & close" to save the settings.
|
12 |
+
</p>
|
13 |
+
|
14 |
+
<h4>JavaScript:</h4>
|
15 |
+
|
16 |
+
<?php if (count($js_groups)) :?>
|
17 |
+
<ul id="recom_js_files" class="minify-files">
|
18 |
+
<?php $index = 0; foreach ($js_groups as $js_group => $js_files): ?>
|
19 |
+
<?php foreach ($js_files as $js_file): $index++; ?>
|
20 |
+
<li>
|
21 |
+
<table>
|
22 |
+
<tr>
|
23 |
+
<th class="minify-files-add">Add:</th>
|
24 |
+
<th> </th>
|
25 |
+
<th>File URI:</th>
|
26 |
+
<th>Template:</th>
|
27 |
+
<th colspan="2">Embed Location:</th>
|
28 |
+
</tr>
|
29 |
+
<tr<?php if (isset($checked_js[$js_group][$js_file])): ?> class="minify-files-exists"<?php endif; ?>>
|
30 |
+
<td class="minify-files-add">
|
31 |
+
<input type="checkbox" name="recom_js_useit" value="1"<?php checked(isset($checked_js[$js_group][$js_file]), true); ?> />
|
32 |
+
</td>
|
33 |
+
<td><?php echo $index; ?>.</td>
|
34 |
+
<td>
|
35 |
+
<input type="text" name="recom_js_file" value="<?php echo htmlspecialchars($js_file); ?>" size="70" />
|
36 |
+
</td>
|
37 |
+
<td>
|
38 |
+
<select name="recom_js_template">
|
39 |
+
<?php foreach ($templates as $template_key => $template_name): ?>
|
40 |
+
<option value="<?php echo htmlspecialchars($template_key); ?>"<?php selected($template_key, $js_group); ?>><?php echo htmlspecialchars($template_name); ?></option>
|
41 |
+
<?php endforeach; ?>
|
42 |
+
</select>
|
43 |
+
</td>
|
44 |
+
<td>
|
45 |
+
<?php $selected = (isset($locations_js[$js_group][$js_file]) ? $locations_js[$js_group][$js_file] : ''); ?>
|
46 |
+
<select name="recom_js_location">
|
47 |
+
<optgroup label="Blocking:">
|
48 |
+
<option value="include"<?php selected($selected, 'include'); ?>>Embed in <head></option>
|
49 |
+
<option value="include-body"<?php selected($selected, 'include-body'); ?>>Embed after <body></option>
|
50 |
+
<option value="include-footer"<?php selected($selected, 'include-footer'); ?>>Embed before </body></option>
|
51 |
+
</optgroup>
|
52 |
+
<optgroup label="Non-Blocking:">
|
53 |
+
<option value="include-nb"<?php selected($selected, 'include-nb'); ?>>Embed in <head></option>
|
54 |
+
<option value="include-body-nb"<?php selected($selected, 'include-body-nb'); ?>>Embed after <body></option>
|
55 |
+
<option value="include-footer-nb"<?php selected($selected, 'include-footer-nb'); ?>>Embed before </body></option>
|
56 |
+
</optgroup>
|
57 |
+
</select>
|
58 |
+
</td>
|
59 |
+
<td>
|
60 |
+
<input class="js_file_verify button" type="button" value="Verify URI" />
|
61 |
+
</td>
|
62 |
+
</tr>
|
63 |
+
</table>
|
64 |
+
</li>
|
65 |
+
<?php endforeach; ?>
|
66 |
+
<?php endforeach; ?>
|
67 |
+
</ul>
|
68 |
+
<p>
|
69 |
+
<a href="#" id="recom_js_check">Check / Uncheck All</a>
|
70 |
+
</p>
|
71 |
+
<?php else:?>
|
72 |
+
<p>No files found.</p>
|
73 |
+
<?php endif;?>
|
74 |
+
|
75 |
+
<h4>Cascading Style Sheets:</h4>
|
76 |
+
|
77 |
+
<?php if (count($css_groups)) :?>
|
78 |
+
<ul id="recom_css_files" class="minify-files">
|
79 |
+
<?php $index = 0; foreach ($css_groups as $css_group => $css_files): ?>
|
80 |
+
<?php foreach ($css_files as $css_file): $index++; ?>
|
81 |
+
<li>
|
82 |
+
<table>
|
83 |
+
<tr>
|
84 |
+
<th class="minify-files-add">Add:</th>
|
85 |
+
<th> </th>
|
86 |
+
<th>File URI:</th>
|
87 |
+
<th colspan="2">Template:</th>
|
88 |
+
</tr>
|
89 |
+
<tr<?php if (isset($checked_css[$css_group][$css_file])): ?> class="minify-files-exists"<?php endif; ?>>
|
90 |
+
<td class="minify-files-add">
|
91 |
+
<input type="checkbox" name="recom_css_useit" value="1"<?php checked(isset($checked_css[$css_group][$css_file]), true); ?> />
|
92 |
+
</td>
|
93 |
+
<td><?php echo $index; ?>.</td>
|
94 |
+
<td>
|
95 |
+
<input type="text" name="recom_css_file" value="<?php echo htmlspecialchars($css_file); ?>" size="70" />
|
96 |
+
</td>
|
97 |
+
<td>
|
98 |
+
<select name="recom_css_template">
|
99 |
+
<?php foreach ($templates as $template_key => $template_name): ?>
|
100 |
+
<option value="<?php echo htmlspecialchars($template_key); ?>"<?php selected($template_key, $css_group); ?>><?php echo htmlspecialchars($template_name); ?></option>
|
101 |
+
<?php endforeach; ?>
|
102 |
+
</select>
|
103 |
+
</td>
|
104 |
+
<td>
|
105 |
+
<input class="css_file_verify button" type="button" value="Verify URI" />
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
</table>
|
109 |
+
</li>
|
110 |
+
<?php endforeach; ?>
|
111 |
+
<?php endforeach; ?>
|
112 |
+
</ul>
|
113 |
+
<p>
|
114 |
+
<a href="#" id="recom_css_check">Check / Uncheck All</a>
|
115 |
+
</p>
|
116 |
+
<?php else:?>
|
117 |
+
<p>No files found.</p>
|
118 |
+
<?php endif;?>
|
119 |
+
|
120 |
+
<p>
|
121 |
+
<input class="recom_apply button-primary" type="button" value="Apply & close" />
|
122 |
+
</p>
|
123 |
+
|
124 |
+
<h4>Notes:</h4>
|
125 |
+
|
126 |
+
<ul>
|
127 |
+
<li>Typically minification of advertiser code, analytics/statistics or any other types of tracking code is not recommended.</li>
|
128 |
+
<li>Scripts that were not already detected above may require <a href="admin.php?page=w3tc_support&request_type=plugin_config">professional consultation</a> to implement.</li>
|
129 |
+
</ul>
|
130 |
+
</div>
|
inc/lightbox/self_test.phtml
ADDED
@@ -0,0 +1,343 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3>Compatibility Test</h3>
|
2 |
+
|
3 |
+
<div id="self_test_container">
|
4 |
+
<h4>Server Modules & Resources:</h4>
|
5 |
+
|
6 |
+
<div class="monospace">
|
7 |
+
PHP Version:
|
8 |
+
<?php if (PHP_VERSION >= 5): ?>
|
9 |
+
<span class="w3tc-test-ok"><?php echo PHP_VERSION; ?></span>
|
10 |
+
<?php else: ?>
|
11 |
+
<span class="w3tc-test-warn"><?php echo PHP_VERSION; ?> (Minify disabled)</span>;
|
12 |
+
<?php endif; ?>
|
13 |
+
<br />
|
14 |
+
|
15 |
+
PHP Timezone:
|
16 |
+
<?php if (ini_get('date.timezone')): ?>
|
17 |
+
<span class="w3tc-test-ok">OK</span>
|
18 |
+
<?php else: ?>
|
19 |
+
<span class="w3tc-test-error">Not set</span>
|
20 |
+
<?php endif; ?>
|
21 |
+
<br />
|
22 |
+
|
23 |
+
Web Server:
|
24 |
+
<?php if (stristr($_SERVER['SERVER_SOFTWARE'], 'apache') !== false): ?>
|
25 |
+
<span class="w3tc-test-ok">Apache</span>
|
26 |
+
<?php elseif (stristr($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false): ?>
|
27 |
+
<span class="w3tc-test-warn">Lite Speed</span>
|
28 |
+
<?php elseif (stristr($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false): ?>
|
29 |
+
<span class="w3tc-test-warn">nginx</span>
|
30 |
+
<?php elseif (stristr($_SERVER['SERVER_SOFTWARE'], 'lighttpd') !== false): ?>
|
31 |
+
<span class="w3tc-test-warn">lighttpd</span>
|
32 |
+
<?php elseif (stristr($_SERVER['SERVER_SOFTWARE'], 'iis') !== false): ?>
|
33 |
+
<span class="w3tc-test-warn">Microsoft IIS</span>
|
34 |
+
<?php else: ?>
|
35 |
+
<span class="w3tc-test-error">Not detected</span>
|
36 |
+
<?php endif; ?>
|
37 |
+
<br />
|
38 |
+
|
39 |
+
FTP functions:
|
40 |
+
<?php if (function_exists('ftp_connect')): ?>
|
41 |
+
<span class="w3tc-test-ok">OK</span>
|
42 |
+
<?php else: ?>
|
43 |
+
<span class="w3tc-test-error">Not installed</span>
|
44 |
+
<?php endif; ?>
|
45 |
+
(required for Self-hosted (FTP) CDN support)
|
46 |
+
<br />
|
47 |
+
|
48 |
+
Multibyte String support:
|
49 |
+
<?php if (function_exists('mb_substr')): ?>
|
50 |
+
<span class="w3tc-test-ok">OK</span>
|
51 |
+
<?php else: ?>
|
52 |
+
<span class="w3tc-test-error">Not installed</span>
|
53 |
+
<?php endif; ?>
|
54 |
+
(required for Rackspace Cloud Files support)
|
55 |
+
<br />
|
56 |
+
|
57 |
+
cURL extension:
|
58 |
+
<?php if (function_exists('curl_init')): ?>
|
59 |
+
<span class="w3tc-test-ok">OK</span>
|
60 |
+
<?php else: ?>
|
61 |
+
<span class="w3tc-test-error">Not installed</span>
|
62 |
+
<?php endif; ?>
|
63 |
+
(required for Amazon S3 support)
|
64 |
+
<br />
|
65 |
+
|
66 |
+
zlib extension:
|
67 |
+
<?php if (function_exists('gzencode')): ?>
|
68 |
+
<span class="w3tc-test-ok">OK</span>
|
69 |
+
<?php else: ?>
|
70 |
+
<span class="w3tc-test-error">Not installed</span>
|
71 |
+
<?php endif; ?>
|
72 |
+
(required for compression support)
|
73 |
+
<br />
|
74 |
+
|
75 |
+
Opcode cache:
|
76 |
+
<?php if (function_exists('apc_store')): ?>
|
77 |
+
<span class="w3tc-test-ok">APC</span>
|
78 |
+
<?php elseif (function_exists('eaccelerator_put')): ?>
|
79 |
+
<span class="w3tc-test-ok">eAccelerator</span>
|
80 |
+
<?php elseif (function_exists('xcache_set')): ?>
|
81 |
+
<span class="w3tc-test-ok">XCache</span>
|
82 |
+
<?php elseif (PHP_VERSION >= 6): ?>
|
83 |
+
<span class="w3tc-test-ok">PHP6</span>
|
84 |
+
<?php else: ?>
|
85 |
+
<span class="w3tc-test-error">Not installed</span>
|
86 |
+
<?php endif; ?>
|
87 |
+
<br />
|
88 |
+
|
89 |
+
Memcache extension:
|
90 |
+
<?php if (class_exists('Memcache')): ?>
|
91 |
+
<span class="w3tc-test-ok">OK</span>
|
92 |
+
<?php else: ?>
|
93 |
+
<span class="w3tc-test-error">Not installed</span>
|
94 |
+
<?php endif; ?>
|
95 |
+
<br />
|
96 |
+
|
97 |
+
Mime type detection:
|
98 |
+
<?php if (function_exists('finfo_open')): ?>
|
99 |
+
<span class="w3tc-test-ok">Fileinfo</span>
|
100 |
+
<?php elseif (function_exists('mime_content_type')): ?>
|
101 |
+
<span class="w3tc-test-warn">Mimetype</span>
|
102 |
+
<?php else: ?>
|
103 |
+
<span class="w3tc-test-error">Not installed</span>
|
104 |
+
<?php endif; ?>
|
105 |
+
<br />
|
106 |
+
|
107 |
+
Hash function:
|
108 |
+
<?php if (function_exists('hash')): ?>
|
109 |
+
<span class="w3tc-test-ok">hash</span>
|
110 |
+
<?php elseif (function_exists('mhash')): ?>
|
111 |
+
<span class="w3tc-test-warn">mhash</span>
|
112 |
+
<?php else: ?>
|
113 |
+
<span class="w3tc-test-error">Not installed</span>
|
114 |
+
<?php endif; ?>
|
115 |
+
(required for NetDNA purge support)
|
116 |
+
<br />
|
117 |
+
|
118 |
+
Safe mode:
|
119 |
+
<?php if (w3_to_boolean(ini_get('safe_mode'))): ?>
|
120 |
+
<span class="w3tc-test-warn">On</span>
|
121 |
+
<?php else: ?>
|
122 |
+
<span class="w3tc-test-ok">Off</span>
|
123 |
+
<?php endif; ?>
|
124 |
+
<br />
|
125 |
+
|
126 |
+
Open basedir:
|
127 |
+
<?php $open_basedir = ini_get('open_basedir'); if ($open_basedir): ?>
|
128 |
+
<span class="w3tc-test-warn">On: <?php echo htmlspecialchars($open_basedir); ?></span>
|
129 |
+
<?php else: ?>
|
130 |
+
<span class="w3tc-test-ok">Off</span>
|
131 |
+
<?php endif; ?>
|
132 |
+
<br />
|
133 |
+
|
134 |
+
zlib output compression:
|
135 |
+
<?php if (w3_to_boolean(ini_get('zlib.output_compression'))): ?>
|
136 |
+
<span class="w3tc-test-error">On</span>
|
137 |
+
<?php else: ?>
|
138 |
+
<span class="w3tc-test-ok">Off</span>
|
139 |
+
<?php endif; ?>
|
140 |
+
<br />
|
141 |
+
|
142 |
+
<?php
|
143 |
+
if (function_exists('apache_get_modules')):
|
144 |
+
$apache_modules = apache_get_modules();
|
145 |
+
else:
|
146 |
+
$apache_modules = false;
|
147 |
+
endif;
|
148 |
+
?>
|
149 |
+
mod_mime:
|
150 |
+
<?php if ($apache_modules): ?>
|
151 |
+
<?php if (in_array('mod_mime', $apache_modules)): ?>
|
152 |
+
<span class="w3tc-test-ok">OK</span>
|
153 |
+
<?php else: ?>
|
154 |
+
<span class="w3tc-test-error">Not installed</span>
|
155 |
+
<?php endif; ?>
|
156 |
+
<?php else: ?>
|
157 |
+
<span class="w3tc-test-warn">Not detected</span>
|
158 |
+
<?php endif; ?>
|
159 |
+
<br />
|
160 |
+
|
161 |
+
mod_expires:
|
162 |
+
<?php if ($apache_modules): ?>
|
163 |
+
<?php if (in_array('mod_expires', $apache_modules)): ?>
|
164 |
+
<span class="w3tc-test-ok">OK</span>
|
165 |
+
<?php else: ?>
|
166 |
+
<span class="w3tc-test-error">Not installed</span>
|
167 |
+
<?php endif; ?>
|
168 |
+
<?php else: ?>
|
169 |
+
<span class="w3tc-test-warn">Not detected</span>
|
170 |
+
<?php endif; ?>
|
171 |
+
<br />
|
172 |
+
|
173 |
+
mod_deflate / mod_gzip:
|
174 |
+
<?php if ($apache_modules): ?>
|
175 |
+
<?php if (in_array('mod_deflate', $apache_modules)): ?>
|
176 |
+
<span class="w3tc-test-ok">OK</span>
|
177 |
+
<?php else: ?>
|
178 |
+
<span class="w3tc-test-error">Not installed</span>
|
179 |
+
<?php endif; ?>
|
180 |
+
<?php else: ?>
|
181 |
+
<span class="w3tc-test-warn">Not detected</span>
|
182 |
+
<?php endif; ?>
|
183 |
+
<br />
|
184 |
+
|
185 |
+
mod_headers:
|
186 |
+
<?php if ($apache_modules): ?>
|
187 |
+
<?php if (in_array('mod_headers', $apache_modules)): ?>
|
188 |
+
<span class="w3tc-test-ok">OK</span>
|
189 |
+
<?php else: ?>
|
190 |
+
<span class="w3tc-test-error">Not installed</span>
|
191 |
+
<?php endif; ?>
|
192 |
+
<?php else: ?>
|
193 |
+
<span class="w3tc-test-warn">Not detected</span>
|
194 |
+
<?php endif; ?>
|
195 |
+
<br />
|
196 |
+
|
197 |
+
mod_env:
|
198 |
+
<?php if ($apache_modules): ?>
|
199 |
+
<?php if (in_array('mod_env', $apache_modules)): ?>
|
200 |
+
<span class="w3tc-test-ok">OK</span>
|
201 |
+
<?php else: ?>
|
202 |
+
<span class="w3tc-test-error">Not installed</span>
|
203 |
+
<?php endif; ?>
|
204 |
+
<?php else: ?>
|
205 |
+
<span class="w3tc-test-warn">Not detected</span>
|
206 |
+
<?php endif; ?>
|
207 |
+
<br />
|
208 |
+
|
209 |
+
mod_setenvif:
|
210 |
+
<?php if ($apache_modules): ?>
|
211 |
+
<?php if (in_array('mod_setenvif', $apache_modules)): ?>
|
212 |
+
<span class="w3tc-test-ok">OK</span>
|
213 |
+
<?php else: ?>
|
214 |
+
<span class="w3tc-test-error">Not installed</span>
|
215 |
+
<?php endif; ?>
|
216 |
+
<?php else: ?>
|
217 |
+
<span class="w3tc-test-warn">Not detected</span>
|
218 |
+
<?php endif; ?>
|
219 |
+
<br />
|
220 |
+
|
221 |
+
mod_rewrite:
|
222 |
+
<?php if ($apache_modules): ?>
|
223 |
+
<?php if (in_array('mod_rewrite', $apache_modules)): ?>
|
224 |
+
<span class="w3tc-test-ok">OK</span>
|
225 |
+
<?php else: ?>
|
226 |
+
<span class="w3tc-test-error">Not installed</span>
|
227 |
+
<?php endif; ?>
|
228 |
+
<?php else: ?>
|
229 |
+
<span class="w3tc-test-warn">Not detected</span>
|
230 |
+
<?php endif; ?>
|
231 |
+
</div>
|
232 |
+
|
233 |
+
<h4>WordPress Resources</h4>
|
234 |
+
|
235 |
+
<div class="monospace">
|
236 |
+
<?php echo w3_path(WP_CONTENT_DIR); ?>:
|
237 |
+
<?php if (w3_is_writable_dir(WP_CONTENT_DIR)): ?>
|
238 |
+
<span class="w3tc-test-ok">Write-able</span>
|
239 |
+
<?php else: ?>
|
240 |
+
<span class="w3tc-test-error">Not write-able</span>
|
241 |
+
<?php endif; ?>
|
242 |
+
<br />
|
243 |
+
|
244 |
+
<?php
|
245 |
+
$home_root = w3_get_home_root();
|
246 |
+
$htaccess_home_path = $home_root . '/.htaccess';
|
247 |
+
|
248 |
+
if (file_exists($htaccess_home_path)): ?>
|
249 |
+
<?php echo htmlspecialchars($htaccess_home_path); ?>
|
250 |
+
<?php if (w3_is_writable($htaccess_home_path)): ?>
|
251 |
+
<span class="w3tc-test-ok">Write-able</span>
|
252 |
+
<?php else: ?>
|
253 |
+
<span class="w3tc-test-error">Not write-able</span>
|
254 |
+
<?php endif; ?>
|
255 |
+
<?php else: ?>
|
256 |
+
<?php echo htmlspecialchars($home_root); ?>
|
257 |
+
<?php if (w3_is_writable_dir($home_root)): ?>
|
258 |
+
<span class="w3tc-test-ok">Write-able</span>
|
259 |
+
<?php else: ?>
|
260 |
+
<span class="w3tc-test-error">Not write-able</span>
|
261 |
+
<?php endif; ?>
|
262 |
+
<?php endif; ?>
|
263 |
+
<br />
|
264 |
+
|
265 |
+
<?php
|
266 |
+
$document_root = w3_get_document_root();
|
267 |
+
$htaccess_docroot_path = $document_root . '/.htaccess';
|
268 |
+
|
269 |
+
if ($document_root != $home_root): if (file_exists($htaccess_docroot_path)): ?>
|
270 |
+
<?php echo htmlspecialchars($htaccess_docroot_path); ?>
|
271 |
+
<?php if (w3_is_writable($htaccess_docroot_path)): ?>
|
272 |
+
<span class="w3tc-test-ok">Write-able</span>
|
273 |
+
<?php else: ?>
|
274 |
+
<span class="w3tc-test-error">Not write-able</span>
|
275 |
+
<?php endif; ?>
|
276 |
+
<?php else: ?>
|
277 |
+
<?php echo htmlspecialchars($document_root); ?>
|
278 |
+
<?php if (w3_is_writable_dir($document_root)): ?>
|
279 |
+
<span class="w3tc-test-ok">Write-able</span>
|
280 |
+
<?php else: ?>
|
281 |
+
<span class="w3tc-test-error">Not write-able</span>
|
282 |
+
<?php endif; ?>
|
283 |
+
<?php endif; endif; ?>
|
284 |
+
<br />
|
285 |
+
|
286 |
+
Uploads directory:
|
287 |
+
<?php $uploads_dir = @wp_upload_dir(); if (!empty($uploads_dir['error'])): ?>
|
288 |
+
<span class="w3tc-test-error">Error: <?php echo htmlspecialchars($uploads_dir['error']); ?></span>
|
289 |
+
<?php elseif (!w3_is_writable_dir($uploads_dir['path'])): ?>
|
290 |
+
<span class="w3tc-test-error">Not write-able</span>
|
291 |
+
<?php else: ?>
|
292 |
+
<span class="w3tc-test-ok">Write-able</span>
|
293 |
+
<?php endif; ?>
|
294 |
+
<br />
|
295 |
+
|
296 |
+
WP_CACHE define:
|
297 |
+
<?php if (defined('WP_CACHE') && WP_CACHE): ?>
|
298 |
+
<span class="w3tc-test-ok">OK</span>
|
299 |
+
<?php else: ?>
|
300 |
+
<span class="w3tc-test-error">Not defined</span>
|
301 |
+
<?php endif; ?>
|
302 |
+
<br />
|
303 |
+
|
304 |
+
Fancy permalinks:
|
305 |
+
<?php if (get_option('permalink_structure')): ?>
|
306 |
+
<span class="w3tc-test-ok">OK</span>
|
307 |
+
<?php else: ?>
|
308 |
+
<span class="w3tc-test-warn">Disabled</span>
|
309 |
+
<?php endif; ?>
|
310 |
+
<br />
|
311 |
+
|
312 |
+
Network mode:
|
313 |
+
<?php if (w3_is_multisite()): ?>
|
314 |
+
<span class="w3tc-test-ok">On</span>
|
315 |
+
<?php else: ?>
|
316 |
+
<span class="w3tc-test-ok">Off</span>
|
317 |
+
<?php endif; ?>
|
318 |
+
<br />
|
319 |
+
|
320 |
+
<?php if (w3_is_multisite()): ?>
|
321 |
+
VHOST mode:
|
322 |
+
<?php if (w3_is_vhost()): ?>
|
323 |
+
<span class="w3tc-test-ok">On</span>
|
324 |
+
<?php else: ?>
|
325 |
+
<span class="w3tc-test-ok">Off</span>
|
326 |
+
<?php endif; ?>
|
327 |
+
<?php endif; ?>
|
328 |
+
</div>
|
329 |
+
|
330 |
+
<fieldset>
|
331 |
+
<legend>Legend</legend>
|
332 |
+
|
333 |
+
<p>
|
334 |
+
<span class="w3tc-test-ok">Green</span> - Good<br />
|
335 |
+
<span class="w3tc-test-warn">Orange</span> - OK<br />
|
336 |
+
<span class="w3tc-test-error">Red</span> - Bad<br />
|
337 |
+
</p>
|
338 |
+
</fieldset>
|
339 |
+
|
340 |
+
<p>
|
341 |
+
<input class="button-primary" type="button" value="Close" />
|
342 |
+
</p>
|
343 |
+
</div>
|
inc/lightbox/support_us.phtml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
<p>We noticed you've been using W3 Total cache for at least 30 days, would you like to help us improve WordPress?</p>
|
4 |
|
5 |
-
<form action="
|
6 |
<p>
|
7 |
<label>
|
8 |
Link to us:
|
2 |
|
3 |
<p>We noticed you've been using W3 Total cache for at least 30 days, would you like to help us improve WordPress?</p>
|
4 |
|
5 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>&save_support_us" method="post">
|
6 |
<p>
|
7 |
<label>
|
8 |
Link to us:
|
inc/lightbox/tweet.phtml
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
<p>This is the message that will be tweeted:</p>
|
6 |
|
7 |
-
<blockquote>I
|
8 |
|
9 |
<form action="">
|
10 |
<table class="form-table">
|
@@ -17,9 +17,9 @@
|
|
17 |
<td><input id="tweet_password" type="password" size="30" /></td>
|
18 |
</tr>
|
19 |
</table>
|
20 |
-
|
21 |
<p class="submit">
|
22 |
-
<input type="submit"
|
23 |
</p>
|
24 |
</form>
|
25 |
|
4 |
|
5 |
<p>This is the message that will be tweeted:</p>
|
6 |
|
7 |
+
<blockquote>YES! I optimized my #wordpress site's performance using the W3 Total Cache #plugin by @<a href="http://twitter.com/w3edge" target="_blank">w3edge</a>. Check it out! <a href="http://j.mp/A69xX" target="_blank">http://j.mp/A69xX</a></blockquote>
|
8 |
|
9 |
<form action="">
|
10 |
<table class="form-table">
|
17 |
<td><input id="tweet_password" type="password" size="30" /></td>
|
18 |
</tr>
|
19 |
</table>
|
20 |
+
|
21 |
<p class="submit">
|
22 |
+
<input type="submit" class="button-primary" value="Tweet!" />
|
23 |
</p>
|
24 |
</form>
|
25 |
|
inc/mime/all.php
ADDED
@@ -0,0 +1,624 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* All possible mime types
|
5 |
+
*/
|
6 |
+
return array(
|
7 |
+
'3dml' => 'text/vnd.in3d.3dml',
|
8 |
+
'3g2' => 'video/3gpp2',
|
9 |
+
'3gp' => 'video/3gpp',
|
10 |
+
'aab|x32|u32|vox' => 'application/x-authorware-bin',
|
11 |
+
'aac' => 'audio/x-aac',
|
12 |
+
'aam' => 'application/x-authorware-map',
|
13 |
+
'aas' => 'application/x-authorware-seg',
|
14 |
+
'abw' => 'application/x-abiword',
|
15 |
+
'acc' => 'application/vnd.americandynamics.acc',
|
16 |
+
'ace' => 'application/x-ace-compressed',
|
17 |
+
'acu' => 'application/vnd.acucobol',
|
18 |
+
'adp' => 'audio/adpcm',
|
19 |
+
'aep' => 'application/vnd.audiograph',
|
20 |
+
'afp|listafp|list3820' => 'application/vnd.ibm.modcap',
|
21 |
+
'aif|aiff|aifc' => 'audio/x-aiff',
|
22 |
+
'air' => 'application/vnd.adobe.air-application-installer-package+zip',
|
23 |
+
'ai|eps|ps' => 'application/postscript',
|
24 |
+
'ami' => 'application/vnd.amiga.ami',
|
25 |
+
'apk' => 'application/vnd.android.package-archive',
|
26 |
+
'application' => 'application/x-ms-application',
|
27 |
+
'apr' => 'application/vnd.lotus-approach',
|
28 |
+
'asc|sig' => 'application/pgp-signature',
|
29 |
+
'asf|asx' => 'video/x-ms-asf',
|
30 |
+
'aso' => 'application/vnd.accpac.simply.aso',
|
31 |
+
'atc|acutc' => 'application/vnd.acucorp',
|
32 |
+
'atom' => 'application/atom+xml',
|
33 |
+
'atomcat' => 'application/atomcat+xml',
|
34 |
+
'atomsvc' => 'application/atomsvc+xml',
|
35 |
+
'atx' => 'application/vnd.antix.game-component',
|
36 |
+
'au|snd' => 'audio/basic',
|
37 |
+
'avi' => 'video/x-msvideo',
|
38 |
+
'aw' => 'application/applixware',
|
39 |
+
'azf' => 'application/vnd.airzip.filesecure.azf',
|
40 |
+
'azs' => 'application/vnd.airzip.filesecure.azs',
|
41 |
+
'azw' => 'application/vnd.amazon.ebook',
|
42 |
+
'bcpio' => 'application/x-bcpio',
|
43 |
+
'bdf' => 'application/x-font-bdf',
|
44 |
+
'bdm' => 'application/vnd.syncml.dm+wbxml',
|
45 |
+
'bh2' => 'application/vnd.fujitsu.oasysprs',
|
46 |
+
'bin|dms|lha|lrf|lzh|so|iso|dmg|dist|distz|pkg|bpk|dump|elc|deploy' => 'application/octet-stream',
|
47 |
+
'bmi' => 'application/vnd.bmi',
|
48 |
+
'bmp' => 'image/bmp',
|
49 |
+
'box' => 'application/vnd.previewsystems.box',
|
50 |
+
'btif' => 'image/prs.btif',
|
51 |
+
'bz' => 'application/x-bzip',
|
52 |
+
'bz2|boz' => 'application/x-bzip2',
|
53 |
+
'c4g|c4d|c4f|c4p|c4u' => 'application/vnd.clonk.c4group',
|
54 |
+
'cab' => 'application/vnd.ms-cab-compressed',
|
55 |
+
'car' => 'application/vnd.curl.car',
|
56 |
+
'cat' => 'application/vnd.ms-pki.seccat',
|
57 |
+
'ccxml' => 'application/ccxml+xml',
|
58 |
+
'cdbcmsg' => 'application/vnd.contact.cmsg',
|
59 |
+
'cdkey' => 'application/vnd.mediastation.cdkey',
|
60 |
+
'cdx' => 'chemical/x-cdx',
|
61 |
+
'cdxml' => 'application/vnd.chemdraw+xml',
|
62 |
+
'cdy' => 'application/vnd.cinderella',
|
63 |
+
'cer' => 'application/pkix-cert',
|
64 |
+
'cgm' => 'image/cgm',
|
65 |
+
'chat' => 'application/x-chat',
|
66 |
+
'chm' => 'application/vnd.ms-htmlhelp',
|
67 |
+
'chrt' => 'application/vnd.kde.kchart',
|
68 |
+
'cif' => 'chemical/x-cif',
|
69 |
+
'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
|
70 |
+
'cil' => 'application/vnd.ms-artgalry',
|
71 |
+
'cla' => 'application/vnd.claymore',
|
72 |
+
'class' => 'application/java-vm',
|
73 |
+
'clkk' => 'application/vnd.crick.clicker.keyboard',
|
74 |
+
'clkp' => 'application/vnd.crick.clicker.palette',
|
75 |
+
'clkt' => 'application/vnd.crick.clicker.template',
|
76 |
+
'clkw' => 'application/vnd.crick.clicker.wordbank',
|
77 |
+
'clkx' => 'application/vnd.crick.clicker',
|
78 |
+
'clp' => 'application/x-msclip',
|
79 |
+
'cmc' => 'application/vnd.cosmocaller',
|
80 |
+
'cmdf' => 'chemical/x-cmdf',
|
81 |
+
'cml' => 'chemical/x-cml',
|
82 |
+
'cmp' => 'application/vnd.yellowriver-custom-menu',
|
83 |
+
'cmx' => 'image/x-cmx',
|
84 |
+
'cod' => 'application/vnd.rim.cod',
|
85 |
+
'cpio' => 'application/x-cpio',
|
86 |
+
'cpt' => 'application/mac-compactpro',
|
87 |
+
'crd' => 'application/x-mscardfile',
|
88 |
+
'crl' => 'application/pkix-crl',
|
89 |
+
'csh' => 'application/x-csh',
|
90 |
+
'csml' => 'chemical/x-csml',
|
91 |
+
'csp' => 'application/vnd.commonspace',
|
92 |
+
'css' => 'text/css',
|
93 |
+
'csv' => 'text/csv',
|
94 |
+
'cu' => 'application/cu-seeme',
|
95 |
+
'curl' => 'text/vnd.curl',
|
96 |
+
'cww' => 'application/prs.cww',
|
97 |
+
'c|cc|cxx|cpp|h|hh|dic' => 'text/x-c',
|
98 |
+
'daf' => 'application/vnd.mobius.daf',
|
99 |
+
'davmount' => 'application/davmount+xml',
|
100 |
+
'dcurl' => 'text/vnd.curl.dcurl',
|
101 |
+
'dd2' => 'application/vnd.oma.dd2+xml',
|
102 |
+
'ddd' => 'application/vnd.fujixerox.ddd',
|
103 |
+
'deb|udeb' => 'application/x-debian-package',
|
104 |
+
'der|crt' => 'application/x-x509-ca-cert',
|
105 |
+
'df' => 'application/x-deflate',
|
106 |
+
'dfac' => 'application/vnd.dreamfactory',
|
107 |
+
'dir|dcr|dxr|cst|cct|cxt|w3d|fgd|swa' => 'application/x-director',
|
108 |
+
'dis' => 'application/vnd.mobius.dis',
|
109 |
+
'djvu|djv' => 'image/vnd.djvu',
|
110 |
+
'dna' => 'application/vnd.dna',
|
111 |
+
'docm' => 'application/vnd.ms-word.document.macroenabled.12',
|
112 |
+
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
113 |
+
'doc|dot' => 'application/msword',
|
114 |
+
'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
|
115 |
+
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
116 |
+
'dp' => 'application/vnd.osgi.dp',
|
117 |
+
'dpg' => 'application/vnd.dpgraph',
|
118 |
+
'dsc' => 'text/prs.lines.tag',
|
119 |
+
'dtb' => 'application/x-dtbook+xml',
|
120 |
+
'dtd' => 'application/xml-dtd',
|
121 |
+
'dts' => 'audio/vnd.dts',
|
122 |
+
'dtshd' => 'audio/vnd.dts.hd',
|
123 |
+
'dvi' => 'application/x-dvi',
|
124 |
+
'dwf' => 'model/vnd.dwf',
|
125 |
+
'dwg' => 'image/vnd.dwg',
|
126 |
+
'dxf' => 'image/vnd.dxf',
|
127 |
+
'dxp' => 'application/vnd.spotfire.dxp',
|
128 |
+
'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
|
129 |
+
'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
|
130 |
+
'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
|
131 |
+
'ecma' => 'application/ecmascript',
|
132 |
+
'edm' => 'application/vnd.novadigm.edm',
|
133 |
+
'edx' => 'application/vnd.novadigm.edx',
|
134 |
+
'efif' => 'application/vnd.picsel',
|
135 |
+
'ei6' => 'application/vnd.pg.osasli',
|
136 |
+
'eml|all' => 'message/rfc822',
|
137 |
+
'emma' => 'application/emma+xml',
|
138 |
+
'eol' => 'audio/vnd.digital-winds',
|
139 |
+
'eot' => 'application/vnd.ms-fontobject',
|
140 |
+
'epub' => 'application/epub+zip',
|
141 |
+
'es3|et3' => 'application/vnd.eszigno3+xml',
|
142 |
+
'esf' => 'application/vnd.epson.esf',
|
143 |
+
'etx' => 'text/x-setext',
|
144 |
+
'exe|dll|com|bat|msi' => 'application/x-msdownload',
|
145 |
+
'ext' => 'application/vnd.novadigm.ext',
|
146 |
+
'ez' => 'application/andrew-inset',
|
147 |
+
'ez2' => 'application/vnd.ezpix-album',
|
148 |
+
'ez3' => 'application/vnd.ezpix-package',
|
149 |
+
'f4v' => 'video/x-f4v',
|
150 |
+
'fbs' => 'image/vnd.fastbidsheet',
|
151 |
+
'fdf' => 'application/vnd.fdf',
|
152 |
+
'fe_launch' => 'application/vnd.denovo.fcselayout-link',
|
153 |
+
'fg5' => 'application/vnd.fujitsu.oasysgp',
|
154 |
+
'fh|fhc|fh4|fh5|fh7' => 'image/x-freehand',
|
155 |
+
'fig' => 'application/x-xfig',
|
156 |
+
'fli' => 'video/x-fli',
|
157 |
+
'flo' => 'application/vnd.micrografx.flo',
|
158 |
+
'flv' => 'video/x-flv',
|
159 |
+
'flw' => 'application/vnd.kde.kivio',
|
160 |
+
'flx' => 'text/vnd.fmi.flexstor',
|
161 |
+
'fly' => 'text/vnd.fly',
|
162 |
+
'fm|frame|maker|book' => 'application/vnd.framemaker',
|
163 |
+
'fnc' => 'application/vnd.frogans.fnc',
|
164 |
+
'fpx' => 'image/vnd.fpx',
|
165 |
+
'fsc' => 'application/vnd.fsc.weblaunch',
|
166 |
+
'fst' => 'image/vnd.fst',
|
167 |
+
'ftc' => 'application/vnd.fluxtime.clip',
|
168 |
+
'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
|
169 |
+
'fvt' => 'video/vnd.fvt',
|
170 |
+
'fzs' => 'application/vnd.fuzzysheet',
|
171 |
+
'f|for|f77|f90' => 'text/x-fortran',
|
172 |
+
'g3' => 'image/g3fax',
|
173 |
+
'gac' => 'application/vnd.groove-account',
|
174 |
+
'gdl' => 'model/vnd.gdl',
|
175 |
+
'geo' => 'application/vnd.dynageo',
|
176 |
+
'gex|gre' => 'application/vnd.geometry-explorer',
|
177 |
+
'ggb' => 'application/vnd.geogebra.file',
|
178 |
+
'ggt' => 'application/vnd.geogebra.tool',
|
179 |
+
'ghf' => 'application/vnd.groove-help',
|
180 |
+
'gif' => 'image/gif',
|
181 |
+
'gim' => 'application/vnd.groove-identity-message',
|
182 |
+
'gmx' => 'application/vnd.gmx',
|
183 |
+
'gnumeric' => 'application/x-gnumeric',
|
184 |
+
'gph' => 'application/vnd.flographit',
|
185 |
+
'gqf|gqs' => 'application/vnd.grafeq',
|
186 |
+
'gram' => 'application/srgs',
|
187 |
+
'grv' => 'application/vnd.groove-injector',
|
188 |
+
'grxml' => 'application/srgs+xml',
|
189 |
+
'gsf' => 'application/x-font-ghostscript',
|
190 |
+
'gtar' => 'application/x-gtar',
|
191 |
+
'gtm' => 'application/vnd.groove-tool-message',
|
192 |
+
'gtw' => 'model/vnd.gtw',
|
193 |
+
'gv' => 'text/vnd.graphviz',
|
194 |
+
'gz' => 'application/x-gzip',
|
195 |
+
'h261' => 'video/h261',
|
196 |
+
'h263' => 'video/h263',
|
197 |
+
'h264' => 'video/h264',
|
198 |
+
'hbci' => 'application/vnd.hbci',
|
199 |
+
'hdf' => 'application/x-hdf',
|
200 |
+
'hlp' => 'application/winhlp',
|
201 |
+
'hpgl' => 'application/vnd.hp-hpgl',
|
202 |
+
'hpid' => 'application/vnd.hp-hpid',
|
203 |
+
'hps' => 'application/vnd.hp-hps',
|
204 |
+
'hqx' => 'application/mac-binhex40',
|
205 |
+
'htke' => 'application/vnd.kenameaapp',
|
206 |
+
'html|htm' => 'text/html',
|
207 |
+
'hvd' => 'application/vnd.yamaha.hv-dic',
|
208 |
+
'hvp' => 'application/vnd.yamaha.hv-voice',
|
209 |
+
'hvs' => 'application/vnd.yamaha.hv-script',
|
210 |
+
'icc|icm' => 'application/vnd.iccprofile',
|
211 |
+
'ice' => 'x-conference/x-cooltalk',
|
212 |
+
'ico' => 'image/x-icon',
|
213 |
+
'ics|ifb' => 'text/calendar',
|
214 |
+
'ief' => 'image/ief',
|
215 |
+
'ifm' => 'application/vnd.shana.informed.formdata',
|
216 |
+
'igl' => 'application/vnd.igloader',
|
217 |
+
'igs|iges' => 'model/iges',
|
218 |
+
'igx' => 'application/vnd.micrografx.igx',
|
219 |
+
'iif' => 'application/vnd.shana.informed.interchange',
|
220 |
+
'imp' => 'application/vnd.accpac.simply.imp',
|
221 |
+
'ims' => 'application/vnd.ms-ims',
|
222 |
+
'ipk' => 'application/vnd.shana.informed.package',
|
223 |
+
'irm' => 'application/vnd.ibm.rights-management',
|
224 |
+
'irp' => 'application/vnd.irepository.package+xml',
|
225 |
+
'itp' => 'application/vnd.shana.informed.formtemplate',
|
226 |
+
'ivp' => 'application/vnd.immervision-ivp',
|
227 |
+
'ivu' => 'application/vnd.immervision-ivu',
|
228 |
+
'jad' => 'text/vnd.sun.j2me.app-descriptor',
|
229 |
+
'jam' => 'application/vnd.jam',
|
230 |
+
'jar' => 'application/java-archive',
|
231 |
+
'java' => 'text/x-java-source',
|
232 |
+
'jisp' => 'application/vnd.jisp',
|
233 |
+
'jlt' => 'application/vnd.hp-jlyt',
|
234 |
+
'jnlp' => 'application/x-java-jnlp-file',
|
235 |
+
'joda' => 'application/vnd.joost.joda-archive',
|
236 |
+
'jpeg|jpg|jpe' => 'image/jpeg',
|
237 |
+
'jpgv' => 'video/jpeg',
|
238 |
+
'jpm|jpgm' => 'video/jpm',
|
239 |
+
'js' => 'application/javascript',
|
240 |
+
'json' => 'application/json',
|
241 |
+
'karbon' => 'application/vnd.kde.karbon',
|
242 |
+
'kfo' => 'application/vnd.kde.kformula',
|
243 |
+
'kia' => 'application/vnd.kidspiration',
|
244 |
+
'kml' => 'application/vnd.google-earth.kml+xml',
|
245 |
+
'kmz' => 'application/vnd.google-earth.kmz',
|
246 |
+
'kne|knp' => 'application/vnd.kinar',
|
247 |
+
'kon' => 'application/vnd.kde.kontour',
|
248 |
+
'kpr|kpt' => 'application/vnd.kde.kpresenter',
|
249 |
+
'ksp' => 'application/vnd.kde.kspread',
|
250 |
+
'ktz|ktr' => 'application/vnd.kahootz',
|
251 |
+
'kwd|kwt' => 'application/vnd.kde.kword',
|
252 |
+
'latex' => 'application/x-latex',
|
253 |
+
'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
|
254 |
+
'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
|
255 |
+
'les' => 'application/vnd.hhe.lesson-player',
|
256 |
+
'link66' => 'application/vnd.route66.link66+xml',
|
257 |
+
'lostxml' => 'application/lost+xml',
|
258 |
+
'lrm' => 'application/vnd.ms-lrm',
|
259 |
+
'ltf' => 'application/vnd.frogans.ltf',
|
260 |
+
'lvp' => 'audio/vnd.lucent.voice',
|
261 |
+
'lwp' => 'application/vnd.lotus-wordpro',
|
262 |
+
'm3u' => 'audio/x-mpegurl',
|
263 |
+
'm4v' => 'video/x-m4v',
|
264 |
+
'mag' => 'application/vnd.ecowin.chart',
|
265 |
+
'mathml' => 'application/mathml+xml',
|
266 |
+
'ma|nb|mb' => 'application/mathematica',
|
267 |
+
'mbk' => 'application/vnd.mobius.mbk',
|
268 |
+
'mbox' => 'application/mbox',
|
269 |
+
'mc1' => 'application/vnd.medcalcdata',
|
270 |
+
'mcd' => 'application/vnd.mcd',
|
271 |
+
'mcurl' => 'text/vnd.curl.mcurl',
|
272 |
+
'mdb' => 'application/x-msaccess',
|
273 |
+
'mdi' => 'image/vnd.ms-modi',
|
274 |
+
'mfm' => 'application/vnd.mfmp',
|
275 |
+
'mgz' => 'application/vnd.proteus.magazine',
|
276 |
+
'mid|midi|kar|rmi' => 'audio/midi',
|
277 |
+
'mif' => 'application/vnd.mif',
|
278 |
+
'mj2|mjp2' => 'video/mj2',
|
279 |
+
'mlp' => 'application/vnd.dolby.mlp',
|
280 |
+
'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
|
281 |
+
'mmf' => 'application/vnd.smaf',
|
282 |
+
'mmr' => 'image/vnd.fujixerox.edmics-mmr',
|
283 |
+
'mny' => 'application/x-msmoney',
|
284 |
+
'movie' => 'video/x-sgi-movie',
|
285 |
+
'mp4a' => 'audio/mp4',
|
286 |
+
'mp4s' => 'application/mp4',
|
287 |
+
'mp4|mp4v|mpg4' => 'video/mp4',
|
288 |
+
'mpc' => 'application/vnd.mophun.certificate',
|
289 |
+
'mpeg|mpg|mpe|m1v|m2v' => 'video/mpeg',
|
290 |
+
'mpga|mp2|mp2a|mp3|m2a|m3a' => 'audio/mpeg',
|
291 |
+
'mpkg' => 'application/vnd.apple.installer+xml',
|
292 |
+
'mpm' => 'application/vnd.blueice.multipass',
|
293 |
+
'mpn' => 'application/vnd.mophun.application',
|
294 |
+
'mpp|mpt' => 'application/vnd.ms-project',
|
295 |
+
'mpy' => 'application/vnd.ibm.minipay',
|
296 |
+
'mqy' => 'application/vnd.mobius.mqy',
|
297 |
+
'mrc' => 'application/marc',
|
298 |
+
'mscml' => 'application/mediaservercontrol+xml',
|
299 |
+
'mseed' => 'application/vnd.fdsn.mseed',
|
300 |
+
'mseq' => 'application/vnd.mseq',
|
301 |
+
'msf' => 'application/vnd.epson.msf',
|
302 |
+
'msh|mesh|silo' => 'model/mesh',
|
303 |
+
'msl' => 'application/vnd.mobius.msl',
|
304 |
+
'msty' => 'application/vnd.muvee.style',
|
305 |
+
'mts' => 'model/vnd.mts',
|
306 |
+
'mus' => 'application/vnd.musician',
|
307 |
+
'musicxml' => 'application/vnd.recordare.musicxml+xml',
|
308 |
+
'mvb|m13|m14' => 'application/x-msmediaview',
|
309 |
+
'mwf' => 'application/vnd.mfer',
|
310 |
+
'mxf' => 'application/mxf',
|
311 |
+
'mxl' => 'application/vnd.recordare.musicxml',
|
312 |
+
'mxml|xhvml|xvml|xvm' => 'application/xv+xml',
|
313 |
+
'mxs' => 'application/vnd.triscape.mxs',
|
314 |
+
'mxu|m4u' => 'video/vnd.mpegurl',
|
315 |
+
'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
|
316 |
+
'ncx' => 'application/x-dtbncx+xml',
|
317 |
+
'nc|cdf' => 'application/x-netcdf',
|
318 |
+
'ngdat' => 'application/vnd.nokia.n-gage.data',
|
319 |
+
'nlu' => 'application/vnd.neurolanguage.nlu',
|
320 |
+
'nml' => 'application/vnd.enliven',
|
321 |
+
'nnd' => 'application/vnd.noblenet-directory',
|
322 |
+
'nns' => 'application/vnd.noblenet-sealer',
|
323 |
+
'nnw' => 'application/vnd.noblenet-web',
|
324 |
+
'npx' => 'image/vnd.net-fpx',
|
325 |
+
'nsf' => 'application/vnd.lotus-notes',
|
326 |
+
'oa2' => 'application/vnd.fujitsu.oasys2',
|
327 |
+
'oa3' => 'application/vnd.fujitsu.oasys3',
|
328 |
+
'oas' => 'application/vnd.fujitsu.oasys',
|
329 |
+
'obd' => 'application/x-msbinder',
|
330 |
+
'oda' => 'application/oda',
|
331 |
+
'odb' => 'application/vnd.oasis.opendocument.database',
|
332 |
+
'odc' => 'application/vnd.oasis.opendocument.chart',
|
333 |
+
'odf' => 'application/vnd.oasis.opendocument.formula',
|
334 |
+
'odft' => 'application/vnd.oasis.opendocument.formula-template',
|
335 |
+
'odg' => 'application/vnd.oasis.opendocument.graphics',
|
336 |
+
'odi' => 'application/vnd.oasis.opendocument.image',
|
337 |
+
'odp' => 'application/vnd.oasis.opendocument.presentation',
|
338 |
+
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
339 |
+
'odt' => 'application/vnd.oasis.opendocument.text',
|
340 |
+
'oga|ogg|spx' => 'audio/ogg',
|
341 |
+
'ogv' => 'video/ogg',
|
342 |
+
'ogx' => 'application/ogg',
|
343 |
+
'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote',
|
344 |
+
'opf' => 'application/oebps-package+xml',
|
345 |
+
'org' => 'application/vnd.lotus-organizer',
|
346 |
+
'osf' => 'application/vnd.yamaha.openscoreformat',
|
347 |
+
'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
|
348 |
+
'otc' => 'application/vnd.oasis.opendocument.chart-template',
|
349 |
+
'otf' => 'application/x-font-otf',
|
350 |
+
'otg' => 'application/vnd.oasis.opendocument.graphics-template',
|
351 |
+
'oth' => 'application/vnd.oasis.opendocument.text-web',
|
352 |
+
'oti' => 'application/vnd.oasis.opendocument.image-template',
|
353 |
+
'otm' => 'application/vnd.oasis.opendocument.text-master',
|
354 |
+
'otp' => 'application/vnd.oasis.opendocument.presentation-template',
|
355 |
+
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
|
356 |
+
'ott' => 'application/vnd.oasis.opendocument.text-template',
|
357 |
+
'oxt' => 'application/vnd.openofficeorg.extension',
|
358 |
+
'p10' => 'application/pkcs10',
|
359 |
+
'p12|pfx' => 'application/x-pkcs12',
|
360 |
+
'p7b|spc' => 'application/x-pkcs7-certificates',
|
361 |
+
'p7m|p7c' => 'application/pkcs7-all',
|
362 |
+
'p7r' => 'application/x-pkcs7-certreqresp',
|
363 |
+
'p7s' => 'application/pkcs7-signature',
|
364 |
+
'pbd' => 'application/vnd.powerbuilder6',
|
365 |
+
'pbm' => 'image/x-portable-bitmap',
|
366 |
+
'pcf' => 'application/x-font-pcf',
|
367 |
+
'pcl' => 'application/vnd.hp-pcl',
|
368 |
+
'pclxl' => 'application/vnd.hp-pclxl',
|
369 |
+
'pcurl' => 'application/vnd.curl.pcurl',
|
370 |
+
'pcx' => 'image/x-pcx',
|
371 |
+
'pdb|pqa|oprc' => 'application/vnd.palm',
|
372 |
+
'pdf' => 'application/pdf',
|
373 |
+
'pfa|pfb|pfm|afm' => 'application/x-font-type1',
|
374 |
+
'pfr' => 'application/font-tdpfr',
|
375 |
+
'pgm' => 'image/x-portable-graymap',
|
376 |
+
'pgn' => 'application/x-chess-pgn',
|
377 |
+
'pgp' => 'application/pgp-encrypted',
|
378 |
+
'pic|pct' => 'image/x-pict',
|
379 |
+
'pki' => 'application/pkixcmp',
|
380 |
+
'pkipath' => 'application/pkix-pkipath',
|
381 |
+
'plb' => 'application/vnd.3gpp.pic-bw-large',
|
382 |
+
'plc' => 'application/vnd.mobius.plc',
|
383 |
+
'plf' => 'application/vnd.pocketlearn',
|
384 |
+
'pls' => 'application/pls+xml',
|
385 |
+
'pml' => 'application/vnd.ctc-posml',
|
386 |
+
'png' => 'image/png',
|
387 |
+
'pnm' => 'image/x-portable-anymap',
|
388 |
+
'portpkg' => 'application/vnd.macports.portpkg',
|
389 |
+
'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
|
390 |
+
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
391 |
+
'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
|
392 |
+
'ppd' => 'application/vnd.cups-ppd',
|
393 |
+
'ppm' => 'image/x-portable-pixmap',
|
394 |
+
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
|
395 |
+
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
396 |
+
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
|
397 |
+
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
398 |
+
'ppt|pps|pot' => 'application/vnd.ms-powerpoint',
|
399 |
+
'prc|mobi' => 'application/x-mobipocket-ebook',
|
400 |
+
'pre' => 'application/vnd.lotus-freelance',
|
401 |
+
'prf' => 'application/pics-rules',
|
402 |
+
'psb' => 'application/vnd.3gpp.pic-bw-small',
|
403 |
+
'psd' => 'image/vnd.adobe.photoshop',
|
404 |
+
'psf' => 'application/x-font-linux-psf',
|
405 |
+
'ptid' => 'application/vnd.pvi.ptid1',
|
406 |
+
'pub' => 'application/x-mspublisher',
|
407 |
+
'pvb' => 'application/vnd.3gpp.pic-bw-var',
|
408 |
+
'pwn' => 'application/vnd.3m.post-it-notes',
|
409 |
+
'pya' => 'audio/vnd.ms-playready.media.pya',
|
410 |
+
'pyv' => 'video/vnd.ms-playready.media.pyv',
|
411 |
+
'p|pas' => 'text/x-pascal',
|
412 |
+
'qam' => 'application/vnd.epson.quickanime',
|
413 |
+
'qbo' => 'application/vnd.intu.qbo',
|
414 |
+
'qfx' => 'application/vnd.intu.qfx',
|
415 |
+
'qps' => 'application/vnd.publishare-delta-tree',
|
416 |
+
'qt|mov' => 'video/quicktime',
|
417 |
+
'qxd|qxt|qwd|qwt|qxl|qxb' => 'application/vnd.quark.quarkxpress',
|
418 |
+
'ram|ra' => 'audio/x-pn-realaudio',
|
419 |
+
'rar' => 'application/x-rar-compressed',
|
420 |
+
'ras' => 'image/x-cmu-raster',
|
421 |
+
'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
|
422 |
+
'rdf' => 'application/rdf+xml',
|
423 |
+
'rdz' => 'application/vnd.data-vision.rdz',
|
424 |
+
'rep' => 'application/vnd.businessobjects',
|
425 |
+
'res' => 'application/x-dtbresource+xml',
|
426 |
+
'rgb' => 'image/x-rgb',
|
427 |
+
'rif' => 'application/reginfo+xml',
|
428 |
+
'rl' => 'application/resource-lists+xml',
|
429 |
+
'rlc' => 'image/vnd.fujixerox.edmics-rlc',
|
430 |
+
'rld' => 'application/resource-lists-diff+xml',
|
431 |
+
'rm' => 'application/vnd.rn-realmedia',
|
432 |
+
'rmp' => 'audio/x-pn-realaudio-plugin',
|
433 |
+
'rms' => 'application/vnd.jcp.javame.midlet-rms',
|
434 |
+
'rnc' => 'application/relax-ng-compact-syntax',
|
435 |
+
'rpss' => 'application/vnd.nokia.radio-presets',
|
436 |
+
'rpst' => 'application/vnd.nokia.radio-preset',
|
437 |
+
'rq' => 'application/sparql-query',
|
438 |
+
'rs' => 'application/rls-services+xml',
|
439 |
+
'rsd' => 'application/rsd+xml',
|
440 |
+
'rss' => 'application/rss+xml',
|
441 |
+
'rtf' => 'application/rtf',
|
442 |
+
'rtx' => 'text/richtext',
|
443 |
+
'saf' => 'application/vnd.yamaha.smaf-audio',
|
444 |
+
'sbml' => 'application/sbml+xml',
|
445 |
+
'sc' => 'application/vnd.ibm.secure-container',
|
446 |
+
'scd' => 'application/x-msschedule',
|
447 |
+
'scm' => 'application/vnd.lotus-screencam',
|
448 |
+
'scq' => 'application/scvp-cv-request',
|
449 |
+
'scs' => 'application/scvp-cv-response',
|
450 |
+
'scurl' => 'text/vnd.curl.scurl',
|
451 |
+
'sda' => 'application/vnd.stardivision.draw',
|
452 |
+
'sdc' => 'application/vnd.stardivision.calc',
|
453 |
+
'sdd' => 'application/vnd.stardivision.impress',
|
454 |
+
'sdkm|sdkd' => 'application/vnd.solent.sdkm+xml',
|
455 |
+
'sdp' => 'application/sdp',
|
456 |
+
'sdw' => 'application/vnd.stardivision.writer',
|
457 |
+
'see' => 'application/vnd.seemail',
|
458 |
+
'seed|dataless' => 'application/vnd.fdsn.seed',
|
459 |
+
'sema' => 'application/vnd.sema',
|
460 |
+
'semd' => 'application/vnd.semd',
|
461 |
+
'semf' => 'application/vnd.semf',
|
462 |
+
'ser' => 'application/java-serialized-object',
|
463 |
+
'setpay' => 'application/set-payment-initiation',
|
464 |
+
'setreg' => 'application/set-registration-initiation',
|
465 |
+
'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
|
466 |
+
'sfs' => 'application/vnd.spotfire.sfs',
|
467 |
+
'sgl' => 'application/vnd.stardivision.writer-global',
|
468 |
+
'sgml|sgm' => 'text/sgml',
|
469 |
+
'sh' => 'application/x-sh',
|
470 |
+
'shar' => 'application/x-shar',
|
471 |
+
'shf' => 'application/shf+xml',
|
472 |
+
'sis|sisx' => 'application/vnd.symbian.install',
|
473 |
+
'sit' => 'application/x-stuffit',
|
474 |
+
'sitx' => 'application/x-stuffitx',
|
475 |
+
'skp|skd|skt|skm' => 'application/vnd.koan',
|
476 |
+
'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
|
477 |
+
'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
|
478 |
+
'slt' => 'application/vnd.epson.salt',
|
479 |
+
'smf' => 'application/vnd.stardivision.math',
|
480 |
+
'smi|smil' => 'application/smil+xml',
|
481 |
+
'snf' => 'application/x-font-snf',
|
482 |
+
'spf' => 'application/vnd.yamaha.smaf-phrase',
|
483 |
+
'spl' => 'application/x-futuresplash',
|
484 |
+
'spot' => 'text/vnd.in3d.spot',
|
485 |
+
'spp' => 'application/scvp-vp-response',
|
486 |
+
'spq' => 'application/scvp-vp-request',
|
487 |
+
'src' => 'application/x-wais-source',
|
488 |
+
'srx' => 'application/sparql-results+xml',
|
489 |
+
'sse' => 'application/vnd.kodak-descriptor',
|
490 |
+
'ssf' => 'application/vnd.epson.ssf',
|
491 |
+
'ssml' => 'application/ssml+xml',
|
492 |
+
'stc' => 'application/vnd.sun.xml.calc.template',
|
493 |
+
'std' => 'application/vnd.sun.xml.draw.template',
|
494 |
+
'stf' => 'application/vnd.wt.stf',
|
495 |
+
'sti' => 'application/vnd.sun.xml.impress.template',
|
496 |
+
'stk' => 'application/hyperstudio',
|
497 |
+
'stl' => 'application/vnd.ms-pki.stl',
|
498 |
+
'str' => 'application/vnd.pg.format',
|
499 |
+
'stw' => 'application/vnd.sun.xml.writer.template',
|
500 |
+
'sus|susp' => 'application/vnd.sus-calendar',
|
501 |
+
'sv4cpio' => 'application/x-sv4cpio',
|
502 |
+
'sv4crc' => 'application/x-sv4crc',
|
503 |
+
'svd' => 'application/vnd.svd',
|
504 |
+
'svg|svgz' => 'image/svg+xml',
|
505 |
+
'swf' => 'application/x-shockwave-flash',
|
506 |
+
'swi' => 'application/vnd.arastra.swi',
|
507 |
+
'sxc' => 'application/vnd.sun.xml.calc',
|
508 |
+
'sxd' => 'application/vnd.sun.xml.draw',
|
509 |
+
'sxg' => 'application/vnd.sun.xml.writer.global',
|
510 |
+
'sxi' => 'application/vnd.sun.xml.impress',
|
511 |
+
'sxm' => 'application/vnd.sun.xml.math',
|
512 |
+
'sxw' => 'application/vnd.sun.xml.writer',
|
513 |
+
's|asm' => 'text/x-asm',
|
514 |
+
'tao' => 'application/vnd.tao.intent-module-archive',
|
515 |
+
'tar' => 'application/x-tar',
|
516 |
+
'tcap' => 'application/vnd.3gpp2.tcap',
|
517 |
+
'tcl' => 'application/x-tcl',
|
518 |
+
'teacher' => 'application/vnd.smart.teacher',
|
519 |
+
'tex' => 'application/x-tex',
|
520 |
+
'texinfo|texi' => 'application/x-texinfo',
|
521 |
+
'tfm' => 'application/x-tex-tfm',
|
522 |
+
'tiff|tif' => 'image/tiff',
|
523 |
+
'tmo' => 'application/vnd.tmobile-livetv',
|
524 |
+
'torrent' => 'application/x-bittorrent',
|
525 |
+
'tpl' => 'application/vnd.groove-tool-template',
|
526 |
+
'tpt' => 'application/vnd.trid.tpt',
|
527 |
+
'tra' => 'application/vnd.trueapp',
|
528 |
+
'trm' => 'application/x-msterminal',
|
529 |
+
'tsv' => 'text/tab-separated-values',
|
530 |
+
'ttf|ttc' => 'application/x-font-ttf',
|
531 |
+
'twd|twds' => 'application/vnd.simtech-mindmapper',
|
532 |
+
'txd' => 'application/vnd.genomatix.tuxedo',
|
533 |
+
'txf' => 'application/vnd.mobius.txf',
|
534 |
+
'txt|text|conf|def|list|log|in' => 'text/plain',
|
535 |
+
't|tr|roff|man|me|ms' => 'text/troff',
|
536 |
+
'ufd|ufdl' => 'application/vnd.ufdl',
|
537 |
+
'umj' => 'application/vnd.umajin',
|
538 |
+
'unityweb' => 'application/vnd.unity',
|
539 |
+
'uoml' => 'application/vnd.uoml+xml',
|
540 |
+
'uri|uris|urls' => 'text/uri-list',
|
541 |
+
'ustar' => 'application/x-ustar',
|
542 |
+
'utz' => 'application/vnd.uiq.theme',
|
543 |
+
'uu' => 'text/x-uuencode',
|
544 |
+
'vcd' => 'application/x-cdlink',
|
545 |
+
'vcf' => 'text/x-vcard',
|
546 |
+
'vcg' => 'application/vnd.groove-vcard',
|
547 |
+
'vcs' => 'text/x-vcalendar',
|
548 |
+
'vcx' => 'application/vnd.vcx',
|
549 |
+
'vis' => 'application/vnd.visionary',
|
550 |
+
'viv' => 'video/vnd.vivo',
|
551 |
+
'vor' => 'application/vnd.stardivision.writer',
|
552 |
+
'vsd|vst|vss|vsw' => 'application/vnd.visio',
|
553 |
+
'vsf' => 'application/vnd.vsf',
|
554 |
+
'vtu' => 'model/vnd.vtu',
|
555 |
+
'vxml' => 'application/voicexml+xml',
|
556 |
+
'wad' => 'application/x-doom',
|
557 |
+
'wav' => 'audio/x-wav',
|
558 |
+
'wax' => 'audio/x-ms-wax',
|
559 |
+
'wbmp' => 'image/vnd.wap.wbmp',
|
560 |
+
'wbs' => 'application/vnd.criticaltools.wbs+xml',
|
561 |
+
'wbxml' => 'application/vnd.wap.wbxml',
|
562 |
+
'wm' => 'video/x-ms-wm',
|
563 |
+
'wma' => 'audio/x-ms-wma',
|
564 |
+
'wmd' => 'application/x-ms-wmd',
|
565 |
+
'wmf' => 'application/x-msmetafile',
|
566 |
+
'wml' => 'text/vnd.wap.wml',
|
567 |
+
'wmlc' => 'application/vnd.wap.wmlc',
|
568 |
+
'wmls' => 'text/vnd.wap.wmlscript',
|
569 |
+
'wmlsc' => 'application/vnd.wap.wmlscriptc',
|
570 |
+
'wmv' => 'video/x-ms-wmv',
|
571 |
+
'wmx' => 'video/x-ms-wmx',
|
572 |
+
'wmz' => 'application/x-ms-wmz',
|
573 |
+
'wpd' => 'application/vnd.wordperfect',
|
574 |
+
'wpl' => 'application/vnd.ms-wpl',
|
575 |
+
'wps|wks|wcm|wdb' => 'application/vnd.ms-works',
|
576 |
+
'wqd' => 'application/vnd.wqd',
|
577 |
+
'wri' => 'application/x-mswrite',
|
578 |
+
'wrl|vrml' => 'model/vrml',
|
579 |
+
'wsdl' => 'application/wsdl+xml',
|
580 |
+
'wspolicy' => 'application/wspolicy+xml',
|
581 |
+
'wtb' => 'application/vnd.webturbo',
|
582 |
+
'wvx' => 'video/x-ms-wvx',
|
583 |
+
'x3d' => 'application/vnd.hzn-3d-crossword',
|
584 |
+
'xap' => 'application/x-silverlight-app',
|
585 |
+
'xar' => 'application/vnd.xara',
|
586 |
+
'xbap' => 'application/x-ms-xbap',
|
587 |
+
'xbd' => 'application/vnd.fujixerox.docuworks.binder',
|
588 |
+
'xbm' => 'image/x-xbitmap',
|
589 |
+
'xdm' => 'application/vnd.syncml.dm+xml',
|
590 |
+
'xdp' => 'application/vnd.adobe.xdp+xml',
|
591 |
+
'xdw' => 'application/vnd.fujixerox.docuworks',
|
592 |
+
'xenc' => 'application/xenc+xml',
|
593 |
+
'xer' => 'application/patch-ops-error+xml',
|
594 |
+
'xfdf' => 'application/vnd.adobe.xfdf',
|
595 |
+
'xfdl' => 'application/vnd.xfdl',
|
596 |
+
'xhtml|xht' => 'application/xhtml+xml',
|
597 |
+
'xif' => 'image/vnd.xiff',
|
598 |
+
'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
|
599 |
+
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
|
600 |
+
'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
|
601 |
+
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
602 |
+
'xls|xlm|xla|xlc|xlt|xlw' => 'application/vnd.ms-excel',
|
603 |
+
'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
|
604 |
+
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
605 |
+
'xml|xsl' => 'application/xml',
|
606 |
+
'xo' => 'application/vnd.olpc-sugar',
|
607 |
+
'xop' => 'application/xop+xml',
|
608 |
+
'xpi' => 'application/x-xpinstall',
|
609 |
+
'xpm' => 'image/x-xpixmap',
|
610 |
+
'xpr' => 'application/vnd.is-xpr',
|
611 |
+
'xps' => 'application/vnd.ms-xpsdocument',
|
612 |
+
'xpw|xpx' => 'application/vnd.intercon.formnet',
|
613 |
+
'xslt' => 'application/xslt+xml',
|
614 |
+
'xsm' => 'application/vnd.syncml+xml',
|
615 |
+
'xspf' => 'application/xspf+xml',
|
616 |
+
'xul' => 'application/vnd.mozilla.xul+xml',
|
617 |
+
'xwd' => 'image/x-xwindowdump',
|
618 |
+
'xyz' => 'chemical/x-xyz',
|
619 |
+
'zaz' => 'application/vnd.zzazz.deck+xml',
|
620 |
+
'zip' => 'application/zip',
|
621 |
+
'zir|zirz' => 'application/vnd.zul',
|
622 |
+
'zmm' => 'application/vnd.handheld-entertainment+xml',
|
623 |
+
'123' => 'application/vnd.lotus-1-2-3'
|
624 |
+
);
|
inc/mime/cssjs.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* CSS and JS mime types
|
5 |
+
*/
|
6 |
+
return array(
|
7 |
+
'css' => 'text/css',
|
8 |
+
'js' => 'application/x-javascript'
|
9 |
+
);
|
inc/mime/html.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* HTML mime types
|
5 |
+
*/
|
6 |
+
return array(
|
7 |
+
'html|htm' => 'text/html',
|
8 |
+
'rtf|rtx' => 'text/richtext',
|
9 |
+
'svg|svgz' => 'image/svg+xml',
|
10 |
+
'txt' => 'text/plain',
|
11 |
+
'xsd' => 'text/xsd',
|
12 |
+
'xsl' => 'text/xsl',
|
13 |
+
'xml' => 'text/xml'
|
14 |
+
);
|
inc/{mime.php → mime/other.php}
RENAMED
@@ -1,50 +1,45 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
3 |
return array(
|
4 |
-
'jpg|jpeg|jpe' => 'image/jpeg',
|
5 |
-
'gif' => 'image/gif',
|
6 |
-
'png' => 'image/png',
|
7 |
-
'bmp' => 'image/bmp',
|
8 |
-
'tif|tiff' => 'image/tiff',
|
9 |
-
'ico' => 'image/x-icon',
|
10 |
'asf|asx|wax|wmv|wmx' => 'video/asf',
|
11 |
'avi' => 'video/avi',
|
|
|
|
|
12 |
'divx' => 'video/divx',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
'mov|qt' => 'video/quicktime',
|
14 |
-
'mpeg|mpg|mpe' => 'video/mpeg',
|
15 |
-
'txt|c|cc|h' => 'text/plain',
|
16 |
-
'svg' => 'image/svg+xml',
|
17 |
-
'rtx' => 'text/richtext',
|
18 |
-
'css' => 'text/css',
|
19 |
-
'xsl|xsd|xml' => 'text/xml',
|
20 |
-
'htm|html' => 'text/html',
|
21 |
'mp3|m4a' => 'audio/mpeg',
|
22 |
'mp4|m4v' => 'video/mp4',
|
23 |
-
'
|
24 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
'ogg' => 'audio/ogg',
|
26 |
-
'mid|midi' => 'audio/midi',
|
27 |
-
'wma' => 'audio/wma',
|
28 |
-
'rtf' => 'application/rtf',
|
29 |
-
'js' => 'application/x-javascript',
|
30 |
'pdf' => 'application/pdf',
|
31 |
-
'
|
32 |
'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
|
33 |
-
'
|
34 |
-
'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
|
35 |
-
'mdb' => 'application/vnd.ms-access',
|
36 |
-
'mpp' => 'application/vnd.ms-project',
|
37 |
'swf' => 'application/x-shockwave-flash',
|
38 |
-
'class' => 'application/java',
|
39 |
'tar' => 'application/x-tar',
|
40 |
-
'
|
41 |
-
'
|
42 |
-
'
|
43 |
-
'
|
44 |
-
'
|
45 |
-
'
|
46 |
-
|
47 |
-
'odc' => 'application/vnd.oasis.opendocument.chart',
|
48 |
-
'odb' => 'application/vnd.oasis.opendocument.database',
|
49 |
-
'odf' => 'application/vnd.oasis.opendocument.formula'
|
50 |
-
);
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Other mime types
|
5 |
+
*/
|
6 |
return array(
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
'asf|asx|wax|wmv|wmx' => 'video/asf',
|
8 |
'avi' => 'video/avi',
|
9 |
+
'bmp' => 'image/bmp',
|
10 |
+
'class' => 'application/java',
|
11 |
'divx' => 'video/divx',
|
12 |
+
'doc|docx' => 'application/msword',
|
13 |
+
'exe' => 'application/x-msdownload',
|
14 |
+
'gif' => 'image/gif',
|
15 |
+
'gz|gzip' => 'application/x-gzip',
|
16 |
+
'ico' => 'image/x-icon',
|
17 |
+
'jpg|jpeg|jpe' => 'image/jpeg',
|
18 |
+
'mdb' => 'application/vnd.ms-access',
|
19 |
+
'mid|midi' => 'audio/midi',
|
20 |
'mov|qt' => 'video/quicktime',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
'mp3|m4a' => 'audio/mpeg',
|
22 |
'mp4|m4v' => 'video/mp4',
|
23 |
+
'mpeg|mpg|mpe' => 'video/mpeg',
|
24 |
+
'mpp' => 'application/vnd.ms-project',
|
25 |
+
'odb' => 'application/vnd.oasis.opendocument.database',
|
26 |
+
'odc' => 'application/vnd.oasis.opendocument.chart',
|
27 |
+
'odf' => 'application/vnd.oasis.opendocument.formula',
|
28 |
+
'odg' => 'application/vnd.oasis.opendocument.graphics',
|
29 |
+
'odp' => 'application/vnd.oasis.opendocument.presentation',
|
30 |
+
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
31 |
+
'odt' => 'application/vnd.oasis.opendocument.text',
|
32 |
'ogg' => 'audio/ogg',
|
|
|
|
|
|
|
|
|
33 |
'pdf' => 'application/pdf',
|
34 |
+
'png' => 'image/png',
|
35 |
'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
|
36 |
+
'ra|ram' => 'audio/x-realaudio',
|
|
|
|
|
|
|
37 |
'swf' => 'application/x-shockwave-flash',
|
|
|
38 |
'tar' => 'application/x-tar',
|
39 |
+
'tif|tiff' => 'image/tiff',
|
40 |
+
'wav' => 'audio/wav',
|
41 |
+
'wma' => 'audio/wma',
|
42 |
+
'wri' => 'application/vnd.ms-write',
|
43 |
+
'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
|
44 |
+
'zip' => 'application/zip'
|
45 |
+
);
|
|
|
|
|
|
|
|
inc/options/about.phtml
CHANGED
@@ -1,22 +1,21 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
<div id="about">
|
4 |
-
<h3>About</h3>
|
5 |
-
|
6 |
<p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or opcode caching and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following features and benefits:</p>
|
7 |
|
8 |
<ul>
|
9 |
<li>Improved Google search engine ranking</li>
|
10 |
<li>Increased visitor time on site</li>
|
11 |
-
<li>Optimized progressive render (pages
|
12 |
<li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups and reduced document load time</li>
|
13 |
<li>Bandwidth savings via Minify and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression of <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym>, JavaScript and feeds</li>
|
14 |
<li>Increased web server concurrency and increased scale (easily sustain high traffic spikes)</li>
|
15 |
<li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) integration with Media Library, theme files and WordPress core</li>
|
16 |
-
<li>Caching of pages / posts in memory or on disk</li>
|
17 |
<li>Caching of (minified) <acronym title="Cascading Style Sheet">CSS</acronym> and JavaScript in memory, on disk or on <acronym title="Content Delivery Network">CDN</acronym></li>
|
18 |
-
<li>Caching of database objects in memory or disk</li>
|
19 |
-
<li>Caching of
|
|
|
20 |
<li>Caching of search results pages (i.e. <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables) in memory or on disk</li>
|
21 |
<li>Minification of posts / pages and feeds</li>
|
22 |
<li>Minification (concatenation and white space removal) of inline, external or 3rd party JavaScript / <acronym title="Cascading Style Sheet">CSS</acronym> with automated updates</li>
|
@@ -25,7 +24,7 @@
|
|
25 |
<li>Import post attachments directly into the Media Library (and <acronym title="Content Delivery Network">CDN</acronym>)</li>
|
26 |
</ul>
|
27 |
|
28 |
-
<p>Your users have less data to download, you can now
|
29 |
|
30 |
<h4>Who do I thank for all of this?</h4>
|
31 |
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
<div id="about">
|
|
|
|
|
4 |
<p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or opcode caching and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following features and benefits:</p>
|
5 |
|
6 |
<ul>
|
7 |
<li>Improved Google search engine ranking</li>
|
8 |
<li>Increased visitor time on site</li>
|
9 |
+
<li>Optimized progressive render (pages start rendering immediately)</li>
|
10 |
<li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups and reduced document load time</li>
|
11 |
<li>Bandwidth savings via Minify and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression of <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym>, JavaScript and feeds</li>
|
12 |
<li>Increased web server concurrency and increased scale (easily sustain high traffic spikes)</li>
|
13 |
<li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) integration with Media Library, theme files and WordPress core</li>
|
14 |
+
<li>Caching of pages / posts in memory or on disk or on CDN (mirror only)</li>
|
15 |
<li>Caching of (minified) <acronym title="Cascading Style Sheet">CSS</acronym> and JavaScript in memory, on disk or on <acronym title="Content Delivery Network">CDN</acronym></li>
|
16 |
+
<li>Caching of database objects in memory or on disk</li>
|
17 |
+
<li>Caching of objects in memory or on disk</li>
|
18 |
+
<li>Caching of feeds (site, categories, tags, comments, search results) in memory or on disk</li>
|
19 |
<li>Caching of search results pages (i.e. <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables) in memory or on disk</li>
|
20 |
<li>Minification of posts / pages and feeds</li>
|
21 |
<li>Minification (concatenation and white space removal) of inline, external or 3rd party JavaScript / <acronym title="Cascading Style Sheet">CSS</acronym> with automated updates</li>
|
24 |
<li>Import post attachments directly into the Media Library (and <acronym title="Content Delivery Network">CDN</acronym>)</li>
|
25 |
</ul>
|
26 |
|
27 |
+
<p>Your users have less data to download, you can now serve more visitors at once without upgrading your hardware and you don't have to change how you do anything; just set it and forget it.</p>
|
28 |
|
29 |
<h4>Who do I thank for all of this?</h4>
|
30 |
|
inc/options/browsercache.phtml
ADDED
@@ -0,0 +1,270 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
|
3 |
+
<p>
|
4 |
+
Browser caching is currently <span class="w3tc-<?php if ($browsercache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
5 |
+
</p>
|
6 |
+
|
7 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
8 |
+
<fieldset>
|
9 |
+
<legend>General</legend>
|
10 |
+
|
11 |
+
<p>Specify global browser cache policy.</p>
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr>
|
15 |
+
<th>
|
16 |
+
<label><input id="browsercache_expires" type="checkbox" name="expires" value="1"<?php checked($browsercache_expires, true); ?> /> Set expires header</label>
|
17 |
+
<br /><span class="description">Set the expires header to encourage browser caching of files.</span>
|
18 |
+
</th>
|
19 |
+
</tr>
|
20 |
+
<tr>
|
21 |
+
<th>
|
22 |
+
<label><input id="browsercache_cache_control" type="checkbox" name="cache_control" value="1"<?php checked($browsercache_cache_control, true); ?> /> Set cache control header</label>
|
23 |
+
<br /><span class="description">Set pragma and cache-control headers to encourage browser caching of files.</span>
|
24 |
+
</th>
|
25 |
+
</tr>
|
26 |
+
<tr>
|
27 |
+
<th>
|
28 |
+
<label><input id="browsercache_etag" type="checkbox" name="etag" value="1"<?php checked($browsercache_etag, true); ?> /> Set entity tag (eTag)</label>
|
29 |
+
<br /><span class="description">Set the Etag header to encourage browser caching of files.</span>
|
30 |
+
</th>
|
31 |
+
</tr>
|
32 |
+
<tr>
|
33 |
+
<th>
|
34 |
+
<label><input id="browsercache_w3tc" type="checkbox" name="w3tc" value="1"<?php checked($browsercache_w3tc, true); ?> /> Set W3 Total Cache header</label>
|
35 |
+
<br /><span class="description">Set this header to assist in identifying optimized files.</span>
|
36 |
+
</th>
|
37 |
+
</tr>
|
38 |
+
<tr>
|
39 |
+
<th>
|
40 |
+
<label><input id="browsercache_compression" type="checkbox" name="compression"<?php checked($browsercache_compression, true); ?> value="1" /> Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> (gzip) compression</label>
|
41 |
+
<br /><span class="description">Reduce the download time for text-based files.</span>
|
42 |
+
</th>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<th>
|
46 |
+
<input type="hidden" name="browsercache.no404wp" value="0" />
|
47 |
+
<label><input type="checkbox" name="browsercache.no404wp" value="1"<?php checked($this->_config->get_boolean('browsercache.no404wp'), true); ?> /> Do not process 404 errors for static objects with WordPress</label>
|
48 |
+
<br /><span class="description">Reduce server load by allowing the web server to handle 404 errors for static files, like images etc.</span>
|
49 |
+
</th>
|
50 |
+
</tr>
|
51 |
+
</table>
|
52 |
+
|
53 |
+
<p class="submit">
|
54 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
55 |
+
</p>
|
56 |
+
</fieldset>
|
57 |
+
|
58 |
+
<fieldset>
|
59 |
+
<legend>Cascading Style Sheets & JavaScript</legend>
|
60 |
+
|
61 |
+
<p>Specify browser cache policy for cascading style sheets and JavaScript files.</p>
|
62 |
+
|
63 |
+
<table class="form-table">
|
64 |
+
<tr>
|
65 |
+
<th colspan="2">
|
66 |
+
<input type="hidden" name="browsercache.cssjs.expires" value="0" />
|
67 |
+
<label><input class="browsercache_expires" type="checkbox" name="browsercache.cssjs.expires" value="1"<?php checked($this->_config->get_boolean('browsercache.cssjs.expires'), true); ?> /> Set expires header</label>
|
68 |
+
<br /><span class="description">Set the expires header to encourage browser caching of files.</span>
|
69 |
+
</th>
|
70 |
+
</tr>
|
71 |
+
<tr>
|
72 |
+
<th valign="top">
|
73 |
+
<label for="browsercache_cssjs_lifetime">Expires header lifetime:</label>
|
74 |
+
</th>
|
75 |
+
<td>
|
76 |
+
<input id="browsercache_cssjs_lifetime" type="text" name="browsercache.cssjs.lifetime" value="<?php echo $this->_config->get_integer('browsercache.cssjs.lifetime'); ?>" size="8" /> seconds
|
77 |
+
</td>
|
78 |
+
</tr>
|
79 |
+
<tr>
|
80 |
+
<th colspan="2">
|
81 |
+
<input type="hidden" name="browsercache.cssjs.cache.control" value="0" />
|
82 |
+
<label><input class="browsercache_cache_control" type="checkbox" name="browsercache.cssjs.cache.control" value="1"<?php checked($this->_config->get_boolean('browsercache.cssjs.cache.control'), true); ?> /> Set cache control header</label>
|
83 |
+
<br /><span class="description">Set pragma and cache-control headers to encourage browser caching of files.</span>
|
84 |
+
</th>
|
85 |
+
</tr>
|
86 |
+
<tr>
|
87 |
+
<th valign="top">
|
88 |
+
<label for="browsercache_cssjs_cache_policy">Cache Control policy:</label>
|
89 |
+
</th>
|
90 |
+
<td>
|
91 |
+
<select id="browsercache_cssjs_cache_policy" name="browsercache.cssjs.cache.policy">
|
92 |
+
<?php $value = $this->_config->get_string('browsercache.cssjs.cache.policy'); ?>
|
93 |
+
<option value="cache"<?php selected($value, 'cache'); ?>>cache ("public")</option>
|
94 |
+
<option value="cache_validation"<?php selected($value, 'cache_validation'); ?>>cache with validation ("public, must-revalidate, proxy-revalidate")</option>
|
95 |
+
<option value="cache_noproxy"<?php selected($value, 'cache_noproxy'); ?>>cache without proxy ("private, must-revalidate")</option>
|
96 |
+
<option value="cache_maxage"<?php selected($value, 'cache_maxage'); ?>>cache with max-age ("max-age=EXPIRES_SECONDS, public, must-revalidate, proxy-revalidate")</option>
|
97 |
+
<option value="no_cache"<?php selected($value, 'no_cache'); ?>>no-cache ("max-age=0, private, no-store, no-cache, must-revalidate")</option>
|
98 |
+
</select>
|
99 |
+
</td>
|
100 |
+
</tr>
|
101 |
+
<tr>
|
102 |
+
<th colspan="2">
|
103 |
+
<input type="hidden" name="browsercache.cssjs.etag" value="0" />
|
104 |
+
<label><input class="browsercache_etag" type="checkbox" name="browsercache.cssjs.etag" value="1"<?php checked($this->_config->get_boolean('browsercache.cssjs.etag'), true); ?> /> Set entity tag (eTag)</label>
|
105 |
+
<br /><span class="description">Set the Etag header to encourage browser caching of files.</span>
|
106 |
+
</th>
|
107 |
+
</tr>
|
108 |
+
<tr>
|
109 |
+
<th colspan="2">
|
110 |
+
<input type="hidden" name="browsercache.cssjs.w3tc" value="0" />
|
111 |
+
<label><input class="browsercache_w3tc" type="checkbox" name="browsercache.cssjs.w3tc" value="1"<?php checked($this->_config->get_boolean('browsercache.cssjs.w3tc'), true); ?> /> Set W3 Total Cache header</label>
|
112 |
+
<br /><span class="description">Set this header to assist in identifying optimized files.</span>
|
113 |
+
</th>
|
114 |
+
</tr>
|
115 |
+
<tr>
|
116 |
+
<th colspan="2">
|
117 |
+
<input type="hidden" name="browsercache.cssjs.compression" value="0" />
|
118 |
+
<label><input class="browsercache_compression" type="checkbox" name="browsercache.cssjs.compression" value="1"<?php checked($this->_config->get_boolean('browsercache.cssjs.compression'), true); ?> /> Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> (gzip) compression</label>
|
119 |
+
<br /><span class="description">Reduce the download time for text-based files.</span>
|
120 |
+
</th>
|
121 |
+
</tr>
|
122 |
+
</table>
|
123 |
+
|
124 |
+
<p class="submit">
|
125 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
126 |
+
</p>
|
127 |
+
</fieldset>
|
128 |
+
|
129 |
+
<fieldset>
|
130 |
+
<legend><acronym title="Hypertext Markup Language">HTML</acronym></legend>
|
131 |
+
|
132 |
+
<p>Specify browser cache policy for posts, pages, feeds and text-based files.</p>
|
133 |
+
|
134 |
+
<table class="form-table">
|
135 |
+
<tr>
|
136 |
+
<th colspan="2">
|
137 |
+
<input type="hidden" name="browsercache.html.expires" value="0" />
|
138 |
+
<label><input class="browsercache_expires" type="checkbox" name="browsercache.html.expires" value="1"<?php checked($this->_config->get_boolean('browsercache.html.expires'), true); ?> /> Set expires header</label>
|
139 |
+
<br /><span class="description">Set the expires header to encourage browser caching of files.</span>
|
140 |
+
</th>
|
141 |
+
</tr>
|
142 |
+
<tr>
|
143 |
+
<th valign="top" style="width: 250px;">
|
144 |
+
<label for="browsercache_html_lifetime">Expires header lifetime:</label>
|
145 |
+
</th>
|
146 |
+
<td>
|
147 |
+
<input id="browsercache_html_lifetime" type="text" name="browsercache.html.lifetime" value="<?php echo $this->_config->get_integer('browsercache.html.lifetime'); ?>" size="8" /> seconds
|
148 |
+
</td>
|
149 |
+
</tr>
|
150 |
+
<tr>
|
151 |
+
<th colspan="2">
|
152 |
+
<input type="hidden" name="browsercache.html.cache.control" value="0" />
|
153 |
+
<label><input class="browsercache_cache_control" type="checkbox" name="browsercache.html.cache.control" value="1"<?php checked($this->_config->get_boolean('browsercache.html.cache.control'), true); ?> /> Set cache control header</label>
|
154 |
+
<br /><span class="description">Set pragma and cache-control headers to encourage browser caching of files.</span>
|
155 |
+
</th>
|
156 |
+
</tr>
|
157 |
+
<tr>
|
158 |
+
<th valign="top">
|
159 |
+
<label for="browsercache_html_cache_policy">Cache Control policy:</label>
|
160 |
+
</th>
|
161 |
+
<td>
|
162 |
+
<select id="browsercache_html_cache_policy" name="browsercache.html.cache.policy">
|
163 |
+
<?php $value = $this->_config->get_string('browsercache.html.cache.policy'); ?>
|
164 |
+
<option value="cache"<?php selected($value, 'cache'); ?>>cache ("public")</option>
|
165 |
+
<option value="cache_validation"<?php selected($value, 'cache_validation'); ?>>cache with validation ("public, must-revalidate, proxy-revalidate")</option>
|
166 |
+
<option value="cache_noproxy"<?php selected($value, 'cache_noproxy'); ?>>cache without proxy ("private, must-revalidate")</option>
|
167 |
+
<option value="cache_maxage"<?php selected($value, 'cache_maxage'); ?>>cache with max-age ("max-age=EXPIRES_SECONDS, public, must-revalidate, proxy-revalidate")</option>
|
168 |
+
<option value="no_cache"<?php selected($value, 'no_cache'); ?>>no-cache ("max-age=0, private, no-store, no-cache, must-revalidate")</option>
|
169 |
+
</select>
|
170 |
+
</td>
|
171 |
+
</tr>
|
172 |
+
<tr>
|
173 |
+
<th colspan="2">
|
174 |
+
<input type="hidden" name="browsercache.html.etag" value="0" />
|
175 |
+
<label><input class="browsercache_etag" type="checkbox" name="browsercache.html.etag" value="1"<?php checked($this->_config->get_boolean('browsercache.html.etag'), true); ?> /> Set entity tag (eTag)</label>
|
176 |
+
<br /><span class="description">Set the Etag header to encourage browser caching of files.</span>
|
177 |
+
</th>
|
178 |
+
</tr>
|
179 |
+
<tr>
|
180 |
+
<th colspan="2">
|
181 |
+
<input type="hidden" name="browsercache.html.w3tc" value="0" />
|
182 |
+
<label><input class="browsercache_w3tc" type="checkbox" name="browsercache.html.w3tc" value="1"<?php checked($this->_config->get_boolean('browsercache.html.w3tc'), true); ?> /> Set W3 Total Cache header</label>
|
183 |
+
<br /><span class="description">Set this header to assist in identifying optimized files.</span>
|
184 |
+
</th>
|
185 |
+
</tr>
|
186 |
+
<tr>
|
187 |
+
<th colspan="2">
|
188 |
+
<input type="hidden" name="browsercache.html.compression" value="0" />
|
189 |
+
<label><input class="browsercache_compression" type="checkbox" name="browsercache.html.compression" value="1"<?php checked($this->_config->get_boolean('browsercache.html.compression'), true); ?> /> Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> (gzip) compression</label>
|
190 |
+
<br /><span class="description">Reduce the download time for text-based files.</span>
|
191 |
+
</th>
|
192 |
+
</tr>
|
193 |
+
</table>
|
194 |
+
|
195 |
+
<p class="submit">
|
196 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
197 |
+
</p>
|
198 |
+
</fieldset>
|
199 |
+
|
200 |
+
<fieldset>
|
201 |
+
<legend>Media & Other Files</legend>
|
202 |
+
|
203 |
+
<table class="form-table">
|
204 |
+
<tr>
|
205 |
+
<th colspan="2">
|
206 |
+
<input type="hidden" name="browsercache.other.expires" value="0" />
|
207 |
+
<label><input class="browsercache_expires" type="checkbox" name="browsercache.other.expires" value="1"<?php checked($this->_config->get_boolean('browsercache.other.expires'), true); ?> /> Set expires header</label>
|
208 |
+
<br /><span class="description">Set the expires header to encourage browser caching of files.</span>
|
209 |
+
</th>
|
210 |
+
</tr>
|
211 |
+
<tr>
|
212 |
+
<th valign="top" style="width: 250px;">
|
213 |
+
<label for="browsercache_other_lifetime">Expires header lifetime:</label>
|
214 |
+
</th>
|
215 |
+
<td>
|
216 |
+
<input id="browsercache_other_lifetime" type="text" name="browsercache.other.lifetime" value="<?php echo $this->_config->get_integer('browsercache.other.lifetime'); ?>" size="8" /> seconds
|
217 |
+
</td>
|
218 |
+
</tr>
|
219 |
+
<tr>
|
220 |
+
<th colspan="2">
|
221 |
+
<input type="hidden" name="browsercache.other.cache.control" value="0" />
|
222 |
+
<label><input class="browsercache_cache_control" type="checkbox" name="browsercache.other.cache.control" value="1"<?php checked($this->_config->get_boolean('browsercache.other.cache.control'), true); ?> /> Set cache control header</label>
|
223 |
+
<br /><span class="description">Set pragma and cache-control headers to encourage browser caching of files.</span>
|
224 |
+
</th>
|
225 |
+
</tr>
|
226 |
+
<tr>
|
227 |
+
<th valign="top">
|
228 |
+
<label for="browsercache_other_cache_policy">Cache Control policy:</label>
|
229 |
+
</th>
|
230 |
+
<td>
|
231 |
+
<select id="browsercache_other_cache_policy" name="browsercache.other.cache.policy">
|
232 |
+
<?php $value = $this->_config->get_string('browsercache.other.cache.policy'); ?>
|
233 |
+
<option value="cache"<?php selected($value, 'cache'); ?>>cache ("public")</option>
|
234 |
+
<option value="cache_validation"<?php selected($value, 'cache_validation'); ?>>cache with validation ("public, must-revalidate, proxy-revalidate")</option>
|
235 |
+
<option value="cache_noproxy"<?php selected($value, 'cache_noproxy'); ?>>cache without proxy ("private, must-revalidate")</option>
|
236 |
+
<option value="cache_maxage"<?php selected($value, 'cache_maxage'); ?>>cache with max-age ("max-age=EXPIRES_SECONDS, public, must-revalidate, proxy-revalidate")</option>
|
237 |
+
<option value="no_cache"<?php selected($value, 'no_cache'); ?>>no-cache ("max-age=0, private, no-store, no-cache, must-revalidate")</option>
|
238 |
+
</select>
|
239 |
+
</td>
|
240 |
+
</tr>
|
241 |
+
<tr>
|
242 |
+
<th colspan="2">
|
243 |
+
<input type="hidden" name="browsercache.other.etag" value="0" />
|
244 |
+
<label><input class="browsercache_etag" type="checkbox" name="browsercache.other.etag" value="1"<?php checked($this->_config->get_boolean('browsercache.other.etag'), true); ?> /> Set entity tag (eTag)</label>
|
245 |
+
<br /><span class="description">Set the Etag header to encourage browser caching of files.</span>
|
246 |
+
</th>
|
247 |
+
</tr>
|
248 |
+
<tr>
|
249 |
+
<th colspan="2">
|
250 |
+
<input type="hidden" name="browsercache.other.w3tc" value="0" />
|
251 |
+
<label><input class="browsercache_w3tc" type="checkbox" name="browsercache.other.w3tc" value="1"<?php checked($this->_config->get_boolean('browsercache.other.w3tc'), true); ?> /> Set W3 Total Cache header</label>
|
252 |
+
<br /><span class="description">Set this header to assist in identifying optimized files.</span>
|
253 |
+
</th>
|
254 |
+
</tr>
|
255 |
+
<tr>
|
256 |
+
<th colspan="2">
|
257 |
+
<input type="hidden" name="browsercache.other.compression" value="0" />
|
258 |
+
<label><input class="browsercache_compression" type="checkbox" name="browsercache.other.compression" value="1"<?php checked($this->_config->get_boolean('browsercache.other.compression'), true); ?> /> Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> (gzip) compression</label>
|
259 |
+
<br /><span class="description">Reduce the download time for text-based files.</span>
|
260 |
+
</th>
|
261 |
+
</tr>
|
262 |
+
</table>
|
263 |
+
|
264 |
+
<p class="submit">
|
265 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
266 |
+
</p>
|
267 |
+
</fieldset>
|
268 |
+
</form>
|
269 |
+
|
270 |
+
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/cdn.phtml
CHANGED
@@ -1,25 +1,28 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<
|
4 |
-
|
5 |
-
<
|
|
|
|
|
6 |
|
7 |
<?php if ($cdn_mirror): ?>
|
8 |
<p>
|
9 |
-
|
10 |
-
<input id="cdn_import_library" class="button" type="button" value="
|
11 |
</p>
|
12 |
<?php else: ?>
|
13 |
<p>
|
14 |
-
|
15 |
-
<input id="cdn_import_library" class="button" type="button" value="
|
16 |
-
<input id="
|
17 |
-
<input id="
|
|
|
18 |
</p>
|
19 |
<?php endif; ?>
|
20 |
|
21 |
-
<form action="
|
22 |
-
<fieldset id="cdn-general">
|
23 |
<legend>General</legend>
|
24 |
|
25 |
<table class="form-table">
|
@@ -38,8 +41,8 @@
|
|
38 |
<tr>
|
39 |
<th<?php if ($cdn_mirror): ?> colspan="2"<?php endif; ?>>
|
40 |
<input type="hidden" name="cdn.theme.enable" value="0" />
|
41 |
-
<label><input type="checkbox" name="cdn.theme.enable" value="1"<?php checked($this->_config->get_boolean('cdn.theme.enable'), true); ?> /> Host
|
42 |
-
<span class="description">If checked, all
|
43 |
</th>
|
44 |
<?php if (! $cdn_mirror): ?>
|
45 |
<td>
|
@@ -49,13 +52,13 @@
|
|
49 |
</tr>
|
50 |
<tr>
|
51 |
<th<?php if ($cdn_mirror): ?> colspan="2"<?php endif; ?>>
|
52 |
-
<input type="hidden" name="cdn.minify.enable" value="0"<?php if (! W3TC_PHP5 || ! $minify_enabled): ?> disabled="disabled"<?php endif; ?> />
|
53 |
-
<label><input type="checkbox" name="cdn.minify.enable" value="1"<?php checked($this->_config->get_boolean('cdn.minify.enable'), true); ?><?php if (! W3TC_PHP5 || ! $minify_enabled): ?> disabled="disabled"<?php endif; ?> /> Host minified <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files</label><br />
|
54 |
<span class="description">If checked, minified <acronym>CSS</acronym> and <acronym>JS</acronym> files will be hosted with the <acronym title="Content Delivery Network">CDN</acronym>.</span>
|
55 |
</th>
|
56 |
<?php if (! $cdn_mirror): ?>
|
57 |
<td>
|
58 |
-
<input class="button cdn_export" type="button" name="minify" value="Upload minify files"<?php if (! W3TC_PHP5 || ! $minify_enabled): ?> disabled="disabled"<?php endif; ?> />
|
59 |
</td>
|
60 |
<?php endif; ?>
|
61 |
</tr>
|
@@ -88,38 +91,53 @@
|
|
88 |
</tr>
|
89 |
<?php endif; ?>
|
90 |
</table>
|
91 |
-
|
92 |
<p class="submit">
|
93 |
-
<input type="submit" name="
|
94 |
</p>
|
95 |
</fieldset>
|
96 |
-
|
97 |
<fieldset>
|
98 |
<legend>Configuration</legend>
|
99 |
|
100 |
<table class="form-table">
|
101 |
-
<?php
|
102 |
switch ($cdn_engine) {
|
103 |
case 'mirror':
|
|
|
104 |
case 'ftp':
|
105 |
case 's3':
|
106 |
case 'cf':
|
|
|
107 |
include W3TC_DIR . '/inc/options/cdn/' . $cdn_engine . '.phtml';
|
108 |
break;
|
109 |
-
}
|
110 |
?>
|
111 |
</table>
|
112 |
-
|
113 |
<p class="submit">
|
114 |
-
<input type="submit" name="
|
115 |
</p>
|
116 |
</fieldset>
|
117 |
-
|
118 |
<fieldset>
|
119 |
<legend>Advanced</legend>
|
120 |
|
121 |
<table class="form-table">
|
122 |
<?php if (! $cdn_mirror): ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
<tr>
|
124 |
<th><label for="cdn_limit_queue">Re-transfer cycle limit:</label></th>
|
125 |
<td>
|
@@ -171,11 +189,26 @@
|
|
171 |
</td>
|
172 |
</tr>
|
173 |
</table>
|
174 |
-
|
175 |
<p class="submit">
|
176 |
-
<input type="submit" name="
|
177 |
</p>
|
178 |
</fieldset>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
</form>
|
180 |
|
181 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
+
<p>
|
4 |
+
Content Delivery Network support via
|
5 |
+
<strong><?php echo w3_get_engine_name($this->_config->get_string('cdn.engine')); ?></strong>
|
6 |
+
is currently <span class="w3tc-<?php if ($cdn_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
7 |
+
</p>
|
8 |
|
9 |
<?php if ($cdn_mirror): ?>
|
10 |
<p>
|
11 |
+
Maximize <acronym title="Content Delivery Network">CDN</acronym> usage by <input id="cdn_rename_domain" class="button" type="button" value="modify attachment URLs" /> or
|
12 |
+
<input id="cdn_import_library" class="button" type="button" value="importing attachments into the Media Library" />.
|
13 |
</p>
|
14 |
<?php else: ?>
|
15 |
<p>
|
16 |
+
Prepare the <acronym title="Content Delivery Network">CDN</acronym> by:
|
17 |
+
<input id="cdn_import_library" class="button" type="button" value="importing attachments into the Media Library" /> then
|
18 |
+
<input id="cdn_export_library" class="button" type="button" value="exporting media library to CDN" />.
|
19 |
+
Check <input id="cdn_queue" class="button" type="button" value="unsuccessful file transfers" /> if some objects appear to be missing.
|
20 |
+
<input id="cdn_rename_domain" class="button" type="button" value="Modify attachment URLs" /> if the domain name of your site has ever changed.
|
21 |
</p>
|
22 |
<?php endif; ?>
|
23 |
|
24 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
25 |
+
<fieldset id="w3tc-cdn-general">
|
26 |
<legend>General</legend>
|
27 |
|
28 |
<table class="form-table">
|
41 |
<tr>
|
42 |
<th<?php if ($cdn_mirror): ?> colspan="2"<?php endif; ?>>
|
43 |
<input type="hidden" name="cdn.theme.enable" value="0" />
|
44 |
+
<label><input type="checkbox" name="cdn.theme.enable" value="1"<?php checked($this->_config->get_boolean('cdn.theme.enable'), true); ?> /> Host theme files</label><br />
|
45 |
+
<span class="description">If checked, all theme file types specified in the "theme file types to upload" field below will be hosted with the <acronym title="Content Delivery Network">CDN</acronym>.</span>
|
46 |
</th>
|
47 |
<?php if (! $cdn_mirror): ?>
|
48 |
<td>
|
52 |
</tr>
|
53 |
<tr>
|
54 |
<th<?php if ($cdn_mirror): ?> colspan="2"<?php endif; ?>>
|
55 |
+
<input type="hidden" name="cdn.minify.enable" value="0"<?php if (! W3TC_PHP5 || ! $minify_enabled || ! $this->_config->get_boolean('minify.rewrite')): ?> disabled="disabled"<?php endif; ?> />
|
56 |
+
<label><input type="checkbox" name="cdn.minify.enable" value="1"<?php checked($this->_config->get_boolean('cdn.minify.enable'), true); ?><?php if (! W3TC_PHP5 || ! $minify_enabled || ! $this->_config->get_boolean('minify.rewrite')): ?> disabled="disabled"<?php endif; ?> /> Host minified <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files</label><br />
|
57 |
<span class="description">If checked, minified <acronym>CSS</acronym> and <acronym>JS</acronym> files will be hosted with the <acronym title="Content Delivery Network">CDN</acronym>.</span>
|
58 |
</th>
|
59 |
<?php if (! $cdn_mirror): ?>
|
60 |
<td>
|
61 |
+
<input class="button cdn_export" type="button" name="minify" value="Upload minify files"<?php if (! W3TC_PHP5 || ! $minify_enabled || ! $this->_config->get_boolean('minify.rewrite')): ?> disabled="disabled"<?php endif; ?> />
|
62 |
</td>
|
63 |
<?php endif; ?>
|
64 |
</tr>
|
91 |
</tr>
|
92 |
<?php endif; ?>
|
93 |
</table>
|
94 |
+
|
95 |
<p class="submit">
|
96 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
97 |
</p>
|
98 |
</fieldset>
|
99 |
+
|
100 |
<fieldset>
|
101 |
<legend>Configuration</legend>
|
102 |
|
103 |
<table class="form-table">
|
104 |
+
<?php
|
105 |
switch ($cdn_engine) {
|
106 |
case 'mirror':
|
107 |
+
case 'netdna':
|
108 |
case 'ftp':
|
109 |
case 's3':
|
110 |
case 'cf':
|
111 |
+
case 'rscf':
|
112 |
include W3TC_DIR . '/inc/options/cdn/' . $cdn_engine . '.phtml';
|
113 |
break;
|
114 |
+
}
|
115 |
?>
|
116 |
</table>
|
117 |
+
|
118 |
<p class="submit">
|
119 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
120 |
</p>
|
121 |
</fieldset>
|
122 |
+
|
123 |
<fieldset>
|
124 |
<legend>Advanced</legend>
|
125 |
|
126 |
<table class="form-table">
|
127 |
<?php if (! $cdn_mirror): ?>
|
128 |
+
<tr>
|
129 |
+
<th valign="top">
|
130 |
+
<input type="hidden" name="cdn.autoupload.enabled" value="0" />
|
131 |
+
<label><input type="checkbox" name="cdn.autoupload.enabled" value="1"<?php checked($this->_config->get_boolean('cdn.autoupload.enabled'), true); ?> /> Enable changed files auto-upload</label>
|
132 |
+
</th>
|
133 |
+
<td>
|
134 |
+
<label style="font-size:13px;">
|
135 |
+
Auto upload interval:
|
136 |
+
<input id="cdn_autoupload_interval" type="text" name="cdn.autoupload.interval" value="<?php echo $this->_config->get_integer('cdn.autoupload.interval'); ?>" size="8" /> seconds
|
137 |
+
</label><br />
|
138 |
+
<span class="description">Automatically attempt to find and upload changed files.</span>
|
139 |
+
</td>
|
140 |
+
</tr>
|
141 |
<tr>
|
142 |
<th><label for="cdn_limit_queue">Re-transfer cycle limit:</label></th>
|
143 |
<td>
|
189 |
</td>
|
190 |
</tr>
|
191 |
</table>
|
192 |
+
|
193 |
<p class="submit">
|
194 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
195 |
</p>
|
196 |
</fieldset>
|
197 |
+
|
198 |
+
<fieldset>
|
199 |
+
<legend>Note(s):</legend>
|
200 |
+
|
201 |
+
<table class="form-table">
|
202 |
+
<tr>
|
203 |
+
<th valign="top" colspan="2">
|
204 |
+
<ul>
|
205 |
+
<li>If using Amazon Web Services or Self-Hosted <acronym title="Content Delivery Network">CDN</acronym> types, enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression in the "Media & Other Files" section on <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> Settings tab.</li>
|
206 |
+
</ul>
|
207 |
+
</th>
|
208 |
+
</tr>
|
209 |
+
</table>
|
210 |
+
|
211 |
+
</fieldset>
|
212 |
</form>
|
213 |
|
214 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/cdn/cf.phtml
CHANGED
@@ -1,30 +1,33 @@
|
|
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 |
-
|
|
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th style="width:300px;"><label for="cdn_cf_key">Access key ID:</label></th>
|
3 |
+
<td>
|
4 |
+
<input id="cdn_cf_key" type="text" name="cdn.cf.key" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.key')); ?>" size="30" />
|
5 |
+
</td>
|
6 |
+
</tr>
|
7 |
+
<tr>
|
8 |
+
<th><label for="cdn_cf_secret">Secret key:</label></th>
|
9 |
+
<td>
|
10 |
+
<input id="cdn_cf_secret" type="password" name="cdn.cf.secret" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.secret')); ?>" size="60" />
|
11 |
+
</td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="cdn_cf_bucket">Bucket:</label></th>
|
15 |
+
<td>
|
16 |
+
<input id="cdn_cf_bucket" type="text" name="cdn.cf.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.bucket')); ?>" size="30" />
|
17 |
+
<input id="cdn_create_container" class="button cdn_cf" type="button" value="Create bucket" />
|
18 |
+
<span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
|
19 |
+
</td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="cdn_cf_id">Replace site's hostname with:</label></th>
|
23 |
+
<td>
|
24 |
+
<input id="cdn_cf_id" type="text" name="cdn.cf.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.id')); ?>" size="18" style="text-align:right;" />.cloudfront.net or CNAME:
|
25 |
+
<?php $cnames = $this->_config->get_array('cdn.cf.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
26 |
+
<br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th colspan="2">
|
31 |
+
<input id="cdn_test" class="button cdn_cf" type="button" value="Test CloudFront upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
32 |
+
</th>
|
33 |
+
</tr>
|
inc/options/cdn/common/cnames.phtml
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<ol id="cdn_cnames">
|
2 |
+
<?php
|
3 |
+
if (! count($cnames)) {
|
4 |
+
$cnames = array('');
|
5 |
+
}
|
6 |
+
|
7 |
+
$count = count($cnames);
|
8 |
+
|
9 |
+
foreach ($cnames as $index => $cname):
|
10 |
+
$label = '';
|
11 |
+
|
12 |
+
if ($count > 1):
|
13 |
+
switch ($index):
|
14 |
+
case 0:
|
15 |
+
$label = '(reserved for CSS)';
|
16 |
+
break;
|
17 |
+
|
18 |
+
case 1:
|
19 |
+
$label = '(reserved for JS in <head>)';
|
20 |
+
break;
|
21 |
+
|
22 |
+
case 2:
|
23 |
+
$label = '(reserved for JS after <body>)';
|
24 |
+
break;
|
25 |
+
|
26 |
+
case 3:
|
27 |
+
$label = '(reserved for JS before </body>)';
|
28 |
+
break;
|
29 |
+
|
30 |
+
default:
|
31 |
+
$label = '';
|
32 |
+
break;
|
33 |
+
endswitch;
|
34 |
+
endif;
|
35 |
+
?>
|
36 |
+
<li>
|
37 |
+
<input type="text" name="cdn_cnames[]" value="<?php echo htmlspecialchars($cname); ?>" size="30" />
|
38 |
+
<input class="button cdn_cname_delete" type="button" value="Delete"<?php if (!$index): ?> style="display: none;"<?php endif; ?> />
|
39 |
+
<span><?php echo htmlspecialchars($label); ?></span>
|
40 |
+
</li>
|
41 |
+
<?php endforeach; ?>
|
42 |
+
</ol>
|
43 |
+
<input id="cdn_cname_add" class="button" type="button" value="Add CNAME" />
|
inc/options/cdn/ftp.phtml
CHANGED
@@ -1,43 +1,45 @@
|
|
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 |
-
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th colspan="2">
|
3 |
+
<input type="hidden" name="cdn.ftp.pasv" value="0" />
|
4 |
+
<label><input id="cdn_ftp_pasv" type="checkbox" name="cdn.ftp.pasv" value="1"<?php checked($this->_config->get_boolean('cdn.ftp.pasv'), true); ?> /> Use passive <acronym title="File Transfer Protocol">FTP</acronym> mode</label><br />
|
5 |
+
<span class="description">Enable this option only if there are connectivity issues, otherwise it's not recommended.</span>
|
6 |
+
</th>
|
7 |
+
</tr>
|
8 |
+
<tr>
|
9 |
+
<th style="width:300px;"><label for="cdn_ftp_host"><acronym title="File Transfer Protocol">FTP</acronym> hostname:</label></th>
|
10 |
+
<td>
|
11 |
+
<input id="cdn_ftp_host" type="text" name="cdn.ftp.host" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.ftp.host')); ?>" size="30" /><br />
|
12 |
+
<span class="description">Specify the server's address, e.g.: "ftp.domain.com". Try "127.0.0.1" if using a sub-domain on the same server as your site.</span>
|
13 |
+
</td>
|
14 |
+
</tr>
|
15 |
+
<tr>
|
16 |
+
<th><label for="cdn_ftp_user"><acronym title="File Transfer Protocol">FTP</acronym> username:</label></th>
|
17 |
+
<td>
|
18 |
+
<input id="cdn_ftp_user" type="text" name="cdn.ftp.user" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.ftp.user')); ?>" size="30" />
|
19 |
+
</td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="cdn_ftp_pass"><acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
23 |
+
<td>
|
24 |
+
<input id="cdn_ftp_pass" type="password" name="cdn.ftp.pass" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.ftp.pass')); ?>" size="30" />
|
25 |
+
</td>
|
26 |
+
</tr>
|
27 |
+
<tr>
|
28 |
+
<th><label for="cdn_ftp_path"><acronym title="File Transfer Protocol">FTP</acronym> path:</label></th>
|
29 |
+
<td>
|
30 |
+
<input id="cdn_ftp_path" type="text" name="cdn.ftp.path" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.ftp.path')); ?>" size="30" /><br />
|
31 |
+
<span class="description">Specify the directory where files must be uploaded to be accessible in a web browser (the document root).</span>
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<th><label for="cdn_cnames">Replace site's hostname with:</label></th>
|
36 |
+
<td>
|
37 |
+
<?php $cnames = $this->_config->get_array('cdn.ftp.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
38 |
+
<br /><span class="description">Enter the hostname or CNAME(s) of your FTP server configured above, these values will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
|
39 |
+
</td>
|
40 |
+
</tr>
|
41 |
+
<tr>
|
42 |
+
<th colspan="2">
|
43 |
+
<input id="cdn_test" class="button cdn_ftp" type="button" value="Test FTP server" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
44 |
+
</th>
|
45 |
+
</tr>
|
inc/options/cdn/mirror.phtml
CHANGED
@@ -1,7 +1,12 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th style="width:300px;"><label for="cdn_cnames">Replace site's hostname with:</label></th>
|
3 |
+
<td>
|
4 |
+
<?php $cnames = $this->_config->get_array('cdn.mirror.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
5 |
+
<br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
|
6 |
+
</td>
|
7 |
+
</tr>
|
8 |
+
<tr>
|
9 |
+
<th colspan="2">
|
10 |
+
<input id="cdn_test" class="button cdn_mirror" type="button" value="Test Mirror" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
11 |
+
</th>
|
12 |
+
</tr>
|
inc/options/cdn/netdna.phtml
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th style="width:300px;"><label for="cdn_netdna_apiid">API ID:</label></th>
|
3 |
+
<td>
|
4 |
+
<input id="cdn_netdna_apiid" type="text" name="cdn.netdna.apiid" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.netdna.apiid')); ?>" size="60" />
|
5 |
+
</td>
|
6 |
+
</tr>
|
7 |
+
<tr>
|
8 |
+
<th><label for="cdn_netdna_apikey">API key:</label></th>
|
9 |
+
<td>
|
10 |
+
<input id="cdn_netdna_apikey" type="text" name="cdn.netdna.apikey" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.netdna.apikey')); ?>" size="60" />
|
11 |
+
</td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="cdn_cnames">Replace site's hostname with:</label></th>
|
15 |
+
<td>
|
16 |
+
<?php $cnames = $this->_config->get_array('cdn.netdna.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
17 |
+
<br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
|
18 |
+
</td>
|
19 |
+
</tr>
|
20 |
+
<tr>
|
21 |
+
<th colspan="2">
|
22 |
+
<input id="cdn_test" class="button cdn_netdna" type="button" value="Test NetDNA" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
23 |
+
</th>
|
24 |
+
</tr>
|
inc/options/cdn/rscf.phtml
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th style="width:300px;"><label for="cdn_rscf_user">Username:</label></th>
|
3 |
+
<td>
|
4 |
+
<input id="cdn_rscf_user" type="text" name="cdn.rscf.user" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.user')); ?>" size="30" />
|
5 |
+
</td>
|
6 |
+
</tr>
|
7 |
+
<tr>
|
8 |
+
<th><label for="cdn_rscf_key"><acronym title="Application Programming Interface">API</acronym> key:</label></th>
|
9 |
+
<td>
|
10 |
+
<input id="cdn_rscf_key" type="password" name="cdn.rscf.key" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.key')); ?>" size="60" />
|
11 |
+
</td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="cdn_rscf_container">Container:</label></th>
|
15 |
+
<td>
|
16 |
+
<input id="cdn_rscf_container" type="text" name="cdn.rscf.container" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.container')); ?>" size="30" />
|
17 |
+
<input id="cdn_create_container" class="button cdn_rscf" type="button" value="Create container" />
|
18 |
+
<span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
|
19 |
+
</td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="cdn_rscf_id">Replace site's hostname with:</label></th>
|
23 |
+
<td>
|
24 |
+
<input id="cdn_rscf_id" type="text" name="cdn.rscf.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.id')); ?>" size="18" style="text-align:right;" />.cdn.cloudfiles.rackspacecloud.com or CNAME:
|
25 |
+
<?php $cnames = $this->_config->get_array('cdn.rscf.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
26 |
+
</td>
|
27 |
+
</tr>
|
28 |
+
<tr>
|
29 |
+
<th colspan="2">
|
30 |
+
<input id="cdn_test" class="button cdn_rscf" type="button" value="Test Cloud Files upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
31 |
+
</th>
|
32 |
+
</tr>
|
inc/options/cdn/s3.phtml
CHANGED
@@ -1,33 +1,37 @@
|
|
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 |
-
|
|
|
|
|
|
|
|
1 |
+
<tr>
|
2 |
+
<th style="width:300px;"><label for="cdn_s3_key">Access key ID:</label></th>
|
3 |
+
<td>
|
4 |
+
<input id="cdn_s3_key" type="text" name="cdn.s3.key" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.s3.key')); ?>" size="30" />
|
5 |
+
</td>
|
6 |
+
</tr>
|
7 |
+
<tr>
|
8 |
+
<th><label for="cdn_s3_secret">Secret key:</label></th>
|
9 |
+
<td>
|
10 |
+
<input id="cdn_s3_secret" type="password" name="cdn.s3.secret" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.s3.secret')); ?>" size="60" />
|
11 |
+
</td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="cdn_s3_bucket">Bucket:</label></th>
|
15 |
+
<td>
|
16 |
+
<input id="cdn_s3_bucket" type="text" name="cdn.s3.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.s3.bucket')); ?>" size="30" />
|
17 |
+
<input id="cdn_create_container" class="button cdn_s3" type="button" value="Create bucket" />
|
18 |
+
<span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
|
19 |
+
</td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="cdn_cnames">Replace site's hostname with:</label></th>
|
23 |
+
<td>
|
24 |
+
<?php if (($cdn_s3_bucket = $this->_config->get_string('cdn.s3.bucket')) != ''): ?>
|
25 |
+
<?php echo htmlspecialchars($cdn_s3_bucket); ?>.s3.amazonaws.com
|
26 |
+
<?php else: ?>
|
27 |
+
<bucket>.s3.amazonaws.com
|
28 |
+
<?php endif; ?> or CNAME:
|
29 |
+
<?php $cnames = $this->_config->get_array('cdn.s3.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
|
30 |
+
<br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonS3/latest/DeveloperGuide/VirtualHosting.html#VirtualHostingCustomURLs" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
|
31 |
+
</td>
|
32 |
+
</tr>
|
33 |
+
<tr>
|
34 |
+
<th colspan="2">
|
35 |
+
<input id="cdn_test" class="button cdn_s3" type="button" value="Test S3 upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
|
36 |
+
</th>
|
37 |
+
</tr>
|
inc/options/common/header.phtml
CHANGED
@@ -1,5 +1,3 @@
|
|
1 |
-
<script type="text/javascript" src="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/js/options.js"></script>
|
2 |
-
<script type="text/javascript" src="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/js/lightbox.js"></script>
|
3 |
<?php if ($this->_support_reminder): ?>
|
4 |
<script type="text/javascript">
|
5 |
/*<![CDATA[*/
|
@@ -12,33 +10,42 @@ jQuery(function($) {
|
|
12 |
|
13 |
<div class="wrap" id="w3tc">
|
14 |
<?php screen_icon('w3tc-logo'); ?>
|
15 |
-
|
16 |
-
<h2>W3 Total Cache
|
17 |
-
|
18 |
<?php foreach ($this->_errors as $error): ?>
|
19 |
<div class="error">
|
20 |
<p><?php echo $error; ?></p>
|
21 |
</div>
|
22 |
<?php endforeach; ?>
|
23 |
-
|
24 |
<?php foreach ($this->_notes as $note): ?>
|
25 |
<div class="updated fade">
|
26 |
<p><?php echo $note; ?></p>
|
27 |
</div>
|
28 |
<?php endforeach; ?>
|
29 |
|
30 |
-
|
31 |
-
<
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php if ($this->_support_reminder): ?>
|
2 |
<script type="text/javascript">
|
3 |
/*<![CDATA[*/
|
10 |
|
11 |
<div class="wrap" id="w3tc">
|
12 |
<?php screen_icon('w3tc-logo'); ?>
|
13 |
+
|
14 |
+
<h2>W3 Total Cache <span>by W3 EDGE <sup>®</sup></span></h2>
|
15 |
+
|
16 |
<?php foreach ($this->_errors as $error): ?>
|
17 |
<div class="error">
|
18 |
<p><?php echo $error; ?></p>
|
19 |
</div>
|
20 |
<?php endforeach; ?>
|
21 |
+
|
22 |
<?php foreach ($this->_notes as $note): ?>
|
23 |
<div class="updated fade">
|
24 |
<p><?php echo $note; ?></p>
|
25 |
</div>
|
26 |
<?php endforeach; ?>
|
27 |
|
28 |
+
<h3 id="w3tc-nav">
|
29 |
+
<label>
|
30 |
+
Viewing:
|
31 |
+
<select>
|
32 |
+
<optgroup label="Control Panels:">
|
33 |
+
<option value="w3tc_general"<?php selected($this->_page, 'w3tc_general'); ?>>General Settings</option>
|
34 |
+
<option value="w3tc_pgcache"<?php selected($this->_page, 'w3tc_pgcache'); ?>>Page Cache Settings</option>
|
35 |
+
<option value="w3tc_minify"<?php selected($this->_page, 'w3tc_minify'); ?>>Minify Settings</option>
|
36 |
+
<option value="w3tc_dbcache"<?php selected($this->_page, 'w3tc_dbcache'); ?>>Database Cache Settings</option>
|
37 |
+
<option value="w3tc_objectcache"<?php selected($this->_page, 'w3tc_objectcache'); ?>>Object Cache Settings</option>
|
38 |
+
<option value="w3tc_browsercache"<?php selected($this->_page, 'w3tc_browsercache'); ?>>Browser Cache Settings</option>
|
39 |
+
<option value="w3tc_mobile"<?php selected($this->_page, 'w3tc_mobile'); ?>>User Agent Groups Settings</option>
|
40 |
+
<option value="w3tc_cdn"<?php selected($this->_page, 'w3tc_cdn'); ?>>Content Delivery Network Settings </option>
|
41 |
+
</optgroup>
|
42 |
+
<optgroup label="Help:">
|
43 |
+
<option value="w3tc_faq"<?php selected($this->_page, 'w3tc_faq'); ?>>Frequently Asked Questions</option>
|
44 |
+
<option style="color: red;" value="w3tc_support"<?php selected($this->_page, 'w3tc_support'); ?>>Support</option>
|
45 |
+
<option value="w3tc_install"<?php selected($this->_page, 'w3tc_install'); ?>>Install</option>
|
46 |
+
<option value="w3tc_about"<?php selected($this->_page, 'w3tc_about'); ?>>About</option>
|
47 |
+
</optgroup>
|
48 |
+
</select>
|
49 |
+
</label>
|
50 |
+
</h3>
|
51 |
+
|
inc/options/common/help.phtml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="w3tc-help">
|
2 |
+
<p>Request professional <a href="admin.php?page=w3tc_support" style="color: red;"><strong>support</strong></a> or troubleshoot issues using the common questions below:</p>
|
3 |
+
|
4 |
+
<?php foreach ($columns as $questions): ?>
|
5 |
+
<ul>
|
6 |
+
<?php foreach ($questions as $question): ?>
|
7 |
+
<li>
|
8 |
+
<a href="admin.php?page=w3tc_faq#q<?php echo ++$q; ?>"><?php echo $question; ?></a>
|
9 |
+
</li>
|
10 |
+
<?php endforeach; ?>
|
11 |
+
</ul>
|
12 |
+
<?php endforeach; ?>
|
13 |
+
|
14 |
+
<div style="clear: left;"></div>
|
15 |
+
</div>
|
inc/options/dbcache.phtml
CHANGED
@@ -1,35 +1,38 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<
|
4 |
-
|
5 |
-
|
|
|
|
|
|
|
6 |
<p>
|
7 |
-
|
8 |
-
<input type="submit" name="flush_dbcache" value="
|
9 |
-
|
10 |
-
<input type="hidden" name="
|
11 |
</p>
|
12 |
</form>
|
13 |
-
|
14 |
-
<form action="
|
15 |
<fieldset>
|
16 |
<legend>General</legend>
|
17 |
|
18 |
<table class="form-table">
|
19 |
<tr>
|
20 |
-
<th
|
21 |
<input type="hidden" name="dbcache.reject.logged" value="0" />
|
22 |
-
<label><input type="checkbox" name="dbcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('dbcache.reject.logged'), true); ?> /> Don't cache queries for logged in users</label>
|
23 |
-
|
24 |
</th>
|
25 |
</tr>
|
26 |
</table>
|
27 |
-
|
28 |
<p class="submit">
|
29 |
-
<input type="submit" name="
|
30 |
</p>
|
31 |
</fieldset>
|
32 |
-
|
33 |
<fieldset>
|
34 |
<legend>Advanced</legend>
|
35 |
|
@@ -39,8 +42,8 @@
|
|
39 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
40 |
<td>
|
41 |
<input id="memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('dbcache.memcached.servers'))); ?>" size="100" />
|
42 |
-
<input id="
|
43 |
-
<span id="
|
44 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
45 |
</td>
|
46 |
</tr>
|
@@ -57,17 +60,24 @@
|
|
57 |
<br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
|
58 |
</td>
|
59 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
<tr>
|
61 |
<th valign="top"><label for="dbcache_reject_sql">Ignored query stems:</label></th>
|
62 |
<td>
|
63 |
<textarea id="dbcache_reject_sql" name="dbcache.reject.sql" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('dbcache.reject.sql'))); ?></textarea><br />
|
64 |
-
<span class="description">Do not cache queries that contain these terms. Any entered prefix (set in wp-config.php) will be replaced with current database prefix (default: wp_).</span>
|
65 |
</td>
|
66 |
</tr>
|
67 |
</table>
|
68 |
-
|
69 |
<p class="submit">
|
70 |
-
<input type="submit" name="
|
71 |
</p>
|
72 |
</fieldset>
|
73 |
</form>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
+
<form action="admin.php">
|
4 |
+
<p>
|
5 |
+
Database caching via
|
6 |
+
<strong><?php echo w3_get_engine_name($this->_config->get_string('dbcache.engine')); ?></strong>
|
7 |
+
is currently <span class="w3tc-<?php if ($dbcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
8 |
+
</p>
|
9 |
<p>
|
10 |
+
To rebuild the database cache use the
|
11 |
+
<input type="submit" name="flush_dbcache" value="empty cache"<?php if (! $dbcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
|
12 |
+
operation.
|
13 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
14 |
</p>
|
15 |
</form>
|
16 |
+
|
17 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
18 |
<fieldset>
|
19 |
<legend>General</legend>
|
20 |
|
21 |
<table class="form-table">
|
22 |
<tr>
|
23 |
+
<th>
|
24 |
<input type="hidden" name="dbcache.reject.logged" value="0" />
|
25 |
+
<label><input type="checkbox" name="dbcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('dbcache.reject.logged'), true); ?> /> Don't cache queries for logged in users</label>
|
26 |
+
<br /><span class="description">Enabling this option is recommended to maintain default WordPress behavior.</span>
|
27 |
</th>
|
28 |
</tr>
|
29 |
</table>
|
30 |
+
|
31 |
<p class="submit">
|
32 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
33 |
</p>
|
34 |
</fieldset>
|
35 |
+
|
36 |
<fieldset>
|
37 |
<legend>Advanced</legend>
|
38 |
|
42 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
43 |
<td>
|
44 |
<input id="memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('dbcache.memcached.servers'))); ?>" size="100" />
|
45 |
+
<input id="memcached_test" class="button" type="button" value="Test" />
|
46 |
+
<span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
|
47 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
48 |
</td>
|
49 |
</tr>
|
60 |
<br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
|
61 |
</td>
|
62 |
</tr>
|
63 |
+
<tr>
|
64 |
+
<th valign="top"><label for="dbcache_reject_uri">Never cache the following pages:</label></th>
|
65 |
+
<td>
|
66 |
+
<textarea id="dbcache_reject_uri" name="dbcache.reject.uri" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('dbcache.reject.uri'))); ?></textarea><br />
|
67 |
+
<span class="description">Always ignore the specified pages / directories.</span>
|
68 |
+
</td>
|
69 |
+
</tr>
|
70 |
<tr>
|
71 |
<th valign="top"><label for="dbcache_reject_sql">Ignored query stems:</label></th>
|
72 |
<td>
|
73 |
<textarea id="dbcache_reject_sql" name="dbcache.reject.sql" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('dbcache.reject.sql'))); ?></textarea><br />
|
74 |
+
<span class="description">Do not cache queries that contain these terms. Any entered prefix (set in wp-config.php) will be replaced with current database prefix (default: wp_). Query stems can be identified using debug mode.</span>
|
75 |
</td>
|
76 |
</tr>
|
77 |
</table>
|
78 |
+
|
79 |
<p class="submit">
|
80 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
81 |
</p>
|
82 |
</fieldset>
|
83 |
</form>
|
inc/options/faq.phtml
CHANGED
@@ -1,581 +1,28 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<h3><acronym title="Frequently Asked Questions">FAQ</acronym></h3>
|
4 |
-
|
5 |
<h4>Table of Contents</h4>
|
6 |
|
7 |
<div id="toc">
|
8 |
-
|
9 |
-
|
10 |
-
<h5>GENERAL:</h5>
|
11 |
-
<ul>
|
12 |
-
<li><a href="#q1">Who is this plugin for?</a></li>
|
13 |
-
<li><a href="#q2">Umm, why?</a></li>
|
14 |
-
<li><a href="#q3">So give me the skinny, what are the highlights?</a></li>
|
15 |
-
<li><a href="#q4">I've never heard of any of this stuff; my blog is fine, no one complains about the speed. Why should I install this?</a></li>
|
16 |
-
<li><a href="#q5">But even Matt Mullenweg doesn't agree that additional caching is so important, why bother?</a></li>
|
17 |
-
<li><a href="#q6">And how many years of university do I need to use this thing?</a></li>
|
18 |
-
<li><a href="#q7">Ok, so the benefits are clear. What exactly is so special about *how* this plugin works?</a></li>
|
19 |
-
<li><a href="#q8">Why would I want to cache my feeds?</a></li>
|
20 |
-
<li><a href="#q9">Why would I want to put my <acronym title="JavaScript">JS</acronym> at the bottom of the page?</a></li>
|
21 |
-
<li><a href="#q10">What's an Etag and why do I need one?</a></li>
|
22 |
-
<li><a href="#q11">So let me get this straight; you're telling me this plugin is designed to improve performance of any WordPress blog?</a></li>
|
23 |
-
<li><a href="#q12">This is too good to be true, how can I test the results?</a></li>
|
24 |
-
<li><a href="#q13">Does this plugin work with WordPress <acronym title="Multi-User">MU</acronym>?</a></li>
|
25 |
-
<li><a href="#q14">Does this plugin work with BuddyPress (bbPress)?</a></li>
|
26 |
-
<li><a href="#q15">Which WordPress versions are supported?</a></li>
|
27 |
-
<li><a href="#q16">I understand the database caching and the page caching, but what's minify all about?</a></li>
|
28 |
-
<li><a href="#q17">What do you use to minify?</a></li>
|
29 |
-
<li><a href="#q18">What's the point of downloading and caching 3rd party files (e.g. <acronym title="JavaScript">JS</acronym>)?</a></li>
|
30 |
-
<!--<li><a href="#q19">Will you support other memory or opcode caches</a>?</li>-->
|
31 |
-
<li><a href="#q20">Will this plugin break my theme by changing the order of conditional statements or the like?</a></li>
|
32 |
-
<li><a href="#q21">Will this speed up <acronym title="WordPress">WP</acronym> Admin?</a></li>
|
33 |
-
<li><a href="#q22">Does this plugin modify how the WordPress core works?</a></li>
|
34 |
-
<li><a href="#q23">Does it really matter if I remove the line breaks from my code?</a></li>
|
35 |
-
<li><a href="#q24">What's the benefit of removing <acronym title="Hypertext Markup Language">HTML</acronym> comments from my code?</a></li>
|
36 |
-
<li><a href="#q25">Why is <link> used to embed <acronym title="Cascading Style Sheet">CSS</acronym> instead of <style>?</a></li>
|
37 |
-
<li><a href="#q26">Why do I care of <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> is "blocking" or not?</a></li>
|
38 |
-
<li><a href="#q27">What does this plugin do to inline <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>?</a></li>
|
39 |
-
<li><a href="#q28">Ok I get it, this all sounds nice and everything, but is this perfect?</a></li>
|
40 |
-
<li><a href="#q29">Seriously, tell me what the downside is, there must be something?</a></li>
|
41 |
-
<li><a href="#q30">If this plugin does everything you claim, why would you give it away free? Cui Bono?</a></li>
|
42 |
-
<li><a href="#q31">Who in the world uses memcached or opcode caching etc anyway?</a></li>
|
43 |
-
<li><a href="#q32">I don't understand what a <acronym title="Content Delivery Network">CDN</acronym> has to do with caching, that's completely different, no?</a></li>
|
44 |
-
<li><a href="#q33">We run many blogs on many servers here at my company, is this plugin still for me?</a></li>
|
45 |
-
<li><a href="#q34">So you appear to know what you're talking about, will there be any negative effect on my SEO rankings?</a></li>
|
46 |
-
<li><a href="#q35">Will the plugin interfere with other plugins or widgets?</a></li>
|
47 |
-
<li><a href="#q36">What about my robots.txt, sitemap.xml and all my site verification files etc, what happens with those?</a></li>
|
48 |
-
<li><a href="#q37">Do you have any tricks for "post-loading", "lazy-loading" and other render optimizations in this plugin?</a></li>
|
49 |
-
<li><a href="#q38">I want to obfuscate my <acronym title="JavaScript">JS</acronym>, does the plugin do that? Will it ever?</a></li>
|
50 |
-
<li><a href="#q39">Can I use packed or obfuscated <acronym title="JavaScript">JS</acronym> with this plugin?</a></li>
|
51 |
-
<li><a href="#q40">I have some ideas for more features, can I write my own add-ons for your plugin?</a></li>
|
52 |
-
<li><a href="#q41">Who do I thank for all of this?</a></li>
|
53 |
-
</ul>
|
54 |
-
</li>
|
55 |
-
<li class="col">
|
56 |
-
<h5>USAGE:</h5>
|
57 |
-
<ul>
|
58 |
-
<li><a href="#q42">How do I find the <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> to optimize (minify) them with this plugin?</a></li>
|
59 |
-
<li><a href="#q43">I've used the plugin to optimize all my theme's <acronym title="JavaScript">JS</acronym> and plugins <acronym title="JavaScript">JS</acronym>, but there are some function calls, where do those go?</a></li>
|
60 |
-
<li><a href="#q44">Can I use scripts that generate <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> with this plugin?</a></li>
|
61 |
-
<li><a href="#q93">How do I configure Amazon Simple Storage Service (Amazon <acronym title="Simple Storage Service">S3</acronym>) or Amazon CloudFront as my <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
|
62 |
-
<li><a href="#q94">How do I use an Origin Pull (Mirror) <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
|
63 |
-
<li><a href="#q45">In the past, I always had to modify my theme to run dynamic code. Don't I need to do that again for this plugin?</a></li>
|
64 |
-
<li><a href="#q46">How fast will the cache be updated?</a></li>
|
65 |
-
<li><a href="#q47">How do I make some specific pages stay dynamic?</a></li>
|
66 |
-
<li><a href="#q48">What about comments? Does the plugin slow down the rate at which comments appear?</a></li>
|
67 |
-
<li><a href="#q49">What if I accidentally specify an incorrect path to a <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> file?</a></li>
|
68 |
-
<li><a href="#q50">Does the plugin automatically remove duplicate <acronym title="JavaScript">JS</acronym>?</a></li>
|
69 |
-
<li><a href="#q51">I've been using the plugin for some time, I updated one of my other plugins and now it doesn't work anymore. What's up?</a></li>
|
70 |
-
<!--<li><a href="#q52">I have some <acronym title="Cascading Style Sheet">CSS</acronym> classes with declarations being overwritten or <acronym title="JavaScript">JS</acronym> with dependencies, do I really have to copy and paste all my <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> file settings around?</a></li>-->
|
71 |
-
<li><a href="#q53">Why does your plugin change the order of my <script> and <link> tags (in the <head>)?</a></li>
|
72 |
-
<li><a href="#q54">I can't read this minified <acronym title="Hypertext Markup Language">HTML</acronym>; can you give me a break please?</a></li>
|
73 |
-
<li><a href="#q55">When are you going to translate this plugin into more languages?</a></li>
|
74 |
-
<li><a href="#q56">I'm not a hardcore developer, can you explain to me how this // and / stuff works and how I should specify the paths for <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files?</a></li>
|
75 |
-
<li><a href="#q57">What about Etags?</a></li>
|
76 |
-
<li><a href="#q58">Which encodings do you support?</a></li>
|
77 |
-
<li><a href="#q59">What's this thing doing? Where are the statistics?</a></li>
|
78 |
-
<li><a href="#q60">How can I tell if it's working? Aren't there any statistics at all?</a></li>
|
79 |
-
<li><a href="#q61">I'm an advanced theme developer and I want to have different combinations of <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files on different types of pages in my theme; how is this done?</a></li>
|
80 |
-
<li><a href="#q62">Which features can I use if I haven't yet installed an opcode cache or memcached?</a></li>
|
81 |
-
<li><a href="#q63">How can I host my favicon with my <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
|
82 |
-
<li><a href="#q64">Why do you set the value of the media attribute of <link> to all?</a></li>
|
83 |
-
<li><a href="#q65">Why can't I specify other <script> types or encoding?</a></li>
|
84 |
-
<li><a href="#q66">My theme doesn't call wp_footer(), how do I set this plugin up?</a></li>
|
85 |
-
<li><a href="#q67">Is this plugin compatible with other popular caching plugins?</a></li>
|
86 |
-
<li><a href="#q68">Some WordPress caching plugins fail when markup is not well-formed, is this plugin similar?</a></li>
|
87 |
-
<li><a href="#q69">Won't various 3rd parties who's <acronym title="JavaScript">JS</acronym> I download and cache be concerned?</a></li>
|
88 |
-
<li><a href="#q70">Google already minified and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compressed jQuery (and other libraries ) for me, why can't I just use their bandwidth and embed other code after it?</a></li>
|
89 |
-
<li><a href="#q71">I wanted to use a different version jQuery with my theme, how do I replace WordPress' jQuery with Google's minified version using your plugin?</a></li>
|
90 |
-
<li><a href="#q72">What about the files, can those be served from the <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
|
91 |
-
<li><a href="#q73">What if I don't want to work with a <acronym title="Content Delivery Network">CDN</acronym> right now, is there any other use for this feature?</a></li>
|
92 |
-
<li><a href="#q74">Are minified files uploaded to my <acronym title="Content Delivery Network">CDN</acronym> provider?</a></li>
|
93 |
-
<li><a href="#q75">Who do you recommend as a <acronym title="Content Delivery Network">CDN</acronym> provider?</a></li>
|
94 |
-
<li><a href="#q76">Hang on, don't I need to modify my <acronym title="Cascading Style Sheet">CSS</acronym> files so they'll work on the <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
|
95 |
-
<li><a href="#q77">I don't have time to deal with this, but I know I need it. Will you help me?</a></li>
|
96 |
-
<li><a href="#q92">What about query string variables on <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>, do they matter?</a></li>
|
97 |
-
<li><a href="#q95">Is this plugin comptatible with GD Star Rating?</a></li>
|
98 |
-
<li><a href="#q96">How do I cache only the home page?</a></li>
|
99 |
-
<li><a href="#q97">I see garbage characters instead of the normal web site, what's going on here?</a></li>
|
100 |
-
<li><a href="#q98">What is the purpose of the "Media Library Import" tool and how do I use it?</a></li>
|
101 |
-
<li><a href="#q99">I'm getting blank pages or 500 error codes when trying to upgrade on WordPress MU</a></li>
|
102 |
-
<li><a href="#q100">How can I embed the minified CSS file at the location I choose?</a></li>
|
103 |
-
<li><a href="#q101">Is this plugin comptatible with TDO Mini Forms?</a></li>
|
104 |
-
<li><a href="#q102">My YSlow score is low because doesn't recognize my <acronym title="Content Delivery Network">CDN</acronym>, what can I do?</a></li>
|
105 |
-
<li><a href="#q103">What is the purpose of the "modify attachment <acronym title="Uniform Resource Indicator">URL</acronym>s" button?</a></li>
|
106 |
-
</ul>
|
107 |
-
</li>
|
108 |
<li class="col">
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
<li><a href="#q82">Why would I choose an opcode cache over memcached or vice versa?</a></li>
|
116 |
-
<li><a href="#q83">I already use <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression on my server, why does it matter if I minify my code?</a></li>
|
117 |
-
<li><a href="#q84">How much memory (<acronym title="Random Access Memory">RAM</acronym>) do I need to delegate to caching?</a></li>
|
118 |
-
<li><a href="#q85">What version of <acronym title="Hypertext Preprocessor">PHP</acronym> do I need for this thing?</a></li>
|
119 |
-
<li><a href="#q86">What version of mySQL is needed?</a></li>
|
120 |
-
<li><a href="#q87">And I need mod_rewrite (or equivalent for my web server) installed too, no?</a></li>
|
121 |
-
<li><a href="#q88">How much hardware do I have to throw at something like this before I see a benefit?</a></li>
|
122 |
-
<li><a href="#q89">Is this plugin server cluster and load balancer friendly?</a></li>
|
123 |
-
<li><a href="#q90">I'm a web hosting provider and I heard about this plugin from my clients, is this plugin safe for a shared hosting environment?</a></li>
|
124 |
-
<li><a href="#q91">What is the intended impact of this plugin on the web hosting landscape?</a></li>
|
125 |
-
</ul>
|
126 |
</li>
|
127 |
-
|
|
|
128 |
</div>
|
129 |
<div id="qa">
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
<p>One of the WordPress community's strengths is also its weakness; we found that numerous plugins are very handy and save some development time in a pinch, but the maintenance and performance penalties blogs suffer from as a result contribute to a poor user experience, which is never acceptable.</p>
|
137 |
-
<p>Experience has shown that fast loading web sites have (at least) the following characteristics:</p>
|
138 |
-
<ul>
|
139 |
-
<li>Reduced <a href="http://en.wikipedia.org/wiki/Customer_attrition" target="_blank">attrition</a></li>
|
140 |
-
<li>Higher conversion rates for e-commerce / affiliate etc sites</li>
|
141 |
-
<li>Increased time on site / more page views per visitor</li>
|
142 |
-
</ul>
|
143 |
-
<p><em>In fact, if wordpress.com (for example) applied some of the techniques used in this plugin, we imagine they'd realize ~10% performance improvement on the <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and <acronym title="Hypertext Markup Language">HTML</acronym> (respectively) on the millions of blogs they host.</em></p>
|
144 |
-
<p>As a practical matter, Akamai and JupiterResearch did a study on <a href="http://www.akamai.com/html/about/press/releases/2006/press_110606.html" target="_blank">acceptable wait time for retail web sites</a> to load back in late 2006 concluding that users may leave after 4 seconds of waiting. That was several years ago now, even before 3G was available for mobile devices, what do you think web users expect today? <a href="http://blogs.zdnet.com/BTL/?p=3925" target="_blank">According to Marissa Mayer</a> of Google, as she stated the same year as Akamai, improving the speed of sites/applications reduces the learning curve for applications and contributes to higher use. It's time to bring the performance major corporations enjoy to the blogosphere.</p>
|
145 |
-
<p>As an aside, don't you think your site's <acronym title="Key Performance Indicators">KPI</acronym> would be more meaningful if you could be confident that all users were having the exact same performance experience with your site? It's too early to say for sure, but we feel that the statistics and metrics we all use to track our progress and results will be more realistic when W3 Total Cache is actively removing bottlenecks from our blogs.</p>
|
146 |
-
<p><a href="mailto:wordpressexperts@w3-edge.com">Please let us know</a> what kind of mileage you have.</p>
|
147 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
148 |
-
<p id="q3"><strong>So give me the skinny, what are the highlights?</strong><br />
|
149 |
-
W3 Total Cache is a suite of functionality designed to optimize the performance of all WordPress blogs. Features and benefits include:</p>
|
150 |
-
<ul>
|
151 |
-
<li>Improved progressive render (non-blocking <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embedding)</li>
|
152 |
-
<li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups, reduced document load time</li>
|
153 |
-
<li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) support with automated media library import</li>
|
154 |
-
<li>Bandwidth savings via <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (<acronym title="GNU zip">gzip</acronym> / deflate) for <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
|
155 |
-
<li>Minification (concatenation, white space removal) of inline, external or 3rd party <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> with scheduled updates</li>
|
156 |
-
<li>Optional embedding of <acronym title="JavaScript">JS</acronym> just above </body></li>
|
157 |
-
<li>Support for caching pages, posts, feeds, database objects, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> in memory with an opcode cache or memcached or both</li>
|
158 |
-
<li>Caching of feeds (comments, page and site), <acronym title="Uniform Resource Indicator">URL</acronym>s with query string variables (like search result pages), Database queries, Pages, Posts, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
|
159 |
-
<li>Complete header management including Etags</li>
|
160 |
-
<li>Increased web server concurrency and reduced resource consumption, increased scale</li>
|
161 |
-
</ul>
|
162 |
-
<p>In essence, anything that can be automated to squeeze out every bit of server performance and minimize bandwidth utilization has been done, leaving your readers with an optimized user experience.</p>
|
163 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
164 |
-
<p id="q4"><strong>I've never heard of any of this stuff; my blog is fine, no one complains about the speed. Why should I install this?<br />
|
165 |
-
</strong>Rarely do readers take the time to complain. They typically just stop browsing earlier than you'd prefer and may not return altogether. It's in every web site owner's best interest is to make sure that the performance of your blog is not hindering its success.</p>
|
166 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
167 |
-
<p id="q5"><strong>But even Matt Mullenweg doesn't agree that additional caching is so important, why bother?</strong><br />
|
168 |
-
You're right, <a href="http://ma.tt/2008/03/wordpress-is-open-source/#comment-439787" target="_blank">Matt did say that</a>. However, this plugin provides more than just "caching". Because he is correct, the web is dynamic and must remain so. But as we explain throughout this FAQ, our goal is to improve the performance of any blog. Furthermore, some techniques we use are well documented from past <a href="http://www.slideshare.net/bazza/high-performance-wordpress" target="_blank">WordCamp presentations</a>; we combined them in a way that we have found stands up to the highest traffic spikes.</p>
|
169 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
170 |
-
<p id="q6"><strong>And how many years of university do I need to use this thing?</strong><br />
|
171 |
-
-4 — That's right; a youngster in junior high school can get started with this plugin. Seriously, if you did your own WordPress install or have ever installed a plugin before you're in good shape. If you need help, <a href="mailto:wordpressexperts@w3-edge.com">let us know</a> or perhaps we'll make some videos or the like.</p>
|
172 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
173 |
-
<p id="q7"><strong>Ok, so the benefits are clear. What exactly is so special about *how* this plugin works?</strong><br />
|
174 |
-
Thanks for asking. We just decided not try to use the typical WordPress hooks and methodologies to implement our features, instead we take the normal output and perform optimizations to it before we send it to the user agent using a method they support and then cache the result afterwards. This concept is applied to objects you decide to cache.</p>
|
175 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
176 |
-
<p id="q8"><strong>Why would I want to cache my feeds?</strong><br />
|
177 |
-
We feel that caching objects after the first request and checking for updates before responding subsequent requests (which is kind of how web browsers work too) creates more opportunities for interesting applications and mashups where the blogosphere doesn't require institutional investment to be able to handle developers making hundreds of requests every day the same way we use Google, Twitter and Facebook (for example) APIs today. Think about it, even when major search engines crawl your site, they have to be "gentle" so they don't bring it down, let's turn the paradigm around so that every blog can deliver content in real-time in various formats.</p>
|
178 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
179 |
-
<p id="q9"><strong>Why would I want to put my <acronym title="JavaScript">JS</acronym> at the bottom of the page?</strong><br />
|
180 |
-
First let me point out that in many cases we suggest putting all the <acronym title="JavaScript">JS</acronym> that's not required for interactivity with your site at the bottom of the document. Anything <acronym title="JavaScript">JS</acronym> that makes the site work as intended we suggested embedding in the <head>. Depending on your specific situation, having the majority of your <acronym title="JavaScript">JS</acronym> at the bottom of the document will mean that your visitors won't have to download things they don't want to begin interacting with your site or reading it's content. Quite often the additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction is worthwhile.</p>
|
181 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
182 |
-
<p id="q10"><strong>What's an Etag and why do I need one?</strong><br />
|
183 |
-
Entity tags were created to add more reliability to client side caching my providing a simple method for a browser to verify that a file had not changed since last it was downloaded. Using them helps enables your server return 304 or "not modified" responses instead of a 200 "ok" response which are much much slower (because the file is sent). The result is a visitor viewing multiple pages of your site would have that "instant loading" experience that we all definitely enjoy. Don't worry we don't use inodes to create our Etags so this solution is reliable for multi server hosting solutions.</p>
|
184 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
185 |
-
<p id="q11"><strong>So let me get this straight; you're telling me this plugin is designed to improve performance of any WordPress blog?</strong><br />
|
186 |
-
Precisely, that is unless you don't write any posts in your blog nor have any readers. If you're someone that's always into the latest web development technique or plugin, now you can "have it all" without making your readers suffer.</p>
|
187 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
188 |
-
<p id="q12"><strong>This is too good to be true, how can I test the results?</strong><br />
|
189 |
-
You will be able to see it instantly on each page load, but for tangible metrics, consider the following tools:</p>
|
190 |
-
<ul>
|
191 |
-
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://developer.yahoo.com/yslow/" target="_blank">Yahoo! YSlow</a></li>
|
192 |
-
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://code.google.com/speed/page-speed/" target="_blank">Google Page Speed</a></li>
|
193 |
-
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://stevesouders.com/hammerhead/" target="_blank">Hammerhead</a></li>
|
194 |
-
<li><a href="http://www.google.com/chrome" target="_blank">Google Chrome</a> + <a href="http://code.google.com/webtoolkit/speedtracer/" target="_blank">Google Speed Tracer</a></li>
|
195 |
-
</ul>
|
196 |
-
<ul>
|
197 |
-
<li><a href="http://tools.pingdom.com/" target="_blank">Pingdom</a></li>
|
198 |
-
<li><a href="http://www.webpagetest.org/test" target="_blank">WebPagetest</a></li>
|
199 |
-
<li><a href="http://www.gomez.com/instant-test-pro/" target="_blank">Gomez Instant Test Pro</a></li>
|
200 |
-
</ul>
|
201 |
-
<ul>
|
202 |
-
<li><a href="http://redbot.org/" target="_blank">Resource Expert Droid</a></li>
|
203 |
-
<li><a href="http://www.procata.com/cachetest/" target="_blank">Web Caching Tests</a></li>
|
204 |
-
<li><a href="http://www.port80software.com/tools/compresscheck.asp" target="_blank">Port80 Compression Check</a> (minify requires <acronym title="Microsoft Internet Explorer">MSIE</acronym>6 support to be enabled)</li>
|
205 |
-
<li><a href="http://www.gidnetwork.com/tools/gzip-test.php" target="_blank">A simple online web page compression / deflate / <acronym title="GNU zip">gzip</acronym> test tool</a></li>
|
206 |
-
</ul>
|
207 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
208 |
-
<p id="q13"><strong>Does this plugin work with WordPress <acronym title="Multi-User">MU</acronym>?</strong><br />
|
209 |
-
Indeed it does.</p>
|
210 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
211 |
-
<p id="q14"><strong>Does this plugin work with BuddyPress (bbPress)?</strong><br />
|
212 |
-
Yes.</p>
|
213 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
214 |
-
<p id="q15"><strong>Which WordPress versions are supported?</strong><br />
|
215 |
-
To use all features in the suite, a minimum version of 2.6 is required. Earlier versions will benefit from our Media Library Importer to get them back on the upgrade path and into a <acronym title="Content Delivery Network">CDN</acronym> of their choosing.</p>
|
216 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
217 |
-
<p id="q16"><strong>I understand the database caching and the page caching, but what's minify all about?</strong><br />
|
218 |
-
We'll just quote the fine folks at yahoo on this one:</p>
|
219 |
-
<blockquote>
|
220 |
-
<p>"Minification is the practice of removing unnecessary characters from code to reduce its size thereby improving load times. When code is minified all comments are removed, as well as unneeded white space characters (space, newline, and tab). In the case of JavaScript, this improves response time performance because the size of the downloaded file is reduced. Two popular tools for minifying JavaScript code are <a href="http://www.crockford.com/javascript/jsmin.html" target="_blank"><acronym title="JavaScript">JS</acronym>Min</a> and <a href="http://developer.yahoo.com/yui/compressor/" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a>. The <acronym title="Yahoo! User Interface">YUI</acronym> compressor can also minify <acronym title="Cascading Style Sheet">CSS</acronym>.</p>
|
221 |
-
<p>Obfuscation is an alternative optimization that can be applied to source code. It's more complex than minification and thus more likely to generate bugs as a result of the obfuscation step itself. In a survey of ten top U.S. web sites, minification achieved a 21% size reduction versus 25% for obfuscation. Although obfuscation has a higher size reduction, minifying JavaScript is less risky.</p>
|
222 |
-
<p>In addition to minifying external scripts and styles, inline <script> and <style> blocks can and should also be minified. Even if you <acronym title="GNU zip">gzip</acronym> your scripts and styles, minifying them will still reduce the size by 5% or more. As the use and size of JavaScript and <acronym title="Cascading Style Sheet">CSS</acronym> increases so will the savings gained by minifying your code."</p>
|
223 |
-
<cite><a href="http://developer.yahoo.com/performance/rules.html#minify" target="_blank">developer.yahoo.com</a></cite> </blockquote>
|
224 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
225 |
-
<p id="q17"><strong>What do you use to minify?</strong><br />
|
226 |
-
We use: <a href="http://code.google.com/p/minify/" target="_blank">minify</a> but may support various engines in the future. Based on <a href="http://ejohn.org/" target="_blank">John Resig's</a> suggestion we're currently looking at <a href="http://yuilibrary.com/projects/yuicompressor/wiki" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a> and <a href="http://code.google.com/closure/compiler/" target="_blank">Google Closure Compiler</a> (for JavaScript) also.</p>
|
227 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
228 |
-
<p id="q18"><strong>What's the point of downloading and caching 3rd party files (e.g. <acronym title="JavaScript">JS</acronym>)?</strong><br />
|
229 |
-
With the various hosted 3rd party applications available (from web site statistics to social media sharing widgets), the problems we've noticed are: additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions, <acronym title="Domain Name System">DNS</acronym> lookups and latencies from busy servers that we can't control and often un-minified files with no <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression all add up to a very slow page load and poor user experience. With your own copy of external files, updated as frequently as you wish, none of these problems exist.</p>
|
230 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
231 |
-
<!--
|
232 |
-
<p id="q19"><strong>Will you support other memory or </strong><a href="http://en.wikipedia.org/wiki/PHP_accelerator" target="_blank"><strong>opcode caches</strong></a><strong>?</strong><br />
|
233 |
-
Possibly, we just <a href="mailto:wordpressexperts@w3-edge.com">need to know which</a> others are popular in the WordPress community and we will address them.</p>
|
234 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
235 |
-
-->
|
236 |
-
<p id="q20"><strong>Will this plugin break my theme by changing the order of conditional statements or the like?</strong><br />
|
237 |
-
No, the plugin looks for conditional statements in your markup used for <acronym title="Cascading Style Sheet">CSS</acronym> (and sometimes <acronym title="JavaScript">JS</acronym>) and makes sure that the minified files precede it, so keep that in mind.</p>
|
238 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
239 |
-
<p id="q21"><strong>Will this speed up <acronym title="WordPress">WP</acronym> Admin?</strong><br />
|
240 |
-
Yes, indirectly — if you have a lot of bloggers working with you, you will find that it feels like you have a server dedicated only to <acronym title="WordPress">WP</acronym> Admin once this plugin is enabled; the result, increased productivity.</p>
|
241 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
242 |
-
<p id="q22"><strong>Does this plugin modify how the WordPress core works?</strong><br />
|
243 |
-
No. No theme changes, special files, WordPress core file modifications or special permissions need to be set.</p>
|
244 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
245 |
-
<p id="q23"><strong>Does it really matter if I remove the line breaks from my code?</strong><br />
|
246 |
-
Definitely. Removing white space from your files make <acronym title="GNU zip">gzip</acronym> and deflate (<acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression) more effective.</p>
|
247 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
248 |
-
<p id="q24"><strong>What's the benefit of removing <acronym title="Hypertext Markup Language">HTML</acronym> comments from my code?</strong><br />
|
249 |
-
Many developers like to have comments in the code for various reasons, however these comments add no value from the blog readers (or search engine for that matter) point of view and only contribute to increased load time and wasted bandwidth as a result. Now only you can use them and view them in your site (as a logged in administrator viewing the page source), which is really what (we assume) you intended.</p>
|
250 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
251 |
-
<p id="q25"><strong>Why is <link> used to embed <acronym title="Cascading Style Sheet">CSS</acronym> instead of <style>?</strong><br />
|
252 |
-
<link> is a non-blocking method to embed <acronym title="Cascading Style Sheet">CSS</acronym> into a document. We recommend this approach for optimal performance.</p>
|
253 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
254 |
-
<p id="q26"><strong>Why do I care of <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> is "blocking" or not?</strong><br />
|
255 |
-
In the case of objects (files) you don't host yourself, this could add several seconds to your page's load time as the <acronym title="Domain Name System">DNS</acronym> lookups, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction roundtrip times and wait times add up. Even when all the scripts are hosted locally, the same adversities exist. Since all objects in the <head> of a document have to be ready before the page can be rendered, having them load in a parallel fashion as opposed to linear (or near linear) gives night and day results.</p>
|
256 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
257 |
-
<p id="q27"><strong>What does this plugin do to inline <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>?</strong><br />
|
258 |
-
Nothing yet. We're evaluating use cases to deal with common issues (like inline <acronym title="Cascading Style Sheet">CSS</acronym> for tag clouds for example).</p>
|
259 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
260 |
-
<p id="q28"><strong>Ok I get it, this all sounds nice and everything, but is this perfect?</strong><br />
|
261 |
-
Pretty much. If you monetize your blog with ads you will want to spend some time making sure that the ad code works well with your optimization settings. There are also the occasional pieces of code that conflict with the others and have to be in a specific order to work well, but that's not a problem that this plugin introduces.</p>
|
262 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
263 |
-
<p id="q29"><strong>Seriously, tell me what the downside is, there must be something?</strong><br />
|
264 |
-
Well, no there isn't. Installing the server side software might be challenging for some, but <a href="mailto:wordpressexperts@w3-edge.com">we can assist</a> with that if you ask. Other than that, unless you enjoy frequently upgrading your server plan or buying more servers and paying for bandwidth overages or wincing every time you add another "must have" plugin to your blog, we cannot find any reason to deter you from the use of this one.</p>
|
265 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
266 |
-
<p id="q30"><strong>If this plugin does everything you claim, why would you give it away free? Cui Bono?</strong><br />
|
267 |
-
Who benefits? Everyone. Of the numerous, here are the three the most important reasons we share with the WordPress community:</p>
|
268 |
-
<ul>
|
269 |
-
<li>WordPress is free and high quality, plugins should be too.</li>
|
270 |
-
<li>There's no reason your blog shouldn't be able to perform as well as well as any major corporation's web site/application.</li>
|
271 |
-
<li><a href="http://code.google.com/speed/articles/" target="_blank">Google</a> and <a href="http://developer.yahoo.com/yui/" target="_blank">Yahoo</a> offer quite a bit, but they did not offer a WordPress solution yet. This is our contribution to speeding up the web (starting with the blogosphere).</li>
|
272 |
-
</ul>
|
273 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
274 |
-
<p id="q31"><strong>Who in the world uses memcached or an opcode cache etc anyway?</strong><br />
|
275 |
-
Great question! Basically anyone that needs to make their application scale. For example, <a href="http://www.wordpress.com/" target="_blank">WordPress.com</a>, <a href="http://twitter.com" target="_blank">Twitter</a>, <a href="http://www.facebook.com/" target="_blank">Facebook</a>, LiveJournal (the inventors of the software) and so on all use some sort of memory cache to increase application performance.</p>
|
276 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
277 |
-
<p id="q32"><strong>I don't understand what a <acronym title="Content Delivery Network">CDN</acronym> has to do with caching, that's completely different, no?</strong><br />
|
278 |
-
Technically no, a <acronym title="Content Delivery Network">CDN</acronym> is a high performance cache that stores static assets (your theme files, media library etc) in various locations throughout the world in order to provide low latency access to them by readers in those regions. So indeed a <acronym title="Content Delivery Network">CDN</acronym> is a high performance cache, many of which actually store your frequently requested assets in memory for fastest possible response.</p>
|
279 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
280 |
-
<p id="q33"><strong>We run many blogs on many servers here at my company, is this plugin still for me?</strong><br />
|
281 |
-
Yes, especially if you have a cluster and many WordPress installations or a WordPress <acronym title="Multi-User">MU</acronym> installation, then plugin is for you. It will allow you to move easily from multiple installations to WordPress <acronym title="Multi-User">MU</acronym> and continue to use multiple <acronym title="Hypertext Transfer Protocol">HTTP</acronym>, Database, Network Attached Storage etc servers in any configuration you wish. You can also specify as many memcached servers as you wish, although you cannot yet delegate a memcached server to a specific type of caching, i.e. there's no pool management yet.</p>
|
282 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
283 |
-
<p id="q34"><strong>So you appear to know what you're talking about, will there be any negative effect on my SEO rankings?</strong><br />
|
284 |
-
To answer, first we must assume that you're using all of the options we offer: <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression, minify etc. Having said that, we are only sending compressed data to user agents that support it; even <a href="http://www.google.com/search?q=search+engine+crawler+http+compression" target="_blank">most search engine crawlers do</a>. As for minified <acronym title="Hypertext Markup Language">HTML</acronym>, this is essentially how crawlers see your page anyway when they download it. So no, there's no penalty or compromise.</p>
|
285 |
-
<p>Fact of the matter, there was a time when the semantics and size of your <acronym title="Hypertext Markup Language">HTML</acronym> file (code-to-content ratio), was a factor in a more favorable ranking. <a href="http://microformats.org/wiki/posh" target="_blank"><acronym title="Plain Old Semantic HTML">POSH</acronym></a> <acronym title="Hypertext Markup Language">HTML</acronym> has always been preferred by search engines. In some markets this may still be true, so give the search engines what they want.</p>
|
286 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
287 |
-
<p id="q35"><strong>Will the plugin interfere with other plugins or widgets?</strong><br />
|
288 |
-
No, on the contrary if you use the minify settings you will improve their performance by several times.</p>
|
289 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
290 |
-
<p id="q36"><strong>What about my robots.txt, sitemap.xml and all my site verification files etc, what happens with those?</strong><br />
|
291 |
-
If you're concerned about what happens with these when the <acronym title="Content Delivery Network">CDN</acronym> functionality is active, nothing does. You do not want or need these files moved from their original locations and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (or minification for that matter) is of no consequence in most cases.</p>
|
292 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
293 |
-
<p id="q37"><strong>Do you have any tricks for "post-loading", "lazy-loading" and other render optimizations in this plugin?</strong><br />
|
294 |
-
Yes we do, we're currently evaluating if they are best introduced into this plugin or as standalones. Feel free to <a href="mailto:wordpressexperts@w3-edge.com">chime in</a>.</p>
|
295 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
296 |
-
<p id="q38"><strong>I want to obfuscate my <acronym title="JavaScript">JS</acronym>, does the plugin do that? Will it ever?</strong><br />
|
297 |
-
No the plugin will not do that and it's unlikely that we'll support that.</p>
|
298 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
299 |
-
<p id="q39"><strong>Can I use packed or obfuscated <acronym title="JavaScript">JS</acronym> with this plugin?</strong><br />
|
300 |
-
Yes and no. In general, packed <acronym title="JavaScript">JS</acronym> cannot be minified reliably. Obfuscated <acronym title="JavaScript">JS</acronym> also is hit or miss. A minified and <acronym title="GNU zip">gzip</acronym>ped <acronym title="JavaScript">JS</acronym> file will be smaller than a packed file in any case, so using the (uncompressed, unpacked or un obfuscated) developer versions of your plugins is no longer a concern when using this plugin. Alternatively, you can use the non-blocking embed option to continue to use your packed or obfuscated file without minification.</p>
|
301 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
302 |
-
<p id="q40"><strong>I have some ideas for more features, can I write my own add-ons for your plugin?</strong><br />
|
303 |
-
Not yet, we are considering support for add-ons. Meanwhile, please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and let us know what you think would benefit the community.</p>
|
304 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
305 |
-
<p id="q41"><strong>Who do I thank for all of this?</strong><br />
|
306 |
-
It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
|
307 |
-
<ul>
|
308 |
-
<li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
|
309 |
-
<li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
|
310 |
-
<li><a href="http://wonko.com/" target="_blank">Ryan Grove</a></li>
|
311 |
-
<li><a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/" target="_blank">Nicholas Zakas</a> </li>
|
312 |
-
<li><a href="http://rtdean.livejournal.com/" target="_blank">Ryan Dean</a></li>
|
313 |
-
<li><a href="http://gravitonic.com/" target="_blank">Andrei Zmievski</a></li>
|
314 |
-
<li>George Schlossnagle</li>
|
315 |
-
<li>Daniel Cowgill</li>
|
316 |
-
<li><a href="http://toys.lerdorf.com/" target="_blank">Rasmus Lerdorf</a></li>
|
317 |
-
<li><a href="http://t3.dotgnu.info/" target="_blank">Gopal Vijayaraghavan</a></li>
|
318 |
-
<li><a href="http://eaccelerator.net/" target="_blank">Bart Vanbraban</a></li>
|
319 |
-
<li><a href="http://xcache.lighttpd.net/" target="_blank">mOo</a></li>
|
320 |
-
</ul>
|
321 |
-
<p>Please reach out to all of these people and support their projects if you're so inclined.</p>
|
322 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
323 |
-
<p id="q42"><strong>How do I find the <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> to optimize (minify) them with this plugin?</strong><br />
|
324 |
-
View your page source in your browser and search for any <style>, <link> or <script> tags that contain external <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files and one by one add them to the minify settings page. Do not include any <acronym title="Cascading Style Sheet">CSS</acronym> in conditional statements (unless you know what you are doing) like:</p>
|
325 |
-
<p><!--[if lte IE 8]><link rel="stylesheet" type="text/css" href="/wp-content/themes/default/lte.css" media="screen,projection" /><![endif]--></p>
|
326 |
-
<p>The plugin will combine, minify, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compress and check for updates to these files automatically from now on. If you have any <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> that are inline consider making them external files so that you can use them with minify.</p>
|
327 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
328 |
-
<p id="q43"><strong>I've used the plugin to optimize all my theme's <acronym title="JavaScript">JS</acronym> and plugins <acronym title="JavaScript">JS</acronym>, but there are some function calls, where do those go?</strong><br />
|
329 |
-
Just place them above </head> if that's where your embed is done or above </body> if that's where you need them. Wherever they need to be to be called after the <acronym title="JavaScript">JS</acronym> that needs them, it'll be fine.</p>
|
330 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
331 |
-
<p id="q44"><strong>Can I use scripts that generate <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> with this plugin?</strong><br />
|
332 |
-
Yes you can, but since there are numerous ways to do so, so be sure to test your results carefully. Having said that we do encourage it as it will mean that less processing has to be done to deliver your pages.</p>
|
333 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
334 |
-
<p id="q93"><strong>How do I configure Amazon Simple Storage Service (Amazon <acronym title="Simple Storage Service">S3</acronym>) or Amazon CloudFront as my <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
|
335 |
-
First <a href="http://aws.amazon.com/" target="_blank">create an <acronym title="Simple Storage Service">S3</acronym> account</a>. Next, you need to obtain your "Access key" and "Secret key" from the "Access Credentials" section of the "<a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key" target="_blank">Security Credentials</a>" page of "My Account." Make sure the status is "active." Next, make sure that "Amazon Simple Storage Service (Amazon <acronym title="Simple Storage Service">S3</acronym>)" is the selected type of <acronym title="Content Delivery Network">CDN</acronym> on the General Settings tab (if not change the setting and save the changes). Now on the <acronym title="Content Delivery Network">CDN</acronym> Settings tab enter your "Access key," "Secret key" and create a bucket. Click the "Test <acronym title="Simple Storage Service">S3</acronym> Upload" button and make sure that the test is successful, if not check your settings and try again. </p>
|
336 |
-
<p>Save your settings. Make sure that you export your media library, upload your wp-includes (WordPress core files) theme files, and custom files if you wish to host each of those with <acronym title="Amazon Web Services">AWS</acronym>. Unless you wish to use CloudFront, you're almost done, skip to the next paragraph if you're using CloudFront. Just go to the General Settings tab and click the checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect.</p>
|
337 |
-
<p>To use CloudFront, perform all of the steps above, except select the "Amazon CloudFront" <acronym title="Content Delivery Network">CDN</acronym> type in the <acronym title="Content Delivery Network">CDN</acronym> section of the General Settings tab. Proceed to the <a href="https://console.aws.amazon.com/cloudfront/" target="_blank"><acronym title="Amazon Web Services">AWS</acronym> Management Console</a> and create a new distribution: select the <acronym title="Simple Storage Service">S3</acronym> Bucket you created earlier as the "Origin," enter a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> if you wish to add one to your <acronym title="Domain Name System">DNS</acronym> Zone. Make sure that "Distribution Status" is enabled and "State" is deployed. Now on <acronym title="Content Delivery Network">CDN</acronym> Settings tab of the plugin, copy the subdomain found in the <acronym title="Amazon Web Services">AWS</acronym> Management Console and enter the CNAME used for the distribution in the "CNAME" field.</p>
|
338 |
-
<p>Now go to the General Settings tab and click the checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect.</p>
|
339 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
340 |
-
<p id="q94"><strong>How do I use an Origin Pull (Mirror) <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
|
341 |
-
Login to your <acronym title="Content Delivery Network">CDN</acronym> providers control panel or account management area. Following any set up steps they provide, create a new "pull zone" or "bucket" for your site's domain name. If there's a set up wizard or any troubleshooting tips your provider offers, be sure to review them. In the <acronym title="Content Delivery Network">CDN</acronym> Settings tab of the plugin, enter the hostname your <acronym title="Content Delivery Network">CDN</acronym> provider provided in the "replace site's hostname with" field. You should always do a quick check by opening a test file from the <acronym title="Content Delivery Network">CDN</acronym> hostname, e.g. http://cdn.domain.com/favicon.ico. Troubleshoot with yoru <acronym title="Content Delivery Network">CDN</acronym> provider until this test is successful.</p>
|
342 |
-
<p>Now go to the General Settings tab and click the checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect.</p>
|
343 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
344 |
-
<p id="q45"><strong>In the past, I always had to modify my theme to run dynamic code. Don't I need to do that again for this plugin?</strong><br />
|
345 |
-
For now no; there are some special cases that we will address with an upcoming release for highly dynamic sites.</p>
|
346 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
347 |
-
<p id="q46"><strong>How fast will the cache be updated?</strong><br />
|
348 |
-
Items expire from the cache at a rate that you specify. As far as how fast changes appear to your visitors, they appear instantly in most cases and if you're an administrator who's logged in they will always be immediately visible.</p>
|
349 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
350 |
-
<p id="q47"><strong>How do I make some specific pages stay dynamic?</strong><br />
|
351 |
-
They never stop being dynamic, we just don't create pages that have not been changed. If you have a page that updated frequently in your blog before, it will still remain up-to-date at all times.</p>
|
352 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
353 |
-
<p id="q48"><strong>What about comments? Does the plugin slow down the rate at which comments appear?</strong><br />
|
354 |
-
On the contrary, as with any other action a user can perform on a site, faster performance will encourage more of it. The cache is so quickly rebuilt in memory that it's no trouble to show visitors the most current version of a post that's experiencing Digg, Slashdot, Drudge Report, Yahoo Buzz or Twitter effect.</p>
|
355 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
356 |
-
<p id="q49"><strong>What if I accidentally specify an incorrect path to a <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> file?</strong><br />
|
357 |
-
Unfortunately a 400 bad request error may be generated. So use the "Check <acronym title="Uniform Resource Indicator">URI</acronym>" button to make sure that you have entered the correct <acronym title="Uniform Resource Indicator">URL</acronym> or path to the file.</p>
|
358 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
359 |
-
<p id="q50"><strong>Does the plugin automatically remove duplicate <acronym title="JavaScript">JS</acronym>?</strong><br />
|
360 |
-
No. If you include a script in the minfy settings twice or it already exists in your theme we do not automatically remove the extra code. That's tricky business and it's better for us to just let you make the decisions conscientiously.</p>
|
361 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
362 |
-
<p id="q51"><strong>I've been using the plugin for some time, I updated one of my other plugins and now it doesn't work anymore. What's up?</strong><br />
|
363 |
-
It's likely the plugin author modified their <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> in the new release and any old <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> you optimized with our plugin has introduced duplicate code as a result (creating a conflict). Simply check out the source code, identify any new <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> and update your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> optimizations our plugin and you're good to go.</p>
|
364 |
-
<!--
|
365 |
-
<p id="q52" align="right"><a href="#toc">back to top</a></p>
|
366 |
-
<p><strong>I have some <acronym title="Cascading Style Sheet">CSS</acronym> classes with declarations being overwritten or <acronym title="JavaScript">JS</acronym> with dependencies, do I really have to copy and paste all my <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> file settings around?</strong><br />
|
367 |
-
No, you can drag and drop them into the desired order on the minify settings page.</p>-->
|
368 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
369 |
-
<p id="q53"><strong>Why does your plugin change the order of my <script> and <link> tags (in the <head>)?</strong><br />
|
370 |
-
Steve Souders <a href="http://www.youtube.com/watch?v=oaxZtKAlLRk" target="_blank">identified</a> that placing inline scripts between <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> embeds creates a blocking situation, so we're try to help you avoid that. If you'd like to experiment with various scenarios related specifically to your blog, we recommend Steve's tool, <a href="http://stevesouders.com/cuzillion/" target="_blank">Cuzillion</a>. Have some beneficial input on other common cases for WordPress users? <a href="mailto:wordpressexperts@w3-edge.com">Reach out to us</a>.</p>
|
371 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
372 |
-
<p id="q54"><strong>I can't read this minified <acronym title="Hypertext Markup Language">HTML</acronym>; can you give me a break please?</strong><br />
|
373 |
-
Happy to! Login as an administrator, go to the Minify Settings page and check off "Show un-minified pages to administrators" and save the changes. Now stay logged in as an administrator in the same browser you used to change the settings and now when you view the source of a given page in the site, the source will not be minified.</p>
|
374 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
375 |
-
<p id="q55"><strong>When are you going to translate this plugin into more languages?</strong><br />
|
376 |
-
When you help us! :-) Localization is tricky and we're happy to work with those willing to support the WordPress community. We will most likely follow the <a href="http://en.wordpress.com/stats/" target="_blank">trends of WordPress</a> itself to determine which languages are addressed first.</p>
|
377 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
378 |
-
<p id="q56"><strong>I'm not a hardcore developer, can you explain to me how this // and / stuff works and how I should specify the paths for <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files?</strong><br />
|
379 |
-
You mean on the minify settings page right? Ok, it's simple:<br />
|
380 |
-
// tells the plugin to search for the file with the provided path from the document root, e.g.: ///JS/jquery/jquery.<acronym title="JavaScript">JS</acronym><br />
|
381 |
-
/ tells the plugin to search for the file with the provided path from the server root, e.g. //JS/jquery/jquery.<acronym title="JavaScript">JS</acronym></p>
|
382 |
-
<p>In most cases providing an absolute path is sufficient and most reliable. You can of course use relative paths, but we discourage it unless you really know what you are doing.</p>
|
383 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
384 |
-
<p id="q57"><strong>What about Etags?</strong><br />
|
385 |
-
Yes, we have Etags covered. Even if you have a clustered hosting environment, your <a href="http://en.wikipedia.org/wiki/HTTP_ETag" target="_blank">Etags</a> will be consistent (across multiple servers in your cluster) so you don't have to worry about using special session cookies when you introduce our plugin. If you would like to specify headers for various reasons, you can do that as well.</p>
|
386 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
387 |
-
<p id="q58"><strong>Which encodings do you support?</strong><br />
|
388 |
-
We recommend UTF-8, but we do not modify the encoding in any files, instead we simply return the code as it is provided.</p>
|
389 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
390 |
-
<p id="q59"><strong>What's this thing doing? Where are the statistics?</strong><br />
|
391 |
-
Right now we do not show the statistics in <acronym title="WordPress">WP</acronym> Admin, but soon we will provide graphs of: Page Cache Memory Use, Page Cache Hits/Misses, <acronym title="Database">DB</acronym> Cache Memory Use, <acronym title="Database">DB</acronym> Hits/Misses, Average Page Compression Savings, Average <acronym title="Cascading Style Sheet">CSS</acronym> Compression Savings, Average <acronym title="JavaScript">JS</acronym> Compression Savings, Average Requests per Second, and Average Page Execution Time.</p>
|
392 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
393 |
-
<p id="q60"><strong>How can I tell if it's working? Aren't there any statistics at all?</strong><br />
|
394 |
-
Well yes actually there are, simply enable debug mode on the general settings tab to have details appended to the bottom of your <acronym title="Hypertext Markup Language">HTML</acronym> source. Remember that when enabled all visitors to your blog can see these statistics if they view source. Using debug mode does slow the performance of your site so use sparingly.</p>
|
395 |
-
<p id="q61"><strong>I'm an advanced theme developer and I want to have different combinations of <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files on different types of pages in my theme; how is this done?</strong><br />
|
396 |
-
On the minify settings tab, use the drop-down selection menu to define the <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files that appear on all pages using the "Default" group first. Then specify unie files for the other pages.</p>
|
397 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
398 |
-
<p id="q62"><strong>Which features can I use if I haven't yet installed an opcode cache or memcached?</strong><br />
|
399 |
-
Memory caching will not be possible. However you will be able to use both the page cache and minify in "disk" mode, as well <acronym title="Content Delivery Network">CDN</acronym> functionality without issue.</p>
|
400 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
401 |
-
<p id="q63"><strong>How can I host my favicon with my <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
|
402 |
-
If the file exists in your document root (i.e. http://domain.com/favicon.ico), the plugin can take care of that for you using custom upload options. If the file is in your theme directory you can also have the plugin uploaded from there.</p>
|
403 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
404 |
-
<p id="q64"><strong>Why do you set the value of the media attribute of <link> to all?</strong><br />
|
405 |
-
In case you were using @media declarations in your document, we'd have you covered. We will likely allow you to modify this attribute as subsequent features are finalized.</p>
|
406 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
407 |
-
<p id="q65"><strong>Why can't I specify other <script> types or encoding?</strong><br />
|
408 |
-
We have not found a use case where this appears to be of any consequence. If you're aware of one <a href="mailto:wordpressexperts@w3-edge.com">please let us know</a>.</p>
|
409 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
410 |
-
<p id="q66"><strong>My theme doesn't call wp_footer() or wp_head(), how do I set this plugin up?</strong><br />
|
411 |
-
You'll need to manually update your theme to include your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> minify groups. The calls you'll want to make for the various cases are:</p>
|
412 |
-
<ul>
|
413 |
-
<li><?php if (function_exists('w3tc_styles')): w3tc_styles('include'); endif; ?><br />
|
414 |
-
Inserts the <head> <acronym title="Cascading Style Sheet">CSS</acronym> group at the location you choose. Multiple occurrences are allowed.</li>
|
415 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include'); endif; ?><br />
|
416 |
-
Inserts the <head> blocking <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
417 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-nb'); endif; ?><br />
|
418 |
-
Inserts the <head> non-blocking <acronym title="JavaScript">JS</acronym> groups at the location you choose.</li>
|
419 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include');w3tc_scripts('include-nb'); endif; ?><br />
|
420 |
-
Inserts both the blocking and non-blocking <head> <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
421 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-footer'); endif; ?><br />
|
422 |
-
Inserts the footer <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
423 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-footer-nb'); endif; ?><br />
|
424 |
-
Inserts the footer non-blocking <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
425 |
-
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-footer');w3tc_scripts('include-footer-nb'); endif; ?><br />
|
426 |
-
Inserts both the blocking and non-blocking <acronym title="JavaScript">JS</acronym> groups at the location you choose.</li>
|
427 |
-
</ul>
|
428 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
429 |
-
<p id="q67"><strong>Is this plugin compatible with other popular caching plugins?</strong><br />
|
430 |
-
No. Any disk based page caching plugin you're currently using would need to be completely uninstalled (not just disabled) in order to use this plugin. So if you have a development environment where you can try this out or testing during low traffic periods to get your preferences set, that is recommended. You can always backup your full WordPress installation before testing pretty quickly if you skip the /uploads/ (media library) directory.</p>
|
431 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
432 |
-
<p id="q68"><strong>Some WordPress caching plugins fail when markup is not well-formed, is this plugin similar?</strong><br />
|
433 |
-
No, this plugin is not similar. While valid <acronym title="Hypertext Markup Language">HTML</acronym> and <acronym title="World Wide Web Consortium">W3C</acronym> standards ensure consistent behavior across user agents and promote accessibility, any invalidity that exist in the code is not going to bring your site to its knees.</p>
|
434 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
435 |
-
<p id="q69"><strong>Won't various 3rd parties who's <acronym title="JavaScript">JS</acronym> I download and cache be concerned?</strong><br />
|
436 |
-
Unlikely, you're saving them bandwidth and using their applications, so they will probably appreciate it as long as their application still works as intended and you're using their software in an authorized manner. Look at it this way, even before this plugin, you and thousands of other people were still downloading it, now you're just downloading it first.</p>
|
437 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
438 |
-
<p id="q70"><strong>Google already minified and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compressed jQuery (and other libraries ) for me, why can't I just use their bandwidth and embed other code after it?</strong><br />
|
439 |
-
You can! Just add Google's script to your minify settings use non-blocking mode and your visitors will download jQuery directly from them as you wish. And the same is obviously true for any other library you wish. Remember you are creating additional <acronym title="Domain Name System">DNS</acronym> Lookups and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions when you do this.</p>
|
440 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
441 |
-
<p id="q71"><strong>I wanted to use a different version jQuery with my theme, how do I replace WordPress' jQuery with Google's minified version using your plugin?</strong><br />
|
442 |
-
Currently you cannot, replacement is not yet supported.</p>
|
443 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
444 |
-
<p id="q72"><strong>What about the wp-includes files, can those be served from the <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
|
445 |
-
Yes, you can specify which file types you would like served by <acronym title="Content Delivery Network">CDN</acronym> and they will be uploaded and always downloaded from that location. This includes the smilies, JavaScript files et al. By default we take care of them all.</p>
|
446 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
447 |
-
<p id="q73"><strong>What if I don't want to work with a <acronym title="Content Delivery Network">CDN</acronym> right now, is there any other use for this feature?</strong><br />
|
448 |
-
Yes! You can take advantage of the <a href="http://www.mozilla.org/projects/netlib/http/pipelining-faq.html">pipelining</a> support in some browsers by creating a sub-domain for the static content for your site. So you could select the "Origin Push / Self-hosted" method of the General Settings tab. Create static.domain.com on your server (and update your <acronym title="Domain Name System">DNS</acronym> zone) and then specify the <acronym title="File Transfer Protocol">FTP</acronym> details for it in the plugin configuration panel and you're done. If you disable the scripting options on your server you'll find that your server will actually respond slightly faster from that sub-domain because it's just sending files and not processing them.</p>
|
449 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
450 |
-
<p id="q74"><strong>Are minified files uploaded to my <acronym title="Content Delivery Network">CDN</acronym> provider?</strong><br />
|
451 |
-
Yes, any <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> you manage with the plugin are minified before being uploaded to your <acronym title="Content Delivery Network">CDN</acronym>. You don't have to make any special changes to your theme. We encourage you to make sure that your provider supports <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression as the benefit of having your static assets available from more than one <acronym title="Point of Presence">POP</acronym> alone is not enough.</p>
|
452 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
453 |
-
<p id="q75"><strong>Who do you recommend as a <acronym title="Content Delivery Network">CDN</acronym> provider?</strong><br />
|
454 |
-
That depends on how you use your blog and where most of your readers read your blog (regionally). Here's a short list:</p>
|
455 |
-
<ul>
|
456 |
-
<li><a href="http://bit.ly/acaXXt" target="_blank">MaxCDN</a></li>
|
457 |
-
<li><a href="http://bit.ly/9hpX8T" target="_blank">Rackspace Cloud Files</a></li>
|
458 |
-
<li><a href="http://bit.ly/bnVs0a" target="_blank">Cotendo</a></li>
|
459 |
-
<li><a href="http://bit.ly/d5hfFt" target="_blank">VPS NET</a></li>
|
460 |
-
<li><a href="http://bit.ly/ao1sGt" target="_blank">Cloudfront</a></li>
|
461 |
-
<li><a href="http://bit.ly/bIjSWC" target="_blank">EdgeCast</a></li>
|
462 |
-
<li><a href="http://bit.ly/a5GBLV" target="_blank">Akamai</a></li>
|
463 |
-
<li><a href="http://bit.ly/aCW04j" target="_blank">Limelight Networks</a></li>
|
464 |
-
<li><a href="http://bit.ly/93EAKK" target="_blank">Simple<acronym title="Content Delivery Network">CDN</acronym></a></li>
|
465 |
-
</ul>
|
466 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
467 |
-
<p id="q76"><strong>Hang on, don't I need to modify my <acronym title="Cascading Style Sheet">CSS</acronym> files so they'll work on the <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
|
468 |
-
No, that is taken care of for you. Your <acronym title="Cascading Style Sheet">CSS</acronym> files will originate from your <acronym title="Content Delivery Network">CDN</acronym> provider and all paths to any images in your <acronym title="Cascading Style Sheet">CSS</acronym> will be changed from relative to absolute, making sure that they load just fine. Do nothing differently, yet reap all the benefits.</p>
|
469 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
470 |
-
<p id="q77"><strong>I don't have time to deal with this, but I know I need it. Will you help me?</strong><br />
|
471 |
-
Yes! Please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and we'll get you acclimated so you can "set it and forget it."</p>
|
472 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
473 |
-
<p id="q92"><strong>What about query string variables on <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>, do they matter?</strong><br />
|
474 |
-
This is definitely a special case. Files like "http://domain.com/wp-content/themes/default/js/script.js?ver=20090102" etc need to be specified with the full <acronym title="Uniform Resource Locator">URL</acronym>. This is an exception to the general rule of specifying a local path to file like: "wp-content/themes/default/js/script.js", which should also work fine. Be sure to click the "Verify <acronym title="Uniform Resource Indicator">URL</acronym>" button to be sure that everything is ok before saving changes.</p>
|
475 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
476 |
-
<p id="q95"><strong>Is this plugin comptatible with GD Star Rating?</strong><br />
|
477 |
-
Yes. Follow these steps:</p>
|
478 |
-
<ol>
|
479 |
-
<li>Enable dynamic loading of ratings by checking GD Star Rating -> Settings -> Features "Cache support option"</li>
|
480 |
-
<li>If Database cache enabled in W3 Total Cache add "wp_gdsr" to "Ignored query stems" field in the Database Cache settings tab, otherwise ratings will not updated after voting</li>
|
481 |
-
<li>Empty all caches</li>
|
482 |
-
</ol>
|
483 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
484 |
-
<p id="q96"><strong>How do I cache only the home page?</strong><br />
|
485 |
-
Add "/.+" (without the quotes) to page cache "Never cache the following pages" option on the page cache settings tab.</p>
|
486 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
487 |
-
<p id="q97"><strong>I see garbage characters instead of the normal web site, what's going on here?</strong><br />
|
488 |
-
If a theme or it's files use the call php_flush() or function flush() that will interfere with the plugins normal operation; making the plugin send cached files before essential operations have finished. The flush() call is no longer necessary and should be removed.</p>
|
489 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
490 |
-
<p id="q98"><strong>What is the purpose of the "Media Library Import" tool and how do I use it?</strong><br />
|
491 |
-
The media library import tool is for old or "messy" WordPress installations that have attachments (images etc in posts or pages) scattered about the web server or "hot linked" to 3rd party sites instead of properly using the media library.</p>
|
492 |
-
<p>The tool will scan your posts and pages for the cases above and copy them to your media library, update your posts to use the link addresses and produce a .htaccess file containing the list of of permanent redirects, so search engines can find the files in their new location.</p>
|
493 |
-
<p>You should backup your database before performing this operation.</p>
|
494 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
495 |
-
<p id="q99"><strong>I'm getting blank pages or 500 error codes when trying to upgrade on WordPress MU</strong><br />
|
496 |
-
First, make sure the plugin is not active (disabled) site-wide. Then make sure it's deactivated site-wide. Now you should be able to successful upgrade without breaking your site.</p>
|
497 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
498 |
-
<p id="q100"><strong>How can I embed the minified CSS file at the location I choose?</strong></p>
|
499 |
-
<ul>
|
500 |
-
<li><?php if (function_exists('w3tc_styles')){w3tc_styles('include');} ?><br />
|
501 |
-
Inserts the minified CSS files at the location you specify in your theme. More than one instance per template is ok; e.g. embedding in multiple conditional statements.</li>
|
502 |
-
</ul>
|
503 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
504 |
-
<p id="q101"><strong>Is this plugin comptatible with TDO Mini Forms?</strong><br />
|
505 |
-
Captcha and recaptcha will work fine, however you will need to prevent any pages with forms from being cached. Add the page's URI to the "Never cache the following pages" box on the Page Cache Settings tab.</p>
|
506 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
507 |
-
<p id="q102"><strong>My YSlow score is low because it doesn't recognize my <acronym title="Content Delivery Network">CDN</acronym>, what can I do?</strong><br />
|
508 |
-
Rule 2 says to use a content delivery network (<acronym title="Content Delivery Network">CDN</acronym>). The score for this rule is computed by checking the hostname of each component against the list of known <acronym title="Content Delivery Network">CDN</acronym>s. Unfortunately, the list of "known <acronym title="Content Delivery Network">CDN</acronym>s" are the ones used by Yahoo!. Most likely these are not relevant to your web site, except for potentially yui.yahooapis.com. If you want an accurate score for your web site, you can add your <acronym title="Content Delivery Network">CDN</acronym> hostnames to YSlow using Firefox's preferences. Here are the steps to follow:</p>
|
509 |
-
<ul>
|
510 |
-
<li>Go to about:config in Firefox. You'll see the current list of preferences.</li>
|
511 |
-
<li>Right-click in the window and choose New and String to create a new string preference.</li>
|
512 |
-
<li>Enter extensions.yslow.cdnHostnames for the preference name.</li>
|
513 |
-
<li>For the string value, enter the hostname of your <acronym title="Content Delivery Network">CDN</acronym>, for example, mycdn.com. Do not use quotes. If you have multiple <acronym title="Content Delivery Network">CDN</acronym> hostnames, separate them with commas.</li>
|
514 |
-
</ul>
|
515 |
-
<p>If you specify <acronym title="Content Delivery Network">CDN</acronym> hostnames in your preferences, they'll be shown under the details for Rule 2 in the Performance view.</p>
|
516 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
517 |
-
<p id="q103"><strong>What is the purpose of the "modify attachment <acronym title="Uniform Resource Indicator">URL</acronym>s" button?</strong><br />
|
518 |
-
If the domain name of your site has changed, this tool is useful in updating your posts and pages to use the current addresses. For example, if your site used to be www.domain.com, and you decided to change it to domain.com, the result would either be many "broken" images or many unncessary redirects (which slow down the visitor's browsing experience). You can use this tool to correct this and similar cases. Correcting the <acronym title="Uniform Resource Indicator">URL</acronym>s of your images also allows the plugin to do a better job of determining which images are actually hosted with the <acronym title="Content Delivery Network">CDN</acronym></p>
|
519 |
-
<p>As always, it never hurts to back up your database first.</p>
|
520 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
521 |
-
<p id="q78"><strong>Which web servers do you support?</strong><br />
|
522 |
-
We are aware of no incompatibilities with <a href="http://httpd.apache.org/" target="_blank">apache</a> 1.3+, <a href="http://www.iis.net/" target="_blank">IIS</a> 5+ or <a href="http://litespeedtech.com/products/webserver/overview/" target="_blank">litespeed</a> 4.0.2+. If there's a web server you feel we should be actively testing (e.g. <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a>), we're <a href="mailto:wordpressexperts@w3-edge.com">interested in hearing</a>.</p>
|
523 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
524 |
-
<p id="q79"><strong>Do I need to enable mod_gzip, mod_rewrite or install any <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression software on my server?</strong><br />
|
525 |
-
No, but we do find that it does help some rich internet applications to compress their AJAX responses, so you might look at it just for that case.</p>
|
526 |
-
<p>If you're larger organization or a web hosting company, consider looking into solutions that exist like <a href="http://www.gear6.com/">Gear6</a> which could be useful now that you have a plugin that makes management memcached pain free.</p>
|
527 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
528 |
-
<p id="q80"><strong>Is this plugin compatible with varnish or squid?</strong><br />
|
529 |
-
Yes, it is compatible with <a href="http://varnish.projects.linpro.no/" target="_blank">varnish</a>.</p>
|
530 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
531 |
-
<p id="q81"><strong>My server is state of the art with 15,000 RPM RAID, why do I need to cache anything in memory?</strong><br />
|
532 |
-
Even if your server was using an array of solid state disks (SSD), your server's <acronym title="Random Access Memory">RAM</acronym> is still going to be faster and introduce less overhead to access than even the fastest solid state drives on a PCIe bus. If you didn't invest in solid state disks for your server, then even worse off - at least an order of magnitude speed difference in read operations in <acronym title="Random Access Memory">RAM</acronym> versus HDD. For write operations delta the latency differences is even more pronounced. <acronym title="Random Access Memory">RAM</acronym> is the winner hands down. We won't even discuss the blocking and arbitration issues that happen with disk arrays under certain circumstances.</p>
|
533 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
534 |
-
<p id="q82"><strong>Why would I choose opcode caching over memcached or vice versa?</strong><br />
|
535 |
-
There's no straight answer for this one. Since WordPress is a PHP-based application, we encourage everyone to install an opcode cache and realize a minimum of 10x performance gain. It will obviously make our plugin faster as well, so again please check out the installation instructions if you do not already use an opcode cache. Once installed, you can select an opcode cache as the method and get back to blogging.</p>
|
536 |
-
<p>Opcode caching does have a couple weaknesses:</p>
|
537 |
-
<ul>
|
538 |
-
<li>If you frequently restart your web server (e.g. apache) especially during high traffic periods, you will lose your cache and your site will slow down as it rebuilds the cache (which happens very quickly). However if you use memcached you would not lose your cache if your web server is restarted.</li>
|
539 |
-
<li>More importantly, opcode caching is best suited for single server environments because the cache is only accessible to the local server, it cannot be shared with other servers in a multi-server (cluster) environment.</li>
|
540 |
-
</ul>
|
541 |
-
<p>It would appear that using <acronym title="Alternative PHP Cache">APC</acronym> database caching, but your mileage may vary. So depending on what software you install and how you manage your server, you can choose the options to fit your needs. If you need help with the install on your dedicated or virtual dedicated linux-based server ask us!</p>
|
542 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
543 |
-
<p id="q83"><strong>I already use <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression on my server, why does it matter if I minify my code?</strong><br />
|
544 |
-
Let's say you had a file of 10240 bytes, which becomes 2048 bytes when compressed, savings of ~80% (typical for <acronym title="Cascading Style Sheet">CSS</acronym> files). That same file will now have an <strong>additional</strong> ~3x-10x transfer speed improvement when minified. That's a big return from a small operation. The larger your files, the more significant the proportional performance gains.</p>
|
545 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
546 |
-
<p id="q84"><strong>How much memory (<acronym title="Random Access Memory">RAM</acronym>) do I need to delegate to caching?</strong><br />
|
547 |
-
Probably the hardest question of all. At the time of this writing the default WordPress install and theme will consume about 50MB of memory in an opcode cache while running our plugin. Keep in mind that the following factors will determine the minimum size of your cache beyond this noted 50MB:</p>
|
548 |
-
<ul>
|
549 |
-
<li>Number of typically requested pages per day (if your blog is popular this number is quite large)</li>
|
550 |
-
<li>Size of minified <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and <acronym title="Hypertext Markup Language">HTML</acronym> pages (smaller is better)</li>
|
551 |
-
<li>Number and complexity of plugins active on your blog (fewer is better)</li>
|
552 |
-
<li>Expiry time of the cache (larger expiry time, larger cache)</li>
|
553 |
-
</ul>
|
554 |
-
<p>So we recommend an absolute minimum of 128MB for a typical blog; this figure is greater than some defaults, so keep that in mind. With statistics you'll be able to react accordingly and make adjustments.</p>
|
555 |
-
<p>For those that don't want or have time to learn anything new to get started, sample configuration files are included with the plugin containing inline comments for you.</p>
|
556 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
557 |
-
<p id="q85"><strong>What version of <acronym title="Hypertext Preprocessor">PHP</acronym> do I need for this thing?</strong><br />
|
558 |
-
Version 4.3 is supported for some modules, however version 5 preferred (it's much much faster especially with an opcode cache). It is likely version 3.0 of WordPress will no longer support <acronym title="Hypertext Preprocessor">PHP</acronym> 4.3.</p>
|
559 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
560 |
-
<p id="q86"><strong>What version of mySQL is needed?</strong><br />
|
561 |
-
If your WordPress installation is works, you're all set.</p>
|
562 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
563 |
-
<p id="q87"><strong>And I need mod_rewrite (or equivalent for my web server) installed too, no?</strong><br />
|
564 |
-
That's correct; everything you need for WordPress (i.e. fancy <acronym title="Uniform Resource Locator">URL</acronym>s) will get you started with this plugin also.</p>
|
565 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
566 |
-
<p id="q88"><strong>How much hardware do I have to throw at something like this before I see a benefit?</strong><br />
|
567 |
-
This plugin was actually designed with virtual dedicated servers in mind. As long as your server has at least 256M of <acronym title="Random Access Memory">RAM</acronym>, you can get started.</p>
|
568 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
569 |
-
<p id="q89"><strong>Is this plugin server cluster and load balancer friendly?</strong><br />
|
570 |
-
Yes, built from the ground up with scale and current hosting paradigms in mind.</p>
|
571 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
572 |
-
<p id="q90"><strong>I'm a web hosting provider and I heard about this plugin from my clients, is this plugin safe for a shared hosting environment?<br />
|
573 |
-
</strong>Yes.</p>
|
574 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
575 |
-
<p id="q91"><strong>What is the intended impact of this plugin on the web hosting landscape?</strong><br />
|
576 |
-
We feel that shared or virtual hosting providers will begin offering secure containers (similar to what <a href="http://mediatemple.net/" target="_blank">mediatemple.net</a> does for mySQL and Ruby etc) for opcode caching and memcached. Whoever brings this offering to market first will lower the bar for more web sites/applications (and startups) to build better performing applications with greater ease. The same hosting provider would also possess a new value added service, thereby realizing a competitive advantage in a highly competitive marketplace. Not to mention be able to increase the density of domains per server (or cluster) without shortchanging customers.</p>
|
577 |
-
<p>One day hopefully this plugin will contribute to making web servers greener and reduce the ecological footprint of the web by reducing the computational effort required to deliver high performance rich user experiences.</p>
|
578 |
-
<p align="right"><a href="#toc">back to top</a></p>
|
579 |
</div>
|
580 |
|
581 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
|
|
|
|
3 |
<h4>Table of Contents</h4>
|
4 |
|
5 |
<div id="toc">
|
6 |
+
<ul>
|
7 |
+
<?php $q = 1; foreach ($xpath->query('//faqs/section') as $section): ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
<li class="col">
|
9 |
+
<h5><?php echo strtoupper($section->attributes->getNamedItem('name')->nodeValue); ?>:</h5>
|
10 |
+
<ul>
|
11 |
+
<?php foreach ($xpath->query('./entry/question', $section) as $entry): ?>
|
12 |
+
<li><a href="#q<?php echo $q; ?>"><?php echo $entry->nodeValue; ?></a></li>
|
13 |
+
<?php $q++; endforeach; ?>
|
14 |
+
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
</li>
|
16 |
+
<?php endforeach; ?>
|
17 |
+
</ul>
|
18 |
</div>
|
19 |
<div id="qa">
|
20 |
+
<hr />
|
21 |
+
<?php $q = 1; foreach ($xpath->query('//faqs/section/entry') as $entry): ?>
|
22 |
+
<p id="q<?php echo $q; ?>"><strong><?php echo $xpath->query('question', $entry)->item(0)->nodeValue; ?></strong></p>
|
23 |
+
<?php echo $xpath->query('answer', $entry)->item(0)->nodeValue; ?>
|
24 |
+
<p align="right"><a href="#toc">back to top</a></p>
|
25 |
+
<?php $q++; endforeach; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
</div>
|
27 |
|
28 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/faq.xml
ADDED
@@ -0,0 +1,701 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<faqs>
|
3 |
+
<section name="General">
|
4 |
+
<entry>
|
5 |
+
<question><![CDATA[ Who is this plugin for? ]]></question>
|
6 |
+
<answer><![CDATA[ <p>Anyone that wants to provide an optimal user experience to their readers.</p> ]]></answer>
|
7 |
+
</entry>
|
8 |
+
<entry>
|
9 |
+
<question><![CDATA[ Umm, why? ]]></question>
|
10 |
+
<answer><![CDATA[
|
11 |
+
<p>We needed an elegant remedy to common performance issues we spent countless hours addressing on various blogs we work with. They all suffered from similar issues and we found that same remedies would sort all of them. Issues like <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction reduction, object size reduction and blocking objects are performance killers and have been remedied with this plugin. Rather than release our various plugins individually (and support them independently) we saw an opportunity to demonstrate how all of this functionality is intertwined and combines to realize far more than the sum of its parts.</p>
|
12 |
+
<p>One of the WordPress community's strengths is also its weakness; we found that numerous plugins are very handy and save some development time in a pinch, but the maintenance and performance penalties blogs suffer from as a result contribute to a poor user experience, which is never acceptable.</p>
|
13 |
+
<p>Experience has shown that fast loading web sites have (at least) the following characteristics:</p>
|
14 |
+
<ul>
|
15 |
+
<li>Reduced <a href="http://en.wikipedia.org/wiki/Customer_attrition" target="_blank">attrition</a></li>
|
16 |
+
<li>Higher conversion rates for e-commerce / affiliate etc sites</li>
|
17 |
+
<li>Increased time on site / more page views per visitor</li>
|
18 |
+
</ul>
|
19 |
+
<p><em>In fact, if wordpress.com (for example) applied some of the techniques used in this plugin, we imagine they'd realize ~10% performance improvement on the <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and <acronym title="Hypertext Markup Language">HTML</acronym> (respectively) on the millions of blogs they host.</em></p>
|
20 |
+
<p>As a practical matter, Akamai and JupiterResearch did a study on <a href="http://www.akamai.com/html/about/press/releases/2006/press_110606.html" target="_blank">acceptable wait time for retail web sites</a> to load back in late 2006 concluding that users may leave after 4 seconds of waiting. That was several years ago now, even before 3G was available for mobile devices, what do you think web users expect today? <a href="http://blogs.zdnet.com/BTL/?p=3925" target="_blank">According to Marissa Mayer</a> of Google, as she stated the same year as Akamai, improving the speed of sites/applications reduces the learning curve for applications and contributes to higher use. It's time to bring the performance major corporations enjoy to the blogosphere.</p>
|
21 |
+
<p>As an aside, don't you think your site's <acronym title="Key Performance Indicators">KPI</acronym> would be more meaningful if you could be confident that all users were having the exact same performance experience with your site? It's too early to say for sure, but we feel that the statistics and metrics we all use to track our progress and results will be more realistic when W3 Total Cache is actively removing bottlenecks from our blogs.</p>
|
22 |
+
<p><a href="mailto:wordpressexperts@w3-edge.com">Please let us know</a> what kind of mileage you have.</p>
|
23 |
+
]]></answer>
|
24 |
+
</entry>
|
25 |
+
<entry>
|
26 |
+
<question><![CDATA[ So give me the skinny, what are the highlights? ]]></question>
|
27 |
+
<answer><![CDATA[
|
28 |
+
<p>W3 Total Cache is a suite of functionality designed to optimize the performance of all WordPress blogs. Features and benefits include:</p>
|
29 |
+
<ul>
|
30 |
+
<li>Improved progressive render (non-blocking <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embedding)</li>
|
31 |
+
<li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups, reduced document load time</li>
|
32 |
+
<li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) support with automated media library import</li>
|
33 |
+
<li>Bandwidth savings via <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (<acronym title="GNU zip">gzip</acronym>) for <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
|
34 |
+
<li>Minification (concatenation, white space removal) of inline, external or 3rd party <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> with scheduled updates</li>
|
35 |
+
<li>Optional embedding of <acronym title="JavaScript">JS</acronym> just above </body></li>
|
36 |
+
<li>Support for caching pages, posts, feeds, database objects, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> in memory with an opcode cache or memcached or both</li>
|
37 |
+
<li>Caching of feeds (comments, page and site), <acronym title="Uniform Resource Indicator">URL</acronym>s with query string variables (like search result pages), Database queries, Pages, Posts, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
|
38 |
+
<li>Complete header management including Etags</li>
|
39 |
+
<li>Increased web server concurrency and reduced resource consumption, increased scale</li>
|
40 |
+
</ul>
|
41 |
+
<p>In essence, anything that can be automated to squeeze out every bit of server performance and minimize bandwidth utilization has been done, leaving your readers with an optimized user experience.</p> ]]></answer>
|
42 |
+
</entry>
|
43 |
+
<entry>
|
44 |
+
<question><![CDATA[ I've never heard of any of this stuff; my blog is fine, no one complains about the speed. Why should I install this? ]]></question>
|
45 |
+
<answer><![CDATA[ <p>Rarely do readers take the time to complain. They typically just stop browsing earlier than you'd prefer and may not return altogether. It's in every web site owner's best interest is to make sure that the performance of your blog is not hindering its success.</p> ]]></answer>
|
46 |
+
</entry>
|
47 |
+
<entry>
|
48 |
+
<question><![CDATA[ But even Matt Mullenweg doesn't agree that additional caching is so important, why bother? ]]></question>
|
49 |
+
<answer><![CDATA[ <p>You're right, <a href="http://ma.tt/2008/03/wordpress-is-open-source/#comment-439787" target="_blank">Matt did say that</a>. However, this plugin provides more than just "caching". Because he is correct, the web is dynamic and must remain so. But as we explain throughout this FAQ, our goal is to improve the performance of any blog. Furthermore, some techniques we use are well documented from past <a href="http://www.slideshare.net/bazza/high-performance-wordpress" target="_blank">WordCamp presentations</a>; we combined them in a way that we have found stands up to the highest traffic spikes.</p> ]]></answer>
|
50 |
+
</entry>
|
51 |
+
<entry>
|
52 |
+
<question><![CDATA[ And how many years of university do I need to use this thing? ]]></question>
|
53 |
+
<answer><![CDATA[ <p>-4 — That's right; a youngster in junior high school can get started with this plugin. Seriously, if you did your own WordPress install or have ever installed a plugin before you're in good shape. If you need help, <a href="mailto:wordpressexperts@w3-edge.com">let us know</a> or perhaps we'll make some videos or the like.</p> ]]></answer>
|
54 |
+
</entry>
|
55 |
+
<entry>
|
56 |
+
<question><![CDATA[ Ok, so the benefits are clear. What exactly is so special about *how* this plugin works? ]]></question>
|
57 |
+
<answer><![CDATA[ <p>Thanks for asking. We just decided not try to use the typical WordPress hooks and methodologies to implement our features, instead we take the normal output and perform optimizations to it before we send it to the user agent using a method they support and then cache the result afterwards. This concept is applied to objects you decide to cache.</p> ]]></answer>
|
58 |
+
</entry>
|
59 |
+
<entry>
|
60 |
+
<question><![CDATA[ Why would I want to cache my feeds? ]]></question>
|
61 |
+
<answer><![CDATA[ <p>We feel that caching objects after the first request and checking for updates before responding subsequent requests (which is kind of how web browsers work too) creates more opportunities for interesting applications and mashups where the blogosphere doesn't require institutional investment to be able to handle developers making hundreds of requests every day the same way we use Google, Twitter and Facebook (for example) <acronym title="Application Programming Interface">API</acronym>s today. Think about it, even when major search engines crawl your site, they have to be "gentle" so they don't bring it down, let's turn the paradigm around so that every blog can deliver content in real-time in various formats.</p> ]]></answer>
|
62 |
+
</entry>
|
63 |
+
<entry>
|
64 |
+
<question><![CDATA[ Why would I want to put my <acronym title="JavaScript">JS</acronym> at the bottom of the page? ]]></question>
|
65 |
+
<answer><![CDATA[ <p>First let me point out that in many cases we suggest putting all the <acronym title="JavaScript">JS</acronym> that's not required for interactivity with your site at the bottom of the document. Anything <acronym title="JavaScript">JS</acronym> that makes the site work as intended we suggested embedding in the <head>. Depending on your specific situation, having the majority of your <acronym title="JavaScript">JS</acronym> at the bottom of the document will mean that your visitors won't have to download things they don't want to begin interacting with your site or reading it's content. Quite often the additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction is worthwhile.</p> ]]></answer>
|
66 |
+
</entry>
|
67 |
+
<entry>
|
68 |
+
<question><![CDATA[ What's an Etag and why do I need one? ]]></question>
|
69 |
+
<answer><![CDATA[ <p>Entity tags were created to add more reliability to client side caching my providing a simple method for a browser to verify that a file had not changed since last it was downloaded. Using them helps enables your server return 304 or "not modified" responses instead of a 200 "ok" response which are much much slower (because the file is sent). The result is a visitor viewing multiple pages of your site would have that "instant loading" experience that we all definitely enjoy. Don't worry we don't use inodes to create our Etags so this solution is reliable for multi server hosting solutions.</p> ]]></answer>
|
70 |
+
</entry>
|
71 |
+
<entry>
|
72 |
+
<question><![CDATA[ So let me get this straight; you're telling me this plugin is designed to improve performance of any WordPress blog? ]]></question>
|
73 |
+
<answer><![CDATA[ <p>Precisely, that is unless you don't write any posts in your blog nor have any readers. If you're someone that's always into the latest web development technique or plugin, now you can "have it all" without making your readers suffer.</p> ]]></answer>
|
74 |
+
</entry>
|
75 |
+
<entry>
|
76 |
+
<question><![CDATA[ This is too good to be true, how can I test the results? ]]></question>
|
77 |
+
<answer><![CDATA[
|
78 |
+
<p>You will be able to see it instantly on each page load, but for tangible metrics, consider the following tools:</p>
|
79 |
+
<ul>
|
80 |
+
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://developer.yahoo.com/yslow/" target="_blank">Yahoo! YSlow</a></li>
|
81 |
+
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://code.google.com/speed/page-speed/" target="_blank">Google Page Speed</a></li>
|
82 |
+
<li><a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://stevesouders.com/hammerhead/" target="_blank">Hammerhead</a></li>
|
83 |
+
<li><a href="http://www.google.com/chrome" target="_blank">Google Chrome</a> + <a href="http://code.google.com/webtoolkit/speedtracer/" target="_blank">Google Speed Tracer</a></li>
|
84 |
+
</ul>
|
85 |
+
<ul>
|
86 |
+
<li><a href="http://tools.pingdom.com/" target="_blank">Pingdom</a></li>
|
87 |
+
<li><a href="http://www.webpagetest.org/test" target="_blank">WebPagetest</a></li>
|
88 |
+
<li><a href="http://www.gomez.com/instant-test-pro/" target="_blank">Gomez Instant Test Pro</a></li>
|
89 |
+
</ul>
|
90 |
+
<ul>
|
91 |
+
<li><a href="http://redbot.org/" target="_blank">Resource Expert Droid</a></li>
|
92 |
+
<li><a href="http://www.procata.com/cachetest/" target="_blank">Web Caching Tests</a></li>
|
93 |
+
<li><a href="http://www.port80software.com/tools/compresscheck.asp" target="_blank">Port80 Compression Check</a> (minify requires <acronym title="Microsoft Internet Explorer">MSIE</acronym>6 support to be enabled)</li>
|
94 |
+
<li><a href="http://www.gidnetwork.com/tools/gzip-test.php" target="_blank">A simple online web page compression / deflate / <acronym title="GNU zip">gzip</acronym> test tool</a></li>
|
95 |
+
</ul>
|
96 |
+
]]></answer>
|
97 |
+
</entry>
|
98 |
+
<entry>
|
99 |
+
<question><![CDATA[ Does this plugin work with WordPress <acronym title="Multi-User">MU</acronym>? ]]></question>
|
100 |
+
<answer><![CDATA[ <p>Indeed it does.</p> ]]></answer>
|
101 |
+
</entry>
|
102 |
+
<entry>
|
103 |
+
<question><![CDATA[ Does this plugin work with BuddyPress (bbPress)? ]]></question>
|
104 |
+
<answer><![CDATA[ <p>Yes.</p> ]]></answer>
|
105 |
+
</entry>
|
106 |
+
<entry>
|
107 |
+
<question><![CDATA[ Which WordPress versions are supported? ]]></question>
|
108 |
+
<answer><![CDATA[ <p>To use all features in the suite, a minimum version of 2.6 is required. Earlier versions will benefit from our Media Library Importer to get them back on the upgrade path and into a <acronym title="Content Delivery Network">CDN</acronym> of their choosing.</p> ]]></answer>
|
109 |
+
</entry>
|
110 |
+
<entry>
|
111 |
+
<question><![CDATA[ I understand the database caching and the page caching, but what's minify all about? ]]></question>
|
112 |
+
<answer><![CDATA[
|
113 |
+
<p>We'll just quote the fine folks at yahoo on this one:</p>
|
114 |
+
<blockquote>
|
115 |
+
<p>"Minification is the practice of removing unnecessary characters from code to reduce its size thereby improving load times. When code is minified all comments are removed, as well as unneeded white space characters (space, newline, and tab). In the case of JavaScript, this improves response time performance because the size of the downloaded file is reduced. Two popular tools for minifying JavaScript code are <a href="http://www.crockford.com/javascript/jsmin.html" target="_blank"><acronym title="JavaScript">JS</acronym>Min</a> and <a href="http://developer.yahoo.com/yui/compressor/" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a>. The <acronym title="Yahoo! User Interface">YUI</acronym> compressor can also minify <acronym title="Cascading Style Sheet">CSS</acronym>.</p>
|
116 |
+
<p>Obfuscation is an alternative optimization that can be applied to source code. It's more complex than minification and thus more likely to generate bugs as a result of the obfuscation step itself. In a survey of ten top U.S. web sites, minification achieved a 21% size reduction versus 25% for obfuscation. Although obfuscation has a higher size reduction, minifying JavaScript is less risky.</p>
|
117 |
+
<p>In addition to minifying external scripts and styles, inline <script> and <style> blocks can and should also be minified. Even if you <acronym title="GNU zip">gzip</acronym> your scripts and styles, minifying them will still reduce the size by 5% or more. As the use and size of JavaScript and <acronym title="Cascading Style Sheet">CSS</acronym> increases so will the savings gained by minifying your code."</p>
|
118 |
+
<cite><a href="http://developer.yahoo.com/performance/rules.html#minify" target="_blank">developer.yahoo.com</a></cite>
|
119 |
+
</blockquote>
|
120 |
+
]]></answer>
|
121 |
+
</entry>
|
122 |
+
<entry>
|
123 |
+
<question><![CDATA[ What do you use to minify? ]]></question>
|
124 |
+
<answer><![CDATA[ <p> We use: <a href="http://code.google.com/p/minify/" target="_blank">minify</a> but may support various engines in the future. Based on <a href="http://ejohn.org/" target="_blank">John Resig's</a> suggestion we're currently looking at <a href="http://yuilibrary.com/projects/yuicompressor/wiki" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a> and <a href="http://code.google.com/closure/compiler/" target="_blank">Google Closure Compiler</a> (for JavaScript) also.</p> ]]></answer>
|
125 |
+
</entry>
|
126 |
+
<entry>
|
127 |
+
<question><![CDATA[ What's the point of downloading and caching 3rd party files (e.g. <acronym title="JavaScript">JS</acronym>)? ]]></question>
|
128 |
+
<answer><![CDATA[ <p>With the various hosted 3rd party applications available (from web site statistics to social media sharing widgets), the problems we've noticed are: additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions, <acronym title="Domain Name System">DNS</acronym> lookups and latencies from busy servers that we can't control and often un-minified files with no <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression all add up to a very slow page load and poor user experience. With your own copy of external files, updated as frequently as you wish, none of these problems exist.</p> ]]></answer>
|
129 |
+
</entry>
|
130 |
+
<!-- entry>
|
131 |
+
<question><![CDATA[ Will you support other memory or <a href="http://en.wikipedia.org/wiki/PHP_accelerator" target="_blank">opcode caches</a>? ]]></question>
|
132 |
+
<answer><![CDATA[ <p>Possibly, we just <a href="mailto:wordpressexperts@w3-edge.com">need to know which</a> others are popular in the WordPress community and we will address them.</p> ]]></answer>
|
133 |
+
</entry -->
|
134 |
+
<entry>
|
135 |
+
<question><![CDATA[ Will this plugin break my theme by changing the order of conditional statements or the like? ]]></question>
|
136 |
+
<answer><![CDATA[ <p>No, the plugin looks for conditional statements in your markup used for <acronym title="Cascading Style Sheet">CSS</acronym> (and sometimes <acronym title="JavaScript">JS</acronym>) and makes sure that the minified files precede it, so keep that in mind.</p> ]]></answer>
|
137 |
+
</entry>
|
138 |
+
<entry>
|
139 |
+
<question><![CDATA[ Will this speed up <acronym title="WordPress">WP</acronym> Admin? ]]></question>
|
140 |
+
<answer><![CDATA[ <p>Yes, indirectly — if you have a lot of bloggers working with you, you will find that it feels like you have a server dedicated only to <acronym title="WordPress">WP</acronym> Admin once this plugin is enabled; the result, increased productivity.</p> ]]></answer>
|
141 |
+
</entry>
|
142 |
+
<entry>
|
143 |
+
<question><![CDATA[ Does this plugin modify how the WordPress core works? ]]></question>
|
144 |
+
<answer><![CDATA[ <p>No. No theme changes, special files, WordPress core file modifications or special permissions need to be set.</p> ]]></answer>
|
145 |
+
</entry>
|
146 |
+
<entry>
|
147 |
+
<question><![CDATA[ Does it really matter if I remove the line breaks from my code? ]]></question>
|
148 |
+
<answer><![CDATA[ <p>Definitely. Removing white space from your files make <acronym title="GNU zip">gzip</acronym> (<acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression) more effective.</p> ]]></answer>
|
149 |
+
</entry>
|
150 |
+
<entry>
|
151 |
+
<question><![CDATA[ What's the benefit of removing <acronym title="Hypertext Markup Language">HTML</acronym> comments from my code? ]]></question>
|
152 |
+
<answer><![CDATA[ <p>Many developers like to have comments in the code for various reasons, however these comments add no value from the blog readers (or search engine for that matter) point of view and only contribute to increased load time and wasted bandwidth as a result. Now only you can use them and view them in your site (as a logged in administrator viewing the page source), which is really what (we assume) you intended.</p> ]]></answer>
|
153 |
+
</entry>
|
154 |
+
<entry>
|
155 |
+
<question><![CDATA[ Why is <link> used to embed <acronym title="Cascading Style Sheet">CSS</acronym> instead of <style>? ]]></question>
|
156 |
+
<answer><![CDATA[ <p><link> is a non-blocking method to embed <acronym title="Cascading Style Sheet">CSS</acronym> into a document. We recommend this approach for optimal performance.</p> ]]></answer>
|
157 |
+
</entry>
|
158 |
+
<entry>
|
159 |
+
<question><![CDATA[ Why do I care of <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> is "blocking" or not? ]]></question>
|
160 |
+
<answer><![CDATA[ <p>In the case of objects (files) you don't host yourself, this could add several seconds to your page's load time as the <acronym title="Domain Name System">DNS</acronym> lookups, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction roundtrip times and wait times add up. Even when all the scripts are hosted locally, the same adversities exist. Since all objects in the <head> of a document have to be ready before the page can be rendered, having them load in a parallel fashion as opposed to linear (or near linear) gives night and day results.</p> ]]></answer>
|
161 |
+
</entry>
|
162 |
+
<entry>
|
163 |
+
<question><![CDATA[ What does this plugin do to inline <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>? ]]></question>
|
164 |
+
<answer><![CDATA[ <p>Nothing yet. We're evaluating use cases to deal with common issues (like inline <acronym title="Cascading Style Sheet">CSS</acronym> for tag clouds for example).</p> ]]></answer>
|
165 |
+
</entry>
|
166 |
+
<entry>
|
167 |
+
<question><![CDATA[ Ok I get it, this all sounds nice and everything, but is this perfect? ]]></question>
|
168 |
+
<answer><![CDATA[ <p>Pretty much. If you monetize your blog with ads you will want to spend some time making sure that the ad code works well with your optimization settings. There are also the occasional pieces of code that conflict with the others and have to be in a specific order to work well, but that's not a problem that this plugin introduces.</p> ]]></answer>
|
169 |
+
</entry>
|
170 |
+
<entry>
|
171 |
+
<question><![CDATA[ Seriously, tell me what the downside is, there must be something? ]]></question>
|
172 |
+
<answer><![CDATA[ <p>Well, no there isn't. Installing the server side software might be challenging for some, but <a href="mailto:wordpressexperts@w3-edge.com">we can assist</a> with that if you ask. Other than that, unless you enjoy frequently upgrading your server plan or buying more servers and paying for bandwidth overages or wincing every time you add another "must have" plugin to your blog, we cannot find any reason to deter you from the use of this one.</p> ]]></answer>
|
173 |
+
</entry>
|
174 |
+
<entry>
|
175 |
+
<question><![CDATA[ If this plugin does everything you claim, why would you give it away free? Cui Bono? ]]></question>
|
176 |
+
<answer><![CDATA[
|
177 |
+
<p>Who benefits? Everyone. Of the numerous, here are the three the most important reasons we share with the WordPress community:</p>
|
178 |
+
<ul>
|
179 |
+
<li>WordPress is free and high quality, plugins should be too.</li>
|
180 |
+
<li>There's no reason your blog shouldn't be able to perform as well as well as any major corporation's web site/application.</li>
|
181 |
+
<li><a href="http://code.google.com/speed/articles/" target="_blank">Google</a> and <a href="http://developer.yahoo.com/yui/" target="_blank">Yahoo</a> offer quite a bit, but they did not offer a WordPress solution yet. This is our contribution to speeding up the web (starting with the blogosphere).</li>
|
182 |
+
</ul>
|
183 |
+
]]></answer>
|
184 |
+
</entry>
|
185 |
+
<entry>
|
186 |
+
<question><![CDATA[ Who in the world uses memcached or an opcode cache etc anyway? ]]></question>
|
187 |
+
<answer><![CDATA[ <p>Great question! Basically anyone that needs to make their application scale. For example, <a href="http://www.wordpress.com/" target="_blank">WordPress.com</a>, <a href="http://twitter.com" target="_blank">Twitter</a>, <a href="http://www.facebook.com/" target="_blank">Facebook</a>, LiveJournal (the inventors of the software) and so on all use some sort of memory cache to increase application performance.</p> ]]></answer>
|
188 |
+
</entry>
|
189 |
+
<entry>
|
190 |
+
<question><![CDATA[ I don't understand what a <acronym title="Content Delivery Network">CDN</acronym> has to do with caching, that's completely different, no? ]]></question>
|
191 |
+
<answer><![CDATA[ <p>Technically no, a <acronym title="Content Delivery Network">CDN</acronym> is a high performance cache that stores static assets (your theme files, media library etc) in various locations throughout the world in order to provide low latency access to them by readers in those regions.</p> ]]></answer>
|
192 |
+
</entry>
|
193 |
+
<entry>
|
194 |
+
<question><![CDATA[ We run many blogs on many servers here at my company, is this plugin still for me? ]]></question>
|
195 |
+
<answer><![CDATA[ <p> Yes, especially if you have a cluster and many WordPress installations or a WordPress <acronym title="Multi-User">MU</acronym> installation, then plugin is for you. It will allow you to move easily from multiple installations to WordPress <acronym title="Multi-User">MU</acronym> and continue to use multiple <acronym title="Hypertext Transfer Protocol">HTTP</acronym>, Database, Network Attached Storage etc servers in any configuration you wish. You can also specify as many memcached servers as you wish, although you cannot yet delegate a memcached server to a specific type of caching, i.e. there's no pool management yet.</p> ]]></answer>
|
196 |
+
</entry>
|
197 |
+
<entry>
|
198 |
+
<question><![CDATA[ So you appear to know what you're talking about, will there be any negative effect on my SEO rankings? ]]></question>
|
199 |
+
<answer><![CDATA[
|
200 |
+
<p>To answer, first we must assume that you're using all of the options we offer: <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression, minify etc. Having said that, we are only sending compressed data to user agents that support it; even <a href="http://www.google.com/search?q=search+engine+crawler+http+compression" target="_blank">most search engine crawlers do</a>. As for minified <acronym title="Hypertext Markup Language">HTML</acronym>, this is essentially how crawlers see your page anyway when they download it. So no, there's no penalty or compromise.</p>
|
201 |
+
<p>Fact of the matter, there was a time when the semantics and size of your <acronym title="Hypertext Markup Language">HTML</acronym> file (code-to-content ratio), was a factor in a more favorable ranking. <a href="http://microformats.org/wiki/posh" target="_blank"><acronym title="Plain Old Semantic HTML">POSH</acronym></a> <acronym title="Hypertext Markup Language">HTML</acronym> has always been preferred by search engines. In some markets this may still be true, so give the search engines what they want.</p>
|
202 |
+
]]></answer>
|
203 |
+
</entry>
|
204 |
+
<entry>
|
205 |
+
<question><![CDATA[ Will the plugin interfere with other plugins or widgets? ]]></question>
|
206 |
+
<answer><![CDATA[ <p>No, on the contrary if you use the minify settings you will improve their performance by several times.</p> ]]></answer>
|
207 |
+
</entry>
|
208 |
+
<entry>
|
209 |
+
<question><![CDATA[ What about my robots.txt, sitemap.xml and all my site verification files etc, what happens with those? ]]></question>
|
210 |
+
<answer><![CDATA[ <p>If you're concerned about what happens with these when the <acronym title="Content Delivery Network">CDN</acronym> functionality is active, nothing does. You do not want or need these files moved from their original locations and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (or minification for that matter) is of no consequence in most cases.</p> ]]></answer>
|
211 |
+
</entry>
|
212 |
+
<entry>
|
213 |
+
<question><![CDATA[ Do you have any tricks for "post-loading", "lazy-loading" and other render optimizations in this plugin? ]]></question>
|
214 |
+
<answer><![CDATA[ <p>Yes we do, we're currently evaluating if they are best introduced into this plugin or as standalones. Feel free to <a href="mailto:wordpressexperts@w3-edge.com">chime in</a>.</p> ]]></answer>
|
215 |
+
</entry>
|
216 |
+
<entry>
|
217 |
+
<question><![CDATA[ I want to obfuscate my <acronym title="JavaScript">JS</acronym>, does the plugin do that? Will it ever? ]]></question>
|
218 |
+
<answer><![CDATA[ <p>No the plugin will not do that and it's unlikely that we'll support that.</p> ]]></answer>
|
219 |
+
</entry>
|
220 |
+
<entry>
|
221 |
+
<question><![CDATA[ Can I use packed or obfuscated <acronym title="JavaScript">JS</acronym> with this plugin? ]]></question>
|
222 |
+
<answer><![CDATA[ <p> Yes and no. In general, packed <acronym title="JavaScript">JS</acronym> cannot be minified reliably. Obfuscated <acronym title="JavaScript">JS</acronym> also is hit or miss. A minified and <acronym title="GNU zip">gzip</acronym>ped <acronym title="JavaScript">JS</acronym> file will be smaller than a packed file in any case, so using the (uncompressed, unpacked or un obfuscated) developer versions of your plugins is no longer a concern when using this plugin. Alternatively, you can use the non-blocking embed option to continue to use your packed or obfuscated file without minification.</p> ]]></answer>
|
223 |
+
</entry>
|
224 |
+
<entry>
|
225 |
+
<question><![CDATA[ I have some ideas for more features, can I write my own add-ons for your plugin? ]]></question>
|
226 |
+
<answer><![CDATA[ <p>Not yet, we are considering support for add-ons. Meanwhile, please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and let us know what you think would benefit the community.</p> ]]></answer>
|
227 |
+
</entry>
|
228 |
+
<entry>
|
229 |
+
<question><![CDATA[ Who do I thank for all of this? ]]></question>
|
230 |
+
<answer><![CDATA[
|
231 |
+
<p>It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
|
232 |
+
<ul>
|
233 |
+
<li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
|
234 |
+
<li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
|
235 |
+
<li><a href="http://wonko.com/" target="_blank">Ryan Grove</a></li>
|
236 |
+
<li><a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/" target="_blank">Nicholas Zakas</a> </li>
|
237 |
+
<li><a href="http://rtdean.livejournal.com/" target="_blank">Ryan Dean</a></li>
|
238 |
+
<li><a href="http://gravitonic.com/" target="_blank">Andrei Zmievski</a></li>
|
239 |
+
<li>George Schlossnagle</li>
|
240 |
+
<li>Daniel Cowgill</li>
|
241 |
+
<li><a href="http://toys.lerdorf.com/" target="_blank">Rasmus Lerdorf</a></li>
|
242 |
+
<li><a href="http://t3.dotgnu.info/" target="_blank">Gopal Vijayaraghavan</a></li>
|
243 |
+
<li><a href="http://eaccelerator.net/" target="_blank">Bart Vanbraban</a></li>
|
244 |
+
<li><a href="http://xcache.lighttpd.net/" target="_blank">mOo</a></li>
|
245 |
+
</ul>
|
246 |
+
<p>Please reach out to all of these people and support their projects if you're so inclined.</p> ]]></answer>
|
247 |
+
</entry>
|
248 |
+
</section>
|
249 |
+
<section name="Usage">
|
250 |
+
<entry>
|
251 |
+
<question><![CDATA[ How do I find the <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> to optimize (minify) them with this plugin? ]]></question>
|
252 |
+
<answer><![CDATA[
|
253 |
+
<p>View your page source in your browser and search for any <style>, <link> or <script> tags that contain external <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files and one by one add them to the minify settings page. Do not include any <acronym title="Cascading Style Sheet">CSS</acronym> in conditional statements (unless you know what you are doing) like:</p>
|
254 |
+
<p><!--[if lte IE 8]><link rel="stylesheet" type="text/css" href="/wp-content/themes/default/lte.css" media="screen,projection" /><![endif]--> Or simply use the "Help" tool available on the minify settings page which will identify <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files used in the templates of your theme and properly assign them to the same. Simply tick the checkbox for files you wish to minify, click "Apply & close", then save your settings.</p>
|
255 |
+
<p>The plugin will combine, minify, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compress and check for updates to these files automatically from now on. If you have any <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> that are inline consider making them external files so that you can use them with minify.</p>
|
256 |
+
]]></answer>
|
257 |
+
</entry>
|
258 |
+
<entry>
|
259 |
+
<question><![CDATA[ I've used the plugin to optimize all my theme's <acronym title="JavaScript">JS</acronym> and plugins <acronym title="JavaScript">JS</acronym>, but there are some function calls, where do those go? ]]></question>
|
260 |
+
<answer><![CDATA[ <p>Just place them above </head> if that's where your embed is done or above </body> if that's where you need them. Wherever they need to be to be called after the <acronym title="JavaScript">JS</acronym> that needs them, it'll be fine.</p> ]]></answer>
|
261 |
+
</entry>
|
262 |
+
<entry>
|
263 |
+
<question><![CDATA[ Can I use scripts that generate <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> with this plugin?]]></question>
|
264 |
+
<answer><![CDATA[ <p>Yes you can, but since there are numerous ways to do so, so be sure to test your results carefully. Having said that we do encourage it as it will mean that less processing has to be done to deliver your pages.</p> ]]></answer>
|
265 |
+
</entry>
|
266 |
+
<entry>
|
267 |
+
<question><![CDATA[ How do I configure Amazon Simple Storage Service (Amazon <acronym title="Simple Storage Service">S3</acronym>) or Amazon CloudFront as my <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
268 |
+
<answer><![CDATA[
|
269 |
+
<p>First <a href="http://aws.amazon.com/" target="_blank">create an S3 account</a>; it may take several hours for your account credentials to be functional. Next, you need to obtain your "Access key ID" and "Secret key" from the "Access Credentials" section of the "<a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key" target="_blank">Security Credentials</a>" page of "My Account." Make sure the status is "active." Next, make sure that "Amazon Simple Storage Service (Amazon S3)" is the selected "<acronym title="Content Delivery Network">CDN</acronym> type" on the "General Settings" tab, then save the changes. Now on the "Content Delivery Network Settings" tab enter your "Access key," "Secret key" and enter a name (avoid special characters and spaces) for your bucket in the "Create a bucket" field by clicking the button of the same name. If using an existing bucket simply specify the bucket name in the "Bucket" field. Click the "Test <acronym title="Simple Storage Service">S3</acronym> Upload" button and make sure that the test is successful, if not check your settings and try again. Save your settings.</p>
|
270 |
+
<p>Unless you wish to use CloudFront, you're almost done, skip to the next paragraph if you're using CloudFront. Go to the "General Settings" tab and click the "Enable" checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality. Empty the cache for the changes to take effect. If preview mode is active you will need to "deploy" your changes for them to take effect.</p>
|
271 |
+
<p>To use CloudFront, perform all of the steps above, except select the "Amazon CloudFront" "<acronym title="Content Delivery Network">CDN</acronym> type" in the "Content Delivery Network" section of the "General Settings" tab. When creating a new bucket, the distribution ID will automatically be populated. Otherwise, proceed to the <a href="https://console.aws.amazon.com/cloudfront/" target="_blank"><acronym title="Amazon Web Services">AWS</acronym> Management Console</a> and create a new distribution: select the S3 Bucket you created earlier as the "Origin," enter a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank"><acronym title="Canonical Name">CNAME</acronym></a> if you wish to add one or more to your DNS Zone. Make sure that "Distribution Status" is enabled and "State" is deployed. Now on "Content Delivery Network" tab of the plugin, copy the subdomain found in the <acronym title="Amazon Web Services">AWS</acronym> Management Console and enter the <acronym title="Canonical Name">CNAME</acronym> used for the distribution in the "<acronym title="Canonical Name">CNAME</acronym>" field.</p>
|
272 |
+
<p>You may optionally, specify up to 10 hostnames to use rather than the default hostname, doing so will improve the render performance of your site's pages. Additional hostnames should also be specified in the settings for the distribution you're using in the <acronym title="Amazon Web Services">AWS</acronym> Management Console.</p>
|
273 |
+
<p>Now go to the General tab and click the "Enable" checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect. If preview mode is active you will need to "deploy" your changes for them to take effect.</p>
|
274 |
+
]]></answer>
|
275 |
+
</entry>
|
276 |
+
<entry>
|
277 |
+
<question><![CDATA[ How do I configure Rackspace Cloud Files as my <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
278 |
+
<answer><![CDATA[
|
279 |
+
<p>First <a href="http://www.rackspacecloud.com/cloud_hosting_products/files" target="_blank">create an account</a>. Next, in the "Content Delivery Network" section of the "General Settings" tab, select Rackspace Cloud Files as the "<acronym title="Content Delivery Network">CDN</acronym> Type." Now, in the "Configuration" section of the "Content Delivery Network" tab, enter the "Username" and "<acronym title="Application Programming Interface">API</acronym> key" associated with your account (found in the <acronym title="Application Programming Interface">API</acronym> Access section of the <a href="https://manage.rackspacecloud.com/APIAccess.do" target="_blank">rackspace cloud control panel</a>) in the respective fields. Next enter a name for the container to use (avoid special characters and spaces). If the operation is successful, the container's ID will automatically appear in the "Replace site's hostname with" field. You may optionally, specify the container name and container ID of an <a href="https://manage.rackspacecloud.com/CloudFiles.do" target="_blank">existing container</a> if you wish. Click the "Test Cloud Files Upload" button and make sure that the test is successful, if not check your settings and try again. Save your settings. You're now ready to export your media library, theme and any other files to the CDN.</p>
|
280 |
+
<p>You may optionally, specify up to 10 hostnames to use rather than the default hostname, doing so will improve the render performance of your site's pages.</p>
|
281 |
+
<p>Now go to the General tab and click the "Enable" checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect. If preview mode is active you will need to "deploy" your changes for them to take effect.</p>
|
282 |
+
]]></answer>
|
283 |
+
</entry>
|
284 |
+
<entry>
|
285 |
+
<question><![CDATA[ How do I use an Origin Pull (Mirror) <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
286 |
+
<answer><![CDATA[
|
287 |
+
<p>Login to your <acronym title="Content Delivery Network">CDN</acronym> providers control panel or account management area. Following any set up steps they provide, create a new "pull zone" or "bucket" for your site's domain name. If there's a set up wizard or any troubleshooting tips your provider offers, be sure to review them. In the "Content Delivery Network" tab of the plugin, enter the hostname your <acronym title="Content Delivery Network">CDN</acronym> provider provided in the "replace site's hostname with" field. You should always do a quick check by opening a test file from the <acronym title="Content Delivery Network">CDN</acronym> hostname, e.g. http://cdn.domain.com/favicon.ico. Troubleshoot with yoru <acronym title="Content Delivery Network">CDN</acronym> provider until this test is successful.</p>
|
288 |
+
<p>Now go to the "General" tab and click the checkbox and save the settings to enable <acronym title="Content Delivery Network">CDN</acronym> functionality and empty the cache for the changes to take effect.</p> ]]>
|
289 |
+
</answer>
|
290 |
+
</entry>
|
291 |
+
<entry>
|
292 |
+
<question><![CDATA[ In the past, I always had to modify my theme to run dynamic code. Don't I need to do that again for this plugin? ]]></question>
|
293 |
+
<answer><![CDATA[ <p>For now no; there are some special cases that we will address with an upcoming release for highly dynamic sites.</p> ]]></answer>
|
294 |
+
</entry>
|
295 |
+
<entry>
|
296 |
+
<question><![CDATA[ How fast will the cache be updated? ]]></question>
|
297 |
+
<answer><![CDATA[ <p>Items expire from the cache at a rate that you specify. As far as how fast changes appear to your visitors, they appear instantly in most cases and if you're an administrator who's logged in they will always be immediately visible.</p> ]]></answer>
|
298 |
+
</entry>
|
299 |
+
<entry>
|
300 |
+
<question><![CDATA[ How do I make some specific pages stay dynamic? ]]></question>
|
301 |
+
<answer><![CDATA[ <p>They never stop being dynamic, we just don't create pages that have not been changed. If you have a page that updated frequently in your blog before, it will still remain up-to-date at all times.</p> ]]></answer>
|
302 |
+
</entry>
|
303 |
+
<entry>
|
304 |
+
<question><![CDATA[ What about comments? Does the plugin slow down the rate at which comments appear? ]]></question>
|
305 |
+
<answer><![CDATA[ <p>On the contrary, as with any other action a user can perform on a site, faster performance will encourage more of it. The cache is so quickly rebuilt in memory that it's no trouble to show visitors the most current version of a post that's experiencing Digg, Slashdot, Drudge Report, Yahoo Buzz or Twitter effect.</p> ]]></answer>
|
306 |
+
</entry>
|
307 |
+
<entry>
|
308 |
+
<question><![CDATA[ What if I accidentally specify an incorrect path to a <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> file? ]]></question>
|
309 |
+
<answer><![CDATA[ <p>Unfortunately a 400 bad request error may be generated. So use the "Check <acronym title="Uniform Resource Indicator">URI</acronym>" button to make sure that you have entered the correct <acronym title="Uniform Resource Indicator">URL</acronym> or path to the file.</p> ]]></answer>
|
310 |
+
</entry>
|
311 |
+
<entry>
|
312 |
+
<question><![CDATA[ Does the plugin automatically remove duplicate <acronym title="JavaScript">JS</acronym>? ]]></question>
|
313 |
+
<answer><![CDATA[ <p>No. If you include a script in the minfy settings twice or it already exists in your theme we do not automatically remove the extra code. That's tricky business and it's better for us to just let you make the decisions conscientiously.</p> ]]></answer>
|
314 |
+
</entry>
|
315 |
+
<entry>
|
316 |
+
<question><![CDATA[ I've been using the plugin for some time, I updated one of my other plugins and now it doesn't work anymore. What's up? ]]></question>
|
317 |
+
<answer><![CDATA[ <p>It's likely the plugin author modified their <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> in the new release and any old <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> you optimized with our plugin has introduced duplicate code as a result (creating a conflict). Simply check out the source code, identify any new <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> and update your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> optimizations our plugin and you're good to go.</p> ]]></answer>
|
318 |
+
</entry>
|
319 |
+
<!-- entry>
|
320 |
+
<question><![CDATA[ I have some <acronym title="Cascading Style Sheet">CSS</acronym> classes with declarations being overwritten or <acronym title="JavaScript">JS</acronym> with dependencies, do I really have to copy and paste all my <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> file settings around?</strong> ]]></question>
|
321 |
+
<answer><![CDATA[ <p>No, you can drag and drop them into the desired order on the minify settings page.</p> ]]></answer>
|
322 |
+
</entry -->
|
323 |
+
<entry>
|
324 |
+
<question><![CDATA[ Why does your plugin change the order of my <script> and <link> tags (in the <head>)? ]]></question>
|
325 |
+
<answer><![CDATA[ <p>Steve Souders <a href="http://www.youtube.com/watch?v=oaxZtKAlLRk" target="_blank">identified</a> that placing inline scripts between <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> embeds creates a blocking situation, so we're try to help you avoid that. If you'd like to experiment with various scenarios related specifically to your blog, we recommend Steve's tool, <a href="http://stevesouders.com/cuzillion/" target="_blank">Cuzillion</a>. Have some beneficial input on other common cases for WordPress users? <a href="mailto:wordpressexperts@w3-edge.com">Reach out to us</a>.</p> ]]></answer>
|
326 |
+
</entry>
|
327 |
+
<entry>
|
328 |
+
<question><![CDATA[ I can't read this minified <acronym title="Hypertext Markup Language">HTML</acronym>; can you give me a break please? ]]></question>
|
329 |
+
<answer><![CDATA[ <p>Happy to! Login as an administrator, go to the Minify Settings page and check off "Show un-minified pages to administrators" and save the changes. Now stay logged in as an administrator in the same browser you used to change the settings and now when you view the source of a given page in the site, the source will not be minified.</p> ]]></answer>
|
330 |
+
</entry>
|
331 |
+
<entry>
|
332 |
+
<question><![CDATA[ When are you going to translate this plugin into more languages? ]]></question>
|
333 |
+
<answer><![CDATA[ <p>When you help us! :-) Localization is tricky and we're happy to work with those willing to support the WordPress community. We will most likely follow the <a href="http://en.wordpress.com/stats/" target="_blank">trends of WordPress</a> itself to determine which languages are addressed first.</p> ]]></answer>
|
334 |
+
</entry>
|
335 |
+
<entry>
|
336 |
+
<question><![CDATA[ I'm not a hardcore developer, can you explain to me how this // and / stuff works and how I should specify the paths for <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files? ]]></question>
|
337 |
+
<answer><![CDATA[
|
338 |
+
<p>You mean on the minify settings page right? Ok, it's simple:<br />
|
339 |
+
// tells the plugin to search for the file with the provided path from the document root, e.g.: ///JS/jquery/jquery.<acronym title="JavaScript">JS</acronym><br />
|
340 |
+
/ tells the plugin to search for the file with the provided path from the server root, e.g. //JS/jquery/jquery.<acronym title="JavaScript">JS</acronym></p>
|
341 |
+
<p>In most cases providing an absolute path is sufficient and most reliable. You can of course use relative paths, but we discourage it unless you really know what you are doing.</p>
|
342 |
+
]]></answer>
|
343 |
+
</entry>
|
344 |
+
<entry>
|
345 |
+
<question><![CDATA[ What about Etags? ]]></question>
|
346 |
+
<answer><![CDATA[ <p>Yes, we have Etags covered. Even if you have a clustered hosting environment, your <a href="http://en.wikipedia.org/wiki/HTTP_ETag" target="_blank">Etags</a> will be consistent (across multiple servers in your cluster) so you don't have to worry about using special session cookies when you introduce our plugin. If you would like to specify headers for various reasons, you can do that as well.</p> ]]></answer>
|
347 |
+
</entry>
|
348 |
+
<entry>
|
349 |
+
<question><![CDATA[ Which encodings do you support? ]]></question>
|
350 |
+
<answer><![CDATA[ <p>We recommend UTF-8, but we do not modify the encoding in any files, instead we simply return the code as it is provided.</p> ]]></answer>
|
351 |
+
</entry>
|
352 |
+
<entry>
|
353 |
+
<question><![CDATA[ What's this thing doing? Where are the statistics?
|
354 |
+
]]></question>
|
355 |
+
<answer><![CDATA[ <p>Right now we do not show the statistics in <acronym title="WordPress">WP</acronym> Admin, but soon we will provide graphs of: Page Cache Memory Use, Page Cache Hits/Misses, <acronym title="Database">DB</acronym> Cache Memory Use, <acronym title="Database">DB</acronym> Hits/Misses, Average Page Compression Savings, Average <acronym title="Cascading Style Sheet">CSS</acronym> Compression Savings, Average <acronym title="JavaScript">JS</acronym> Compression Savings, Average Requests per Second, and Average Page Execution Time.</p> ]]></answer>
|
356 |
+
</entry>
|
357 |
+
<entry>
|
358 |
+
<question><![CDATA[ How can I tell if it's working? Aren't there any statistics at all? ]]></question>
|
359 |
+
<answer><![CDATA[ <p>Well yes actually there are, simply enable debug mode on the "General" tab to have details appended to the bottom of your <acronym title="Hypertext Markup Language">HTML</acronym> source. Remember that when enabled all visitors to your blog can see these statistics if they view source. Using debug mode does slow the performance of your site so use sparingly.</p> ]]></answer>
|
360 |
+
</entry>
|
361 |
+
<entry>
|
362 |
+
<question><![CDATA[ I'm an advanced theme developer and I want to have different combinations of <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files on different types of pages in my theme; how is this done? ]]></question>
|
363 |
+
<answer><![CDATA[ <p>On the minify settings tab, use the drop-down selection menu to define the <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files that appear on all pages using the "Default" group first. Then specify unie files for the other pages.</p> ]]></answer>
|
364 |
+
</entry>
|
365 |
+
<entry>
|
366 |
+
<question><![CDATA[ Which features can I use if I haven't yet installed an opcode cache or memcached? ]]></question>
|
367 |
+
<answer><![CDATA[ <p>Memory caching will not be possible. However you will be able to use both the page cache and minify in "disk" mode, as well <acronym title="Content Delivery Network">CDN</acronym> functionality without issue.</p> ]]></answer>
|
368 |
+
</entry>
|
369 |
+
<entry>
|
370 |
+
<question><![CDATA[ How can I host my favicon with my <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
371 |
+
<answer><![CDATA[ <p>If the file exists in your document root (i.e. http://domain.com/favicon.ico), the plugin can take care of that for you using custom upload options. If the file is in your theme directory you can also have the plugin uploaded from there.</p> ]]></answer>
|
372 |
+
</entry>
|
373 |
+
<entry>
|
374 |
+
<question><![CDATA[ Why do you set the value of the media attribute of <link> to all? ]]></question>
|
375 |
+
<answer><![CDATA[ <p>In case you were using @media declarations in your document, we'd have you covered. We will likely allow you to modify this attribute as subsequent features are finalized.</p> ]]></answer>
|
376 |
+
</entry>
|
377 |
+
<entry>
|
378 |
+
<question><![CDATA[ Why can't I specify other <script> types or encoding? ]]></question>
|
379 |
+
<answer><![CDATA[ <p>We have not found a use case where this appears to be of any consequence. If you're aware of one <a href="mailto:wordpressexperts@w3-edge.com">please let us know</a>.</p> ]]></answer>
|
380 |
+
</entry>
|
381 |
+
<entry>
|
382 |
+
<question><![CDATA[ My theme doesn't call wp_footer() or wp_head(), how do I set this plugin up? ]]></question>
|
383 |
+
<answer><![CDATA[
|
384 |
+
<p>You'll need to manually update your theme to include your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> minify groups. The calls you'll want to make for the various cases are:</p>
|
385 |
+
<ul>
|
386 |
+
<li><?php if (function_exists('w3tc_styles')): w3tc_styles('include'); endif; ?><br />Inserts the <head> <acronym title="Cascading Style Sheet">CSS</acronym> group at the location you choose. Multiple occurrences are allowed.</li>
|
387 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include'); endif; ?><br />Inserts the <head> blocking <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
388 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-nb'); endif; ?><br />Inserts the <head> non-blocking <acronym title="JavaScript">JS</acronym> groups at the location you choose.</li>
|
389 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-body'); endif; ?><br />Inserts the <body> blocking <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
390 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-body-nb'); endif; ?><br />Inserts the <body> non-blocking <acronym title="JavaScript">JS</acronym> groups at the location you choose.</li>
|
391 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-footer'); endif; ?><br />Inserts the footer <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
392 |
+
<li><?php if (function_exists('w3tc_scripts')): w3tc_scripts('include-footer-nb'); endif; ?><br />Inserts the footer non-blocking <acronym title="JavaScript">JS</acronym> group at the location you choose.</li>
|
393 |
+
</ul>
|
394 |
+
]]></answer>
|
395 |
+
</entry>
|
396 |
+
<entry>
|
397 |
+
<question><![CDATA[ Is this plugin compatible with other popular caching plugins? ]]></question>
|
398 |
+
<answer><![CDATA[ <p>No. Any disk based page caching plugin you're currently using would need to be completely uninstalled (not just disabled) in order to use this plugin. So if you have a development environment where you can try this out or testing during low traffic periods to get your preferences set, that is recommended. You can always backup your full WordPress installation before testing pretty quickly if you skip the /uploads/ (media library) directory.</p> ]]></answer>
|
399 |
+
</entry>
|
400 |
+
<entry>
|
401 |
+
<question><![CDATA[ Some WordPress caching plugins fail when markup is not well-formed, is this plugin similar? ]]></question>
|
402 |
+
<answer><![CDATA[ <p>No, this plugin is not similar. While valid <acronym title="Hypertext Markup Language">HTML</acronym> and <acronym title="World Wide Web Consortium">W3C</acronym> standards ensure consistent behavior across user agents and promote accessibility, any invalidity that exist in the code is not going to bring your site to its knees.</p> ]]></answer>
|
403 |
+
</entry>
|
404 |
+
<entry>
|
405 |
+
<question><![CDATA[ Won't various 3rd parties who's <acronym title="JavaScript">JS</acronym> I download and cache be concerned? ]]></question>
|
406 |
+
<answer><![CDATA[ <p>Unlikely, you're saving them bandwidth and using their applications, so they will probably appreciate it as long as their application still works as intended and you're using their software in an authorized manner. Look at it this way, even before this plugin, you and thousands of other people were still downloading it, now you're just downloading it first.</p> ]]></answer>
|
407 |
+
</entry>
|
408 |
+
<entry>
|
409 |
+
<question><![CDATA[
|
410 |
+
Google already minified and
|
411 |
+
<acronym title="Hypertext Transfer Protocol">HTTP</acronym>
|
412 |
+
compressed jQuery (and other libraries ) for me, why can't I just
|
413 |
+
use their bandwidth and embed other code after it?
|
414 |
+
]]></question>
|
415 |
+
<answer><![CDATA[ <p>You can! Just add Google's script to your minify settings use non-blocking mode and your visitors will download jQuery directly from them as you wish. And the same is obviously true for any other library you wish. Remember you are creating additional <acronym title="Domain Name System">DNS</acronym> Lookups and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions when you do this.</p> ]]></answer>
|
416 |
+
</entry>
|
417 |
+
<entry>
|
418 |
+
<question><![CDATA[ I wanted to use a different version jQuery with my theme,
|
419 |
+
how do I replace WordPress' jQuery with Google's minified version
|
420 |
+
using your plugin? ]]></question>
|
421 |
+
<answer><![CDATA[ <p>Currently you cannot, replacement is not yet supported.</p> ]]></answer>
|
422 |
+
</entry>
|
423 |
+
<entry>
|
424 |
+
<question><![CDATA[ What about the wp-includes files, can those be served from the <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
425 |
+
<answer><![CDATA[ <p>Yes, you can specify which file types you would like served by <acronym title="Content Delivery Network">CDN</acronym> and they will be uploaded and always downloaded from that location. This includes the smilies, JavaScript files et al. By default we take care of them all.</p> ]]></answer>
|
426 |
+
</entry>
|
427 |
+
<entry>
|
428 |
+
<question><![CDATA[ What if I don't want to work with a <acronym title="Content Delivery Network">CDN</acronym> right now, is there any other use for this feature? ]]></question>
|
429 |
+
<answer><![CDATA[ <p>Yes! You can take advantage of the <a href="http://www.mozilla.org/projects/netlib/http/pipelining-faq.html">pipelining</a> support in some browsers by creating a sub-domain for the static content for your site. So you could select the "Origin Push / Self-hosted" method of the General Settings tab. Create static.domain.com on your server (and update your <acronym title="Domain Name System">DNS</acronym> zone) and then specify the <acronym title="File Transfer Protocol">FTP</acronym> details for it in the plugin configuration panel and you're done. If you disable the scripting options on your server you'll find that your server will actually respond slightly faster from that sub-domain because it's just sending files and not processing them.</p> ]]></answer>
|
430 |
+
</entry>
|
431 |
+
<entry>
|
432 |
+
<question><![CDATA[ Are minified files uploaded to my <acronym title="Content Delivery Network">CDN</acronym> provider? ]]></question>
|
433 |
+
<answer><![CDATA[ <p>Yes, any <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> you manage with the plugin are minified before being uploaded to your <acronym title="Content Delivery Network">CDN</acronym>. You don't have to make any special changes to your theme. We encourage you to make sure that your provider supports <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression as the benefit of having your static assets available from more than one <acronym title="Point of Presence">POP</acronym> alone is not enough.</p> ]]></answer>
|
434 |
+
</entry>
|
435 |
+
<entry>
|
436 |
+
<question><![CDATA[ Who do you recommend as a <acronym title="Content Delivery Network">CDN</acronym> provider? ]]></question>
|
437 |
+
<answer><![CDATA[
|
438 |
+
<p>That depends on how you use your blog and where most of your readers read your blog (regionally). Here's a short list:</p>
|
439 |
+
<ul>
|
440 |
+
<li><a href="http://bit.ly/acaXXt" target="_blank">MaxCDN</a></li>
|
441 |
+
<li><a href="http://bit.ly/9hpX8T" target="_blank">Rackspace Cloud Files</a></li>
|
442 |
+
<li><a href="http://bit.ly/bnVs0a" target="_blank">Cotendo</a></li>
|
443 |
+
<li><a href="http://bit.ly/d5hfFt" target="_blank">VPS NET</a></li>
|
444 |
+
<li><a href="http://bit.ly/ao1sGt" target="_blank">Cloudfront</a></li>
|
445 |
+
<li><a href="http://bit.ly/bIjSWC" target="_blank">EdgeCast</a></li>
|
446 |
+
<li><a href="http://bit.ly/a5GBLV" target="_blank">Akamai</a></li>
|
447 |
+
<li><a href="http://bit.ly/aCW04j" target="_blank">Limelight Networks</a></li>
|
448 |
+
<li><a href="http://bit.ly/93EAKK" target="_blank">Simple<acronym title="Content Delivery Network">CDN</acronym></a></li>
|
449 |
+
</ul>
|
450 |
+
]]></answer>
|
451 |
+
</entry>
|
452 |
+
<entry>
|
453 |
+
<question><![CDATA[ Hang on, don't I need to modify my <acronym title="Cascading Style Sheet">CSS</acronym> files so they'll work on the <acronym title="Content Delivery Network">CDN</acronym>? ]]></question>
|
454 |
+
<answer><![CDATA[ <p>No, that is taken care of for you. Your <acronym title="Cascading Style Sheet">CSS</acronym> files will originate from your <acronym title="Content Delivery Network">CDN</acronym> provider and all paths to any images in your <acronym title="Cascading Style Sheet">CSS</acronym> will be changed from relative to absolute, making sure that they load just fine. Do nothing differently, yet reap all the benefits.</p> ]]></answer>
|
455 |
+
</entry>
|
456 |
+
<entry>
|
457 |
+
<question><![CDATA[ I don't have time to deal with this, but I know I need it. Will you help me? ]]></question>
|
458 |
+
<answer><![CDATA[ <p>Yes! Please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and we'll get you acclimated so you can "set it and forget it."</p> ]]></answer>
|
459 |
+
</entry>
|
460 |
+
<entry>
|
461 |
+
<question><![CDATA[ What about query string variables on <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>, do they matter? ]]></question>
|
462 |
+
<answer><![CDATA[ <p>This is definitely a special case. Files like "http://domain.com/wp-content/themes/default/js/script.js?ver=20090102" etc need to be specified with the full <acronym title="Uniform Resource Locator">URL</acronym>. This is an exception to the general rule of specifying a local path to file like: "wp-content/themes/default/js/script.js", which should also work fine. Be sure to click the "Verify <acronym title="Uniform Resource Indicator">URL</acronym>" button to be sure that everything is ok before saving changes.</p> ]]></answer>
|
463 |
+
</entry>
|
464 |
+
<entry>
|
465 |
+
<question><![CDATA[ Is this plugin comptatible with GD Star Rating? ]]></question>
|
466 |
+
<answer><![CDATA[
|
467 |
+
<p>Yes. Follow these steps:</p>
|
468 |
+
<ol>
|
469 |
+
<li>Enable dynamic loading of ratings by checking GD Star Rating -> Settings -> Features "Cache support option"</li>
|
470 |
+
<li>If Database cache enabled in W3 Total Cache add "wp_gdsr" to "Ignored query stems" field in the Database Cache settings tab, otherwise ratings will not updated after voting</li>
|
471 |
+
<li>Empty all caches</li>
|
472 |
+
</ol>
|
473 |
+
]]></answer>
|
474 |
+
</entry>
|
475 |
+
<entry>
|
476 |
+
<question><![CDATA[ How do I cache only the home page? ]]></question>
|
477 |
+
<answer><![CDATA[ <p>Add "/.+" (without the quotes) to page cache "Never cache the following pages" option on the page cache settings tab.</p> ]]></answer>
|
478 |
+
</entry>
|
479 |
+
<entry>
|
480 |
+
<question><![CDATA[ I see garbage characters instead of the normal web site, what's going on here? ]]></question>
|
481 |
+
<answer><![CDATA[ <p>If a theme or it's files use the call php_flush() or function flush() that will interfere with the plugins normal operation; making the plugin send cached files before essential operations have finished. The flush() call is no longer necessary and should be removed.</p> ]]></answer>
|
482 |
+
</entry>
|
483 |
+
<entry>
|
484 |
+
<question><![CDATA[ What is the purpose of the "Media Library Import" tool and how do I use it? ]]></question>
|
485 |
+
<answer><![CDATA[
|
486 |
+
<p>The media library import tool is for old or "messy" WordPress installations that have attachments (images etc in posts or pages) scattered about the web server or "hot linked" to 3rd party sites instead of properly using the media library.</p>
|
487 |
+
<p>The tool will scan your posts and pages for the cases above and copy them to your media library, update your posts to use the link addresses and produce a .htaccess file containing the list of of permanent redirects, so search engines can find the files in their new location.</p>
|
488 |
+
<p>You should backup your database before performing this operation.</p>
|
489 |
+
]]></answer>
|
490 |
+
</entry>
|
491 |
+
<entry>
|
492 |
+
<question><![CDATA[ I'm getting blank pages or 500 error codes when trying to upgrade on WordPress MU ]]></question>
|
493 |
+
<answer><![CDATA[ <p>First, make sure the plugin is not active (disabled) network-wide. Then make sure it's deactivated network-wide. Now you should be able to successful upgrade without breaking your site.</p> ]]></answer>
|
494 |
+
</entry>
|
495 |
+
<entry>
|
496 |
+
<question><![CDATA[ How can I embed the minified CSS file at the location I choose? ]]></question>
|
497 |
+
<answer><![CDATA[
|
498 |
+
<ul>
|
499 |
+
<li><?php if (function_exists('w3tc_styles')){w3tc_styles('include');} ?><br />Inserts the minified CSS files at the location you specify in your theme. More than one instance per template is ok; e.g. embedding in multiple conditional statements.</li>
|
500 |
+
</ul>
|
501 |
+
]]></answer>
|
502 |
+
</entry>
|
503 |
+
<entry>
|
504 |
+
<question><![CDATA[ Is this plugin comptatible with TDO Mini Forms? ]]></question>
|
505 |
+
<answer><![CDATA[ <p>Captcha and recaptcha will work fine, however you will need to prevent any pages with forms from being cached. Add the page's URI to the "Never cache the following pages" box on the Page Cache Settings tab.</p> ]]></answer>
|
506 |
+
</entry>
|
507 |
+
<entry>
|
508 |
+
<question><![CDATA[ My YSlow score is low because it doesn't recognize my <acronym title="Content Delivery Network">CDN</acronym>, what can I do? ]]></question>
|
509 |
+
<answer><![CDATA[
|
510 |
+
<p>Rule 2 says to use a content delivery network (<acronym title="Content Delivery Network">CDN</acronym>). The score for this rule is computed by checking the hostname of each component against the list of known <acronym title="Content Delivery Network">CDN</acronym>s. Unfortunately, the list of "known <acronym title="Content Delivery Network">CDN</acronym>s" are the ones used by Yahoo!. Most likely these are not relevant to your web site, except for potentially yui.yahooapis.com. If you want an accurate score for your web site, you can add your <acronym title="Content Delivery Network">CDN</acronym> hostnames to YSlow using Firefox's preferences. Here are the steps to follow:</p>
|
511 |
+
<ul>
|
512 |
+
<li>Go to about:config in Firefox. You'll see the current list of preferences.</li>
|
513 |
+
<li>Right-click in the window and choose New and String to create a new string preference.</li>
|
514 |
+
<li>Enter extensions.yslow.cdnHostnames for the preference name.</li>
|
515 |
+
<li>For the string value, enter the hostname of your <acronym title="Content Delivery Network">CDN</acronym>, for example, mycdn.com. Do not use quotes. If you have multiple <acronym title="Content Delivery Network">CDN</acronym> hostnames, separate them with commas.</li>
|
516 |
+
</ul>
|
517 |
+
<p>If you specify <acronym title="Content Delivery Network">CDN</acronym> hostnames in your preferences, they'll be shown under the details for Rule 2 in the Performance view.</p>
|
518 |
+
]]></answer>
|
519 |
+
</entry>
|
520 |
+
<entry>
|
521 |
+
<question><![CDATA[ What is the purpose of the "modify attachment <acronym title="Uniform Resource Indicator">URL</acronym>s" button? ]]></question>
|
522 |
+
<answer><![CDATA[
|
523 |
+
<p>If the domain name of your site has changed, this tool is useful in updating your posts and pages to use the current addresses. For example, if your site used to be www.domain.com, and you decided to change it to domain.com, the result would either be many "broken" images or many unncessary redirects (which slow down the visitor's browsing experience). You can use this tool to correct this and similar cases. Correcting the <acronym title="Uniform Resource Indicator">URL</acronym>s of your images also allows the plugin to do a better job of determining which images are actually hosted with the <acronym title="Content Delivery Network">CDN</acronym></p>
|
524 |
+
<p>As always, it never hurts to back up your database first.</p>
|
525 |
+
]]></answer>
|
526 |
+
</entry>
|
527 |
+
<entry>
|
528 |
+
<question><![CDATA[ How do I implement fragment caching? ]]></question>
|
529 |
+
<answer><![CDATA[
|
530 |
+
<p>Edit your templates to with the following syntax to ensure that dynamic features remain so:</p>
|
531 |
+
<ul>
|
532 |
+
<li>Example 1:<br /><!-- mfunc any PHP code --><!-- /mfunc --></li>
|
533 |
+
<li>Example 2:<br /><!-- mfunc -->any PHP code<!-- /mfunc --></li>
|
534 |
+
<li>Example 3:<br /><!--MFUNC --><br /> echo rand();<br /><!--/mfunc --></li>
|
535 |
+
<li>Example 4:<br /><!-- mclude path/to/file.php --><!-- /mclude --></li>
|
536 |
+
<li>Example 5:<br /><!-- mclude -->path/to/file.php<!-- /mclude --></li>
|
537 |
+
</ul>
|
538 |
+
]]></answer>
|
539 |
+
</entry>
|
540 |
+
<entry>
|
541 |
+
<question><![CDATA[ How can I prevent caching directly in my templates etc? ]]></question>
|
542 |
+
<answer><![CDATA[
|
543 |
+
<p>Several constants are available for these purposes:</p>
|
544 |
+
<ul>
|
545 |
+
<li>define('DONOTCACHEPAGE', true);<br />Disables page caching for a given page.</li>
|
546 |
+
<li>define('DONOTCACHEDB', true);<br />Disables database caching for given page.</li>
|
547 |
+
<li>define('DONOTMINIFY', true);<br />Disables minify for a given page.</li>
|
548 |
+
<li>define('DONOTCDN', true);<br />Disables content delivery network for a given page.</li>
|
549 |
+
<li>define('DONOTCACHCEOBJECT', true);<br />Disables object cache for a given page.</li>
|
550 |
+
</ul>
|
551 |
+
]]></answer>
|
552 |
+
</entry>
|
553 |
+
<entry>
|
554 |
+
<question><![CDATA[ How can I flush the cache without using the WP Admin interface? ]]></question>
|
555 |
+
<answer><![CDATA[
|
556 |
+
<p>It's possible to empty the entire cache or simply purge the cache of a single post / page:</p>
|
557 |
+
<ul>
|
558 |
+
<li>Purge the entire page cache:<br />
|
559 |
+
if (function_exists('w3tc_pgcache_flush')) {<br />
|
560 |
+
w3tc_pgcache_flush();<br />
|
561 |
+
}
|
562 |
+
</li>
|
563 |
+
<li>Purge a single post / page by passing it's ID:<br />
|
564 |
+
if (function_exists('w3tc_pgcache_flush_post')) {<br />
|
565 |
+
w3tc_pgcache_flush_post($post_id);<br />
|
566 |
+
}
|
567 |
+
</li>
|
568 |
+
</ul>
|
569 |
+
]]></answer>
|
570 |
+
</entry>
|
571 |
+
<entry>
|
572 |
+
<question><![CDATA[ How do I programmatically modify user agent groups? ]]></question>
|
573 |
+
<answer><![CDATA[
|
574 |
+
<p>The following are commented examples of filters that can be used to manipulate user agent groups:</p>
|
575 |
+
<p>function my_cached_mobile_groups($groups) {<br />
|
576 |
+
// any operations on array<br />
|
577 |
+
<br />
|
578 |
+
// specify two groups example<br />
|
579 |
+
$groups = array_merge($groups, array(<br />
|
580 |
+
'favorite_browsers' => array('opera', 'chrome'),<br />
|
581 |
+
'default_browsers' => array('msie', 'firefox')<br />
|
582 |
+
));<br />
|
583 |
+
<br />
|
584 |
+
return $groups;<br />
|
585 |
+
}<br />
|
586 |
+
|
587 |
+
add_filter('cached_mobile_groups', 'my_cached_mobile_groups');<br />
|
588 |
+
</p>
|
589 |
+
<p>function my_w3tc_mobile_groups($w3tc_groups) {<br />
|
590 |
+
// any operations <br />
|
591 |
+
<br />
|
592 |
+
// clear all groups example<br />
|
593 |
+
$w3tc_groups = array();<br />
|
594 |
+
<br />
|
595 |
+
// delete all groups and add new example<br />
|
596 |
+
$w3tc_groups = array(....);<br />
|
597 |
+
<br />
|
598 |
+
// merge groups example:<br />
|
599 |
+
$w3tc_groups = array_merge($w3tc_groups, array(<br />
|
600 |
+
'good_browsers' => array(<br />
|
601 |
+
'theme' => 'good_theme/good_theme',<br />
|
602 |
+
'enabled' => true,<br />
|
603 |
+
'redirect' => '',<br />
|
604 |
+
'agents' => array('firefox', 'chrome')<br />
|
605 |
+
),<br />
|
606 |
+
<br />
|
607 |
+
'bad_browsers' => array(<br />
|
608 |
+
'theme' => 'bad_theme/bad_theme',<br />
|
609 |
+
'enabled' => true,<br />
|
610 |
+
'redirect' => '',<br />
|
611 |
+
'agents' => array('msie', 'opera')<br />
|
612 |
+
)<br />
|
613 |
+
));<br />
|
614 |
+
<br />
|
615 |
+
return $w3tc_groups;<br />
|
616 |
+
}<br />
|
617 |
+
add_filter('w3tc_mobile_groups', 'my_w3tc_mobile_groups');
|
618 |
+
</p>
|
619 |
+
]]></answer>
|
620 |
+
</entry>
|
621 |
+
</section>
|
622 |
+
<section name="Requirements">
|
623 |
+
<entry>
|
624 |
+
<question><![CDATA[ Which web servers do you support? ]]></question>
|
625 |
+
<answer><![CDATA[ <p>We are aware of no incompatibilities with <a href="http://httpd.apache.org/" target="_blank">apache</a> 1.3+, <a href="http://www.iis.net/" target="_blank">IIS</a> 5+ or <a href="http://litespeedtech.com/products/webserver/overview/" target="_blank">litespeed</a> 4.0.2+. If there's a web server you feel we should be actively testing (e.g. <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a>), we're <a href="mailto:wordpressexperts@w3-edge.com">interested in hearing</a>.</p> ]]></answer>
|
626 |
+
</entry>
|
627 |
+
<entry>
|
628 |
+
<question><![CDATA[ Do I need to enable mod_gzip, mod_rewrite or install any <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression software on my server? ]]></question>
|
629 |
+
<answer><![CDATA[
|
630 |
+
<p>No, but we do find that it does help some rich internet applications to compress their AJAX responses, so you might look at it just for that case.</p>
|
631 |
+
<p>If you're larger organization or a web hosting company, consider looking into solutions that exist like <a href="http://www.gear6.com/">Gear6</a> which could be useful now that you have a plugin that makes management memcached pain free.</p>
|
632 |
+
]]></answer>
|
633 |
+
</entry>
|
634 |
+
<entry>
|
635 |
+
<question><![CDATA[ Is this plugin compatible with varnish or squid? ]]></question>
|
636 |
+
<answer><![CDATA[ <p>Yes, it is compatible with <a href="http://varnish.projects.linpro.no/" target="_blank">varnish</a>.</p> ]]></answer>
|
637 |
+
</entry>
|
638 |
+
<entry>
|
639 |
+
<question><![CDATA[ My server is state of the art with 15,000 RPM RAID, why do I need to cache anything in memory? ]]></question>
|
640 |
+
<answer><![CDATA[ <p>Even if your server was using an array of solid state disks (SSD), your server's <acronym title="Random Access Memory">RAM</acronym> is still going to be faster and introduce less overhead to access than even the fastest solid state drives on a PCIe bus. If you didn't invest in solid state disks for your server, then even worse off - at least an order of magnitude speed difference in read operations in <acronym title="Random Access Memory">RAM</acronym> versus HDD. For write operations delta the latency differences is even more pronounced. <acronym title="Random Access Memory">RAM</acronym> is the winner hands down. We won't even discuss the blocking and arbitration issues that happen with disk arrays under certain circumstances.</p> ]]></answer>
|
641 |
+
</entry>
|
642 |
+
<entry>
|
643 |
+
<question><![CDATA[ Why would I choose opcode caching over memcached or vice versa? ]]></question>
|
644 |
+
<answer><![CDATA[
|
645 |
+
<p>There's no straight answer for this one. Since WordPress is a PHP-based application, we encourage everyone to install an opcode cache and realize a minimum of 10x performance gain. It will obviously make our plugin faster as well, so again please check out the installation instructions if you do not already use an opcode cache. Once installed, you can select an opcode cache as the method and get back to blogging.</p>
|
646 |
+
<p>Opcode caching does have a couple weaknesses:</p>
|
647 |
+
<ul>
|
648 |
+
<li>If you frequently restart your web server (e.g. apache) especially during high traffic periods, you will lose your cache and your site will slow down as it rebuilds the cache (which happens very quickly). However if you use memcached you would not lose your cache if your web server is restarted.</li>
|
649 |
+
<li>More importantly, opcode caching is best suited for single server environments because the cache is only accessible to the local server, it cannot be shared with other servers in a multi-server (cluster) environment.</li>
|
650 |
+
</ul>
|
651 |
+
<p>It would appear that using <acronym title="Alternative PHP Cache">APC</acronym> database caching, but your mileage may vary. So depending on what software you install and how you manage your server, you can choose the options to fit your needs. If you need help with the install on your dedicated or virtual dedicated linux-based server ask us!</p>
|
652 |
+
]]></answer>
|
653 |
+
</entry>
|
654 |
+
<entry>
|
655 |
+
<question><![CDATA[ I already use <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression on my server, why does it matter if I minify my code? ]]></question>
|
656 |
+
<answer><![CDATA[ <p>Let's say you had a file of 10240 bytes, which becomes 2048 bytes when compressed, savings of ~80% (typical for <acronym title="Cascading Style Sheet">CSS</acronym> files). That same file will now have an <strong>additional</strong> ~3x-10x transfer speed improvement when minified. That's a big return from a small operation. The larger your files, the more significant the proportional performance gains.</p> ]]></answer>
|
657 |
+
</entry>
|
658 |
+
<entry>
|
659 |
+
<question><![CDATA[ How much memory (<acronym title="Random Access Memory">RAM</acronym>) do I need to delegate to caching? ]]></question>
|
660 |
+
<answer><![CDATA[
|
661 |
+
<p>Probably the hardest question of all. At the time of this writing the default WordPress install and theme will consume about 50MB of memory in an opcode cache while running our plugin. Keep in mind that the following factors will determine the minimum size of your cache beyond this noted 50MB:</p>
|
662 |
+
<ul>
|
663 |
+
<li>Number of typically requested pages per day (if your blog is popular this number is quite large)</li>
|
664 |
+
<li>Size of minified <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and <acronym title="Hypertext Markup Language">HTML</acronym> pages (smaller is better)</li>
|
665 |
+
<li>Number and complexity of plugins active on your blog (fewer is better)</li>
|
666 |
+
<li>Expiry time of the cache (larger expiry time, larger cache)</li>
|
667 |
+
</ul>
|
668 |
+
<p>So we recommend an absolute minimum of 128MB for a typical blog; this figure is greater than some defaults, so keep that in mind. With statistics you'll be able to react accordingly and make adjustments.</p>
|
669 |
+
<p>For those that don't want or have time to learn anything new to get started, sample configuration files are included with the plugin containing inline comments for you.</p>
|
670 |
+
]]></answer>
|
671 |
+
</entry>
|
672 |
+
<entry>
|
673 |
+
<question><![CDATA[ What version of <acronym title="Hypertext Preprocessor">PHP</acronym> do I need for this thing? ]]></question>
|
674 |
+
<answer><![CDATA[ <p> Version 4.3 is supported for some modules, however version 5 preferred (it's much much faster especially with an opcode cache). It is likely version 3.0 of WordPress will no longer support <acronym title="Hypertext Preprocessor">PHP</acronym> 4.3.</p> ]]></answer>
|
675 |
+
</entry>
|
676 |
+
<entry>
|
677 |
+
<question><![CDATA[ What version of mySQL is needed? ]]></question>
|
678 |
+
<answer><![CDATA[ <p>If your WordPress installation is works, you're all set.</p> ]]></answer>
|
679 |
+
</entry>
|
680 |
+
<entry>
|
681 |
+
<question><![CDATA[ And I need mod_rewrite (or equivalent for my web server) installed too, no? ]]></question>
|
682 |
+
<answer><![CDATA[ <p>That's correct; everything you need for WordPress (i.e. fancy <acronym title="Uniform Resource Locator">URL</acronym>s) will get you started with this plugin also.</p> ]]></answer>
|
683 |
+
</entry>
|
684 |
+
<entry>
|
685 |
+
<question><![CDATA[ How much hardware do I have to throw at something like this before I see a benefit? ]]></question>
|
686 |
+
<answer><![CDATA[ <p>This plugin was actually designed with virtual dedicated servers in mind. As long as your server has at least 256M of <acronym title="Random Access Memory">RAM</acronym>, you can get started.</p> ]]></answer>
|
687 |
+
</entry>
|
688 |
+
<entry>
|
689 |
+
<question><![CDATA[ Is this plugin server cluster and load balancer friendly? ]]></question>
|
690 |
+
<answer><![CDATA[ <p>Yes, built from the ground up with scale and current hosting paradigms in mind.</p> ]]></answer>
|
691 |
+
</entry>
|
692 |
+
<entry>
|
693 |
+
<question><![CDATA[ I'm a web hosting provider and I heard about this plugin from my clients, is this plugin safe for a shared hosting environment? ]]></question>
|
694 |
+
<answer><![CDATA[ <p>Yes.</p> ]]></answer>
|
695 |
+
</entry>
|
696 |
+
<entry>
|
697 |
+
<question><![CDATA[ What is the intended impact of this plugin on the web hosting landscape? ]]></question>
|
698 |
+
<answer><![CDATA[ <p>We feel that shared or virtual hosting providers will begin offering secure containers (similar to what <a href="http://mediatemple.net/" target="_blank">mediatemple.net</a> does for mySQL and Ruby etc) for opcode caching and memcached. Whoever brings this offering to market first will lower the bar for more web sites/applications (and startups) to build better performing applications with greater ease. The same hosting provider would also possess a new value added service, thereby realizing a competitive advantage in a highly competitive marketplace. Not to mention be able to increase the density of domains per server (or cluster) without shortchanging customers.</p> <p>One day hopefully this plugin will contribute to making web servers greener and reduce the ecological footprint of the web by reducing the computational effort required to deliver high performance rich user experiences.</p> ]]></answer>
|
699 |
+
</entry>
|
700 |
+
</section>
|
701 |
+
</faqs>
|
inc/options/general.phtml
CHANGED
@@ -1,52 +1,72 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<
|
|
|
|
|
4 |
|
5 |
-
<
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<input type="
|
10 |
-
<input type="
|
11 |
-
<input class="button" type="submit" name="flush_all" value="empty all caches" /> at once or
|
12 |
<input class="button" type="submit" name="flush_memcached" value="empty only the memcached cache(s)"<?php if (! $can_empty_memcache): ?> disabled="disabled"<?php endif; ?> /> or
|
13 |
-
<input class="button" type="submit" name="flush_opcode" value="empty only the opcode cache"<?php if (! $can_empty_opcode): ?> disabled="disabled"<?php endif; ?> /> or
|
14 |
<input class="button" type="submit" name="flush_file" value="empty only the disk cache(s)"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />.
|
15 |
</p>
|
16 |
</form>
|
17 |
|
18 |
-
<form action="
|
19 |
<fieldset>
|
20 |
<legend>General</legend>
|
21 |
|
22 |
-
<
|
23 |
-
<
|
24 |
-
<
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
<p class="submit">
|
30 |
-
<input type="submit" name="
|
31 |
</p>
|
32 |
</fieldset>
|
33 |
|
34 |
<fieldset>
|
35 |
-
<legend>Page
|
36 |
-
|
37 |
<p>Enable page caching to decrease the response time of your blog.</p>
|
38 |
-
|
39 |
<table class="form-table">
|
40 |
<tr>
|
41 |
-
<th valign="top">Page
|
42 |
<td>
|
43 |
<input type="hidden" name="pgcache.enabled" value="0" />
|
44 |
-
<label><input class="enabled" type="checkbox" name="pgcache.enabled" value="1"<?php checked($pgcache_enabled, true); ?> /> <strong>Enable</strong></label
|
45 |
-
|
46 |
</td>
|
47 |
</tr>
|
48 |
<tr>
|
49 |
-
<th valign="top">Page
|
50 |
<td>
|
51 |
<select name="pgcache.engine">
|
52 |
<optgroup label="Shared Server (disk enhanced is best):">
|
@@ -58,7 +78,7 @@
|
|
58 |
<option value="eaccelerator"<?php selected($this->_config->get_string('pgcache.engine'), 'eaccelerator'); ?><?php if (! $check_eaccelerator): ?> disabled="disabled"<?php endif; ?>>Opcode: eAccelerator</option>
|
59 |
<option value="xcache"<?php selected($this->_config->get_string('pgcache.engine'), 'xcache'); ?><?php if (! $check_xcache): ?> disabled="disabled"<?php endif; ?>>Opcode: XCache</option>
|
60 |
</optgroup>
|
61 |
-
<optgroup label="Multiple Servers:">
|
62 |
<option value="memcached"<?php selected($this->_config->get_string('pgcache.engine'), 'memcached'); ?><?php if (! $check_memcached): ?> disabled="disabled"<?php endif; ?>>Memcached</option>
|
63 |
</optgroup>
|
64 |
</select>
|
@@ -67,26 +87,32 @@
|
|
67 |
</table>
|
68 |
|
69 |
<p class="submit">
|
70 |
-
<input type="submit" name="
|
71 |
</p>
|
72 |
</fieldset>
|
73 |
-
|
74 |
<fieldset>
|
75 |
-
<legend>
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
|
77 |
<p>Reduce load time by decreasing the size and number of <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files. Automatically remove unncessary data from <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym>, feed, page and post <acronym title="Hypertext Markup Language">HTML</acronym>.</p>
|
78 |
-
|
79 |
<table class="form-table">
|
80 |
<tr>
|
81 |
<th valign="top">Minify:</th>
|
82 |
<td>
|
83 |
<input type="hidden" name="minify.enabled" value="0"<?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?> />
|
84 |
-
<label><input class="enabled" type="checkbox" name="minify.enabled" value="1"<?php checked($minify_enabled, true); ?><?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?> /> <strong>Enable</strong></label
|
85 |
-
<span class="description">Minification can decrease file size of <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and feeds respectively by ~10% on average.</span>
|
86 |
</td>
|
87 |
</tr>
|
88 |
<tr>
|
89 |
-
<th valign="top">Minify
|
90 |
<td>
|
91 |
<select name="minify.engine"<?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>
|
92 |
<optgroup label="Shared Server (disk is best):">
|
@@ -106,26 +132,26 @@
|
|
106 |
</table>
|
107 |
|
108 |
<p class="submit">
|
109 |
-
<input type="submit" name="
|
110 |
</p>
|
111 |
</fieldset>
|
112 |
-
|
113 |
<fieldset>
|
114 |
-
<legend>Database
|
115 |
-
|
116 |
<p>Enable database caching to reduce post, page and feed creation time.</p>
|
117 |
-
|
118 |
<table class="form-table">
|
119 |
<tr>
|
120 |
-
<th valign="top">Database
|
121 |
<td>
|
122 |
<input type="hidden" name="dbcache.enabled" value="0" />
|
123 |
-
<label><input class="enabled" type="checkbox" name="dbcache.enabled" value="1"<?php checked($dbcache_enabled, true); ?> /> <strong>Enable</strong></label
|
124 |
-
|
125 |
</td>
|
126 |
</tr>
|
127 |
<tr>
|
128 |
-
<th valign="top">Database
|
129 |
<td>
|
130 |
<select name="dbcache.engine">
|
131 |
<optgroup label="Shared Server:">
|
@@ -145,22 +171,62 @@
|
|
145 |
</table>
|
146 |
|
147 |
<p class="submit">
|
148 |
-
<input type="submit" name="
|
149 |
</p>
|
150 |
</fieldset>
|
151 |
-
|
|
|
152 |
<fieldset>
|
153 |
-
<legend>
|
154 |
-
|
155 |
-
<p>
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
<table class="form-table">
|
158 |
<tr>
|
159 |
<th><acronym title="Content Delivery Network">CDN</acronym>:</th>
|
160 |
<td>
|
161 |
<input type="hidden" name="cdn.enabled" value="0" />
|
162 |
-
<label><input class="enabled" type="checkbox" name="cdn.enabled" value="1"<?php checked($cdn_enabled, true); ?> /> <strong>Enable</strong></label
|
163 |
-
<span class="description">Theme files, media library attachments, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> files etc will appear to load instantly for
|
164 |
</td>
|
165 |
</tr>
|
166 |
<tr>
|
@@ -169,11 +235,13 @@
|
|
169 |
<select name="cdn.engine">
|
170 |
<optgroup label="Origin Pull (mirror is best):">
|
171 |
<option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Mirror</option>
|
|
|
172 |
</optgroup>
|
173 |
<optgroup label="Origin Push:">
|
|
|
174 |
<option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (! W3TC_PHP5 || ! $check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
|
175 |
<option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (! W3TC_PHP5 || ! $check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option>
|
176 |
-
<option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?>>Self-hosted / File Transfer Protocol Upload</option>
|
177 |
</optgroup>
|
178 |
</select><br />
|
179 |
<span class="description">Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.</span>
|
@@ -182,39 +250,60 @@
|
|
182 |
</table>
|
183 |
|
184 |
<p class="submit">
|
185 |
-
<input type="submit" name="
|
186 |
</p>
|
187 |
</fieldset>
|
188 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
<fieldset>
|
190 |
<legend>Support Us</legend>
|
191 |
-
|
192 |
<p>We're working to make WordPress better. Please support us, here's how:</p>
|
193 |
-
|
194 |
<p>
|
195 |
-
<label>Link to us
|
196 |
<select name="common.support">
|
197 |
<option value="">select one</option>
|
198 |
<?php foreach ($supports as $support_id => $support_name): ?>
|
199 |
<option value="<?php echo $support_id; ?>"<?php selected($support, $support_id); ?>><?php echo htmlspecialchars($support_name); ?></option>
|
200 |
<?php endforeach; ?>
|
201 |
</select>
|
202 |
-
</label>, tell your friends with a <input type="button" class="button button-tweet" value="tweet" /> and give us a
|
203 |
</p>
|
204 |
-
|
205 |
<p>If you want to manually place a link, here is the code:</p>
|
206 |
-
<p><textarea cols="80" rows="4">Performance Optimization <a href="http://www.w3-edge.com/wordpress-plugins/" rel="external">WordPress Plugins</a> by W3 EDGE</textarea></p>
|
207 |
-
|
208 |
<p class="submit">
|
209 |
-
<input type="submit" name="
|
210 |
</p>
|
211 |
</fieldset>
|
212 |
-
|
213 |
<fieldset>
|
214 |
<legend>Debug</legend>
|
215 |
-
|
216 |
<p>Detailed information about each cache will be appended in (publicly available) <acronym title="Hypertext Markup Language">HTML</acronym> comments in the page's source code. Performance in this mode will not be optimal, use sparingly and disable when not in use.</p>
|
217 |
-
|
218 |
<table class="form-table">
|
219 |
<tr>
|
220 |
<th valign="top">Debug Mode:</th>
|
@@ -222,29 +311,68 @@
|
|
222 |
<label><input type="checkbox" name="debug[]" value="pgcache"<?php checked($this->_config->get_boolean('pgcache.debug'), true); ?> /> Page Cache</label><br />
|
223 |
<label><input type="checkbox" name="debug[]" value="minify"<?php checked($this->_config->get_boolean('minify.debug'), true); ?> /> Minify</label><br />
|
224 |
<label><input type="checkbox" name="debug[]" value="dbcache"<?php checked($this->_config->get_boolean('dbcache.debug'), true); ?> /> Database Cache</label><br />
|
|
|
225 |
<label><input type="checkbox" name="debug[]" value="cdn"<?php checked($this->_config->get_boolean('cdn.debug'), true); ?> /> Content Delivery Network</label><br />
|
226 |
<span class="description">If selected, detailed caching information will be appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page's source code to review.</span>
|
227 |
</td>
|
228 |
</tr>
|
229 |
-
</table>
|
230 |
-
|
231 |
<p class="submit">
|
232 |
-
<input type="submit" name="
|
233 |
</p>
|
234 |
</fieldset>
|
235 |
|
236 |
<fieldset>
|
237 |
<legend>Miscellaneous</legend>
|
238 |
|
239 |
-
<p>
|
240 |
<input type="hidden" name="widget.latest.enabled" value="0" />
|
241 |
-
<label><input type="checkbox" name="widget.latest.enabled" value="1"<?php checked($this->_config->get_boolean('widget.latest.enabled'), true); ?> /> Enable dashboard news widget</label
|
|
|
242 |
</p>
|
243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
<p class="submit">
|
245 |
-
<input type="submit" name="
|
246 |
</p>
|
247 |
</fieldset>
|
248 |
</form>
|
249 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
+
<p>
|
4 |
+
The plugin is currently <span class="w3tc-<?php if ($enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>. If an option is disabled it means that either your current installation is not compatible or software installation is required.
|
5 |
+
</p>
|
6 |
|
7 |
+
<form action="admin.php">
|
8 |
+
<p>
|
9 |
+
Perform a
|
10 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
11 |
+
<input type="button" class="button button-self-test" value="compatibility check" />,
|
12 |
+
<input class="button" type="submit" name="flush_all" value="empty all caches"<?php if (! $can_empty_memcache && ! $can_empty_opcode && ! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> at once or
|
|
|
13 |
<input class="button" type="submit" name="flush_memcached" value="empty only the memcached cache(s)"<?php if (! $can_empty_memcache): ?> disabled="disabled"<?php endif; ?> /> or
|
14 |
+
<input class="button" type="submit" name="flush_opcode" value="empty only the opcode cache"<?php if (! $can_empty_opcode): ?> disabled="disabled"<?php endif; ?> /> or
|
15 |
<input class="button" type="submit" name="flush_file" value="empty only the disk cache(s)"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />.
|
16 |
</p>
|
17 |
</form>
|
18 |
|
19 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
20 |
<fieldset>
|
21 |
<legend>General</legend>
|
22 |
|
23 |
+
<table class="form-table">
|
24 |
+
<tr>
|
25 |
+
<th colspan="2">
|
26 |
+
<label>
|
27 |
+
<input id="enabled" type="checkbox" name="enabled" value="1"<?php checked($enabled, true); ?> />
|
28 |
+
Deselect this option to disable all caching functionality.
|
29 |
+
</label>
|
30 |
+
</th>
|
31 |
+
</tr>
|
32 |
+
<tr>
|
33 |
+
<th valign="top">Preview Mode:</th>
|
34 |
+
<td>
|
35 |
+
<?php if ($preview): ?>
|
36 |
+
<input type="hidden" name="preview" value="0" />
|
37 |
+
<input type="submit" name="preview_save" class="button-primary" value="Disable" />
|
38 |
+
<?php echo $this->button_link('Preview', w3_get_site_url() . '/?w3tc_preview=1', true); ?>
|
39 |
+
<?php echo $this->button_link('Deploy', sprintf('admin.php?page=%s&preview_deploy', $this->_page)); ?>
|
40 |
+
<?php else: ?>
|
41 |
+
<input type="hidden" name="preview" value="1" />
|
42 |
+
<input type="submit" name="preview_save" class="button-primary" value="Enable" />
|
43 |
+
<?php endif; ?>
|
44 |
+
<br /><span class="description">Use preview mode to test configuration scenarios prior to releasing them (deploy) on the actual site.</span>
|
45 |
+
</td>
|
46 |
+
</tr>
|
47 |
+
</table>
|
48 |
|
49 |
<p class="submit">
|
50 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
51 |
</p>
|
52 |
</fieldset>
|
53 |
|
54 |
<fieldset>
|
55 |
+
<legend><a href="admin.php?page=w3tc_pgcache">Page Cache</a></legend>
|
56 |
+
|
57 |
<p>Enable page caching to decrease the response time of your blog.</p>
|
58 |
+
|
59 |
<table class="form-table">
|
60 |
<tr>
|
61 |
+
<th valign="top">Page Cache:</th>
|
62 |
<td>
|
63 |
<input type="hidden" name="pgcache.enabled" value="0" />
|
64 |
+
<label><input class="enabled" type="checkbox" name="pgcache.enabled" value="1"<?php checked($pgcache_enabled, true); ?> /> <strong>Enable</strong></label>
|
65 |
+
<br /><span class="description">Caching pages will reduce the response time of your site and increase the scale of your web server.</span>
|
66 |
</td>
|
67 |
</tr>
|
68 |
<tr>
|
69 |
+
<th valign="top">Page Cache Method:</th>
|
70 |
<td>
|
71 |
<select name="pgcache.engine">
|
72 |
<optgroup label="Shared Server (disk enhanced is best):">
|
78 |
<option value="eaccelerator"<?php selected($this->_config->get_string('pgcache.engine'), 'eaccelerator'); ?><?php if (! $check_eaccelerator): ?> disabled="disabled"<?php endif; ?>>Opcode: eAccelerator</option>
|
79 |
<option value="xcache"<?php selected($this->_config->get_string('pgcache.engine'), 'xcache'); ?><?php if (! $check_xcache): ?> disabled="disabled"<?php endif; ?>>Opcode: XCache</option>
|
80 |
</optgroup>
|
81 |
+
<optgroup label="Multiple Servers:">
|
82 |
<option value="memcached"<?php selected($this->_config->get_string('pgcache.engine'), 'memcached'); ?><?php if (! $check_memcached): ?> disabled="disabled"<?php endif; ?>>Memcached</option>
|
83 |
</optgroup>
|
84 |
</select>
|
87 |
</table>
|
88 |
|
89 |
<p class="submit">
|
90 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
91 |
</p>
|
92 |
</fieldset>
|
93 |
+
|
94 |
<fieldset>
|
95 |
+
<legend>
|
96 |
+
<?php if (W3TC_PHP5): ?>
|
97 |
+
<a href="admin.php?page=w3tc_minify">Minify</a>
|
98 |
+
<?php else: ?>
|
99 |
+
Minify
|
100 |
+
<?php endif; ?>
|
101 |
+
</legend>
|
102 |
|
103 |
<p>Reduce load time by decreasing the size and number of <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files. Automatically remove unncessary data from <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym>, feed, page and post <acronym title="Hypertext Markup Language">HTML</acronym>.</p>
|
104 |
+
|
105 |
<table class="form-table">
|
106 |
<tr>
|
107 |
<th valign="top">Minify:</th>
|
108 |
<td>
|
109 |
<input type="hidden" name="minify.enabled" value="0"<?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?> />
|
110 |
+
<label><input class="enabled" type="checkbox" name="minify.enabled" value="1"<?php checked($minify_enabled, true); ?><?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?> /> <strong>Enable</strong></label>
|
111 |
+
<br /><span class="description">Minification can decrease file size of <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and feeds respectively by ~10% on average.</span>
|
112 |
</td>
|
113 |
</tr>
|
114 |
<tr>
|
115 |
+
<th valign="top">Minify Cache Method:</th>
|
116 |
<td>
|
117 |
<select name="minify.engine"<?php if (! W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>
|
118 |
<optgroup label="Shared Server (disk is best):">
|
132 |
</table>
|
133 |
|
134 |
<p class="submit">
|
135 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
136 |
</p>
|
137 |
</fieldset>
|
138 |
+
|
139 |
<fieldset>
|
140 |
+
<legend><a href="admin.php?page=w3tc_dbcache">Database Cache</a></legend>
|
141 |
+
|
142 |
<p>Enable database caching to reduce post, page and feed creation time.</p>
|
143 |
+
|
144 |
<table class="form-table">
|
145 |
<tr>
|
146 |
+
<th valign="top">Database Cache:</th>
|
147 |
<td>
|
148 |
<input type="hidden" name="dbcache.enabled" value="0" />
|
149 |
+
<label><input class="enabled" type="checkbox" name="dbcache.enabled" value="1"<?php checked($dbcache_enabled, true); ?> /> <strong>Enable</strong></label>
|
150 |
+
<br /><span class="description">Caching database objects may decrease the response time of your blog by up to 100x.</span>
|
151 |
</td>
|
152 |
</tr>
|
153 |
<tr>
|
154 |
+
<th valign="top">Database Cache Method:</th>
|
155 |
<td>
|
156 |
<select name="dbcache.engine">
|
157 |
<optgroup label="Shared Server:">
|
171 |
</table>
|
172 |
|
173 |
<p class="submit">
|
174 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
175 |
</p>
|
176 |
</fieldset>
|
177 |
+
|
178 |
+
|
179 |
<fieldset>
|
180 |
+
<legend><a href="admin.php?page=w3tc_objectcache">Object Cache</a></legend>
|
181 |
+
|
182 |
+
<p>Enable object caching to further reduce execution time for common operations.</p>
|
183 |
+
|
184 |
+
<table class="form-table">
|
185 |
+
<tr>
|
186 |
+
<th valign="top">Object Cache:</th>
|
187 |
+
<td>
|
188 |
+
<input type="hidden" name="objectcache.enabled" value="0" />
|
189 |
+
<label><input class="enabled" type="checkbox" name="objectcache.enabled" value="1"<?php checked($objectcache_enabled, true); ?> /> <strong>Enable</strong></label>
|
190 |
+
<br /><span class="description">Object caching greatly increases performance for highly dynamic sites (that use the Object Cache API).</span>
|
191 |
+
</td>
|
192 |
+
</tr>
|
193 |
+
<tr>
|
194 |
+
<th valign="top">Object Cache Method:</th>
|
195 |
+
<td>
|
196 |
+
<select name="objectcache.engine">
|
197 |
+
<optgroup label="Shared Server:">
|
198 |
+
<option value="file"<?php selected($this->_config->get_string('objectcache.engine'), 'file'); ?>>Disk</option>
|
199 |
+
</optgroup>
|
200 |
+
<optgroup label="Dedicated / Virtual Server:">
|
201 |
+
<option value="apc"<?php selected($this->_config->get_string('objectcache.engine'), 'apc'); ?><?php if (! $check_apc): ?> disabled="disabled"<?php endif; ?>>Opcode: Alternative PHP Cache (APC)</option>
|
202 |
+
<option value="eaccelerator"<?php selected($this->_config->get_string('objectcache.engine'), 'eaccelerator'); ?><?php if (! $check_eaccelerator): ?> disabled="disabled"<?php endif; ?>>Opcode: eAccelerator</option>
|
203 |
+
<option value="xcache"<?php selected($this->_config->get_string('objectcache.engine'), 'xcache'); ?><?php if (! $check_xcache): ?> disabled="disabled"<?php endif; ?>>Opcode: XCache</option>
|
204 |
+
</optgroup>
|
205 |
+
<optgroup label="Multiple Servers:">
|
206 |
+
<option value="memcached"<?php selected($this->_config->get_string('objectcache.engine'), 'memcached'); ?><?php if (! $check_memcached): ?> disabled="disabled"<?php endif; ?>>Memcached</option>
|
207 |
+
</optgroup>
|
208 |
+
</select>
|
209 |
+
</td>
|
210 |
+
</tr>
|
211 |
+
</table>
|
212 |
+
|
213 |
+
<p class="submit">
|
214 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
215 |
+
</p>
|
216 |
+
</fieldset>
|
217 |
+
|
218 |
+
<fieldset>
|
219 |
+
<legend><a href="admin.php?page=w3tc_cdn">Content Delivery Network</a></legend>
|
220 |
+
|
221 |
+
<p>Host static files with your content delivery network provider to reduce load time.</p>
|
222 |
+
|
223 |
<table class="form-table">
|
224 |
<tr>
|
225 |
<th><acronym title="Content Delivery Network">CDN</acronym>:</th>
|
226 |
<td>
|
227 |
<input type="hidden" name="cdn.enabled" value="0" />
|
228 |
+
<label><input class="enabled" type="checkbox" name="cdn.enabled" value="1"<?php checked($cdn_enabled, true); ?> /> <strong>Enable</strong></label>
|
229 |
+
<br /><span class="description">Theme files, media library attachments, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> files etc will appear to load instantly for site visitors.</span>
|
230 |
</td>
|
231 |
</tr>
|
232 |
<tr>
|
235 |
<select name="cdn.engine">
|
236 |
<optgroup label="Origin Pull (mirror is best):">
|
237 |
<option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Mirror</option>
|
238 |
+
<option value="netdna"<?php selected($this->_config->get_string('cdn.engine'), 'netdna'); ?>>Mirror: NetDNA / MaxCDN</option>
|
239 |
</optgroup>
|
240 |
<optgroup label="Origin Push:">
|
241 |
+
<option value="rscf"<?php selected($this->_config->get_string('cdn.engine'), 'rscf'); ?><?php if (! W3TC_PHP5 || ! $check_curl): ?> disabled="disabled"<?php endif; ?>>Rackspace Cloud Files</option>
|
242 |
<option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (! W3TC_PHP5 || ! $check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
|
243 |
<option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (! W3TC_PHP5 || ! $check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option>
|
244 |
+
<option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?><?php if (! $check_ftp): ?> disabled="disabled"<?php endif; ?>>Self-hosted / File Transfer Protocol Upload</option>
|
245 |
</optgroup>
|
246 |
</select><br />
|
247 |
<span class="description">Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.</span>
|
250 |
</table>
|
251 |
|
252 |
<p class="submit">
|
253 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
254 |
</p>
|
255 |
</fieldset>
|
256 |
|
257 |
+
<fieldset>
|
258 |
+
<legend><a href="admin.php?page=w3tc_browsercache">Browser Cache</a></legend>
|
259 |
+
|
260 |
+
<p>Reduce server load and decrease response time by using the cache available in site visitor's web browser.</p>
|
261 |
+
|
262 |
+
<table class="form-table">
|
263 |
+
<tr>
|
264 |
+
<th valign="top">Browser Cache:</th>
|
265 |
+
<td>
|
266 |
+
<input type="hidden" name="browsercache.enabled" value="0" />
|
267 |
+
<label><input class="enabled" type="checkbox" name="browsercache.enabled" value="1"<?php checked($browsercache_enabled, true); ?> /> <strong>Enable</strong></label>
|
268 |
+
<br /><span class="description">Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression and add headers to reduce server load and decrease file load time.</span>
|
269 |
+
</td>
|
270 |
+
</tr>
|
271 |
+
</table>
|
272 |
+
|
273 |
+
<p class="submit">
|
274 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
275 |
+
</p>
|
276 |
+
</fieldset>
|
277 |
+
|
278 |
<fieldset>
|
279 |
<legend>Support Us</legend>
|
280 |
+
|
281 |
<p>We're working to make WordPress better. Please support us, here's how:</p>
|
282 |
+
|
283 |
<p>
|
284 |
+
<label>Link to us in your
|
285 |
<select name="common.support">
|
286 |
<option value="">select one</option>
|
287 |
<?php foreach ($supports as $support_id => $support_name): ?>
|
288 |
<option value="<?php echo $support_id; ?>"<?php selected($support, $support_id); ?>><?php echo htmlspecialchars($support_name); ?></option>
|
289 |
<?php endforeach; ?>
|
290 |
</select>
|
291 |
+
</label>, tell your friends with a <input type="button" class="button button-tweet" value="tweet" /> and give us a perfect <input type="button" class="button button-rating" value="rating" />.
|
292 |
</p>
|
293 |
+
|
294 |
<p>If you want to manually place a link, here is the code:</p>
|
295 |
+
<p><textarea cols="80" rows="4">Performance Optimization <a href="http://www.w3-edge.com/wordpress-plugins/" rel="external">WordPress Plugins</a> by W3 EDGE</textarea></p>
|
296 |
+
|
297 |
<p class="submit">
|
298 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
299 |
</p>
|
300 |
</fieldset>
|
301 |
+
|
302 |
<fieldset>
|
303 |
<legend>Debug</legend>
|
304 |
+
|
305 |
<p>Detailed information about each cache will be appended in (publicly available) <acronym title="Hypertext Markup Language">HTML</acronym> comments in the page's source code. Performance in this mode will not be optimal, use sparingly and disable when not in use.</p>
|
306 |
+
|
307 |
<table class="form-table">
|
308 |
<tr>
|
309 |
<th valign="top">Debug Mode:</th>
|
311 |
<label><input type="checkbox" name="debug[]" value="pgcache"<?php checked($this->_config->get_boolean('pgcache.debug'), true); ?> /> Page Cache</label><br />
|
312 |
<label><input type="checkbox" name="debug[]" value="minify"<?php checked($this->_config->get_boolean('minify.debug'), true); ?> /> Minify</label><br />
|
313 |
<label><input type="checkbox" name="debug[]" value="dbcache"<?php checked($this->_config->get_boolean('dbcache.debug'), true); ?> /> Database Cache</label><br />
|
314 |
+
<label><input type="checkbox" name="debug[]" value="objectcache"<?php checked($this->_config->get_boolean('objectcache.debug'), true); ?> /> Object Cache</label><br />
|
315 |
<label><input type="checkbox" name="debug[]" value="cdn"<?php checked($this->_config->get_boolean('cdn.debug'), true); ?> /> Content Delivery Network</label><br />
|
316 |
<span class="description">If selected, detailed caching information will be appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page's source code to review.</span>
|
317 |
</td>
|
318 |
</tr>
|
319 |
+
</table>
|
320 |
+
|
321 |
<p class="submit">
|
322 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
323 |
</p>
|
324 |
</fieldset>
|
325 |
|
326 |
<fieldset>
|
327 |
<legend>Miscellaneous</legend>
|
328 |
|
329 |
+
<p>
|
330 |
<input type="hidden" name="widget.latest.enabled" value="0" />
|
331 |
+
<label><input type="checkbox" name="widget.latest.enabled" value="1"<?php checked($this->_config->get_boolean('widget.latest.enabled'), true); ?> /> Enable dashboard news widget</label>
|
332 |
+
<br /><span class="description">Display latest tweets and support tips on the WordPress Dashboard.</span>
|
333 |
</p>
|
334 |
+
|
335 |
+
<p>
|
336 |
+
<input type="hidden" name="file_locking" value="0"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />
|
337 |
+
<label><input type="checkbox" name="file_locking" value="1"<?php checked($file_locking, true); ?><?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> Enable file locking</label>
|
338 |
+
<br /><span class="description">Not recommended for network-based file systems.</span>
|
339 |
+
</p>
|
340 |
+
|
341 |
<p class="submit">
|
342 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
343 |
</p>
|
344 |
</fieldset>
|
345 |
</form>
|
346 |
|
347 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data">
|
348 |
+
<fieldset>
|
349 |
+
<legend>Import / Export Settings</legend>
|
350 |
+
|
351 |
+
<table class="form-table">
|
352 |
+
<tr>
|
353 |
+
<th>Import configuration:</th>
|
354 |
+
<td>
|
355 |
+
<input type="file" name="config_file" />
|
356 |
+
<input type="submit" name="config_import" class="button" value="Upload" />
|
357 |
+
<br /><span class="description">Upload and replace the settings file on the server.</span>
|
358 |
+
</td>
|
359 |
+
</tr>
|
360 |
+
<tr>
|
361 |
+
<th>Export configuration:</th>
|
362 |
+
<td>
|
363 |
+
<input type="submit" name="config_export" class="button" value="Download" />
|
364 |
+
<br /><span class="description">Download the settings file from the server.</span>
|
365 |
+
</td>
|
366 |
+
</tr>
|
367 |
+
<tr>
|
368 |
+
<th>Reset configuration:</th>
|
369 |
+
<td>
|
370 |
+
<input type="submit" name="config_reset" class="button" value="Restore Default Settings" />
|
371 |
+
<br /><span class="description">Revert all settings to the defaults. Any settings staged in preview mode will not be modified.</span>
|
372 |
+
</td>
|
373 |
+
</tr>
|
374 |
+
</table>
|
375 |
+
</fieldset>
|
376 |
+
</form>
|
377 |
+
|
378 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/install.phtml
CHANGED
@@ -1,166 +1,307 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
<div id="install">
|
4 |
-
<h3>Plugin Installation</h3>
|
5 |
-
|
6 |
<ol>
|
7 |
-
<li>
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<li
|
12 |
-
<li>
|
|
|
|
|
|
|
|
|
|
|
13 |
</ol>
|
14 |
-
Check out the <acronym title="Frequently Asked Questions">FAQ</acronym> for more details on <a href="options-general.php?page=w3-total-cache/w3-total-cache.php&tab=faq">usage</a>.
|
15 |
-
<hr />
|
16 |
-
<h3>(Optional) Software Installation for Dedicated / Virtual Dedicated / Multiple Servers</h3>
|
17 |
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
<ol>
|
21 |
-
<li
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
<li>
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
<li>
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
</ol>
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
|
|
37 |
<ol>
|
38 |
-
<li>
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
<li>
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
<
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
</ol>
|
|
|
67 |
<hr />
|
68 |
-
|
69 |
-
|
|
|
70 |
<ol>
|
71 |
-
<li>
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
<li>
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
<li>
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
<ul>
|
86 |
<li><a href="http://pureform.wordpress.com/2008/01/10/installing-memcache-on-windows-for-php/" target="_blank">Installing memcache on Windows for <acronym title="Hypertext Preprocessor">PHP</acronym></a></li>
|
87 |
-
</ul>
|
|
|
88 |
<hr />
|
89 |
-
|
90 |
-
|
|
|
91 |
<ol>
|
92 |
-
<li>
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
<
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
</ol>
|
|
|
109 |
<p>For windows users we recommend checking the following site(s) for more installation tips:</p>
|
|
|
110 |
<ul>
|
111 |
<li><a href="http://www.sitebuddy.com/PHP/Accelerators/apc_windows_binaries_builds" target="_blank"><acronym title="Alternative PHP Cache">APC</acronym> binaries for <acronym title="Hypertext Preprocessor">PHP</acronym> 5.x (windows builds)</a></li>
|
112 |
</ul>
|
|
|
113 |
<hr />
|
114 |
-
|
115 |
-
|
|
|
116 |
<ol>
|
117 |
-
<li>
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
<li>
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
</ol>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
<p>For windows users we recommend checking the following site(s) for more installation tips:</p>
|
|
|
133 |
<ul>
|
134 |
<li><a href="http://www.sitebuddy.com/PHP/Accelerators/eAccelerator_windows_binaries_builds" target="_blank">eAccelerator binaries for <acronym title="Hypertext Preprocessor">PHP</acronym> 5.x (windows builds)</a></li>
|
135 |
</ul>
|
136 |
-
|
137 |
-
<p id="XCache"><strong>XCache Installation:</strong><br />
|
138 |
-
<em>Time required: 1 minute</em></p>
|
139 |
-
<ol>
|
140 |
-
<li>Download the <a href="http://xcache.lighttpd.net/wiki/ReleaseArchive" target="_blank">latest compatible version</a> and extract:<br />
|
141 |
-
# cd /usr/local/src && wget <a href="http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz" target="_blank">http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz</a> && tar -xzf xcache-1.3.0.tar.gz && cd xcache-1.3.0</li>
|
142 |
-
<li>Note the path returned for the following command:<br />
|
143 |
-
# whereis php-config</li>
|
144 |
-
<li>Use the output from #2 to modify the --with-php-config flag in the following compile command:<br />
|
145 |
-
# phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install<br />
|
146 |
-
<br />The result should be similar to:<br />
|
147 |
-
Installing shared extensions: /usr/lib/php/modules/</li>
|
148 |
-
<li>You can also use the eaccelerator.ini file we prepared for you:<br />
|
149 |
-
# cp /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/</li>
|
150 |
-
<li>Restart apache when ready:<br />
|
151 |
-
# /etc/init.d/httpd restart</li>
|
152 |
-
<li>You're done! XCache should now be available. If the following command retuns anything, you're all set:<br />
|
153 |
-
# php -r 'phpinfo();' | grep 'xcache'</li>
|
154 |
-
</ol>
|
155 |
<hr />
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
</div>
|
165 |
|
166 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
<div id="install">
|
|
|
|
|
4 |
<ol>
|
5 |
+
<li>
|
6 |
+
Set the permissions of wp-content/ back to 755, e.g.:
|
7 |
+
<pre class="console"># chmod 755 /var/www/vhosts/domain.com/httpdocs/wp-content/</pre>
|
8 |
+
</li>
|
9 |
+
<li>On the "<a href="admin.php?page=w3tc_general">General</a>" tab and select your caching methods for page, database and minify. In most cases, "disk enhanced" mode for page cache, "disk" mode for minify and "disk" mode for database caching are "good" settings.</li>
|
10 |
+
<li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_minify">Minify</a>" tab all of the recommended settings are preset. Use the help button to simplify discovery of your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files and groups. Pay close attention to the method and location of your <acronym title="JavaScript">JS</acronym> group embeddings. See the plugin's <a href="admin.php?page=w3tc_faq">FAQ</a> for more information on usage.</li>
|
11 |
+
<li><em>Recommended:</em> If you already have a content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) provider, proceed to the "<a href="admin.php?page=w3tc_cdn">Content Delivery Network</a>" tab and populate the fields and set your preferences. If you do not use the Media Library, you will need to import your images etc into the default locations. Use the Media Library Import Tool on the "Content Delivery Network" tab to perform this task. If you do not have a <acronym title="Content Delivery Network">CDN</acronym> provider, you can still improve your site's performance using the "Self-hosted" method. On your own server, create a subdomain and matching <acronym title="Domain Name System">DNS</acronym> Zone record; e.g. static.domain.com and configure <acronym title="File Transfer Protocol">FTP</acronym> options on the "Content Delivery Network" tab accordingly. Be sure to <acronym title="File Transfer Protocol">FTP</acronym> upload the appropriate files, using the available upload buttons.</li>
|
12 |
+
<li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_browsercache">Browser Cache</a>" tab, HTTP compression is enabled by default. Make sure to enable other options to suit your goals.</li>
|
13 |
+
<li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_dbcache">Database Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution; in either of these cases the response time of the disk may not be fast enough, so this option is disabled by default.</li>
|
14 |
+
<li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_objectcache">Object Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution, the response time of the disk may not be fast enough, so this option is disabled by default. Test this option with and without database cache to ensure that it provides a performance increase.</li>
|
15 |
+
<li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_mobile">User Agent Groups</a>" tab, specify any user agents, like mobile phones if a mobile theme is used.</li>
|
16 |
</ol>
|
|
|
|
|
|
|
17 |
|
18 |
+
<p>
|
19 |
+
Check out the <acronym title="Frequently Asked Questions">FAQ</acronym> for more details on <a href="admin.php?page=w3tc_faq">usage</a>.
|
20 |
+
</p>
|
21 |
+
|
22 |
+
<hr />
|
23 |
+
|
24 |
+
<?php if ($document_root_rules || $home_root_rules || $pgcache_rules || $minify_rules || $cdn_rules): ?>
|
25 |
+
<h3>Rewrite rules</h3>
|
26 |
+
<?php if ($document_root_rules): ?>
|
27 |
+
<p><strong><?php echo htmlspecialchars($document_root_htaccess); ?>:</strong></p>
|
28 |
+
<pre class="code"><?php echo htmlspecialchars($document_root_rules); ?></pre>
|
29 |
+
<?php endif; ?>
|
30 |
+
|
31 |
+
<?php if ($home_root_rules): ?>
|
32 |
+
<p><strong><?php echo htmlspecialchars($home_root_htaccess); ?>:</strong></p>
|
33 |
+
<pre class="code"><?php echo htmlspecialchars($home_root_rules); ?></pre>
|
34 |
+
<?php endif; ?>
|
35 |
+
|
36 |
+
<?php if ($pgcache_rules): ?>
|
37 |
+
<p><strong><?php echo htmlspecialchars($pgcache_htaccess); ?>:</strong></p>
|
38 |
+
<pre class="code"><?php echo htmlspecialchars($pgcache_rules); ?></pre>
|
39 |
+
<?php endif; ?>
|
40 |
+
|
41 |
+
<?php if ($minify_rules): ?>
|
42 |
+
<p><strong><?php echo htmlspecialchars($minify_htaccess); ?>:</strong></p>
|
43 |
+
<pre class="code"><?php echo htmlspecialchars($minify_rules); ?></pre>
|
44 |
+
<?php endif; ?>
|
45 |
+
|
46 |
+
<?php if ($cdn_rules): ?>
|
47 |
+
<p><strong><?php echo htmlspecialchars($cdn_htaccess); ?>:</strong></p>
|
48 |
+
<pre class="code"><?php echo htmlspecialchars($cdn_rules); ?></pre>
|
49 |
+
<?php endif; ?>
|
50 |
+
<hr />
|
51 |
+
<?php endif; ?>
|
52 |
+
|
53 |
+
<h3>Software Installation for Dedicated / Virtual Dedicated / Multiple Servers (Optional)</h3>
|
54 |
+
|
55 |
+
<p><strong>Server Preparation:</strong><br /><em>Time required: ~1 minute</em></p>
|
56 |
+
|
57 |
<ol>
|
58 |
+
<li>
|
59 |
+
<a href="http://www.google.com/search?q=installing%20yum&output=search&tbs=qdr:y&tbo=1" target="_blank">Install yum</a> if you don't already have it. Then, if you like, you can update all of your installed software, but do so only if you have the experience and time to double check configurations afterwards:
|
60 |
+
<pre class="console"># yum update</pre>
|
61 |
+
</li>
|
62 |
+
<li>
|
63 |
+
Install <acronym title="PHP Extension Community Library">PECL</acronym>:
|
64 |
+
<pre class="console"># yum install php-pear</pre>
|
65 |
+
</li>
|
66 |
+
<li>
|
67 |
+
Install the <acronym title="Hypertext Preprocessor">PHP</acronym> Development package:
|
68 |
+
<pre class="console"># yum install php-devel</pre>
|
69 |
+
</li>
|
70 |
+
<li>
|
71 |
+
Install apxs with the following command:
|
72 |
+
<pre class="console"># yum install httpd-devel</pre>
|
73 |
+
</li>
|
74 |
+
<li>
|
75 |
+
Make sure GCC is up-to-date:
|
76 |
+
<pre class="console"># yum install gcc make</pre>
|
77 |
+
</li>
|
78 |
+
<li>
|
79 |
+
Make sure ZLIB is fully installed:
|
80 |
+
<pre class="console"># yum install zlib-devel</pre>
|
81 |
+
</li>
|
82 |
</ol>
|
83 |
+
|
84 |
+
<hr />
|
85 |
+
|
86 |
+
<p id="memcached"><strong>Memcached (Daemon) Installation:</strong><br /><em>Time required: 2 minutes</em></p>
|
87 |
+
|
88 |
<ol>
|
89 |
+
<li>
|
90 |
+
Try to install with yum:
|
91 |
+
<pre class="console"># yum install libevent libevent-devel</pre>
|
92 |
+
|
93 |
+
If this succeeds skip to #5. If this fails, then let's compile. Download and extract the <a href="http://www.monkey.org/~provos/libevent/" target="_blank">latest stable version</a>:
|
94 |
+
<pre class="console"># cd /usr/local/src && wget <a href="http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz" target="_blank">http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz</a> && tar -xzf libevent-1.4.13-stable.tar.gz && cd libevent-1.4.13-stable</pre>
|
95 |
+
</li>
|
96 |
+
<li>
|
97 |
+
Let's compile:
|
98 |
+
<pre class="console"># ./configure && make && make install</pre>
|
99 |
+
</li>
|
100 |
+
<li>
|
101 |
+
In the output you should see:
|
102 |
+
<pre class="console">Libraries have been installed in: /usr/local/lib</pre>
|
103 |
+
If so you can:
|
104 |
+
<pre class="console"># echo "/usr/local/lib/" > /etc/ld.so.conf.d/libevent.conf</pre>
|
105 |
+
</li>
|
106 |
+
<li>
|
107 |
+
Configure your server for the new install:
|
108 |
+
<pre class="console"># ldconfig -v</pre>
|
109 |
+
</li>
|
110 |
+
<li>
|
111 |
+
Now find the <a href="http://www.danga.com/memcached/download.bml" target="_blank">latest stable memcached</a>, download and extract:
|
112 |
+
<pre class="console"># cd /usr/local/src && wget <a href="http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz" target="_blank">http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz</a> && tar -xzf memcached-1.4.4.tar.gz && cd memcached-1.4.4</pre>
|
113 |
+
</li>
|
114 |
+
<li>
|
115 |
+
Let's compile:
|
116 |
+
<pre class="console"># ./configure && make && make install</pre>
|
117 |
+
</li>
|
118 |
+
<li>
|
119 |
+
Make sure memcached is starts automatically on server boot:
|
120 |
+
<pre class="console"># touch /etc/init.d/memcached
|
121 |
+
# echo '#!/bin/sh -e' >> /etc/init.d/memcached
|
122 |
+
# echo '/usr/local/bin/memcached -d -m 128 -p 11211 -u nobody -l localhost' >> /etc/init.d/memcached
|
123 |
+
# chmod u+x /etc/init.d/memcached
|
124 |
+
# echo '/etc/init.d/memcached' >> /etc/rc.local</pre>
|
125 |
+
</li>
|
126 |
+
<li>
|
127 |
+
And finally, let's start memcached:
|
128 |
+
<pre class="console"># /etc/init.d/memcached</pre>
|
129 |
+
</li>
|
130 |
</ol>
|
131 |
+
|
132 |
<hr />
|
133 |
+
|
134 |
+
<p id="memcache"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Memcache Module Installation:</strong><br /><em>Time required: 1 minute</em></p>
|
135 |
+
|
136 |
<ol>
|
137 |
+
<li>
|
138 |
+
Either use <acronym title="PHP Extension Community Library">PECL</acronym> (and skip to #4 if successful):
|
139 |
+
<pre class="console"># pecl install memcache</pre>
|
140 |
+
</li>
|
141 |
+
<li>
|
142 |
+
Or via compilation. Download the <a href="http://pecl.php.net/package/memcache" target="_blank">latest stable version</a> and extract:
|
143 |
+
<pre class="console"># cd /usr/local/src/ && wget <a href="http://pecl.php.net/get/memcache-2.2.5.tgz" target="_blank">http://pecl.php.net/get/memcache-2.2.5.tgz</a> && tar -xzf memcache-2.2.5.tgz && cd memcache-2.2.5</pre>
|
144 |
+
</li>
|
145 |
+
<li>
|
146 |
+
Now we start to compile:
|
147 |
+
<pre class="console"># phpize && ./configure && make && make install</pre>
|
148 |
+
</li>
|
149 |
+
<li>
|
150 |
+
You can also use the memcache.ini file we prepared for you:
|
151 |
+
<pre class="console"># cp /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/w3-total-cache/ini/memcache.ini /etc/php.d/</pre>
|
152 |
+
</li>
|
153 |
+
<li>
|
154 |
+
Finally restart apache:
|
155 |
+
<pre class="console"># /etc/init.d/httpd restart</pre>
|
156 |
+
</li>
|
157 |
+
<li>
|
158 |
+
You're done! Memcache should now be available. If the following command retuns anything, you're all set:
|
159 |
+
<pre class="console"># php -r 'phpinfo();' | grep 'memcache'</pre>
|
160 |
+
</li>
|
161 |
+
</ol>
|
162 |
+
|
163 |
+
<p>For windows users we recommend checking the following site(s) for more installation tips:</p>
|
164 |
+
|
165 |
<ul>
|
166 |
<li><a href="http://pureform.wordpress.com/2008/01/10/installing-memcache-on-windows-for-php/" target="_blank">Installing memcache on Windows for <acronym title="Hypertext Preprocessor">PHP</acronym></a></li>
|
167 |
+
</ul>
|
168 |
+
|
169 |
<hr />
|
170 |
+
|
171 |
+
<p id="APC"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Alternative PHP Cache (<acronym title="Alternative PHP Cache">APC</acronym>) Installation (Recommended):</strong><br /><em>Time required: 1 minute</em></p>
|
172 |
+
|
173 |
<ol>
|
174 |
+
<li>
|
175 |
+
Install <acronym title="Alternative PHP Cache">APC</acronym> using the <acronym title="PHP Extension Community Library">PECL</acronym> command (and skip to #5 if successful):
|
176 |
+
<pre class="console"># pecl install apc</pre>
|
177 |
+
</li>
|
178 |
+
<li>
|
179 |
+
Or via compilation. Download the <a href="http://pecl.php.net/package/APC" target="_blank">latest stable version</a> and extract:
|
180 |
+
<pre class="console"># cd /usr/local/src && wget <a href="http://pecl.php.net/get/APC-3.0.19.tgz" target="_blank">http://pecl.php.net/get/APC-3.0.19.tgz</a> && tar -xzf APC-3.0.19.tgz && cd APC-3.0.19</pre>
|
181 |
+
</li>
|
182 |
+
<li>
|
183 |
+
Note the paths returned for the following commands:
|
184 |
+
<pre class="console"># whereis php-config
|
185 |
+
# whereis apxs</pre>
|
186 |
+
</li>
|
187 |
+
<li>
|
188 |
+
Use the output from #2 to modify the --with-apxs and --with-php-config flags in the following compile command:
|
189 |
+
<pre class="console"># phpize && ./configure --enable-apc --enable-apc-mmap --with-apxs=/usr/sbin/apxs --with-php-config=/usr/bin/php-config && make && make install</pre>
|
190 |
+
The result should be similar to:
|
191 |
+
<pre class="console">Installing shared extensions: /usr/lib/php/modules/</pre>
|
192 |
+
</li>
|
193 |
+
<li>
|
194 |
+
You can also use the apc.ini file we prepared for you:
|
195 |
+
<pre class="console"># cp /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/w3-total-cache/ini/apc.ini /etc/php.d/</pre>
|
196 |
+
</li>
|
197 |
+
<li>
|
198 |
+
Restart apache when ready:
|
199 |
+
<pre class="console"># /etc/init.d/httpd restart</pre>
|
200 |
+
</li>
|
201 |
+
<li>
|
202 |
+
You're done! <acronym title="Alternative PHP Cache">APC</acronym> should now be available. If the following command retuns anything, you're all set:
|
203 |
+
<pre class="console"># php -r 'phpinfo();' | grep 'apc'</pre>
|
204 |
+
</li>
|
205 |
</ol>
|
206 |
+
|
207 |
<p>For windows users we recommend checking the following site(s) for more installation tips:</p>
|
208 |
+
|
209 |
<ul>
|
210 |
<li><a href="http://www.sitebuddy.com/PHP/Accelerators/apc_windows_binaries_builds" target="_blank"><acronym title="Alternative PHP Cache">APC</acronym> binaries for <acronym title="Hypertext Preprocessor">PHP</acronym> 5.x (windows builds)</a></li>
|
211 |
</ul>
|
212 |
+
|
213 |
<hr />
|
214 |
+
|
215 |
+
<p id="XCache"><strong>XCache Installation:</strong><br /><em>Time required: 1 minute</em></p>
|
216 |
+
|
217 |
<ol>
|
218 |
+
<li>
|
219 |
+
Download the <a href="http://xcache.lighttpd.net/wiki/ReleaseArchive" target="_blank">latest compatible version</a> and extract:
|
220 |
+
<pre class="console"># cd /usr/local/src && wget <a href="http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz" target="_blank">http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz</a> && tar -xzf xcache-1.3.0.tar.gz && cd xcache-1.3.0</pre>
|
221 |
+
</li>
|
222 |
+
<li>
|
223 |
+
Note the path returned for the following command:
|
224 |
+
<pre class="console"># whereis php-config</pre>
|
225 |
+
</li>
|
226 |
+
<li>
|
227 |
+
Use the output from #2 to modify the --with-php-config flag in the following compile command:
|
228 |
+
<pre class="console"># phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install</pre>
|
229 |
+
The result should be similar to:
|
230 |
+
<pre class="console">Installing shared extensions: /usr/lib/php/modules/</pre>
|
231 |
+
</li>
|
232 |
+
<li>
|
233 |
+
You can also use the eaccelerator.ini file we prepared for you:
|
234 |
+
<pre class="console"># cp /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/</pre>
|
235 |
+
</li>
|
236 |
+
<li>
|
237 |
+
Restart apache when ready:
|
238 |
+
<pre class="console"># /etc/init.d/httpd restart</pre>
|
239 |
+
</li>
|
240 |
+
<li>
|
241 |
+
You're done! XCache should now be available. If the following command retuns anything, you're all set:
|
242 |
+
<pre class="console"># php -r 'phpinfo();' | grep 'xcache'</pre>
|
243 |
+
</li>
|
244 |
</ol>
|
245 |
+
|
246 |
+
<hr />
|
247 |
+
|
248 |
+
<p id="eAccelerator"><strong>eAccelerator Installation:</strong><br /><em>Time required: 1 minute</em></p>
|
249 |
+
|
250 |
+
<ol>
|
251 |
+
<li>
|
252 |
+
If using <acronym title="Hypertext Preprocessor">PHP</acronym> v5+, download the <a href="http://eaccelerator.net/" target="_blank">lastest compatible version</a> and extract. Remember v0.9.5.3 is the last version that supports user objects, later versions only support opcode caching.
|
253 |
+
<pre class="console"># cd /usr/local/src && wget <a href="http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2" target="_blank">http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</a> && tar -xjf eaccelerator-0.9.5.3.tar.bz2 && cd eaccelerator-0.9.5.3</pre>
|
254 |
+
</li>
|
255 |
+
<li>
|
256 |
+
Note the path returned for the following command:
|
257 |
+
<pre class="console"># whereis php-config</pre>
|
258 |
+
</li>
|
259 |
+
<li>
|
260 |
+
Use the output from #2 to modify the --with-php-config flag in the following compile command:
|
261 |
+
<pre class="console"># phpize && ./configure --with-eaccelerator-shared-memory --with-php-config=/usr/bin/php-config && make && make install</pre>
|
262 |
+
The result should be similar to:
|
263 |
+
<pre class="console">Installing shared extensions: /usr/lib/php/modules/</pre>
|
264 |
+
</li>
|
265 |
+
<li>
|
266 |
+
You can also use the eaccelerator.ini file we prepared for you:
|
267 |
+
<pre class="console"># cp /var/www/vhosts/domain.com/httpdocs/wp-content/plugins/w3-total-cache/ini/eaccelerator.ini /etc/php.d/</pre>
|
268 |
+
</li>
|
269 |
+
<li>
|
270 |
+
Restart apache when ready:
|
271 |
+
<pre class="console"># /etc/init.d/httpd restart</pre>
|
272 |
+
</li>
|
273 |
+
<li>
|
274 |
+
You're done! eAccelerator should now be available. If the following command retuns anything, you're all set:
|
275 |
+
<pre class="console"># php -r 'phpinfo();' | grep 'eaccelerator'</pre>
|
276 |
+
</li>
|
277 |
+
</ol>
|
278 |
+
|
279 |
<p>For windows users we recommend checking the following site(s) for more installation tips:</p>
|
280 |
+
|
281 |
<ul>
|
282 |
<li><a href="http://www.sitebuddy.com/PHP/Accelerators/eAccelerator_windows_binaries_builds" target="_blank">eAccelerator binaries for <acronym title="Hypertext Preprocessor">PHP</acronym> 5.x (windows builds)</a></li>
|
283 |
</ul>
|
284 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
<hr />
|
286 |
+
|
287 |
+
<fieldset>
|
288 |
+
<legend>Note(s):</legend>
|
289 |
+
|
290 |
+
<table class="form-table">
|
291 |
+
<tr>
|
292 |
+
<th valign="top" colspan="2">
|
293 |
+
<ul>
|
294 |
+
<li>The provided instructions are for 32-bit CentOS, however we can provide others based on <a href="mailto:wordpressexperts@w3-edge.com">your requests</a>.</li>
|
295 |
+
<li>In the case where Apache is not used, the .htaccess file located in the root directory of the WordPress installation, wp-content/w3tc/pgcache/.htaccess and wp-content/w3tc/min/.htaccess contain directives that must be re-created for your web server software.</li>
|
296 |
+
<li>Restarting the web server will empty the opcode cache, which means it will have to be rebuilt over time and your site's performance will suffer during this period. Still, an opcode cache should be installed in any case to maximize WordPress performance.</li>
|
297 |
+
<li>Consider using memcached for objects that must persist across web server restarts or that you wish to share amongst your pool of servers (or cluster), e.g.: database objects or page cache.</li>
|
298 |
+
<li>Some yum or mirrors may not have the necessary packages, in such cases you may have to do a manual installation.</li>
|
299 |
+
</ul>
|
300 |
+
</th>
|
301 |
+
</tr>
|
302 |
+
</table>
|
303 |
+
</fieldset>
|
304 |
+
|
305 |
</div>
|
306 |
|
307 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/minify.phtml
CHANGED
@@ -1,54 +1,73 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
-
<form action="
|
6 |
<p>
|
7 |
-
Minify
|
8 |
-
<
|
9 |
-
<
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
</p>
|
12 |
</form>
|
13 |
|
14 |
-
<form id="minify_form" action="
|
15 |
<fieldset>
|
16 |
<legend>General</legend>
|
17 |
|
18 |
<table class="form-table">
|
19 |
<tr>
|
20 |
<th colspan="2">
|
21 |
-
<input type="hidden" name="minify.rewrite" value="0" />
|
22 |
<label><input type="checkbox" name="minify.rewrite" value="1"<?php checked($this->_config->get_boolean('minify.rewrite'), true); ?> /> Rewrite <acronym title="Uniform Resource Locator">URL</acronym> structure</label><br />
|
23 |
-
<span class="description">If disabled, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embeddings will use GET variables instead of "fancy links
|
24 |
</th>
|
25 |
</tr>
|
26 |
<tr>
|
27 |
<th colspan="2">
|
28 |
-
<input type="hidden" name="minify.upload" value="0" />
|
29 |
<label><input type="checkbox" name="minify.upload" value="1"<?php checked($this->_config->get_boolean('minify.upload'), true); ?> /> Automatically upload modified files</label><br />
|
30 |
<span class="description">If <acronym title="Content Delivery Network">CDN</acronym> is enabled (and not using the origin pull method), your minified files will be automatically uploaded.</span>
|
31 |
</th>
|
32 |
</tr>
|
33 |
<tr>
|
34 |
-
<th
|
|
|
|
|
35 |
<td>
|
36 |
-
<select id="
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
|
|
43 |
</td>
|
44 |
</tr>
|
45 |
</table>
|
46 |
-
|
47 |
<p class="submit">
|
48 |
-
<input type="submit" name="
|
49 |
</p>
|
50 |
</fieldset>
|
51 |
-
|
52 |
<fieldset>
|
53 |
<legend><acronym title="Hypertext Markup Language">HTML</acronym></legend>
|
54 |
|
@@ -57,26 +76,31 @@
|
|
57 |
<th valign="top"><acronym title="Hypertext Markup Language">HTML</acronym> minify settings:</th>
|
58 |
<td>
|
59 |
<input type="hidden" name="minify.html.enable" value="0" />
|
60 |
-
<input type="hidden" name="minify.html.reject.admin" value="0" />
|
61 |
<input type="hidden" name="minify.html.reject.feed" value="0" />
|
62 |
<input type="hidden" name="minify.html.inline.css" value="0" />
|
63 |
<input type="hidden" name="minify.html.inline.js" value="0" />
|
64 |
<input type="hidden" name="minify.html.strip.crlf" value="0" />
|
65 |
<label><input id="html_enabled" type="checkbox" name="minify.html.enable" value="1"<?php checked($this->_config->get_boolean('minify.html.enable'), true); ?> /> Enable</label><br />
|
66 |
-
<label><input class="html_enabled" type="checkbox" name="minify.html.reject.admin" value="1"<?php checked($this->_config->get_boolean('minify.html.reject.admin'), true); ?> /> Don't minify <acronym title="Hypertext Markup Language">HTML</acronym> for logged in administrators</label><br />
|
67 |
<label><input class="html_enabled" type="checkbox" name="minify.html.reject.feed" value="1"<?php checked($this->_config->get_boolean('minify.html.reject.feed'), true); ?> /> Don't minify feeds</label><br />
|
68 |
<label><input class="html_enabled" type="checkbox" name="minify.html.inline.css" value="1"<?php checked($this->_config->get_boolean('minify.html.inline.css'), true); ?> /> Inline <acronym title="Cascading Style Sheet">CSS</acronym> minification</label><br />
|
69 |
<label><input class="html_enabled" type="checkbox" name="minify.html.inline.js" value="1"<?php checked($this->_config->get_boolean('minify.html.inline.js'), true); ?> /> Inline <acronym title="JavaScript">JS</acronym> minification</label><br />
|
70 |
<label><input class="html_enabled" type="checkbox" name="minify.html.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.html.strip.crlf'), true); ?> /> Line break removal</label><br />
|
71 |
</td>
|
72 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
</table>
|
74 |
-
|
75 |
<p class="submit">
|
76 |
-
<input type="submit" name="
|
77 |
</p>
|
78 |
</fieldset>
|
79 |
-
|
80 |
<fieldset>
|
81 |
<legend>JavaScript</legend>
|
82 |
|
@@ -86,12 +110,14 @@
|
|
86 |
<td>
|
87 |
<input type="hidden" name="minify.js.enable" value="0" />
|
88 |
<input type="hidden" name="minify.js.combine.header" value="0" />
|
|
|
89 |
<input type="hidden" name="minify.js.combine.footer" value="0" />
|
90 |
<input type="hidden" name="minify.js.strip.comments" value="0" />
|
91 |
<input type="hidden" name="minify.js.strip.crlf" value="0" />
|
92 |
<label><input id="js_enabled" type="checkbox" name="minify.js.enable" value="1"<?php checked($this->_config->get_boolean('minify.js.enable'), true); ?> /> Enable</label><br />
|
93 |
-
<label><input class="js_enabled" type="checkbox" name="minify.js.combine.header" value="1"<?php checked($this->_config->get_boolean('minify.js.combine.header'), true); ?> />
|
94 |
-
<label><input class="js_enabled" type="checkbox" name="minify.js.combine.
|
|
|
95 |
<label><input class="js_enabled" type="checkbox" name="minify.js.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.comments'), true); ?> /> Comment removal</label><br />
|
96 |
<label><input class="js_enabled" type="checkbox" name="minify.js.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.crlf'), true); ?> /> Line break removal</label><br />
|
97 |
</td>
|
@@ -101,37 +127,77 @@
|
|
101 |
<td>
|
102 |
<p>
|
103 |
<label>
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
</p>
|
113 |
-
<
|
114 |
-
<?php foreach ($js_groups as $
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
<div id="js_files_empty" class="w3tc-empty" style="display: none;">No <acronym title="JavaScript">JS</acronym> files added</div>
|
125 |
<input id="js_file_add" class="js_enabled button" type="button" value="Add a script" />
|
126 |
</td>
|
127 |
</tr>
|
128 |
</table>
|
129 |
-
|
130 |
<p class="submit">
|
131 |
-
<input type="submit" name="
|
132 |
</p>
|
133 |
</fieldset>
|
134 |
-
|
135 |
<fieldset>
|
136 |
<legend>Cascading Style Sheets</legend>
|
137 |
|
@@ -154,37 +220,62 @@
|
|
154 |
<td>
|
155 |
<p>
|
156 |
<label>
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
<span class="description">
|
165 |
</p>
|
166 |
-
<
|
167 |
-
<?php foreach ($css_groups as $
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
<?php endforeach; ?>
|
175 |
-
<?php endforeach; ?>
|
176 |
-
</
|
177 |
<div id="css_files_empty" class="w3tc-empty" style="display: none;">No <acronym title="Cascading Style Sheet">CSS</acronym> files added</div>
|
178 |
-
<input id="css_file_add" class="css_enabled button" type="button" value="Add a style sheet" />
|
179 |
</td>
|
180 |
</tr>
|
181 |
</table>
|
182 |
-
|
183 |
<p class="submit">
|
184 |
-
<input type="submit" name="
|
185 |
</p>
|
186 |
</fieldset>
|
187 |
-
|
188 |
<fieldset>
|
189 |
<legend>Advanced</legend>
|
190 |
|
@@ -194,19 +285,13 @@
|
|
194 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
195 |
<td>
|
196 |
<input id="memcached_servers" type="text" name="minify.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('minify.memcached.servers'))); ?>" size="100" />
|
197 |
-
<input id="
|
198 |
-
<span id="
|
199 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
200 |
</td>
|
201 |
</tr>
|
202 |
<?php endif; ?>
|
203 |
-
|
204 |
-
<th style="width: 250px;"><label for="minify_maxage">Maximum lifetime of cache objects:</label></th>
|
205 |
-
<td><input id="minify_maxage" type="text" name="minify.maxage" value="<?php echo $this->_config->get_integer('minify.maxage'); ?>" size="8" /> seconds
|
206 |
-
<br /><span class="description">Determines the natural expiration time of unchanged cache items. The higher the value, the larger the cache.</span>
|
207 |
-
</td>
|
208 |
-
</tr>
|
209 |
-
<tr>
|
210 |
<th><label for="minify_lifetime">Update external files every:</label></th>
|
211 |
<td><input id="minify_lifetime" type="text" name="minify.lifetime" value="<?php echo $this->_config->get_integer('minify.lifetime'); ?>" size="8" /> seconds<br />
|
212 |
<span class="description">Specify the interval between download and update of external files in the minify cache. Hint: 6 hours is 21600 seconds. 12 hours is 43200 seconds. 24 hours is 86400 seconds.</span></td>
|
@@ -225,11 +310,27 @@
|
|
225 |
</td>
|
226 |
</tr>
|
227 |
</table>
|
228 |
-
|
229 |
<p class="submit">
|
230 |
-
<input type="submit" name="
|
231 |
</p>
|
232 |
</fieldset>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
</form>
|
234 |
|
235 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
+
<script type="text/javascript">/*<![CDATA[*/
|
4 |
+
var minify_templates = {};
|
5 |
+
<?php foreach ($templates as $theme_key => $theme_templates): ?>
|
6 |
+
minify_templates['<?php echo addslashes($theme_key); ?>'] = {};
|
7 |
+
<?php foreach ($theme_templates as $theme_template_key => $theme_template_name): ?>
|
8 |
+
minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes($theme_template_key); ?>'] = '<?php echo addslashes($theme_template_name); ?>';
|
9 |
+
<?php endforeach; ?>
|
10 |
+
<?php endforeach; ?>
|
11 |
+
/*]]>*/</script>
|
12 |
|
13 |
+
<form action="admin.php">
|
14 |
<p>
|
15 |
+
Minify via
|
16 |
+
<strong><?php echo w3_get_engine_name($this->_config->get_string('minify.engine')); ?></strong>
|
17 |
+
is currently <span class="w3tc-<?php if ($minify_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
18 |
+
</p>
|
19 |
+
<p>
|
20 |
+
To rebuild the minify cache use the
|
21 |
+
<input type="submit" name="flush_minify" value="empty cache"<?php if (! $minify_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
|
22 |
+
operation.
|
23 |
+
Get minify hints using the
|
24 |
+
<input type="button" class="button button-minify-recommendations" value="help" />
|
25 |
+
wizard.
|
26 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
27 |
</p>
|
28 |
</form>
|
29 |
|
30 |
+
<form id="minify_form" action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
31 |
<fieldset>
|
32 |
<legend>General</legend>
|
33 |
|
34 |
<table class="form-table">
|
35 |
<tr>
|
36 |
<th colspan="2">
|
37 |
+
<input type="hidden" name="minify.rewrite" value="0" />
|
38 |
<label><input type="checkbox" name="minify.rewrite" value="1"<?php checked($this->_config->get_boolean('minify.rewrite'), true); ?> /> Rewrite <acronym title="Uniform Resource Locator">URL</acronym> structure</label><br />
|
39 |
+
<span class="description">If disabled, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embeddings will use GET variables instead of "fancy" links.</span>
|
40 |
</th>
|
41 |
</tr>
|
42 |
<tr>
|
43 |
<th colspan="2">
|
44 |
+
<input type="hidden" name="minify.upload" value="0" />
|
45 |
<label><input type="checkbox" name="minify.upload" value="1"<?php checked($this->_config->get_boolean('minify.upload'), true); ?> /> Automatically upload modified files</label><br />
|
46 |
<span class="description">If <acronym title="Content Delivery Network">CDN</acronym> is enabled (and not using the origin pull method), your minified files will be automatically uploaded.</span>
|
47 |
</th>
|
48 |
</tr>
|
49 |
<tr>
|
50 |
+
<th valign="top">
|
51 |
+
<label for="minify_error_notification">Minify error notification:</label>
|
52 |
+
</th>
|
53 |
<td>
|
54 |
+
<select id="minify_error_notification" name="minify.error.notification">
|
55 |
+
<?php $value = $this->_config->get_string('minify.error.notification'); ?>
|
56 |
+
<option value=""<?php selected($value, ''); ?>>Disabled</option>
|
57 |
+
<option value="admin"<?php selected($value, 'admin'); ?>>Admin Notification</option>
|
58 |
+
<option value="email"<?php selected($value, 'email'); ?>>Email Notification</option>
|
59 |
+
<option value="admin,email"<?php selected($value, 'admin,email'); ?>>Both Admin & Email Notification</option>
|
60 |
+
</select>
|
61 |
+
<br /><span class="description">Notify when minify cache creation errors occur.</span>
|
62 |
</td>
|
63 |
</tr>
|
64 |
</table>
|
65 |
+
|
66 |
<p class="submit">
|
67 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
68 |
</p>
|
69 |
</fieldset>
|
70 |
+
|
71 |
<fieldset>
|
72 |
<legend><acronym title="Hypertext Markup Language">HTML</acronym></legend>
|
73 |
|
76 |
<th valign="top"><acronym title="Hypertext Markup Language">HTML</acronym> minify settings:</th>
|
77 |
<td>
|
78 |
<input type="hidden" name="minify.html.enable" value="0" />
|
|
|
79 |
<input type="hidden" name="minify.html.reject.feed" value="0" />
|
80 |
<input type="hidden" name="minify.html.inline.css" value="0" />
|
81 |
<input type="hidden" name="minify.html.inline.js" value="0" />
|
82 |
<input type="hidden" name="minify.html.strip.crlf" value="0" />
|
83 |
<label><input id="html_enabled" type="checkbox" name="minify.html.enable" value="1"<?php checked($this->_config->get_boolean('minify.html.enable'), true); ?> /> Enable</label><br />
|
|
|
84 |
<label><input class="html_enabled" type="checkbox" name="minify.html.reject.feed" value="1"<?php checked($this->_config->get_boolean('minify.html.reject.feed'), true); ?> /> Don't minify feeds</label><br />
|
85 |
<label><input class="html_enabled" type="checkbox" name="minify.html.inline.css" value="1"<?php checked($this->_config->get_boolean('minify.html.inline.css'), true); ?> /> Inline <acronym title="Cascading Style Sheet">CSS</acronym> minification</label><br />
|
86 |
<label><input class="html_enabled" type="checkbox" name="minify.html.inline.js" value="1"<?php checked($this->_config->get_boolean('minify.html.inline.js'), true); ?> /> Inline <acronym title="JavaScript">JS</acronym> minification</label><br />
|
87 |
<label><input class="html_enabled" type="checkbox" name="minify.html.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.html.strip.crlf'), true); ?> /> Line break removal</label><br />
|
88 |
</td>
|
89 |
</tr>
|
90 |
+
<tr>
|
91 |
+
<th valign="top"><label for="minify_html_comments_ignore">Ignored comment stems:</label></th>
|
92 |
+
<td>
|
93 |
+
<textarea id="minify_html_comments_ignore" name="minify.html.comments.ignore" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('minify.html.comments.ignore'))); ?></textarea><br />
|
94 |
+
<span class="description">Do not remove comments that contain these terms.</span>
|
95 |
+
</td>
|
96 |
+
</tr>
|
97 |
</table>
|
98 |
+
|
99 |
<p class="submit">
|
100 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
101 |
</p>
|
102 |
</fieldset>
|
103 |
+
|
104 |
<fieldset>
|
105 |
<legend>JavaScript</legend>
|
106 |
|
110 |
<td>
|
111 |
<input type="hidden" name="minify.js.enable" value="0" />
|
112 |
<input type="hidden" name="minify.js.combine.header" value="0" />
|
113 |
+
<input type="hidden" name="minify.js.combine.body" value="0" />
|
114 |
<input type="hidden" name="minify.js.combine.footer" value="0" />
|
115 |
<input type="hidden" name="minify.js.strip.comments" value="0" />
|
116 |
<input type="hidden" name="minify.js.strip.crlf" value="0" />
|
117 |
<label><input id="js_enabled" type="checkbox" name="minify.js.enable" value="1"<?php checked($this->_config->get_boolean('minify.js.enable'), true); ?> /> Enable</label><br />
|
118 |
+
<label><input class="js_enabled" type="checkbox" name="minify.js.combine.header" value="1"<?php checked($this->_config->get_boolean('minify.js.combine.header'), true); ?> /> Combine only after <head></label><br />
|
119 |
+
<label><input class="js_enabled" type="checkbox" name="minify.js.combine.body" value="1"<?php checked($this->_config->get_boolean('minify.js.combine.body'), true); ?> /> Combine only after <body></label><br />
|
120 |
+
<label><input class="js_enabled" type="checkbox" name="minify.js.combine.footer" value="1"<?php checked($this->_config->get_boolean('minify.js.combine.footer'), true); ?> /> Combine only before </body></label><br />
|
121 |
<label><input class="js_enabled" type="checkbox" name="minify.js.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.comments'), true); ?> /> Comment removal</label><br />
|
122 |
<label><input class="js_enabled" type="checkbox" name="minify.js.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.crlf'), true); ?> /> Line break removal</label><br />
|
123 |
</td>
|
127 |
<td>
|
128 |
<p>
|
129 |
<label>
|
130 |
+
Theme:
|
131 |
+
<select id="js_themes" class="js_enabled" name="js_theme">
|
132 |
+
<?php foreach ($themes as $theme_key => $theme_name): ?>
|
133 |
+
<option value="<?php echo htmlspecialchars($theme_key); ?>"<?php selected($theme_key, $js_theme); ?>><?php echo htmlspecialchars($theme_name); ?><?php if ($theme_key == $js_theme): ?> (active)<?php endif; ?></option>
|
134 |
+
<?php endforeach; ?>
|
135 |
+
</select>
|
136 |
+
</label>
|
137 |
+
<br /><span class="description">Files are minified by template. First select the theme to manage, then add scripts used in all templates to the "All Templates" group. Use the menu above to manage scripts unique to a specific template. If necessary drag & drop to resolve dependency issues (due to incorrect order).</span>
|
138 |
</p>
|
139 |
+
<ul id="js_files" class="minify-files">
|
140 |
+
<?php $index = 0; foreach ($js_groups as $js_theme => $js_templates): if (isset($templates[$js_theme])): ?>
|
141 |
+
<?php foreach ($js_templates as $js_template => $js_locations): ?>
|
142 |
+
<?php foreach ((array) $js_locations as $js_location => $js_config): ?>
|
143 |
+
<?php if (! empty($js_config['files'])): foreach ((array) $js_config['files'] as $js_file): $index++; ?>
|
144 |
+
<li>
|
145 |
+
<table>
|
146 |
+
<tr>
|
147 |
+
<th> </th>
|
148 |
+
<th>File URI:</th>
|
149 |
+
<th>Template:</th>
|
150 |
+
<th colspan="3">Embed Location:</th>
|
151 |
+
</tr>
|
152 |
+
<tr>
|
153 |
+
<td><?php echo $index; ?>.</td>
|
154 |
+
<td>
|
155 |
+
<input class="js_enabled" type="text" name="js_files[<?php echo htmlspecialchars($js_theme); ?>][<?php echo htmlspecialchars($js_template); ?>][<?php echo htmlspecialchars($js_location); ?>][]" value="<?php echo htmlspecialchars($js_file); ?>" size="70" />
|
156 |
+
</td>
|
157 |
+
<td>
|
158 |
+
<select class="js_file_template js_enabled">
|
159 |
+
<?php foreach ($templates[$js_theme] as $theme_template_key => $theme_template_name): ?>
|
160 |
+
<option value="<?php echo htmlspecialchars($theme_template_key); ?>"<?php selected($theme_template_key, $js_template); ?>><?php echo htmlspecialchars($theme_template_name); ?></option>
|
161 |
+
<?php endforeach; ?>
|
162 |
+
</select>
|
163 |
+
</td>
|
164 |
+
<td>
|
165 |
+
<select class="js_file_location js_enabled">
|
166 |
+
<optgroup label="Blocking:">
|
167 |
+
<option value="include"<?php if ($js_location == 'include'): ?> selected="selected"<?php endif; ?>>Embed in <head></option>
|
168 |
+
<option value="include-body"<?php if ($js_location == 'include-body'): ?> selected="selected"<?php endif; ?>>Embed after <body></option>
|
169 |
+
<option value="include-footer"<?php if ($js_location == 'include-footer'): ?> selected="selected"<?php endif; ?>>Embed before </body></option>
|
170 |
+
</optgroup>
|
171 |
+
<optgroup label="Non-Blocking:">
|
172 |
+
<option value="include-nb"<?php if ($js_location == 'include-nb'): ?> selected="selected"<?php endif; ?>>Embed in <head></option>
|
173 |
+
<option value="include-body-nb"<?php if ($js_location == 'include-body-nb'): ?> selected="selected"<?php endif; ?>>Embed after <body></option>
|
174 |
+
<option value="include-footer-nb"<?php if ($js_location == 'include-footer-nb'): ?> selected="selected"<?php endif; ?>>Embed before </body></option>
|
175 |
+
</optgroup>
|
176 |
+
</select>
|
177 |
+
</td>
|
178 |
+
<td>
|
179 |
+
<input class="js_file_delete js_enabled button" type="button" value="Delete" />
|
180 |
+
<input class="js_file_verify js_enabled button" type="button" value="Verify URI" />
|
181 |
+
</td>
|
182 |
+
</tr>
|
183 |
+
</table>
|
184 |
+
</li>
|
185 |
+
<?php endforeach; endif; ?>
|
186 |
+
<?php endforeach; ?>
|
187 |
+
<?php endforeach; ?>
|
188 |
+
<?php endif; endforeach; ?>
|
189 |
+
</ul>
|
190 |
<div id="js_files_empty" class="w3tc-empty" style="display: none;">No <acronym title="JavaScript">JS</acronym> files added</div>
|
191 |
<input id="js_file_add" class="js_enabled button" type="button" value="Add a script" />
|
192 |
</td>
|
193 |
</tr>
|
194 |
</table>
|
195 |
+
|
196 |
<p class="submit">
|
197 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
198 |
</p>
|
199 |
</fieldset>
|
200 |
+
|
201 |
<fieldset>
|
202 |
<legend>Cascading Style Sheets</legend>
|
203 |
|
220 |
<td>
|
221 |
<p>
|
222 |
<label>
|
223 |
+
Theme:
|
224 |
+
<select id="css_themes" class="css_enabled" name="css_theme">
|
225 |
+
<?php foreach ($themes as $theme_key => $theme_name): ?>
|
226 |
+
<option value="<?php echo htmlspecialchars($theme_key); ?>"<?php selected($theme_key, $css_theme); ?>><?php echo htmlspecialchars($theme_name); ?><?php if ($theme_key == $css_theme): ?> (active)<?php endif; ?></option>
|
227 |
+
<?php endforeach; ?>
|
228 |
+
</select>
|
229 |
+
</label>
|
230 |
+
<br /><span class="description">Files are minified by template. First select the theme to manage, then add style sheets used in all templates to the "All Templates" group. Use the menu above to manage style sheets unique to a specific template. If necessary drag & drop to resolve dependency issues (due to incorrect order).</span>
|
231 |
</p>
|
232 |
+
<ul id="css_files" class="minify-files">
|
233 |
+
<?php $index = 0; foreach ($css_groups as $css_theme => $css_templates): if (isset($templates[$css_theme])): ?>
|
234 |
+
<?php foreach ($css_templates as $css_template => $css_locations): ?>
|
235 |
+
<?php foreach ((array) $css_locations as $css_location => $css_config): ?>
|
236 |
+
<?php if (! empty($css_config['files'])): foreach ((array) $css_config['files'] as $css_file): $index++; ?>
|
237 |
+
<li>
|
238 |
+
<table>
|
239 |
+
<tr>
|
240 |
+
<th> </th>
|
241 |
+
<th>File URI:</th>
|
242 |
+
<th colspan="2">Template:</th>
|
243 |
+
</tr>
|
244 |
+
<tr>
|
245 |
+
<td><?php echo $index; ?>.</td>
|
246 |
+
<td>
|
247 |
+
<input class="css_enabled" type="text" name="css_files[<?php echo htmlspecialchars($css_theme); ?>][<?php echo htmlspecialchars($css_template); ?>][<?php echo htmlspecialchars($css_location); ?>][]" value="<?php echo htmlspecialchars($css_file); ?>" size="70" /><br />
|
248 |
+
</td>
|
249 |
+
<td>
|
250 |
+
<select class="css_file_template css_enabled">
|
251 |
+
<?php foreach ($templates[$css_theme] as $theme_template_key => $theme_template_name): ?>
|
252 |
+
<option value="<?php echo htmlspecialchars($theme_template_key); ?>"<?php selected($theme_template_key, $css_template); ?>><?php echo htmlspecialchars($theme_template_name); ?></option>
|
253 |
+
<?php endforeach; ?>
|
254 |
+
</select>
|
255 |
+
</td>
|
256 |
+
<td>
|
257 |
+
<input class="css_file_delete css_enabled button" type="button" value="Delete" />
|
258 |
+
<input class="css_file_verify css_enabled button" type="button" value="Verify URI" />
|
259 |
+
</td>
|
260 |
+
</tr>
|
261 |
+
</table>
|
262 |
+
</li>
|
263 |
+
<?php endforeach; endif; ?>
|
264 |
+
<?php endforeach; ?>
|
265 |
<?php endforeach; ?>
|
266 |
+
<?php endif; endforeach; ?>
|
267 |
+
</ul>
|
268 |
<div id="css_files_empty" class="w3tc-empty" style="display: none;">No <acronym title="Cascading Style Sheet">CSS</acronym> files added</div>
|
269 |
+
<input id="css_file_add" class="css_enabled button" type="button" value="Add a style sheet" />
|
270 |
</td>
|
271 |
</tr>
|
272 |
</table>
|
273 |
+
|
274 |
<p class="submit">
|
275 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
276 |
</p>
|
277 |
</fieldset>
|
278 |
+
|
279 |
<fieldset>
|
280 |
<legend>Advanced</legend>
|
281 |
|
285 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
286 |
<td>
|
287 |
<input id="memcached_servers" type="text" name="minify.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('minify.memcached.servers'))); ?>" size="100" />
|
288 |
+
<input id="memcached_test" class="button" type="button" value="Test" />
|
289 |
+
<span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
|
290 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
291 |
</td>
|
292 |
</tr>
|
293 |
<?php endif; ?>
|
294 |
+
<tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
<th><label for="minify_lifetime">Update external files every:</label></th>
|
296 |
<td><input id="minify_lifetime" type="text" name="minify.lifetime" value="<?php echo $this->_config->get_integer('minify.lifetime'); ?>" size="8" /> seconds<br />
|
297 |
<span class="description">Specify the interval between download and update of external files in the minify cache. Hint: 6 hours is 21600 seconds. 12 hours is 43200 seconds. 24 hours is 86400 seconds.</span></td>
|
310 |
</td>
|
311 |
</tr>
|
312 |
</table>
|
313 |
+
|
314 |
<p class="submit">
|
315 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
316 |
</p>
|
317 |
</fieldset>
|
318 |
+
|
319 |
+
<fieldset>
|
320 |
+
<legend>Note(s):</legend>
|
321 |
+
|
322 |
+
<table class="form-table">
|
323 |
+
<tr>
|
324 |
+
<th valign="top" colspan="2">
|
325 |
+
<ul>
|
326 |
+
<li>Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression in the "Cascading Style Sheets & JavaScript" section on <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> Settings tab.</li>
|
327 |
+
<li>The <acronym title="Time to Live">TTL</acronym> of page cache files is set via the "Expires header lifetime" field in the "Cascading Style Sheets & JavaScript" section on <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> Settings tab.</li>
|
328 |
+
</ul>
|
329 |
+
</th>
|
330 |
+
</tr>
|
331 |
+
</table>
|
332 |
+
</fieldset>
|
333 |
+
|
334 |
</form>
|
335 |
|
336 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/mobile.phtml
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
|
3 |
+
<script type="text/javascript">/*<![CDATA[*/
|
4 |
+
var mobile_themes = {};
|
5 |
+
<?php foreach ($themes as $theme_key => $theme_name): ?>
|
6 |
+
mobile_themes['<?php echo addslashes($theme_key); ?>'] = '<?php echo addslashes($theme_name); ?>';
|
7 |
+
<?php endforeach; ?>
|
8 |
+
/*]]>*/</script>
|
9 |
+
|
10 |
+
<p>
|
11 |
+
User agent group support is always <span class="w3tc-enabled">enabled</span>.
|
12 |
+
</p>
|
13 |
+
|
14 |
+
<form id="mobile_form" action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
15 |
+
<fieldset>
|
16 |
+
<legend>Manage User Agent Groups</legend>
|
17 |
+
<p>
|
18 |
+
<input id="mobile_add" type="button" class="button" value="Create a group" /> of user agents by specifying names in the user agents field. Assign a set of user agents to use a specific theme, redirect them to another domain or if an existing mobile plugin is active, create user agent groups to ensure that a unique cache is created for each user agent group. Drag and drop groups into order (if needed) to determine their priority (top -> down).
|
19 |
+
</p>
|
20 |
+
|
21 |
+
<ul id="mobile_groups">
|
22 |
+
<?php $index = 0; foreach ($groups as $group => $group_config): $index++; ?>
|
23 |
+
<li id="mobile_group_<?php echo htmlspecialchars($group); ?>">
|
24 |
+
<table class="form-table">
|
25 |
+
<tr>
|
26 |
+
<th valign="top">
|
27 |
+
Group name:
|
28 |
+
</th>
|
29 |
+
<td>
|
30 |
+
<span class="mobile_group_number"><?php echo $index; ?>.</span> <span class="mobile_group"><?php echo htmlspecialchars($group); ?></span> <input type="button" class="button mobile_delete" value="Delete group" />
|
31 |
+
</td>
|
32 |
+
</tr>
|
33 |
+
<tr>
|
34 |
+
<th>
|
35 |
+
<label for="mobile_groups_<?php echo htmlspecialchars($group); ?>_enabled">Enabled:</label>
|
36 |
+
</th>
|
37 |
+
<td>
|
38 |
+
<input type="hidden" name="mobile_groups[<?php echo htmlspecialchars($group); ?>][enabled]" value="0" />
|
39 |
+
<input id="mobile_groups_<?php echo htmlspecialchars($group); ?>_enabled" type="checkbox" name="mobile_groups[<?php echo htmlspecialchars($group); ?>][enabled]" value="1"<?php checked($group_config['enabled'], true); ?> />
|
40 |
+
</td>
|
41 |
+
</tr>
|
42 |
+
<tr>
|
43 |
+
<th valign="top">
|
44 |
+
<label for="mobile_groups_<?php echo htmlspecialchars($group); ?>_theme">Theme:</label>
|
45 |
+
</th>
|
46 |
+
<td>
|
47 |
+
<select id="mobile_groups_<?php echo htmlspecialchars($group); ?>_theme" name="mobile_groups[<?php echo htmlspecialchars($group); ?>][theme]">
|
48 |
+
<option value="">-- Pass-through --</option>
|
49 |
+
<?php foreach ($themes as $theme_key => $theme_name): ?>
|
50 |
+
<option value="<?php echo htmlspecialchars($theme_key); ?>"<?php selected($theme_key, $group_config['theme']); ?>><?php echo htmlspecialchars($theme_name); ?></option>
|
51 |
+
<?php endforeach; ?>
|
52 |
+
</select>
|
53 |
+
<br /><span class="description">Assign this group of user agents to a specific them. Selecting "Pass-through" allows any plugin(s) (e.g. mobile plugins) to properly handle requests for these user agents. If the "redirect users to" field is not empty, this setting is ignored.</span>
|
54 |
+
</td>
|
55 |
+
</tr>
|
56 |
+
<tr>
|
57 |
+
<th valign="top">
|
58 |
+
<label for="mobile_groups_<?php echo htmlspecialchars($group); ?>_redirect">Redirect users to:</label>
|
59 |
+
</th>
|
60 |
+
<td>
|
61 |
+
<input id="mobile_groups_<?php echo htmlspecialchars($group); ?>_redirect" type="text" name="mobile_groups[<?php echo htmlspecialchars($group); ?>][redirect]" value="<?php echo htmlspecialchars($group_config['redirect']); ?>" size="60" />
|
62 |
+
<br /><span class="description">A 302 redirect is used to send this group of users to another hostname (domain); recommended if a 3rd party service provides a mobile version of your site.</span>
|
63 |
+
</td>
|
64 |
+
</tr>
|
65 |
+
<tr>
|
66 |
+
<th valign="top">
|
67 |
+
<label for="mobile_groups_<?php echo htmlspecialchars($group); ?>_agents">User agents:</label>
|
68 |
+
</th>
|
69 |
+
<td>
|
70 |
+
<textarea id="mobile_groups_<?php echo htmlspecialchars($group); ?>_agents" name="mobile_groups[<?php echo htmlspecialchars($group); ?>][agents]" rows="10" cols="50"><?php echo htmlspecialchars(implode("\r\n", (array) $group_config['agents'])); ?></textarea>
|
71 |
+
<br /><span class="description">Specify the user agents for this group. Remember to escape special characters like spaces, dots or dashes with a backslash. Regular expressions are also supported.</span>
|
72 |
+
</td>
|
73 |
+
</tr>
|
74 |
+
</table>
|
75 |
+
</li>
|
76 |
+
<?php endforeach; ?>
|
77 |
+
</ul>
|
78 |
+
<div id="mobile_groups_empty" style="display: none;">No groups added. All user agents recieve the same page and minify cache results.</div>
|
79 |
+
|
80 |
+
<p class="submit">
|
81 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
82 |
+
</p>
|
83 |
+
</fieldset>
|
84 |
+
</form>
|
85 |
+
|
86 |
+
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/objectcache.phtml
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
|
3 |
+
<form action="admin.php">
|
4 |
+
<p>
|
5 |
+
Object caching via
|
6 |
+
<strong><?php echo w3_get_engine_name($this->_config->get_string('objectcache.engine')); ?></strong>
|
7 |
+
is currently <span class="w3tc-<?php if ($objectcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
8 |
+
</p>
|
9 |
+
<p>
|
10 |
+
To rebuild the object cache use the
|
11 |
+
<input type="submit" name="flush_objectcache" value="empty cache"<?php if (! $objectcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
|
12 |
+
operation.
|
13 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
14 |
+
</p>
|
15 |
+
</form>
|
16 |
+
|
17 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
18 |
+
<fieldset>
|
19 |
+
<legend>General</legend>
|
20 |
+
|
21 |
+
<table class="form-table">
|
22 |
+
<tr>
|
23 |
+
<th>
|
24 |
+
<input type="hidden" name="objectcache.reject.admin" value="0" />
|
25 |
+
<label><input type="checkbox" name="objectcache.reject.admin" value="1"<?php checked($this->_config->get_boolean('objectcache.reject.admin'), true); ?> /> Don't cache WordPress Admin</label>
|
26 |
+
<br /><span class="description">Leave this option checked to maintain default WordPress Admin behavior.</span>
|
27 |
+
</th>
|
28 |
+
</tr>
|
29 |
+
</table>
|
30 |
+
|
31 |
+
<p class="submit">
|
32 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
33 |
+
</p>
|
34 |
+
</fieldset>
|
35 |
+
|
36 |
+
<fieldset>
|
37 |
+
<legend>Advanced</legend>
|
38 |
+
|
39 |
+
<table class="form-table">
|
40 |
+
<?php if ($this->_config->get_string('objectcache.engine') == 'memcached'): ?>
|
41 |
+
<tr>
|
42 |
+
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
43 |
+
<td>
|
44 |
+
<input id="memcached_servers" type="text" name="objectcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('objectcache.memcached.servers'))); ?>" size="100" />
|
45 |
+
<input id="memcached_test" class="button" type="button" value="Test" />
|
46 |
+
<span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
|
47 |
+
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
48 |
+
</td>
|
49 |
+
</tr>
|
50 |
+
<?php endif; ?>
|
51 |
+
<tr>
|
52 |
+
<th style="width: 250px;"><label for="objectcache_lifetime">Default lifetime of cache objects:</label></th>
|
53 |
+
<td>
|
54 |
+
<input id="objectcache_lifetime" type="text" name="objectcache.lifetime" value="<?php echo $this->_config->get_integer('objectcache.lifetime'); ?>" size="8" /> seconds
|
55 |
+
<br /><span class="description">Determines the natural expiration time of unchanged cache items. The higher the value, the larger the cache.</span>
|
56 |
+
</td>
|
57 |
+
</tr>
|
58 |
+
<tr>
|
59 |
+
<th><label for="objectcache_file_gc">Garbage collection interval:</label></th>
|
60 |
+
<td>
|
61 |
+
<input id="objectcache_file_gc" type="text" name="objectcache.file.gc" value="<?php echo $this->_config->get_integer('objectcache.file.gc'); ?>" size="8" /> seconds
|
62 |
+
<br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
|
63 |
+
</td>
|
64 |
+
</tr>
|
65 |
+
<tr>
|
66 |
+
<th valign="top"><label for="objectcache_reject_uri">Never cache the following pages:</label></th>
|
67 |
+
<td>
|
68 |
+
<textarea id="objectcache_reject_uri" name="objectcache.reject.uri" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('objectcache.reject.uri'))); ?></textarea>
|
69 |
+
<br /><span class="description">Always ignore the specified pages / directories.</span>
|
70 |
+
</td>
|
71 |
+
</tr>
|
72 |
+
<tr>
|
73 |
+
<th valign="top"><label for="objectcache_groups_global">Global groups:</label></th>
|
74 |
+
<td>
|
75 |
+
<textarea id="objectcache_groups_global" name="objectcache.groups.global" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('objectcache.groups.global'))); ?></textarea>
|
76 |
+
<br /><span class="description">Groups shared amongst sites in network mode.</span>
|
77 |
+
</td>
|
78 |
+
</tr>
|
79 |
+
<tr>
|
80 |
+
<th valign="top"><label for="objectcache_groups_nonpersistent">Non-persistent groups:</label></th>
|
81 |
+
<td>
|
82 |
+
<textarea id="objectcache_groups_nonpersistent" name="objectcache.groups.nonpersistent" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('objectcache.groups.nonpersistent'))); ?></textarea>
|
83 |
+
<br /><span class="description">Groups that should not be cached.</span>
|
84 |
+
</td>
|
85 |
+
</tr>
|
86 |
+
</table>
|
87 |
+
|
88 |
+
<p class="submit">
|
89 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
90 |
+
</p>
|
91 |
+
</fieldset>
|
92 |
+
</form>
|
93 |
+
|
94 |
+
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/pgcache.phtml
CHANGED
@@ -1,65 +1,63 @@
|
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
-
<
|
4 |
-
|
5 |
-
|
|
|
|
|
|
|
6 |
<p>
|
7 |
-
|
8 |
-
<input type="submit" name="flush_pgcache" value="
|
9 |
-
|
10 |
-
<input type="hidden" name="
|
11 |
</p>
|
12 |
</form>
|
13 |
|
14 |
-
<form action="
|
15 |
<fieldset>
|
16 |
<legend>General</legend>
|
17 |
|
18 |
<table class="form-table">
|
19 |
<tr>
|
20 |
-
<th
|
21 |
<input type="hidden" name="pgcache.reject.logged" value="0" />
|
22 |
<label><input type="checkbox" name="pgcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('pgcache.reject.logged'), true); ?> /> Don't cache pages for logged in users</label><br />
|
23 |
<span class="description">Users that have signed in to WordPress (e.g. administrators) will never view cached pages if enabled.</span>
|
24 |
</th>
|
25 |
</tr>
|
26 |
<tr>
|
27 |
-
<th
|
28 |
<input type="hidden" name="pgcache.cache.home" value="0" />
|
29 |
<label><input type="checkbox" name="pgcache.cache.home" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.home'), true); ?> /> Cache the home page</label><br />
|
30 |
<span class="description">For many blogs this is your most visited page, it is recommended that you cache it.</span>
|
31 |
</th>
|
32 |
</tr>
|
33 |
<tr>
|
34 |
-
<th
|
35 |
<input type="hidden" name="pgcache.cache.feed" value="0" />
|
36 |
-
<label><input type="checkbox" name="pgcache.cache.feed" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.feed'), true); ?> /> Cache
|
37 |
<span class="description">Even if using a feed proxy service (like <a href="http://en.wikipedia.org/wiki/FeedBurner" target="_blank">FeedBurner</a>), enabling this option is still recommended.</span>
|
38 |
</th>
|
39 |
</tr>
|
40 |
<tr>
|
41 |
-
<th
|
42 |
<input type="hidden" name="pgcache.cache.query" value="0"<?php if ($this->_config->get_string('pgcache.engine') == 'file_pgcache'): ?> disabled="disabled"<?php endif; ?> />
|
43 |
<label><input type="checkbox" name="pgcache.cache.query" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.query'), true); ?><?php if ($this->_config->get_string('pgcache.engine') == 'file_pgcache'): ?> disabled="disabled"<?php endif; ?> /> Cache <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables</label><br />
|
44 |
<span class="description">Search result (and similar) pages will be cached if enabled.</span>
|
45 |
</th>
|
46 |
</tr>
|
47 |
<tr>
|
48 |
-
<th
|
49 |
-
|
50 |
-
<
|
51 |
-
|
52 |
-
|
53 |
-
<option value="deflate"<?php selected($this->_config->get_string('pgcache.compression'), 'deflate'); ?><?php if (! $pgcache_deflate): ?> disabled="disabled"<?php endif; ?>>deflate (not recommended)</option>
|
54 |
-
<option value="gzip,deflate"<?php selected($this->_config->get_string('pgcache.compression'), 'gzip,deflate'); ?><?php if (! $pgcache_gzip || ! $pgcache_deflate): ?> disabled="disabled"<?php endif; ?>>gzip and deflate (best)</option>
|
55 |
-
</select><br />
|
56 |
-
<span class="description">Use <acronym>HTTP</acronym> compression to automatically reduce the load time of HTML documents in browsers that support it.</span>
|
57 |
-
</td>
|
58 |
</tr>
|
59 |
</table>
|
60 |
-
|
61 |
<p class="submit">
|
62 |
-
<input type="submit" name="
|
63 |
</p>
|
64 |
</fieldset>
|
65 |
|
@@ -72,21 +70,16 @@
|
|
72 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
73 |
<td>
|
74 |
<input id="memcached_servers" type="text" name="pgcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('pgcache.memcached.servers'))); ?>" size="100" />
|
75 |
-
<input id="
|
76 |
-
<span id="
|
77 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
78 |
</td>
|
79 |
</tr>
|
80 |
<?php endif; ?>
|
81 |
-
<tr>
|
82 |
-
<th style="width: 250px;"><label for="pgcache_lifetime">Maximum lifetime of cache objects:</label></th>
|
83 |
-
<td><input id="pgcache_lifetime" type="text" name="pgcache.lifetime" value="<?php echo $this->_config->get_integer('pgcache.lifetime'); ?>" size="8" /> seconds
|
84 |
-
<br /><span class="description">Determines the natural expiration time of unchanged cache items. The higher the value, the larger the cache.</span>
|
85 |
-
</td>
|
86 |
-
</tr>
|
87 |
<tr>
|
88 |
<th><label for="pgcache_file_gc">Garbage collection interval:</label></th>
|
89 |
-
<td
|
|
|
90 |
<br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
|
91 |
</td>
|
92 |
</tr>
|
@@ -112,7 +105,7 @@
|
|
112 |
</td>
|
113 |
</tr>
|
114 |
<tr>
|
115 |
-
<th valign="top"><label for="pgcache_accept_files">
|
116 |
<td>
|
117 |
<textarea id="pgcache_accept_files" name="pgcache.accept.files" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('pgcache.accept.files'))); ?></textarea><br />
|
118 |
<span class="description">Cache the specified pages / directories even if listed in the "never cache the following pages" field.</span>
|
@@ -125,26 +118,91 @@
|
|
125 |
<span class="description">Specify additional page headers to cache.</span>
|
126 |
</td>
|
127 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
<tr>
|
129 |
-
<th
|
130 |
<td>
|
131 |
-
<
|
132 |
-
<span class="description">
|
133 |
-
|
134 |
</tr>
|
135 |
<tr>
|
136 |
-
<th><label for="
|
137 |
<td>
|
138 |
-
<input id="
|
139 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
</td>
|
141 |
</tr>
|
142 |
</table>
|
143 |
-
|
144 |
<p class="submit">
|
145 |
-
<input type="submit" name="
|
146 |
</p>
|
147 |
</fieldset>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
</form>
|
149 |
|
150 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
|
3 |
+
<form action="admin.php">
|
4 |
+
<p>
|
5 |
+
Page caching via
|
6 |
+
<strong><?php echo w3_get_engine_name($this->_config->get_string('pgcache.engine')); ?></strong>
|
7 |
+
is currently <span class="w3tc-<?php if ($pgcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
|
8 |
+
</p>
|
9 |
<p>
|
10 |
+
To rebuild the page cache use the
|
11 |
+
<input type="submit" name="flush_pgcache" value="empty cache"<?php if (! $pgcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
|
12 |
+
operation.
|
13 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
14 |
</p>
|
15 |
</form>
|
16 |
|
17 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
|
18 |
<fieldset>
|
19 |
<legend>General</legend>
|
20 |
|
21 |
<table class="form-table">
|
22 |
<tr>
|
23 |
+
<th>
|
24 |
<input type="hidden" name="pgcache.reject.logged" value="0" />
|
25 |
<label><input type="checkbox" name="pgcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('pgcache.reject.logged'), true); ?> /> Don't cache pages for logged in users</label><br />
|
26 |
<span class="description">Users that have signed in to WordPress (e.g. administrators) will never view cached pages if enabled.</span>
|
27 |
</th>
|
28 |
</tr>
|
29 |
<tr>
|
30 |
+
<th>
|
31 |
<input type="hidden" name="pgcache.cache.home" value="0" />
|
32 |
<label><input type="checkbox" name="pgcache.cache.home" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.home'), true); ?> /> Cache the home page</label><br />
|
33 |
<span class="description">For many blogs this is your most visited page, it is recommended that you cache it.</span>
|
34 |
</th>
|
35 |
</tr>
|
36 |
<tr>
|
37 |
+
<th>
|
38 |
<input type="hidden" name="pgcache.cache.feed" value="0" />
|
39 |
+
<label><input type="checkbox" name="pgcache.cache.feed" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.feed'), true); ?> /> Cache site, categories, tags, comments and feeds</label><br />
|
40 |
<span class="description">Even if using a feed proxy service (like <a href="http://en.wikipedia.org/wiki/FeedBurner" target="_blank">FeedBurner</a>), enabling this option is still recommended.</span>
|
41 |
</th>
|
42 |
</tr>
|
43 |
<tr>
|
44 |
+
<th>
|
45 |
<input type="hidden" name="pgcache.cache.query" value="0"<?php if ($this->_config->get_string('pgcache.engine') == 'file_pgcache'): ?> disabled="disabled"<?php endif; ?> />
|
46 |
<label><input type="checkbox" name="pgcache.cache.query" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.query'), true); ?><?php if ($this->_config->get_string('pgcache.engine') == 'file_pgcache'): ?> disabled="disabled"<?php endif; ?> /> Cache <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables</label><br />
|
47 |
<span class="description">Search result (and similar) pages will be cached if enabled.</span>
|
48 |
</th>
|
49 |
</tr>
|
50 |
<tr>
|
51 |
+
<th>
|
52 |
+
<input type="hidden" name="pgcache.cache.404" value="0" />
|
53 |
+
<label><input type="checkbox" name="pgcache.cache.404" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.404'), true); ?> /> Cache 404 (not found) pages</label><br />
|
54 |
+
<span class="description">Reduce server load by caching 404 pages. The "Do not process 404 errors for static objects with WordPress" Browser Cache option is recommended.</span>
|
55 |
+
</th>
|
|
|
|
|
|
|
|
|
|
|
56 |
</tr>
|
57 |
</table>
|
58 |
+
|
59 |
<p class="submit">
|
60 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
61 |
</p>
|
62 |
</fieldset>
|
63 |
|
70 |
<th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
|
71 |
<td>
|
72 |
<input id="memcached_servers" type="text" name="pgcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('pgcache.memcached.servers'))); ?>" size="100" />
|
73 |
+
<input id="memcached_test" class="button" type="button" value="Test" />
|
74 |
+
<span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
|
75 |
<br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
|
76 |
</td>
|
77 |
</tr>
|
78 |
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
<tr>
|
80 |
<th><label for="pgcache_file_gc">Garbage collection interval:</label></th>
|
81 |
+
<td>
|
82 |
+
<input id="pgcache_file_gc" type="text" name="pgcache.file.gc" value="<?php echo $this->_config->get_integer('pgcache.file.gc'); ?>" size="8"<?php if ($this->_config->get_string('pgcache.engine') != 'file' && $this->_config->get_string('pgcache.engine') != 'file_pgcache'): ?> disabled="disabled"<?php endif; ?> /> seconds
|
83 |
<br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
|
84 |
</td>
|
85 |
</tr>
|
105 |
</td>
|
106 |
</tr>
|
107 |
<tr>
|
108 |
+
<th valign="top"><label for="pgcache_accept_files">Cache exception list:</label></th>
|
109 |
<td>
|
110 |
<textarea id="pgcache_accept_files" name="pgcache.accept.files" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('pgcache.accept.files'))); ?></textarea><br />
|
111 |
<span class="description">Cache the specified pages / directories even if listed in the "never cache the following pages" field.</span>
|
118 |
<span class="description">Specify additional page headers to cache.</span>
|
119 |
</td>
|
120 |
</tr>
|
121 |
+
</table>
|
122 |
+
|
123 |
+
<p class="submit">
|
124 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
125 |
+
</p>
|
126 |
+
</fieldset>
|
127 |
+
|
128 |
+
<fieldset>
|
129 |
+
<legend>Cache Preload</legend>
|
130 |
+
|
131 |
+
<table class="form-table">
|
132 |
+
<tr>
|
133 |
+
<th colspan="2">
|
134 |
+
<input type="hidden" name="pgcache.prime.enabled" value="0" />
|
135 |
+
<label><input type="checkbox" name="pgcache.prime.enabled" value="1"<?php checked($this->_config->get_boolean('pgcache.prime.enabled'), true); ?> /> Automatically prime the page cache</label><br />
|
136 |
+
</th>
|
137 |
+
</tr>
|
138 |
<tr>
|
139 |
+
<th><label for="pgcache_prime_interval">Update interval:</label></th>
|
140 |
<td>
|
141 |
+
<input id="pgcache_prime_interval" type="text" name="pgcache.prime.interval" value="<?php echo $this->_config->get_integer('pgcache.prime.interval'); ?>" size="8" /> seconds<br />
|
142 |
+
<span class="description">The number of seconds to wait before creating another set of cached pages.</span>
|
143 |
+
</td>
|
144 |
</tr>
|
145 |
<tr>
|
146 |
+
<th><label for="pgcache_prime_limit">Pages per interval:</label></th>
|
147 |
<td>
|
148 |
+
<input id="pgcache_prime_limit" type="text" name="pgcache.prime.limit" value="<?php echo $this->_config->get_integer('pgcache.prime.limit'); ?>" size="8" /><br />
|
149 |
+
<span class="description">Limit the number of pages to create per batch. Fewer pages may be better for under-powered servers.</span>
|
150 |
+
</td>
|
151 |
+
</tr>
|
152 |
+
<tr>
|
153 |
+
<th><label for="pgcache_prime_sitemap">Sitemap <acronym title="Uniform Resource Indicator">URL</acronym>:</label></th>
|
154 |
+
<td>
|
155 |
+
<input id="pgcache_prime_sitemap" type="text" name="pgcache.prime.sitemap" value="<?php echo $this->_config->get_string('pgcache.prime.sitemap'); ?>" size="100" /><br />
|
156 |
+
<span class="description">A <a href="http://www.xml-sitemaps.com/validate-xml-sitemap.html" target="_blank">compliant</a> sitemap can be used to specify the pages to maintain in the primed cache. Pages will be cached according to the priorities specified in the <acronym title="Extensible Markup Language">XML</acronym> file. <a href="http://wordpress.org/extend/plugins/google-sitemap-generator/" target="_blank">Google <acronym title="Extensible Markup Language">XML</acronym> Sitemaps</a> is recommended for use with this feature.</span>
|
157 |
+
</td>
|
158 |
+
</tr>
|
159 |
+
|
160 |
+
</table>
|
161 |
+
|
162 |
+
<p class="submit">
|
163 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
164 |
+
</p>
|
165 |
+
</fieldset>
|
166 |
+
|
167 |
+
<fieldset>
|
168 |
+
<legend>Varnish</legend>
|
169 |
+
|
170 |
+
<table class="form-table">
|
171 |
+
<tr>
|
172 |
+
<th colspan="2">
|
173 |
+
<input type="hidden" name="pgcache.varnish.enabled" value="0" />
|
174 |
+
<label><input type="checkbox" name="pgcache.varnish.enabled" value="1"<?php checked($this->_config->get_boolean('pgcache.varnish.enabled'), true); ?> /> Enable varnish cache purging</label><br />
|
175 |
+
</th>
|
176 |
+
</tr>
|
177 |
+
<tr>
|
178 |
+
<th valign="top"><label for="pgcache_varnish_servers">Varnish servers:</label></th>
|
179 |
+
<td>
|
180 |
+
<textarea id="pgcache_varnish_servers" name="pgcache.varnish.servers" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('pgcache.varnish.servers'))); ?></textarea><br />
|
181 |
+
<span class="description">Specify the IP addresses of your varnish instances above. Your <acronym title="Varnish Configuration Language">VCL</acronym>'s <acronym title="Access Control List">ACL</acronym> must allow this request.</span>
|
182 |
</td>
|
183 |
</tr>
|
184 |
</table>
|
185 |
+
|
186 |
<p class="submit">
|
187 |
+
<input type="submit" name="options_save" class="button-primary" value="Save changes" />
|
188 |
</p>
|
189 |
</fieldset>
|
190 |
+
|
191 |
+
<fieldset>
|
192 |
+
<legend>Note(s):</legend>
|
193 |
+
|
194 |
+
<table class="form-table">
|
195 |
+
<tr>
|
196 |
+
<th valign="top" colspan="2">
|
197 |
+
<ul>
|
198 |
+
<li>Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression in the "<acronym title="Hypertext Markup Language">HTML</acronym>" section on <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> Settings tab.</li>
|
199 |
+
<li>The <acronym title="Time to Live">TTL</acronym> of page cache files is set via the "Expires header lifetime" field in the "<acronym title="Hypertext Markup Language">HTML</acronym>" section on <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> Settings tab.</li>
|
200 |
+
</ul>
|
201 |
+
</th>
|
202 |
+
</tr>
|
203 |
+
</table>
|
204 |
+
</fieldset>
|
205 |
+
|
206 |
</form>
|
207 |
|
208 |
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/support.phtml
CHANGED
@@ -1,99 +1,30 @@
|
|
1 |
-
<?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
|
|
|
|
|
|
|
|
2 |
|
3 |
-
<
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<fieldset>
|
11 |
-
<legend>Required information</legend>
|
12 |
-
|
13 |
-
<table class="form-table">
|
14 |
-
<tr>
|
15 |
-
<th valign="top"><label for="support_request_type">Request type:</label></th>
|
16 |
-
<td><select id="support_request_type" name="request_type">
|
17 |
-
<option value="">-- Choose Type --</option>
|
18 |
-
<?php foreach ($request_types as $_request_type): ?>
|
19 |
-
<option value="<?php echo $_request_type; ?>"<?php selected($_request_type, $request_type); ?>><?php echo $_request_type; ?></option>
|
20 |
-
<?php endforeach; ?>
|
21 |
-
</select></td>
|
22 |
-
</tr>
|
23 |
-
<tr>
|
24 |
-
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
25 |
-
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
26 |
-
</tr>
|
27 |
-
<tr>
|
28 |
-
<th><label for="support_name">Name:</label></th>
|
29 |
-
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
30 |
-
</tr>
|
31 |
-
<tr>
|
32 |
-
<th><label for="support_email">E-Mail:</label></th>
|
33 |
-
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
34 |
-
</tr>
|
35 |
-
<tr>
|
36 |
-
<th valign="top"><label for="support_description">Issue description:</label></th>
|
37 |
-
<td><textarea id="support_description" name="description" cols="80" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
38 |
-
</tr>
|
39 |
-
<tr>
|
40 |
-
<th><label for="support_template">Attach template:</label></th>
|
41 |
-
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
42 |
-
<?php foreach ($template_files as $template_file): ?>
|
43 |
-
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
44 |
-
<?php endforeach; ?>
|
45 |
-
</select></td>
|
46 |
-
</tr>
|
47 |
-
<tr>
|
48 |
-
<th><label for="support_file">Attach file:</label></th>
|
49 |
-
<td>
|
50 |
-
<input id="support_file" type="file" name="files[]" value="" /><br />
|
51 |
-
<a href="#" id="support_more_files">Attach more files</a>
|
52 |
-
</td>
|
53 |
-
</tr>
|
54 |
-
</table>
|
55 |
-
</fieldset>
|
56 |
-
|
57 |
-
<fieldset>
|
58 |
-
<legend>Additional information</legend>
|
59 |
-
|
60 |
-
<table class="form-table">
|
61 |
-
<tr>
|
62 |
-
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
63 |
-
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="40" /></td>
|
64 |
-
</tr>
|
65 |
-
<tr>
|
66 |
-
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
67 |
-
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="40" /></td>
|
68 |
-
</tr>
|
69 |
-
<tr>
|
70 |
-
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
71 |
-
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="40" /></td>
|
72 |
-
</tr>
|
73 |
-
<tr>
|
74 |
-
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
75 |
-
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="40" /></td>
|
76 |
-
</tr>
|
77 |
-
<tr>
|
78 |
-
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
79 |
-
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="40" /></td>
|
80 |
-
</tr>
|
81 |
-
</table>
|
82 |
-
</fieldset>
|
83 |
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
<input type="submit" name="Submit" class="button-primary" value="Submit request" />
|
96 |
-
</p>
|
97 |
-
</form>
|
98 |
|
99 |
-
<?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
1 |
+
<?php if (! $ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
<p>
|
3 |
+
Request professional services, suggest a feature or submit a bug using the form below:
|
4 |
+
</p>
|
5 |
+
<?php endif; ?>
|
6 |
|
7 |
+
<div id="support_container">
|
8 |
+
<form action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data" id="support_form">
|
9 |
+
<?php include W3TC_DIR . '/inc/options/support/' . $request_type . '.phtml'; ?>
|
10 |
+
|
11 |
+
<fieldset>
|
12 |
+
<legend>Notes</legend>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
+
<ul>
|
15 |
+
<li>All submitted data will not be saved and is used solely for the purposes your support request. You will not be added to a mailing list, solicited without your permission, nor will your site be administered after this support case is closed.</li>
|
16 |
+
<li>Instead of providing your primary administrative or <acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> accounts, create a new administrator account that can be disabled when the support case is closed.</li>
|
17 |
+
<li>Please add the domain w3-edge.com to your <a href="http://en.wikipedia.org/wiki/Whitelist" target="_blank">email whitelist</a> as soon as possible.</li>
|
18 |
+
</ul>
|
19 |
+
</fieldset>
|
20 |
|
21 |
+
<p>
|
22 |
+
<input type="hidden" name="request_type" value="<?php echo $request_type; ?>" />
|
23 |
+
<input type="hidden" name="payment" value="<?php echo $payment; ?>" />
|
24 |
+
<input type="submit" name="support_request" class="button-primary" value="Submit request" />
|
25 |
+
<input id="support_cancel" type="button" value="Cancel" class="button-primary" />
|
26 |
+
</p>
|
27 |
+
</form>
|
28 |
+
</div>
|
|
|
|
|
|
|
29 |
|
30 |
+
<?php if (! $ajax) include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/support/bug_report.phtml
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th><label for="support_template">Attach template:</label></th>
|
31 |
+
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
32 |
+
<?php foreach ($template_files as $template_file): ?>
|
33 |
+
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
34 |
+
<?php endforeach; ?>
|
35 |
+
</select></td>
|
36 |
+
</tr>
|
37 |
+
<tr>
|
38 |
+
<th><label for="support_file">Attach file:</label></th>
|
39 |
+
<td>
|
40 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
41 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
42 |
+
</td>
|
43 |
+
</tr>
|
44 |
+
</table>
|
45 |
+
</fieldset>
|
46 |
+
|
47 |
+
<fieldset>
|
48 |
+
<legend>Additional information</legend>
|
49 |
+
|
50 |
+
<table class="form-table">
|
51 |
+
<tr>
|
52 |
+
<th><label for="support_phone">Phone:</label></th>
|
53 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
54 |
+
</tr>
|
55 |
+
<tr>
|
56 |
+
<th><label for="support_forum_url">Forum Topic URL:</label></th>
|
57 |
+
<td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
|
58 |
+
</tr>
|
59 |
+
<tr>
|
60 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
61 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
65 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
66 |
+
</tr>
|
67 |
+
<tr>
|
68 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
69 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
70 |
+
</tr>
|
71 |
+
<tr>
|
72 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
73 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
77 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
78 |
+
</tr>
|
79 |
+
</table>
|
80 |
+
</fieldset>
|
inc/options/support/email_support.phtml
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th><label for="support_template">Attach template:</label></th>
|
31 |
+
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
32 |
+
<?php foreach ($template_files as $template_file): ?>
|
33 |
+
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
34 |
+
<?php endforeach; ?>
|
35 |
+
</select></td>
|
36 |
+
</tr>
|
37 |
+
<tr>
|
38 |
+
<th><label for="support_file">Attach file:</label></th>
|
39 |
+
<td>
|
40 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
41 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
42 |
+
</td>
|
43 |
+
</tr>
|
44 |
+
</table>
|
45 |
+
</fieldset>
|
46 |
+
|
47 |
+
<fieldset>
|
48 |
+
<legend>Additional information</legend>
|
49 |
+
|
50 |
+
<table class="form-table">
|
51 |
+
<tr>
|
52 |
+
<th><label for="support_phone">Phone:</label></th>
|
53 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
54 |
+
</tr>
|
55 |
+
<tr>
|
56 |
+
<th><label for="support_forum_url">Forum Topic URL:</label></th>
|
57 |
+
<td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
|
58 |
+
</tr>
|
59 |
+
<tr>
|
60 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
61 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
65 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
66 |
+
</tr>
|
67 |
+
<tr>
|
68 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
69 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
70 |
+
</tr>
|
71 |
+
<tr>
|
72 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
73 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
77 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
78 |
+
</tr>
|
79 |
+
</table>
|
80 |
+
</fieldset>
|
inc/options/support/linux_config.phtml
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th><label for="support_file">Attach file:</label></th>
|
31 |
+
<td>
|
32 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
33 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
34 |
+
</td>
|
35 |
+
</tr>
|
36 |
+
<tr>
|
37 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
38 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
39 |
+
</tr>
|
40 |
+
<tr>
|
41 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
42 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
46 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
47 |
+
</tr>
|
48 |
+
<tr>
|
49 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
50 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
51 |
+
</tr>
|
52 |
+
<tr>
|
53 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
54 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
55 |
+
</tr>
|
56 |
+
</table>
|
57 |
+
</fieldset>
|
58 |
+
|
59 |
+
<fieldset>
|
60 |
+
<legend>Additional information</legend>
|
61 |
+
|
62 |
+
<table class="form-table">
|
63 |
+
<tr>
|
64 |
+
<th><label for="support_phone">Phone:</label></th>
|
65 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
66 |
+
</tr>
|
67 |
+
</table>
|
68 |
+
</fieldset>
|
inc/options/support/new_feature.phtml
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
</table>
|
30 |
+
</fieldset>
|
31 |
+
|
32 |
+
<fieldset>
|
33 |
+
<legend>Additional information</legend>
|
34 |
+
|
35 |
+
<table class="form-table">
|
36 |
+
<tr>
|
37 |
+
<th><label for="support_phone">Phone:</label></th>
|
38 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
39 |
+
</tr>
|
40 |
+
<tr>
|
41 |
+
<th><label for="support_forum_url">Forum Topic URL:</label></th>
|
42 |
+
<td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
|
43 |
+
</tr>
|
44 |
+
</table>
|
45 |
+
</fieldset>
|
inc/options/support/phone_support.phtml
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_phone">Phone:</label></th>
|
23 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th><label for="support_subject">Subject:</label></th>
|
27 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
31 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
32 |
+
</tr>
|
33 |
+
<tr>
|
34 |
+
<th><label for="support_template">Attach template:</label></th>
|
35 |
+
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
36 |
+
<?php foreach ($template_files as $template_file): ?>
|
37 |
+
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
38 |
+
<?php endforeach; ?>
|
39 |
+
</select></td>
|
40 |
+
</tr>
|
41 |
+
<tr>
|
42 |
+
<th><label for="support_file">Attach file:</label></th>
|
43 |
+
<td>
|
44 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
45 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
46 |
+
</td>
|
47 |
+
</tr>
|
48 |
+
</table>
|
49 |
+
</fieldset>
|
50 |
+
|
51 |
+
<fieldset>
|
52 |
+
<legend>Additional information</legend>
|
53 |
+
|
54 |
+
<table class="form-table">
|
55 |
+
<tr>
|
56 |
+
<th><label for="support_forum_url">Forum Topic URL:</label></th>
|
57 |
+
<td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
|
58 |
+
</tr>
|
59 |
+
<tr>
|
60 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
61 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
65 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
66 |
+
</tr>
|
67 |
+
<tr>
|
68 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
69 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
70 |
+
</tr>
|
71 |
+
<tr>
|
72 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
73 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
77 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
78 |
+
</tr>
|
79 |
+
</table>
|
80 |
+
</fieldset>
|
inc/options/support/plugin_config.phtml
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th><label for="support_template">Attach template:</label></th>
|
31 |
+
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
32 |
+
<?php foreach ($template_files as $template_file): ?>
|
33 |
+
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
34 |
+
<?php endforeach; ?>
|
35 |
+
</select></td>
|
36 |
+
</tr>
|
37 |
+
<tr>
|
38 |
+
<th><label for="support_file">Attach file:</label></th>
|
39 |
+
<td>
|
40 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
41 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
42 |
+
</td>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
46 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
47 |
+
</tr>
|
48 |
+
<tr>
|
49 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
50 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
51 |
+
</tr>
|
52 |
+
</table>
|
53 |
+
</fieldset>
|
54 |
+
|
55 |
+
<fieldset>
|
56 |
+
<legend>Additional information</legend>
|
57 |
+
|
58 |
+
<table class="form-table">
|
59 |
+
<tr>
|
60 |
+
<th><label for="support_phone">Phone:</label></th>
|
61 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
65 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
66 |
+
</tr>
|
67 |
+
<tr>
|
68 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
69 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
70 |
+
</tr>
|
71 |
+
<tr>
|
72 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
73 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
74 |
+
</tr>
|
75 |
+
</table>
|
76 |
+
</fieldset>
|
inc/options/support/theme_config.phtml
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<fieldset class="required">
|
2 |
+
<legend>Required information</legend>
|
3 |
+
|
4 |
+
<table class="form-table">
|
5 |
+
<tr>
|
6 |
+
<th valign="top">Request type:</th>
|
7 |
+
<td><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></td>
|
8 |
+
</tr>
|
9 |
+
<tr>
|
10 |
+
<th><label for="support_url">Blog <acronym title="Uniform Resource Locator">URL</acronym>:</label></th>
|
11 |
+
<td><input id="support_url" type="text" name="url" value="<?php echo htmlspecialchars($url); ?>" size="80" /></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<th><label for="support_name">Name:</label></th>
|
15 |
+
<td><input id="support_name" type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" size="80" /></td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label for="support_email">E-Mail:</label></th>
|
19 |
+
<td><input id="support_email" type="text" name="email" value="<?php echo htmlspecialchars($email); ?>" size="80" /></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<th><label for="support_subject">Subject:</label></th>
|
23 |
+
<td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
|
24 |
+
</tr>
|
25 |
+
<tr>
|
26 |
+
<th valign="top"><label for="support_description">Issue description:</label></th>
|
27 |
+
<td><textarea id="support_description" name="description" cols="70" rows="8"><?php echo htmlspecialchars($description); ?></textarea></td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th><label for="support_template">Attach template:</label></th>
|
31 |
+
<td><select id="support_template" name="templates[]" multiple="multiple" size="10" style="height: auto;">
|
32 |
+
<?php foreach ($template_files as $template_file): ?>
|
33 |
+
<option value="<?php echo htmlspecialchars($template_file); ?>"<?php if (in_array($template_file, $templates)): ?> selected="selected"<?php endif; ?>><?php echo htmlspecialchars($template_file); ?></option>
|
34 |
+
<?php endforeach; ?>
|
35 |
+
</select></td>
|
36 |
+
</tr>
|
37 |
+
<tr>
|
38 |
+
<th><label for="support_file">Attach file:</label></th>
|
39 |
+
<td>
|
40 |
+
<input id="support_file" type="file" name="files[]" value="" /><br />
|
41 |
+
<a href="#" id="support_more_files">Attach more files</a>
|
42 |
+
</td>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<th><label for="support_wp_login"><acronym title="WordPress">WP</acronym> Admin login:</label></th>
|
46 |
+
<td><input id="support_wp_login" type="text" name="wp_login" value="<?php echo htmlspecialchars($wp_login); ?>" size="80" /></td>
|
47 |
+
</tr>
|
48 |
+
<tr>
|
49 |
+
<th><label for="support_wp_password"><acronym title="WordPress">WP</acronym> Admin password:</label></th>
|
50 |
+
<td><input id="support_wp_password" type="text" name="wp_password" value="<?php echo htmlspecialchars($wp_password); ?>" size="80" /></td>
|
51 |
+
</tr>
|
52 |
+
<tr>
|
53 |
+
<th><label for="support_ftp_host"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> host:</label></th>
|
54 |
+
<td><input id="support_ftp_host" type="text" name="ftp_host" value="<?php echo htmlspecialchars($ftp_host); ?>" size="80" /></td>
|
55 |
+
</tr>
|
56 |
+
<tr>
|
57 |
+
<th><label for="support_ftp_login"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> login:</label></th>
|
58 |
+
<td><input id="support_ftp_login" type="text" name="ftp_login" value="<?php echo htmlspecialchars($ftp_login); ?>" size="80" /></td>
|
59 |
+
</tr>
|
60 |
+
<tr>
|
61 |
+
<th><label for="support_ftp_password"><acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> password:</label></th>
|
62 |
+
<td><input id="support_ftp_password" type="text" name="ftp_password" value="<?php echo htmlspecialchars($ftp_password); ?>" size="80" /></td>
|
63 |
+
</tr>
|
64 |
+
</table>
|
65 |
+
</fieldset>
|
66 |
+
|
67 |
+
<fieldset>
|
68 |
+
<legend>Additional information</legend>
|
69 |
+
|
70 |
+
<table class="form-table">
|
71 |
+
<tr>
|
72 |
+
<th><label for="support_phone">Phone:</label></th>
|
73 |
+
<td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
|
74 |
+
</tr>
|
75 |
+
</table>
|
76 |
+
</fieldset>
|
inc/options/support_payment.phtml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if (!$ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
<p>
|
3 |
+
Request professional services, suggest a feature or submit a bug using the form below:
|
4 |
+
</p>
|
5 |
+
<?php endif; ?>
|
6 |
+
|
7 |
+
<div id="support_container">
|
8 |
+
<form action="<?php echo W3TC_PAYPAL_URL; ?>" method="get">
|
9 |
+
<fieldset>
|
10 |
+
<legend>Request payment</legend>
|
11 |
+
|
12 |
+
<p><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></p>
|
13 |
+
|
14 |
+
<p><strong>Price: <?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?> USD</strong></p>
|
15 |
+
|
16 |
+
<p>
|
17 |
+
<input type="hidden" name="cmd" value="_xclick" />
|
18 |
+
<input type="hidden" name="business" value="<?php echo W3TC_PAYPAL_BUSINESS; ?>" />
|
19 |
+
<input type="hidden" name="item_name" value="<?php echo htmlspecialchars($this->_request_types[$request_type]); ?>" />
|
20 |
+
<input type="hidden" name="amount" value="<?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?>" />
|
21 |
+
<input type="hidden" name="currency_code" value="USD" />
|
22 |
+
<input type="hidden" name="no_shipping" value="1" />
|
23 |
+
<input type="hidden" name="rm" value="2" />
|
24 |
+
<input type="hidden" name="return" value="<?php echo htmlspecialchars($return_url); ?>" />
|
25 |
+
<input type="hidden" name="cancel_return" value="<?php echo htmlspecialchars($cancel_url); ?>" />
|
26 |
+
<input type="submit" class="button-primary" value="Buy now" />
|
27 |
+
<input id="support_cancel" type="button" value="Cancel" class="button-primary" />
|
28 |
+
</p>
|
29 |
+
</fieldset>
|
30 |
+
</form>
|
31 |
+
</div>
|
32 |
+
|
33 |
+
<?php if (! $ajax) include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/options/support_select.phtml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if (! $ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
|
2 |
+
<p>
|
3 |
+
Request professional services, suggest a feature or submit a bug using the form below:
|
4 |
+
</p>
|
5 |
+
<?php endif; ?>
|
6 |
+
|
7 |
+
<div id="support_container">
|
8 |
+
<form id="support_select_form" action="admin.php" method="get">
|
9 |
+
<fieldset>
|
10 |
+
<legend>Choose request type</legend>
|
11 |
+
|
12 |
+
<table class="form-table">
|
13 |
+
<tr>
|
14 |
+
<th valign="top"><label for="support_request_type">Request type:</label></th>
|
15 |
+
<td>
|
16 |
+
<input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
|
17 |
+
<select id="support_request_type" name="request_type">
|
18 |
+
<option value="">-- Choose Type --</option>
|
19 |
+
<?php foreach ($this->_request_groups as $_request_group => $_request_types): ?>
|
20 |
+
<optgroup label="<?php echo htmlspecialchars($_request_group); ?>:">
|
21 |
+
<?php foreach ($_request_types as $_request_type): ?>
|
22 |
+
<option value="<?php echo $_request_type; ?>"<?php if ($request_type == $_request_type): ?><?php endif; ?>><?php echo htmlspecialchars($this->_request_types[$_request_type]); ?></option>
|
23 |
+
<?php endforeach; ?>
|
24 |
+
</optgroup>
|
25 |
+
<?php endforeach; ?>
|
26 |
+
</select>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
</table>
|
30 |
+
</fieldset>
|
31 |
+
</form>
|
32 |
+
</div>
|
33 |
+
|
34 |
+
<?php if (! $ajax) include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
|
inc/popup/cdn_export_file.phtml
CHANGED
@@ -9,7 +9,7 @@ var files = [
|
|
9 |
];
|
10 |
|
11 |
jQuery(function() {
|
12 |
-
|
13 |
});
|
14 |
</script>
|
15 |
|
9 |
];
|
10 |
|
11 |
jQuery(function() {
|
12 |
+
W3tc_Popup_Cdn_Export_File.init(files);
|
13 |
});
|
14 |
</script>
|
15 |
|
inc/popup/cdn_export_library.phtml
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<script type="text/javascript">
|
4 |
/*<![CDATA[*/
|
5 |
jQuery(function() {
|
6 |
-
|
7 |
});
|
8 |
/*]]>*/
|
9 |
</script>
|
3 |
<script type="text/javascript">
|
4 |
/*<![CDATA[*/
|
5 |
jQuery(function() {
|
6 |
+
W3tc_Popup_Cdn_Export_Library.init();
|
7 |
});
|
8 |
/*]]>*/
|
9 |
</script>
|
inc/popup/cdn_import_library.phtml
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
var cdn_host = '<?php echo $cdn_host; ?>';
|
6 |
|
7 |
jQuery(function() {
|
8 |
-
|
9 |
});
|
10 |
/*]]>*/
|
11 |
</script>
|
@@ -34,12 +34,12 @@ jQuery(function() {
|
|
34 |
</tr>
|
35 |
<tr>
|
36 |
<td colspan="2">
|
37 |
-
<label><input id="cdn_import_library_redirect_permanent" type="checkbox" checked="checked" />
|
38 |
</td>
|
39 |
</tr>
|
40 |
<tr>
|
41 |
<td colspan="2">
|
42 |
-
<label><input id="cdn_import_library_redirect_cdn" type="checkbox" />
|
43 |
</td>
|
44 |
</tr>
|
45 |
</table>
|
5 |
var cdn_host = '<?php echo $cdn_host; ?>';
|
6 |
|
7 |
jQuery(function() {
|
8 |
+
W3tc_Popup_Cdn_Import_Library.init(cdn_host);
|
9 |
});
|
10 |
/*]]>*/
|
11 |
</script>
|
34 |
</tr>
|
35 |
<tr>
|
36 |
<td colspan="2">
|
37 |
+
<label><input id="cdn_import_library_redirect_permanent" type="checkbox" checked="checked" /> Create a list of permanent (301) redirects for use in your site's .htaccess file</label>
|
38 |
</td>
|
39 |
</tr>
|
40 |
<tr>
|
41 |
<td colspan="2">
|
42 |
+
<label><input id="cdn_import_library_redirect_cdn" type="checkbox" /> Create a list of redirects to <acronym title="Content Delivery Network">CDN</acronym> (hostname specified in hostname field #1.)</label>
|
43 |
</td>
|
44 |
</tr>
|
45 |
</table>
|
inc/popup/cdn_queue.phtml
CHANGED
@@ -23,13 +23,13 @@
|
|
23 |
<td><?php echo htmlspecialchars($result->last_error); ?></td>
|
24 |
<td align="center"><?php echo htmlspecialchars($result->date); ?></td>
|
25 |
<td align="center">
|
26 |
-
<a href="
|
27 |
</td>
|
28 |
</tr>
|
29 |
<?php endforeach; ?>
|
30 |
</table>
|
31 |
<p>
|
32 |
-
<a href="
|
33 |
</p>
|
34 |
<?php else: ?>
|
35 |
<p class="empty">Upload queue is empty</p>
|
@@ -53,13 +53,13 @@
|
|
53 |
<td><?php echo htmlspecialchars($result->last_error); ?></td>
|
54 |
<td align="center"><?php echo htmlspecialchars($result->date); ?></td>
|
55 |
<td align="center">
|
56 |
-
<a href="
|
57 |
</td>
|
58 |
</tr>
|
59 |
<?php endforeach; ?>
|
60 |
</table>
|
61 |
<p>
|
62 |
-
<a href="
|
63 |
</p>
|
64 |
<?php else: ?>
|
65 |
<p class="empty">Delete queue is empty</p>
|
23 |
<td><?php echo htmlspecialchars($result->last_error); ?></td>
|
24 |
<td align="center"><?php echo htmlspecialchars($result->date); ?></td>
|
25 |
<td align="center">
|
26 |
+
<a href="admin.php?page=w3tc_cdn&w3tc_action=cdn_queue&cdn_queue_tab=upload&cdn_queue_action=delete&cdn_queue_id=<?php echo $result->id; ?>" class="cdn_queue_delete">Delete</a>
|
27 |
</td>
|
28 |
</tr>
|
29 |
<?php endforeach; ?>
|
30 |
</table>
|
31 |
<p>
|
32 |
+
<a href="admin.php?page=w3tc_cdn&w3tc_action=cdn_queue&cdn_queue_tab=upload&cdn_queue_action=empty&cdn_queue_type=<?php echo W3TC_CDN_COMMAND_UPLOAD; ?>" class="cdn_queue_empty">Empty upload queue</a>
|
33 |
</p>
|
34 |
<?php else: ?>
|
35 |
<p class="empty">Upload queue is empty</p>
|
53 |
<td><?php echo htmlspecialchars($result->last_error); ?></td>
|
54 |
<td align="center"><?php echo htmlspecialchars($result->date); ?></td>
|
55 |
<td align="center">
|
56 |
+
<a href="admin.php?page=w3tc_cdn&w3tc_action=cdn_queue&cdn_queue_tab=delete&cdn_queue_action=delete&cdn_queue_id=<?php echo $result->id; ?>" class="cdn_queue_delete">Delete</a>
|
57 |
</td>
|
58 |
</tr>
|
59 |
<?php endforeach; ?>
|
60 |
</table>
|
61 |
<p>
|
62 |
+
<a href="admin.php?page=w3tc_cdn&w3tc_action=cdn_queue&cdn_queue_tab=delete&cdn_queue_action=empty&cdn_queue_type=<?php echo W3TC_CDN_COMMAND_DELETE; ?>" class="cdn_queue_empty">Empty upload queue</a>
|
63 |
</p>
|
64 |
<?php else: ?>
|
65 |
<p class="empty">Delete queue is empty</p>
|
inc/popup/cdn_rename_domain.phtml
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<script type="text/javascript">
|
4 |
/*<![CDATA[*/
|
5 |
jQuery(function() {
|
6 |
-
|
7 |
});
|
8 |
/*]]>*/
|
9 |
</script>
|
3 |
<script type="text/javascript">
|
4 |
/*<![CDATA[*/
|
5 |
jQuery(function() {
|
6 |
+
W3tc_Popup_Cdn_Rename_Domain.init();
|
7 |
});
|
8 |
/*]]>*/
|
9 |
</script>
|
inc/popup/common/header.phtml
CHANGED
@@ -14,9 +14,9 @@
|
|
14 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
15 |
<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
|
16 |
<head>
|
17 |
-
<link rel="stylesheet" type="text/css" href="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/css/popup.css"></link>
|
18 |
-
<script type="text/javascript" src="<?php echo w3_get_site_url(); ?>/<?php echo WPINC; ?>/js/jquery/jquery.js"></script>
|
19 |
-
<script type="text/javascript" src="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/js/popup.js"></script>
|
20 |
<title><?php echo htmlspecialchars($title); ?> - W3 Total Cache</title>
|
21 |
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
|
22 |
</head>
|
14 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
15 |
<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
|
16 |
<head>
|
17 |
+
<link rel="stylesheet" type="text/css" href="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/css/popup.css?ver=<?php echo W3TC_VERSION; ?>"></link>
|
18 |
+
<script type="text/javascript" src="<?php echo w3_get_site_url(); ?>/<?php echo WPINC; ?>/js/jquery/jquery.js?ver=<?php echo W3TC_VERSION; ?>"></script>
|
19 |
+
<script type="text/javascript" src="<?php echo WP_PLUGIN_URL; ?>/w3-total-cache/inc/js/popup.js?ver=<?php echo W3TC_VERSION; ?>"></script>
|
20 |
<title><?php echo htmlspecialchars($title); ?> - W3 Total Cache</title>
|
21 |
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
|
22 |
</head>
|
ini/_htaccess
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
# Append the contents of this file to this .htaccess to the one in your document root or configuration file to enable http
|
2 |
-
# compression and client-side (browser) caching of files that W3 Total Cache does not handle. This file can also be used
|
3 |
-
# for the self-hosted subdomain used in your CDN settings. Remove the optional directives section if necessary.
|
4 |
-
|
5 |
-
# BEGIN Define Mime Types (in case /etc/mime.types is poorly configured or incorrect)
|
6 |
-
<IfModule mod_mime.c>
|
7 |
-
AddType application/x-javascript .js
|
8 |
-
AddType application/x-shockwave-flash .swf
|
9 |
-
AddType image/bmp .bmp
|
10 |
-
AddType image/gif .gif
|
11 |
-
AddType image/pjpeg .pjpeg
|
12 |
-
AddType image/jpeg .jpeg
|
13 |
-
AddType image/jpg .jpg
|
14 |
-
AddType image/png .png
|
15 |
-
AddType image/svg+xml .svg
|
16 |
-
AddType image/tif .tif
|
17 |
-
AddType image/tiff .tiff
|
18 |
-
AddType image/x-icon .ico
|
19 |
-
AddType text/css .css
|
20 |
-
AddType text/htm .htm
|
21 |
-
AddType text/html .html
|
22 |
-
AddType text/plain .txt
|
23 |
-
AddType text/xml .xml
|
24 |
-
AddType text/xsd .xsd
|
25 |
-
AddType text/xsl .xsl
|
26 |
-
</IfModule>
|
27 |
-
# END Define Mime Types
|
28 |
-
|
29 |
-
# BEGIN HTTP Compression
|
30 |
-
<IfModule mod_deflate.c>
|
31 |
-
# Netscape 4.x has some problems...
|
32 |
-
BrowserMatch ^Mozilla/4 gzip-only-text/html
|
33 |
-
# Netscape 4.06-4.08 have some more problems
|
34 |
-
BrowserMatch ^Mozilla/4\.0[678] no-gzip
|
35 |
-
# MSIE masquerades as Netscape, but it is fine
|
36 |
-
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
|
37 |
-
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
|
38 |
-
# the above regex won't work. You can use the following
|
39 |
-
# workaround to get the desired effect:
|
40 |
-
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
|
41 |
-
# Don't compress media or scripts
|
42 |
-
SetEnvIfNoCase Request_URI (?:bmp|gif|jpe?g|php|png|swf|tiff?)$ no-gzip dont-vary
|
43 |
-
# Make sure proxies don't deliver the wrong content
|
44 |
-
Header append Vary User-Agent env=!dont-vary
|
45 |
-
# Fragment size to be compressed at one time by zlib
|
46 |
-
#DeflateBufferSize 4096
|
47 |
-
# Amount of compression applied to output
|
48 |
-
#DeflateCompressionLevel 9
|
49 |
-
# How much memory should be used by zlib for compression
|
50 |
-
#DeflateMemLevel 9
|
51 |
-
# Zlib compression window size
|
52 |
-
#DeflateWindowSize 15
|
53 |
-
# Enable HTTP Compression policy for all except .css, .js and .html documents
|
54 |
-
SetOutputFilter DEFLATE
|
55 |
-
AddOutputFilterByType DEFLATE text/css text/plain text/html text/xml text/xsd text/xsl application/x-javascript \
|
56 |
-
\. application/wlwmanifest+xml image/svg+xml image/x-icon
|
57 |
-
</IfModule>
|
58 |
-
# END HTTP Compression
|
59 |
-
|
60 |
-
# BEGIN Headers: Ensure browser caching of objects for 3 days
|
61 |
-
# Set Expires header
|
62 |
-
<IfModule mod_expires.c>
|
63 |
-
ExpiresActive On
|
64 |
-
ExpiresByType application/x-javascript A259200
|
65 |
-
ExpiresByType application/x-shockwave-flash A259200
|
66 |
-
ExpiresByType application/wlwmanifest+xml A259200
|
67 |
-
ExpiresByType image/bmp A259200
|
68 |
-
ExpiresByType image/gif A259200
|
69 |
-
ExpiresByType image/pjpeg A259200
|
70 |
-
ExpiresByType image/jpeg A259200
|
71 |
-
ExpiresByType image/jpg A259200
|
72 |
-
ExpiresByType image/png A259200
|
73 |
-
ExpiresByType image/svg+xml A259200
|
74 |
-
ExpiresByType image/tif A259200
|
75 |
-
ExpiresByType image/tiff A259200
|
76 |
-
ExpiresByType image/x-icon A259200
|
77 |
-
ExpiresByType text/css A259200
|
78 |
-
ExpiresByType text/htm A259200
|
79 |
-
ExpiresByType text/html A259200
|
80 |
-
ExpiresByType text/plain A259200
|
81 |
-
ExpiresByType text/xml A259200
|
82 |
-
ExpiresByType text/xsd A259200
|
83 |
-
ExpiresByType text/xsl A259200
|
84 |
-
</IfModule>
|
85 |
-
|
86 |
-
<FilesMatch "\.(bmp|css|ico|html?|js|tiff?|gif|p?jpe?g|png|svgz?|swf|txt|xsd|xsl|xml)$">
|
87 |
-
<IfModule mod_headers.c>
|
88 |
-
# Set Pragma header
|
89 |
-
Header set Pragma "public"
|
90 |
-
# Set Cache-Control header
|
91 |
-
Header append Cache-Control "public, must-revalidate, proxy-revalidate"
|
92 |
-
</IfModule>
|
93 |
-
|
94 |
-
# Set Entity Tag header
|
95 |
-
FileETag MTime Size
|
96 |
-
</FilesMatch>
|
97 |
-
# END Headers: Ensure client-side caching of objects
|
98 |
-
|
99 |
-
# BEGIN Optional Directives (if using a non-default permalink setting)
|
100 |
-
<IfModule mod_rewrite.c>
|
101 |
-
RewriteEngine On
|
102 |
-
RewriteBase /
|
103 |
-
|
104 |
-
# BEGIN Do not allow WordPress to process static objects
|
105 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.bmp [NC]
|
106 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.css [NC]
|
107 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.gif [NC]
|
108 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.html? [NC]
|
109 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.js [NC]
|
110 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.p?jpe?g [NC]
|
111 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.png [NC]
|
112 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.svgz? [NC]
|
113 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.swf [NC]
|
114 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.tiff? [NC]
|
115 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.txt [NC]
|
116 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.xsd [NC]
|
117 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.xsl [NC]
|
118 |
-
RewriteCond %{REQUEST_FILENAME} !^.*\.xml [NC]
|
119 |
-
# END Do not allow WordPress to process static objects
|
120 |
-
|
121 |
-
# Default WordPress Directives
|
122 |
-
RewriteCond %{REQUEST_FILENAME} !-f
|
123 |
-
RewriteCond %{REQUEST_FILENAME} !-d
|
124 |
-
RewriteRule . /index.php [L]
|
125 |
-
</IfModule>
|
126 |
-
# END Optional Directives
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ini/apc.ini
CHANGED
@@ -16,12 +16,12 @@ apc.mmap_file_mask = "/tmp/apc.XXXXXX"
|
|
16 |
apc.slam_defense = 0
|
17 |
apc.file_update_protection = 2
|
18 |
apc.enable_cli = 0
|
19 |
-
apc.max_file_size =
|
20 |
apc.stat = 1
|
21 |
apc.write_lock = 1
|
22 |
apc.report_autofilter = 0
|
23 |
apc.include_once_override = 0
|
24 |
-
;apc.rfc1867
|
25 |
;apc.rfc1867_prefix = "upload_"
|
26 |
;apc.rfc1867_name = "APC_UPLOAD_PROGRESS"
|
27 |
;apc.rfc1867_freq = 0
|
16 |
apc.slam_defense = 0
|
17 |
apc.file_update_protection = 2
|
18 |
apc.enable_cli = 0
|
19 |
+
apc.max_file_size = 10M
|
20 |
apc.stat = 1
|
21 |
apc.write_lock = 1
|
22 |
apc.report_autofilter = 0
|
23 |
apc.include_once_override = 0
|
24 |
+
;apc.rfc1867 = 0
|
25 |
;apc.rfc1867_prefix = "upload_"
|
26 |
;apc.rfc1867_name = "APC_UPLOAD_PROGRESS"
|
27 |
;apc.rfc1867_freq = 0
|
ini/eaccelerator.ini
CHANGED
@@ -22,4 +22,5 @@ eaccelerator.compress_level = 9
|
|
22 |
eaccelerator.keys = shm
|
23 |
eaccelerator.sessions = shm
|
24 |
eaccelerator.content = shm
|
25 |
-
|
|
22 |
eaccelerator.keys = shm
|
23 |
eaccelerator.sessions = shm
|
24 |
eaccelerator.content = shm
|
25 |
+
; Insert path to document root below, then uncomment the line
|
26 |
+
;eaccelerator.allowed_admin_path = "/var/www/domain.com/"
|
ini/xcache.ini
CHANGED
@@ -18,7 +18,7 @@ xcache.count = 8
|
|
18 |
xcache.slots = 8K
|
19 |
xcache.ttl = 0
|
20 |
xcache.gc_interval = 0
|
21 |
-
xcache.var_size =
|
22 |
xcache.var_count = 1
|
23 |
xcache.var_slots = 8K
|
24 |
xcache.var_ttl = 0
|
18 |
xcache.slots = 8K
|
19 |
xcache.ttl = 0
|
20 |
xcache.gc_interval = 0
|
21 |
+
xcache.var_size = 32M
|
22 |
xcache.var_count = 1
|
23 |
xcache.var_slots = 8K
|
24 |
xcache.var_ttl = 0
|
lib/CF/cacert.pem
ADDED
@@ -0,0 +1,3113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
##
|
2 |
+
## cacert.pem-foo -- Bundle of CA Root Certificates
|
3 |
+
##
|
4 |
+
## Converted at: Sat Aug 23 21:39:56 2008 UTC
|
5 |
+
##
|
6 |
+
## This is a bundle of X.509 certificates of public Certificate Authorities
|
7 |
+
## (CA). These were automatically extracted from Mozilla's root certificates
|
8 |
+
## file (certdata.txt). This file can be found in the mozilla source tree:
|
9 |
+
## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt'
|
10 |
+
##
|
11 |
+
## It contains the certificates in PEM format and therefore
|
12 |
+
## can be directly used with curl / libcurl / php_curl, or with
|
13 |
+
## an Apache+mod_ssl webserver for SSL client authentication.
|
14 |
+
## Just configure this file as the SSLCACertificateFile.
|
15 |
+
##
|
16 |
+
|
17 |
+
# ***** BEGIN LICENSE BLOCK *****
|
18 |
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
19 |
+
#
|
20 |
+
# The contents of this file are subject to the Mozilla Public License Version
|
21 |
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
22 |
+
# the License. You may obtain a copy of the License at
|
23 |
+
# http://www.mozilla.org/MPL/
|
24 |
+
#
|
25 |
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
26 |
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
27 |
+
# for the specific language governing rights and limitations under the
|
28 |
+
# License.
|
29 |
+
#
|
30 |
+
# The Original Code is the Netscape security libraries.
|
31 |
+
#
|
32 |
+
# The Initial Developer of the Original Code is
|
33 |
+
# Netscape Communications Corporation.
|
34 |
+
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
35 |
+
# the Initial Developer. All Rights Reserved.
|
36 |
+
#
|
37 |
+
# Contributor(s):
|
38 |
+
#
|
39 |
+
# Alternatively, the contents of this file may be used under the terms of
|
40 |
+
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
41 |
+
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
42 |
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
43 |
+
# of those above. If you wish to allow use of your version of this file only
|
44 |
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
45 |
+
# use your version of this file under the terms of the MPL, indicate your
|
46 |
+
# decision by deleting the provisions above and replace them with the notice
|
47 |
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
48 |
+
# the provisions above, a recipient may use your version of this file under
|
49 |
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
50 |
+
#
|
51 |
+
# ***** END LICENSE BLOCK *****
|
52 |
+
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.49 $ $Date: 2008/08/14 18:15:56 $
|
53 |
+
|
54 |
+
Verisign/RSA Secure Server CA
|
55 |
+
=============================
|
56 |
+
-----BEGIN CERTIFICATE-----
|
57 |
+
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
58 |
+
IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
|
59 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow
|
60 |
+
XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL
|
61 |
+
EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
|
62 |
+
A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp
|
63 |
+
sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ
|
64 |
+
VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG
|
65 |
+
mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2
|
66 |
+
qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
|
67 |
+
-----END CERTIFICATE-----
|
68 |
+
|
69 |
+
GTE CyberTrust Root CA
|
70 |
+
======================
|
71 |
+
-----BEGIN CERTIFICATE-----
|
72 |
+
MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
73 |
+
Q29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAw
|
74 |
+
WhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9u
|
75 |
+
MRwwGgYDVQQDExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
|
76 |
+
gQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH
|
77 |
+
6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswk
|
78 |
+
wB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEP
|
79 |
+
I2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGvU9oUtCG4
|
80 |
+
1tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
|
81 |
+
-----END CERTIFICATE-----
|
82 |
+
|
83 |
+
GTE CyberTrust Global Root
|
84 |
+
==========================
|
85 |
+
-----BEGIN CERTIFICATE-----
|
86 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
87 |
+
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
88 |
+
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
89 |
+
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
90 |
+
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
91 |
+
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
92 |
+
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
93 |
+
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
94 |
+
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
95 |
+
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
96 |
+
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
97 |
+
-----END CERTIFICATE-----
|
98 |
+
|
99 |
+
Thawte Personal Basic CA
|
100 |
+
========================
|
101 |
+
-----BEGIN CERTIFICATE-----
|
102 |
+
MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
103 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
|
104 |
+
dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMY
|
105 |
+
VGhhd3RlIFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0
|
106 |
+
aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpB
|
107 |
+
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhh
|
108 |
+
d3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
|
109 |
+
ITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29u
|
110 |
+
YWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
|
111 |
+
FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJ
|
112 |
+
l+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY
|
113 |
+
0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAt4plrsD16
|
114 |
+
iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7c8a914phXAPjLSeoF+CEhULcXpvG
|
115 |
+
t7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN
|
116 |
+
92NWod8isQ==
|
117 |
+
-----END CERTIFICATE-----
|
118 |
+
|
119 |
+
Thawte Personal Premium CA
|
120 |
+
==========================
|
121 |
+
-----BEGIN CERTIFICATE-----
|
122 |
+
MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
123 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
|
124 |
+
dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMa
|
125 |
+
VGhhd3RlIFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1p
|
126 |
+
dW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQG
|
127 |
+
EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoT
|
128 |
+
EVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlz
|
129 |
+
aW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYb
|
130 |
+
cGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
|
131 |
+
Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ
|
132 |
+
8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicR
|
133 |
+
FTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
|
134 |
+
AGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIHb4Vnjt4rueIXsDqg8A6iAJrf8xQV
|
135 |
+
brvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+W
|
136 |
+
jS9Q2wfD6h+rM+D1KzGJ
|
137 |
+
-----END CERTIFICATE-----
|
138 |
+
|
139 |
+
Thawte Personal Freemail CA
|
140 |
+
===========================
|
141 |
+
-----BEGIN CERTIFICATE-----
|
142 |
+
MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
143 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
|
144 |
+
dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMb
|
145 |
+
VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVl
|
146 |
+
bWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNV
|
147 |
+
BAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
|
148 |
+
ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
149 |
+
aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJ
|
150 |
+
ARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
|
151 |
+
gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6W
|
152 |
+
ZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgk
|
153 |
+
CGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
|
154 |
+
AAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjPMPuoSpaKH2JCI4wXD/S6ZJwXrEcp
|
155 |
+
352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK
|
156 |
+
/qarigd1iwzdUYRr5PjRzneigQ==
|
157 |
+
-----END CERTIFICATE-----
|
158 |
+
|
159 |
+
Thawte Server CA
|
160 |
+
================
|
161 |
+
-----BEGIN CERTIFICATE-----
|
162 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
163 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
164 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
165 |
+
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
166 |
+
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
167 |
+
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
168 |
+
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
169 |
+
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
170 |
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
171 |
+
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
172 |
+
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
173 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
174 |
+
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
175 |
+
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
176 |
+
-----END CERTIFICATE-----
|
177 |
+
|
178 |
+
Thawte Premium Server CA
|
179 |
+
========================
|
180 |
+
-----BEGIN CERTIFICATE-----
|
181 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
182 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
183 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
184 |
+
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
185 |
+
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
186 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
187 |
+
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
188 |
+
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
189 |
+
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
190 |
+
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
191 |
+
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
192 |
+
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
193 |
+
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
194 |
+
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
195 |
+
UCemDaYj+bvLpgcUQg==
|
196 |
+
-----END CERTIFICATE-----
|
197 |
+
|
198 |
+
Equifax Secure CA
|
199 |
+
=================
|
200 |
+
-----BEGIN CERTIFICATE-----
|
201 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
202 |
+
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
203 |
+
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
204 |
+
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
205 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
206 |
+
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
207 |
+
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
208 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
209 |
+
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
210 |
+
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
211 |
+
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
212 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
213 |
+
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
214 |
+
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
215 |
+
70+sB3c4
|
216 |
+
-----END CERTIFICATE-----
|
217 |
+
|
218 |
+
ABAecom (sub., Am. Bankers Assn.) Root CA
|
219 |
+
=========================================
|
220 |
+
-----BEGIN CERTIFICATE-----
|
221 |
+
MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNV
|
222 |
+
BAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3RvbjEXMBUGA1UEChMOQUJBLkVD
|
223 |
+
T00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWlu
|
224 |
+
QGRpZ3NpZ3RydXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYD
|
225 |
+
VQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5F
|
226 |
+
Q09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1p
|
227 |
+
bkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVD
|
228 |
+
BwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1j
|
229 |
+
Vv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNf
|
230 |
+
WiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtx
|
231 |
+
A6k4ShZsiSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94
|
232 |
+
Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQgwDQYJKoZI
|
233 |
+
hvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0kqS8Kfv2kRLD4VAe9G52dyntQJHsR
|
234 |
+
W0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJh
|
235 |
+
koHWG9YA8A6eKHegTYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
|
236 |
+
/lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
|
237 |
+
O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
|
238 |
+
-----END CERTIFICATE-----
|
239 |
+
|
240 |
+
Digital Signature Trust Co. Global CA 1
|
241 |
+
=======================================
|
242 |
+
-----BEGIN CERTIFICATE-----
|
243 |
+
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
244 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
245 |
+
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
246 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
247 |
+
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
248 |
+
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
249 |
+
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
250 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
251 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
252 |
+
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
253 |
+
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
254 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
255 |
+
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
256 |
+
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
257 |
+
RbyhkwS7hp86W0N6w4pl
|
258 |
+
-----END CERTIFICATE-----
|
259 |
+
|
260 |
+
Digital Signature Trust Co. Global CA 3
|
261 |
+
=======================================
|
262 |
+
-----BEGIN CERTIFICATE-----
|
263 |
+
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
264 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
265 |
+
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
266 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
267 |
+
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
268 |
+
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
269 |
+
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
270 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
271 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
272 |
+
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
273 |
+
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
274 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
275 |
+
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
276 |
+
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
277 |
+
mPnHfxsb1gYgAlihw6ID
|
278 |
+
-----END CERTIFICATE-----
|
279 |
+
|
280 |
+
Digital Signature Trust Co. Global CA 2
|
281 |
+
=======================================
|
282 |
+
-----BEGIN CERTIFICATE-----
|
283 |
+
MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
|
284 |
+
czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
|
285 |
+
YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBS
|
286 |
+
b290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4
|
287 |
+
NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
|
288 |
+
BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
|
289 |
+
MA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEW
|
290 |
+
EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLGJrbn
|
291 |
+
pT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZ
|
292 |
+
PdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGA
|
293 |
+
vqPYUrBEzUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5y
|
294 |
+
P4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn7pTKBBMFYgZw
|
295 |
+
I7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAojeyP2n714Z5
|
296 |
+
VEkxlTMr89EJFEliYIalsBHiUMIdBlc+LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2
|
297 |
+
vAd5ZWRzfdd5ynvVWlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
|
298 |
+
8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
|
299 |
+
gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2kYtdo+o56T9II
|
300 |
+
2pPc8JIRetDccpMMc5NihWjQ9A==
|
301 |
+
-----END CERTIFICATE-----
|
302 |
+
|
303 |
+
Digital Signature Trust Co. Global CA 4
|
304 |
+
=======================================
|
305 |
+
-----BEGIN CERTIFICATE-----
|
306 |
+
MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
|
307 |
+
czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
|
308 |
+
YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBS
|
309 |
+
b290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2
|
310 |
+
MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
|
311 |
+
BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
|
312 |
+
MA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEW
|
313 |
+
EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANx18IzA
|
314 |
+
dZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva
|
315 |
+
3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9
|
316 |
+
kVySVGkl5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP
|
317 |
+
17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCvbK4iNC7Va26D
|
318 |
+
unm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtTYOXeFhKFoR
|
319 |
+
ZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT
|
320 |
+
4EOvkTvRyyzYdFQ6HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
|
321 |
+
6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
|
322 |
+
10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK
|
323 |
+
1GSYsyapMMj9puyrliGtf8J4tg==
|
324 |
+
-----END CERTIFICATE-----
|
325 |
+
|
326 |
+
Verisign Class 1 Public Primary Certification Authority
|
327 |
+
=======================================================
|
328 |
+
-----BEGIN CERTIFICATE-----
|
329 |
+
MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT
|
330 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
331 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla
|
332 |
+
MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg
|
333 |
+
MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF
|
334 |
+
AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw
|
335 |
+
0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7
|
336 |
+
NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf
|
337 |
+
7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx
|
338 |
+
giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A
|
339 |
+
NACY89FxlA==
|
340 |
+
-----END CERTIFICATE-----
|
341 |
+
|
342 |
+
Verisign Class 2 Public Primary Certification Authority
|
343 |
+
=======================================================
|
344 |
+
-----BEGIN CERTIFICATE-----
|
345 |
+
MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
346 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5
|
347 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
348 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy
|
349 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
350 |
+
A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6
|
351 |
+
Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/
|
352 |
+
S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX
|
353 |
+
XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY
|
354 |
+
YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2
|
355 |
+
lw0Xd8rY
|
356 |
+
-----END CERTIFICATE-----
|
357 |
+
|
358 |
+
Verisign Class 3 Public Primary Certification Authority
|
359 |
+
=======================================================
|
360 |
+
-----BEGIN CERTIFICATE-----
|
361 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
362 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
363 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
364 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
365 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
366 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
367 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
368 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
369 |
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
370 |
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
371 |
+
Tqj/ZA1k
|
372 |
+
-----END CERTIFICATE-----
|
373 |
+
|
374 |
+
Verisign Class 1 Public Primary Certification Authority - G2
|
375 |
+
============================================================
|
376 |
+
-----BEGIN CERTIFICATE-----
|
377 |
+
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
378 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
379 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
380 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
381 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
382 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
383 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
384 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
385 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
|
386 |
+
k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
|
387 |
+
WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
|
388 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
|
389 |
+
XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
|
390 |
+
lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
|
391 |
+
-----END CERTIFICATE-----
|
392 |
+
|
393 |
+
Verisign Class 2 Public Primary Certification Authority - G2
|
394 |
+
============================================================
|
395 |
+
-----BEGIN CERTIFICATE-----
|
396 |
+
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
|
397 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
398 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
399 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
400 |
+
c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
|
401 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
402 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
403 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
404 |
+
c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
|
405 |
+
nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
|
406 |
+
wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
|
407 |
+
ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
|
408 |
+
1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
|
409 |
+
LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
|
410 |
+
-----END CERTIFICATE-----
|
411 |
+
|
412 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
413 |
+
============================================================
|
414 |
+
-----BEGIN CERTIFICATE-----
|
415 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
416 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
417 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
418 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
419 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
420 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
421 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
422 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
423 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
424 |
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
425 |
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
426 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
427 |
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
428 |
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
429 |
+
-----END CERTIFICATE-----
|
430 |
+
|
431 |
+
Verisign Class 4 Public Primary Certification Authority - G2
|
432 |
+
============================================================
|
433 |
+
-----BEGIN CERTIFICATE-----
|
434 |
+
MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
435 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
|
436 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
437 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
438 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
439 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
|
440 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
441 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
442 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4
|
443 |
+
xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH
|
444 |
+
qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB
|
445 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF
|
446 |
+
WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB
|
447 |
+
ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp
|
448 |
+
-----END CERTIFICATE-----
|
449 |
+
|
450 |
+
GlobalSign Root CA
|
451 |
+
==================
|
452 |
+
-----BEGIN CERTIFICATE-----
|
453 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
454 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
455 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
456 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
457 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
458 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
459 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
460 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
461 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
462 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
463 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
464 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
465 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
466 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
467 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
468 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
469 |
+
-----END CERTIFICATE-----
|
470 |
+
|
471 |
+
GlobalSign Root CA - R2
|
472 |
+
=======================
|
473 |
+
-----BEGIN CERTIFICATE-----
|
474 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
475 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
476 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
477 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
478 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
479 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
480 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
481 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
482 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
483 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
484 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
485 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
486 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
487 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
488 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
489 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
490 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
491 |
+
-----END CERTIFICATE-----
|
492 |
+
|
493 |
+
ValiCert Class 1 VA
|
494 |
+
===================
|
495 |
+
-----BEGIN CERTIFICATE-----
|
496 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
497 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
498 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
499 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
500 |
+
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
501 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
502 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
503 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
504 |
+
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
505 |
+
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
506 |
+
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
507 |
+
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
508 |
+
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
509 |
+
Orf1LXLI
|
510 |
+
-----END CERTIFICATE-----
|
511 |
+
|
512 |
+
ValiCert Class 2 VA
|
513 |
+
===================
|
514 |
+
-----BEGIN CERTIFICATE-----
|
515 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
516 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
517 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
518 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
519 |
+
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
520 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
521 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
522 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
523 |
+
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
524 |
+
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
525 |
+
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
526 |
+
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
527 |
+
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
528 |
+
W9ViH0Pd
|
529 |
+
-----END CERTIFICATE-----
|
530 |
+
|
531 |
+
RSA Root Certificate 1
|
532 |
+
======================
|
533 |
+
-----BEGIN CERTIFICATE-----
|
534 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
535 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
536 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
537 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
538 |
+
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
539 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
540 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
541 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
542 |
+
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
543 |
+
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
544 |
+
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
545 |
+
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
546 |
+
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
547 |
+
on+jjBXu
|
548 |
+
-----END CERTIFICATE-----
|
549 |
+
|
550 |
+
Verisign Class 1 Public Primary Certification Authority - G3
|
551 |
+
============================================================
|
552 |
+
-----BEGIN CERTIFICATE-----
|
553 |
+
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
554 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
555 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
556 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
557 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
558 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
559 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
560 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
|
561 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
562 |
+
ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
|
563 |
+
bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
|
564 |
+
rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
|
565 |
+
Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
|
566 |
+
FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
567 |
+
q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
|
568 |
+
y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
569 |
+
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
|
570 |
+
a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
|
571 |
+
D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
572 |
+
-----END CERTIFICATE-----
|
573 |
+
|
574 |
+
Verisign Class 2 Public Primary Certification Authority - G3
|
575 |
+
============================================================
|
576 |
+
-----BEGIN CERTIFICATE-----
|
577 |
+
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
|
578 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
|
579 |
+
azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
|
580 |
+
b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
|
581 |
+
aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
|
582 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
583 |
+
c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
584 |
+
aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
|
585 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
586 |
+
AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
|
587 |
+
tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
|
588 |
+
C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
|
589 |
+
0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
|
590 |
+
Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
|
591 |
+
JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
|
592 |
+
0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
593 |
+
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
|
594 |
+
JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
|
595 |
+
GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
596 |
+
-----END CERTIFICATE-----
|
597 |
+
|
598 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
599 |
+
============================================================
|
600 |
+
-----BEGIN CERTIFICATE-----
|
601 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
602 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
603 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
604 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
605 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
606 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
607 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
608 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
609 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
610 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
611 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
612 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
613 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
614 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
615 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
616 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
617 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
618 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
619 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
620 |
+
-----END CERTIFICATE-----
|
621 |
+
|
622 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
623 |
+
============================================================
|
624 |
+
-----BEGIN CERTIFICATE-----
|
625 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
626 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
627 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
628 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
629 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
630 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
631 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
632 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
633 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
634 |
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
635 |
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
636 |
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
637 |
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
638 |
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
639 |
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
640 |
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
641 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
642 |
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
643 |
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
644 |
+
-----END CERTIFICATE-----
|
645 |
+
|
646 |
+
Entrust.net Secure Server CA
|
647 |
+
============================
|
648 |
+
-----BEGIN CERTIFICATE-----
|
649 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
650 |
+
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
651 |
+
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
652 |
+
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
653 |
+
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
654 |
+
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
655 |
+
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
656 |
+
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
657 |
+
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
658 |
+
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
659 |
+
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
660 |
+
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
661 |
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
662 |
+
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
663 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
664 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
665 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
666 |
+
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
667 |
+
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
668 |
+
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
669 |
+
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
670 |
+
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
671 |
+
-----END CERTIFICATE-----
|
672 |
+
|
673 |
+
Entrust.net Secure Personal CA
|
674 |
+
==============================
|
675 |
+
-----BEGIN CERTIFICATE-----
|
676 |
+
MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMCVVMxFDASBgNV
|
677 |
+
BAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8v
|
678 |
+
Q1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1
|
679 |
+
c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9u
|
680 |
+
IEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJV
|
681 |
+
UzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRf
|
682 |
+
Q0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5
|
683 |
+
OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRp
|
684 |
+
ZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdv
|
685 |
+
kHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGp
|
686 |
+
OZ5V+Pux5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTm
|
687 |
+
T173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkwggEVMIHkoIHh
|
688 |
+
oIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3
|
689 |
+
dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBs
|
690 |
+
aWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
|
691 |
+
cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
|
692 |
+
KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNVHRAEJDAigA8x
|
693 |
+
OTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU
|
694 |
+
xPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1Ud
|
695 |
+
EwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K
|
696 |
+
8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6h
|
697 |
+
URzzwy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYG
|
698 |
+
JqibGapEPHayXOw=
|
699 |
+
-----END CERTIFICATE-----
|
700 |
+
|
701 |
+
Entrust.net Premium 2048 Secure Server CA
|
702 |
+
=========================================
|
703 |
+
-----BEGIN CERTIFICATE-----
|
704 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
705 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
706 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
707 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
708 |
+
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
709 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
710 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
711 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
712 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
713 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
714 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
715 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
716 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
717 |
+
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
718 |
+
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
719 |
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
720 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
721 |
+
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
722 |
+
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
723 |
+
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
724 |
+
-----END CERTIFICATE-----
|
725 |
+
|
726 |
+
Baltimore CyberTrust Root
|
727 |
+
=========================
|
728 |
+
-----BEGIN CERTIFICATE-----
|
729 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
730 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
731 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
732 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
733 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
734 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
735 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
736 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
737 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
738 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
739 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
740 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
741 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
742 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
743 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
744 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
745 |
+
-----END CERTIFICATE-----
|
746 |
+
|
747 |
+
Equifax Secure Global eBusiness CA
|
748 |
+
==================================
|
749 |
+
-----BEGIN CERTIFICATE-----
|
750 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
751 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
752 |
+
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
753 |
+
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
754 |
+
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
755 |
+
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
756 |
+
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
757 |
+
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
758 |
+
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
759 |
+
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
760 |
+
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
761 |
+
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
762 |
+
-----END CERTIFICATE-----
|
763 |
+
|
764 |
+
Equifax Secure eBusiness CA 1
|
765 |
+
=============================
|
766 |
+
-----BEGIN CERTIFICATE-----
|
767 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
768 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
769 |
+
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
770 |
+
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
771 |
+
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
772 |
+
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
773 |
+
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
774 |
+
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
775 |
+
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
776 |
+
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
777 |
+
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
778 |
+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
779 |
+
-----END CERTIFICATE-----
|
780 |
+
|
781 |
+
Equifax Secure eBusiness CA 2
|
782 |
+
=============================
|
783 |
+
-----BEGIN CERTIFICATE-----
|
784 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
785 |
+
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
786 |
+
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
787 |
+
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
788 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
789 |
+
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
790 |
+
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
791 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
792 |
+
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
793 |
+
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
794 |
+
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
795 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
796 |
+
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
797 |
+
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
798 |
+
V+GRMOrN
|
799 |
+
-----END CERTIFICATE-----
|
800 |
+
|
801 |
+
Visa International Global Root 2
|
802 |
+
================================
|
803 |
+
-----BEGIN CERTIFICATE-----
|
804 |
+
MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxDTALBgNVBAoT
|
805 |
+
BFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIw
|
806 |
+
EAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYD
|
807 |
+
VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZp
|
808 |
+
Y2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
809 |
+
ADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW
|
810 |
+
73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1
|
811 |
+
t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm7Igbthkn
|
812 |
+
GziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhl
|
813 |
+
V7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYE
|
814 |
+
FJ59SzS/ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0G
|
815 |
+
CSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdpNSYx/scuhMKZ
|
816 |
+
YdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQkIqUs38oW26sTTMs7WXcFsziza6k
|
817 |
+
PWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOe
|
818 |
+
yti12HvOdUVmB/RtLdh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
|
819 |
+
ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
|
820 |
+
-----END CERTIFICATE-----
|
821 |
+
|
822 |
+
beTRUSTed Root CA
|
823 |
+
=================
|
824 |
+
-----BEGIN CERTIFICATE-----
|
825 |
+
MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJXVzESMBAGA1UE
|
826 |
+
ChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBDQXMxGjAYBgNVBAMTEWJlVFJV
|
827 |
+
U1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMC
|
828 |
+
V1cxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYD
|
829 |
+
VQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0
|
830 |
+
c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgz
|
831 |
+
eubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCg
|
832 |
+
c0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNn
|
833 |
+
mrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5
|
834 |
+
c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8w
|
835 |
+
ggFZBgNVHSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFS
|
836 |
+
ZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu
|
837 |
+
Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv
|
838 |
+
ZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJl
|
839 |
+
IGZvdW5kIGF0IGJlVFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
|
840 |
+
L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
|
841 |
+
L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQxCzAJBgNVBAYT
|
842 |
+
AldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3e
|
843 |
+
KjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR
|
844 |
+
+csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/b
|
845 |
+
ow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ
|
846 |
+
1gMe1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWu
|
847 |
+
GVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpGEK5BV2Vs
|
848 |
+
PyMQPyEQWbfkQN0mDCP2qq4=
|
849 |
+
-----END CERTIFICATE-----
|
850 |
+
|
851 |
+
AddTrust Low-Value Services Root
|
852 |
+
================================
|
853 |
+
-----BEGIN CERTIFICATE-----
|
854 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
855 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
856 |
+
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
857 |
+
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
858 |
+
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
859 |
+
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
860 |
+
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
861 |
+
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
862 |
+
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
863 |
+
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
864 |
+
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
865 |
+
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
866 |
+
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
867 |
+
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
868 |
+
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
869 |
+
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
870 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
871 |
+
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
872 |
+
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
873 |
+
-----END CERTIFICATE-----
|
874 |
+
|
875 |
+
AddTrust External Root
|
876 |
+
======================
|
877 |
+
-----BEGIN CERTIFICATE-----
|
878 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
879 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
880 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
881 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
882 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
883 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
884 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
885 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
886 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
887 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
888 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
889 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
890 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
891 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
892 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
893 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
894 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
895 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
896 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
897 |
+
-----END CERTIFICATE-----
|
898 |
+
|
899 |
+
AddTrust Public Services Root
|
900 |
+
=============================
|
901 |
+
-----BEGIN CERTIFICATE-----
|
902 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
903 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
904 |
+
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
905 |
+
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
906 |
+
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
907 |
+
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
908 |
+
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
909 |
+
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
910 |
+
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
911 |
+
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
912 |
+
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
913 |
+
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
914 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
915 |
+
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
916 |
+
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
917 |
+
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
918 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
919 |
+
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
920 |
+
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
921 |
+
-----END CERTIFICATE-----
|
922 |
+
|
923 |
+
AddTrust Qualified Certificates Root
|
924 |
+
====================================
|
925 |
+
-----BEGIN CERTIFICATE-----
|
926 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
927 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
928 |
+
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
929 |
+
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
930 |
+
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
931 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
932 |
+
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
933 |
+
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
934 |
+
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
935 |
+
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
936 |
+
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
937 |
+
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
938 |
+
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
939 |
+
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
940 |
+
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
941 |
+
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
942 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
943 |
+
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
944 |
+
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
945 |
+
-----END CERTIFICATE-----
|
946 |
+
|
947 |
+
Verisign Time Stamping Authority CA
|
948 |
+
===================================
|
949 |
+
-----BEGIN CERTIFICATE-----
|
950 |
+
MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UE
|
951 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQ
|
952 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZl
|
953 |
+
cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWdu
|
954 |
+
IFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UE
|
955 |
+
ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV
|
956 |
+
BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSww
|
957 |
+
KgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkqhkiG9w0B
|
958 |
+
AQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhj
|
959 |
+
zCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6o
|
960 |
+
v8uQjI11S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEA
|
961 |
+
MEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZl
|
962 |
+
cmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20v
|
963 |
+
cGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRw
|
964 |
+
Oi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
|
965 |
+
DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
|
966 |
+
w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU58dzq6wf7iWb
|
967 |
+
wBbtt8pb8BQ=
|
968 |
+
-----END CERTIFICATE-----
|
969 |
+
|
970 |
+
Thawte Time Stamping CA
|
971 |
+
=======================
|
972 |
+
-----BEGIN CERTIFICATE-----
|
973 |
+
MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
974 |
+
DFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
|
975 |
+
A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg
|
976 |
+
Q0EwHhcNOTcwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNV
|
977 |
+
BAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEd
|
978 |
+
MBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBp
|
979 |
+
bmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+o
|
980 |
+
J9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9
|
981 |
+
nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
|
982 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCo
|
983 |
+
uqoEiYbC9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCe
|
984 |
+
d/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJSdM=
|
985 |
+
-----END CERTIFICATE-----
|
986 |
+
|
987 |
+
Entrust.net Global Secure Server CA
|
988 |
+
===================================
|
989 |
+
-----BEGIN CERTIFICATE-----
|
990 |
+
MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChMLRW50cnVzdC5u
|
991 |
+
ZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGluY29ycC4gYnkgcmVmLiAobGlt
|
992 |
+
aXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
|
993 |
+
AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0w
|
994 |
+
MDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0G
|
995 |
+
A1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
|
996 |
+
Yi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRy
|
997 |
+
dXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3
|
998 |
+
DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55l
|
999 |
+
xyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439P
|
1000 |
+
mrkDQYC2dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEB
|
1001 |
+
BAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0VudHJ1c3QubmV0
|
1002 |
+
MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0
|
1003 |
+
cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMT
|
1004 |
+
MUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
|
1005 |
+
BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
|
1006 |
+
VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr
|
1007 |
+
47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
|
1008 |
+
AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbv
|
1009 |
+
H9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3
|
1010 |
+
a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
|
1011 |
+
-----END CERTIFICATE-----
|
1012 |
+
|
1013 |
+
Entrust.net Global Secure Personal CA
|
1014 |
+
=====================================
|
1015 |
+
-----BEGIN CERTIFICATE-----
|
1016 |
+
MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
1017 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
1018 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
1019 |
+
BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcx
|
1020 |
+
NjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
1021 |
+
d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
1022 |
+
MCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
1023 |
+
ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
1024 |
+
iQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQl
|
1025 |
+
hK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKkl
|
1026 |
+
Wb1m9fkn5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNV
|
1027 |
+
HR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3
|
1028 |
+
d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUw
|
1029 |
+
IwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5l
|
1030 |
+
dCBDbGllbnQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
1031 |
+
IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
1032 |
+
MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAM
|
1033 |
+
BgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQF
|
1034 |
+
AAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xK
|
1035 |
+
p9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQ
|
1036 |
+
Gof4T4HHdguEOnKdzmVml64mXg==
|
1037 |
+
-----END CERTIFICATE-----
|
1038 |
+
|
1039 |
+
Entrust Root Certification Authority
|
1040 |
+
====================================
|
1041 |
+
-----BEGIN CERTIFICATE-----
|
1042 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
1043 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
1044 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
1045 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
1046 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
1047 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
1048 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
1049 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
1050 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
1051 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
1052 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
1053 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
1054 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
1055 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
1056 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
1057 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
1058 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
1059 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
1060 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
1061 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
1062 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
1063 |
+
-----END CERTIFICATE-----
|
1064 |
+
|
1065 |
+
AOL Time Warner Root Certification Authority 1
|
1066 |
+
==============================================
|
1067 |
+
-----BEGIN CERTIFICATE-----
|
1068 |
+
MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
|
1069 |
+
FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
|
1070 |
+
VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAy
|
1071 |
+
MDUyOTA2MDAwMFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
|
1072 |
+
VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
|
1073 |
+
QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZI
|
1074 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8
|
1075 |
+
hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkG
|
1076 |
+
IBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93
|
1077 |
+
f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQI
|
1078 |
+
fHNlIAqhBC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNj
|
1079 |
+
MGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+XxIwHwYDVR0j
|
1080 |
+
BBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
|
1081 |
+
A4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u
|
1082 |
+
0FIy2VkyvNp5ctZ7CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
|
1083 |
+
WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
|
1084 |
+
n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoWH1iCC+GWaQVL
|
1085 |
+
juyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
|
1086 |
+
-----END CERTIFICATE-----
|
1087 |
+
|
1088 |
+
AOL Time Warner Root Certification Authority 2
|
1089 |
+
==============================================
|
1090 |
+
-----BEGIN CERTIFICATE-----
|
1091 |
+
MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
|
1092 |
+
FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
|
1093 |
+
VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAy
|
1094 |
+
MDUyOTA2MDAwMFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
|
1095 |
+
VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
|
1096 |
+
QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZI
|
1097 |
+
hvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8
|
1098 |
+
TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWsi4SVqBax
|
1099 |
+
7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17n
|
1100 |
+
OirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2w
|
1101 |
+
TPDaRrbqJS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rS
|
1102 |
+
AG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxmlJ85per5n0/xQ
|
1103 |
+
pCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFhEVsVS6kkUfykXPcXnbDS+gfpj1bk
|
1104 |
+
GoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuW
|
1105 |
+
CpTehTacyH+BCQJJKg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
|
1106 |
+
MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
1107 |
+
FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4G
|
1108 |
+
A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7
|
1109 |
+
+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI
|
1110 |
+
5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcC
|
1111 |
+
tQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ
|
1112 |
+
68W/ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3
|
1113 |
+
p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5O8t1wswv
|
1114 |
+
ziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD062KRffaJ00psUjf5BHklka9
|
1115 |
+
bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4o
|
1116 |
+
GKQWDzH9OmwjkyB24f0HhdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2
|
1117 |
+
uBOLZ8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
|
1118 |
+
-----END CERTIFICATE-----
|
1119 |
+
|
1120 |
+
beTRUSTed Root CA-Baltimore Implementation
|
1121 |
+
==========================================
|
1122 |
+
-----BEGIN CERTIFICATE-----
|
1123 |
+
MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
|
1124 |
+
GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Et
|
1125 |
+
QmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVow
|
1126 |
+
ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
|
1127 |
+
BAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
|
1128 |
+
hvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ
|
1129 |
+
+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8Co
|
1130 |
+
Cd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9fHBOB1Bir
|
1131 |
+
lNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNe
|
1132 |
+
DsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOC
|
1133 |
+
Ah4wggIaMA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJ
|
1134 |
+
KIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNlIG9mIHRoaXMg
|
1135 |
+
Q2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVudCBhbmQgYWNjZXB0YW5jZSBvZiB0
|
1136 |
+
aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwg
|
1137 |
+
dGhlIENlcnRpZmljYXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
|
1138 |
+
eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
|
1139 |
+
LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDBB
|
1140 |
+
BggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2lu
|
1141 |
+
ZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR
|
1142 |
+
3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6s
|
1143 |
+
vfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyX
|
1144 |
+
EHu67RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfq
|
1145 |
+
jjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5dUX2xZ/2j
|
1146 |
+
vTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py05yc493EG931t3GzUwWJBtDL
|
1147 |
+
SoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
|
1148 |
+
-----END CERTIFICATE-----
|
1149 |
+
|
1150 |
+
beTRUSTed Root CA - Entrust Implementation
|
1151 |
+
==========================================
|
1152 |
+
-----BEGIN CERTIFICATE-----
|
1153 |
+
MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
|
1154 |
+
GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Eg
|
1155 |
+
LSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1ow
|
1156 |
+
ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
|
1157 |
+
BAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
|
1158 |
+
hvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0c
|
1159 |
+
S12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE7
|
1160 |
+
0mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkbhepxKYhB
|
1161 |
+
MvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1i
|
1162 |
+
JAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOC
|
1163 |
+
AwUwggMBMIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYB
|
1164 |
+
BQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNyZWF0
|
1165 |
+
ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
1166 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9u
|
1167 |
+
IFByYWN0aWNlIFN0YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
|
1168 |
+
aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
|
1169 |
+
cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUFBwIBFjZodHRw
|
1170 |
+
czovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZI
|
1171 |
+
AYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEb
|
1172 |
+
MBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAt
|
1173 |
+
IEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0
|
1174 |
+
MTEwODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44
|
1175 |
+
iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNVHRMEBTAD
|
1176 |
+
AQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEAKrgX
|
1177 |
+
zh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevd
|
1178 |
+
kObRVlTa4y0MnxEylCIBevZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/
|
1179 |
+
T220Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2kXgCl
|
1180 |
+
zMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYhxKlkqu9FNtEaZnz4
|
1181 |
+
6TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
|
1182 |
+
-----END CERTIFICATE-----
|
1183 |
+
|
1184 |
+
beTRUSTed Root CA - RSA Implementation
|
1185 |
+
======================================
|
1186 |
+
-----BEGIN CERTIFICATE-----
|
1187 |
+
MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBiMRIwEAYDVQQK
|
1188 |
+
EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMmYmVUUlVT
|
1189 |
+
VGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEy
|
1190 |
+
MTEwNzI1WjBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
|
1191 |
+
czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0G
|
1192 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRuj
|
1193 |
+
brWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTu
|
1194 |
+
lh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xs
|
1195 |
+
N+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQh
|
1196 |
+
hlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMB
|
1197 |
+
AAGjggIYMIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAAD
|
1198 |
+
CSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNf
|
1199 |
+
c2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIBOhqCATZSZWxpYW5jZSBvbiBvciB1
|
1200 |
+
c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2Nl
|
1201 |
+
cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
|
1202 |
+
bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
|
1203 |
+
ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNU
|
1204 |
+
ZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9p
|
1205 |
+
bmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAd
|
1206 |
+
BgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTB
|
1207 |
+
mMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05
|
1208 |
+
pmuKmET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqN
|
1209 |
+
Wz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNMm2+fG8oe
|
1210 |
+
qqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8ymmFei74pnykkiFY5LKjSq5YD
|
1211 |
+
WtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
|
1212 |
+
-----END CERTIFICATE-----
|
1213 |
+
|
1214 |
+
RSA Security 2048 v3
|
1215 |
+
====================
|
1216 |
+
-----BEGIN CERTIFICATE-----
|
1217 |
+
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
1218 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
1219 |
+
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
1220 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
1221 |
+
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
1222 |
+
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
1223 |
+
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
1224 |
+
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
1225 |
+
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
1226 |
+
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
1227 |
+
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
1228 |
+
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
1229 |
+
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
1230 |
+
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
1231 |
+
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
1232 |
+
pKnXwiJPZ9d37CAFYd4=
|
1233 |
+
-----END CERTIFICATE-----
|
1234 |
+
|
1235 |
+
RSA Security 1024 v3
|
1236 |
+
====================
|
1237 |
+
-----BEGIN CERTIFICATE-----
|
1238 |
+
MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
1239 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAy
|
1240 |
+
MjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
1241 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV
|
1242 |
+
3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4m
|
1243 |
+
mdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1Blq
|
1244 |
+
FikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAf
|
1245 |
+
BgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUM
|
1246 |
+
X96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBD
|
1247 |
+
leMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNu
|
1248 |
+
mU4/iXgDmMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
|
1249 |
+
-----END CERTIFICATE-----
|
1250 |
+
|
1251 |
+
GeoTrust Global CA
|
1252 |
+
==================
|
1253 |
+
-----BEGIN CERTIFICATE-----
|
1254 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
1255 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
1256 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
1257 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
1258 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
1259 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
1260 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
1261 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
1262 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
1263 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
1264 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
1265 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
1266 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
1267 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
1268 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
1269 |
+
Mw==
|
1270 |
+
-----END CERTIFICATE-----
|
1271 |
+
|
1272 |
+
GeoTrust Global CA 2
|
1273 |
+
====================
|
1274 |
+
-----BEGIN CERTIFICATE-----
|
1275 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
1276 |
+
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
1277 |
+
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
1278 |
+
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
1279 |
+
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
1280 |
+
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
1281 |
+
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
1282 |
+
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
1283 |
+
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
1284 |
+
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
1285 |
+
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
1286 |
+
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
1287 |
+
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
1288 |
+
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
1289 |
+
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
1290 |
+
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
1291 |
+
-----END CERTIFICATE-----
|
1292 |
+
|
1293 |
+
GeoTrust Universal CA
|
1294 |
+
=====================
|
1295 |
+
-----BEGIN CERTIFICATE-----
|
1296 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
1297 |
+
R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
|
1298 |
+
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
1299 |
+
Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
1300 |
+
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
1301 |
+
JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
|
1302 |
+
RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
|
1303 |
+
7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
|
1304 |
+
8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
|
1305 |
+
qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
|
1306 |
+
Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
|
1307 |
+
Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
|
1308 |
+
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
1309 |
+
ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
|
1310 |
+
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
1311 |
+
hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
1312 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
|
1313 |
+
qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
|
1314 |
+
oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
|
1315 |
+
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
1316 |
+
KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
|
1317 |
+
DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
|
1318 |
+
xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
|
1319 |
+
p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
|
1320 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
1321 |
+
-----END CERTIFICATE-----
|
1322 |
+
|
1323 |
+
GeoTrust Universal CA 2
|
1324 |
+
=======================
|
1325 |
+
-----BEGIN CERTIFICATE-----
|
1326 |
+
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
1327 |
+
R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
|
1328 |
+
MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
|
1329 |
+
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
1330 |
+
A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
|
1331 |
+
DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
|
1332 |
+
j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
|
1333 |
+
JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
|
1334 |
+
QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
|
1335 |
+
WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
|
1336 |
+
20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
|
1337 |
+
ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
|
1338 |
+
SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
|
1339 |
+
8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
|
1340 |
+
+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
|
1341 |
+
BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
|
1342 |
+
dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
|
1343 |
+
4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
|
1344 |
+
mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
|
1345 |
+
A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
|
1346 |
+
Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
|
1347 |
+
pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
|
1348 |
+
FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
|
1349 |
+
gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
|
1350 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
1351 |
+
-----END CERTIFICATE-----
|
1352 |
+
|
1353 |
+
UTN-USER First-Network Applications
|
1354 |
+
===================================
|
1355 |
+
-----BEGIN CERTIFICATE-----
|
1356 |
+
MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
|
1357 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1358 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
|
1359 |
+
BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
|
1360 |
+
WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
|
1361 |
+
YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
1362 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
|
1363 |
+
cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
|
1364 |
+
mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
|
1365 |
+
DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
|
1366 |
+
Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
|
1367 |
+
P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
|
1368 |
+
j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
|
1369 |
+
HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
|
1370 |
+
cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
|
1371 |
+
CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
|
1372 |
+
IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
|
1373 |
+
RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
|
1374 |
+
xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
|
1375 |
+
DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
|
1376 |
+
-----END CERTIFICATE-----
|
1377 |
+
|
1378 |
+
America Online Root Certification Authority 1
|
1379 |
+
=============================================
|
1380 |
+
-----BEGIN CERTIFICATE-----
|
1381 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
1382 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
1383 |
+
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
1384 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
1385 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
1386 |
+
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
1387 |
+
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
1388 |
+
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
1389 |
+
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
1390 |
+
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
1391 |
+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
1392 |
+
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
1393 |
+
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
1394 |
+
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
1395 |
+
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
1396 |
+
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
1397 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
1398 |
+
-----END CERTIFICATE-----
|
1399 |
+
|
1400 |
+
America Online Root Certification Authority 2
|
1401 |
+
=============================================
|
1402 |
+
-----BEGIN CERTIFICATE-----
|
1403 |
+
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
1404 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
1405 |
+
Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
|
1406 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
1407 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
|
1408 |
+
ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
|
1409 |
+
fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
|
1410 |
+
f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
|
1411 |
+
qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
|
1412 |
+
RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
|
1413 |
+
gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
|
1414 |
+
6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
|
1415 |
+
FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
|
1416 |
+
Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
|
1417 |
+
B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
|
1418 |
+
aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
|
1419 |
+
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
|
1420 |
+
T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
|
1421 |
+
+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
|
1422 |
+
JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
|
1423 |
+
zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
|
1424 |
+
ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
|
1425 |
+
1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
|
1426 |
+
GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
|
1427 |
+
Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
|
1428 |
+
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
1429 |
+
-----END CERTIFICATE-----
|
1430 |
+
|
1431 |
+
Visa eCommerce Root
|
1432 |
+
===================
|
1433 |
+
-----BEGIN CERTIFICATE-----
|
1434 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
1435 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
1436 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
1437 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
1438 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
1439 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
1440 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
1441 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
1442 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
1443 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
1444 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
1445 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
1446 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
1447 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
1448 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
1449 |
+
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
1450 |
+
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
1451 |
+
-----END CERTIFICATE-----
|
1452 |
+
|
1453 |
+
TC TrustCenter, Germany, Class 2 CA
|
1454 |
+
===================================
|
1455 |
+
-----BEGIN CERTIFICATE-----
|
1456 |
+
MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
|
1457 |
+
EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
|
1458 |
+
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
|
1459 |
+
bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
|
1460 |
+
ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
|
1461 |
+
YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
|
1462 |
+
aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
|
1463 |
+
MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
|
1464 |
+
hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs
|
1465 |
+
qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N
|
1466 |
+
u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
|
1467 |
+
Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
|
1468 |
+
LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf
|
1469 |
+
/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2
|
1470 |
+
9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
|
1471 |
+
ASZ4smZHcFFk
|
1472 |
+
-----END CERTIFICATE-----
|
1473 |
+
|
1474 |
+
TC TrustCenter, Germany, Class 3 CA
|
1475 |
+
===================================
|
1476 |
+
-----BEGIN CERTIFICATE-----
|
1477 |
+
MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
|
1478 |
+
EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
|
1479 |
+
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
|
1480 |
+
bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
|
1481 |
+
ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
|
1482 |
+
YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
|
1483 |
+
aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
|
1484 |
+
MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
|
1485 |
+
hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN
|
1486 |
+
2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7
|
1487 |
+
7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
|
1488 |
+
Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
|
1489 |
+
LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B
|
1490 |
+
u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm
|
1491 |
+
5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
|
1492 |
+
CdS7kjXvD9s0
|
1493 |
+
-----END CERTIFICATE-----
|
1494 |
+
|
1495 |
+
Certum Root CA
|
1496 |
+
==============
|
1497 |
+
-----BEGIN CERTIFICATE-----
|
1498 |
+
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
1499 |
+
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
1500 |
+
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
1501 |
+
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
1502 |
+
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
1503 |
+
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
1504 |
+
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
1505 |
+
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
1506 |
+
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
1507 |
+
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
1508 |
+
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
1509 |
+
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
1510 |
+
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
1511 |
+
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
1512 |
+
-----END CERTIFICATE-----
|
1513 |
+
|
1514 |
+
Comodo AAA Services root
|
1515 |
+
========================
|
1516 |
+
-----BEGIN CERTIFICATE-----
|
1517 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1518 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1519 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
1520 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
1521 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
1522 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
1523 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
1524 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
1525 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
1526 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
1527 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
1528 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
1529 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
1530 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
1531 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
1532 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
1533 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
1534 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
1535 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
1536 |
+
-----END CERTIFICATE-----
|
1537 |
+
|
1538 |
+
Comodo Secure Services root
|
1539 |
+
===========================
|
1540 |
+
-----BEGIN CERTIFICATE-----
|
1541 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1542 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1543 |
+
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
1544 |
+
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
1545 |
+
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
1546 |
+
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1547 |
+
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
1548 |
+
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
1549 |
+
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
1550 |
+
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
1551 |
+
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
1552 |
+
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
1553 |
+
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
1554 |
+
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
1555 |
+
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
1556 |
+
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
1557 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
1558 |
+
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
1559 |
+
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
1560 |
+
RR3B7Hzs/Sk=
|
1561 |
+
-----END CERTIFICATE-----
|
1562 |
+
|
1563 |
+
Comodo Trusted Services root
|
1564 |
+
============================
|
1565 |
+
-----BEGIN CERTIFICATE-----
|
1566 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
1567 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
1568 |
+
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
1569 |
+
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
1570 |
+
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
1571 |
+
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1572 |
+
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
1573 |
+
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
1574 |
+
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
1575 |
+
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
1576 |
+
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
1577 |
+
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
1578 |
+
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
1579 |
+
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
1580 |
+
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
1581 |
+
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
1582 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
1583 |
+
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
1584 |
+
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
1585 |
+
9y5Xt5hwXsjEeLBi
|
1586 |
+
-----END CERTIFICATE-----
|
1587 |
+
|
1588 |
+
IPS Chained CAs root
|
1589 |
+
====================
|
1590 |
+
-----BEGIN CERTIFICATE-----
|
1591 |
+
MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1592 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1593 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1594 |
+
Qi02MDkyOTQ1MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0
|
1595 |
+
aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1596 |
+
dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEy
|
1597 |
+
MjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJ
|
1598 |
+
QmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwu
|
1599 |
+
MSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJ
|
1600 |
+
UFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBD
|
1601 |
+
QSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBz
|
1602 |
+
QG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQgvJhPUOtopKdJ
|
1603 |
+
C7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCBhYEFcYGdtJUZqV92NC5jNzVXjrQf
|
1604 |
+
Qj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQID
|
1605 |
+
AQABo4IEQzCCBD8wHQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
|
1606 |
+
AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
|
1607 |
+
CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBw
|
1608 |
+
dWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
|
1609 |
+
IEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1
|
1610 |
+
dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9y
|
1611 |
+
aXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNV
|
1612 |
+
HQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
|
1613 |
+
BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGC
|
1614 |
+
NwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
|
1615 |
+
EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZp
|
1616 |
+
Y2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8v
|
1617 |
+
d3d3Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
|
1618 |
+
MjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3dy5pcHMuZXMvaXBz
|
1619 |
+
MjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5l
|
1620 |
+
cy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
|
1621 |
+
LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5p
|
1622 |
+
cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
|
1623 |
+
L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
|
1624 |
+
Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hAK+/b
|
1625 |
+
lkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M9
|
1626 |
+
2GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
|
1627 |
+
-----END CERTIFICATE-----
|
1628 |
+
|
1629 |
+
IPS CLASE1 root
|
1630 |
+
===============
|
1631 |
+
-----BEGIN CERTIFICATE-----
|
1632 |
+
MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1633 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1634 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1635 |
+
Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1636 |
+
eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
|
1637 |
+
SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFow
|
1638 |
+
ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
|
1639 |
+
LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
|
1640 |
+
Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
|
1641 |
+
RTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlm
|
1642 |
+
aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
|
1643 |
+
hkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5BlmvXSHU0lq4
|
1644 |
+
oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBSYmL9Yzt9fuzuOOpi9GyocY3h6YvJ
|
1645 |
+
P8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQW
|
1646 |
+
BBTrsxl588GlHKzcuh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
|
1647 |
+
adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
|
1648 |
+
BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
|
1649 |
+
LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
|
1650 |
+
EyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
|
1651 |
+
Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
|
1652 |
+
cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
|
1653 |
+
BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
|
1654 |
+
BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
|
1655 |
+
BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
|
1656 |
+
hvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
|
1657 |
+
cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
|
1658 |
+
BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCGSAGG
|
1659 |
+
+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTEuaHRtbD8w
|
1660 |
+
PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5o
|
1661 |
+
dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
|
1662 |
+
RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
|
1663 |
+
MDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
|
1664 |
+
Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
|
1665 |
+
cy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1urxUq2
|
1666 |
+
ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmO
|
1667 |
+
DszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9UkE6tsSU=
|
1668 |
+
-----END CERTIFICATE-----
|
1669 |
+
|
1670 |
+
IPS CLASE3 root
|
1671 |
+
===============
|
1672 |
+
-----BEGIN CERTIFICATE-----
|
1673 |
+
MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1674 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1675 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1676 |
+
Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1677 |
+
eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
|
1678 |
+
SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFow
|
1679 |
+
ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
|
1680 |
+
LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
|
1681 |
+
Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
|
1682 |
+
RTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlm
|
1683 |
+
aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
|
1684 |
+
hkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49NzjaY2uQARIwo
|
1685 |
+
2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY8jjsbJ0gA8DvqqPGZARRLXgNo9Ko
|
1686 |
+
OtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQW
|
1687 |
+
BBS4k/8uy9wsjqLnev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
|
1688 |
+
mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
|
1689 |
+
BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
|
1690 |
+
LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
|
1691 |
+
EyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
|
1692 |
+
Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
|
1693 |
+
cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
|
1694 |
+
BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
|
1695 |
+
BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
|
1696 |
+
BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
|
1697 |
+
hvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
|
1698 |
+
cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
|
1699 |
+
BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCGSAGG
|
1700 |
+
+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTMuaHRtbD8w
|
1701 |
+
PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5o
|
1702 |
+
dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
|
1703 |
+
RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
|
1704 |
+
MDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
|
1705 |
+
Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
|
1706 |
+
cy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc4gYt
|
1707 |
+
fibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUE
|
1708 |
+
NPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkOE7LFRVA=
|
1709 |
+
-----END CERTIFICATE-----
|
1710 |
+
|
1711 |
+
IPS CLASEA1 root
|
1712 |
+
================
|
1713 |
+
-----BEGIN CERTIFICATE-----
|
1714 |
+
MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1715 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1716 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1717 |
+
Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1718 |
+
dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
|
1719 |
+
KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMy
|
1720 |
+
WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
|
1721 |
+
YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
|
1722 |
+
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
|
1723 |
+
QVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENl
|
1724 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
|
1725 |
+
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2mdd81u4D/u6zJf
|
1726 |
+
X5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4WwdByOgF9H5fahGRpEiqLJpxq339fWU
|
1727 |
+
oTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNV
|
1728 |
+
HQ4EFgQUZyaW56G/2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
|
1729 |
+
3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
|
1730 |
+
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
|
1731 |
+
ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
|
1732 |
+
A1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
|
1733 |
+
UyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
|
1734 |
+
bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
|
1735 |
+
AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
|
1736 |
+
FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
|
1737 |
+
GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
|
1738 |
+
BglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
|
1739 |
+
dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
|
1740 |
+
hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmww
|
1741 |
+
QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
|
1742 |
+
QTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
|
1743 |
+
bENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
|
1744 |
+
cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
|
1745 |
+
czIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
|
1746 |
+
MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
|
1747 |
+
Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINmyq0e
|
1748 |
+
B81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5bi
|
1749 |
+
KcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
|
1750 |
+
-----END CERTIFICATE-----
|
1751 |
+
|
1752 |
+
IPS CLASEA3 root
|
1753 |
+
================
|
1754 |
+
-----BEGIN CERTIFICATE-----
|
1755 |
+
MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1756 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1757 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1758 |
+
Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1759 |
+
dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
|
1760 |
+
KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUw
|
1761 |
+
WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
|
1762 |
+
YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
|
1763 |
+
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
|
1764 |
+
QVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENl
|
1765 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
|
1766 |
+
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uGBiJ2MwwSbUhW
|
1767 |
+
YdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHUVqLyjRGZ/fZ98cfEXgIqmuJKtROK
|
1768 |
+
AP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNV
|
1769 |
+
HQ4EFgQUHp9XUEe2YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
|
1770 |
+
2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
|
1771 |
+
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
|
1772 |
+
ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
|
1773 |
+
A1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
|
1774 |
+
UyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
|
1775 |
+
bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
|
1776 |
+
AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
|
1777 |
+
FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
|
1778 |
+
GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
|
1779 |
+
BglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
|
1780 |
+
dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
|
1781 |
+
hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmww
|
1782 |
+
QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
|
1783 |
+
QTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
|
1784 |
+
bENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
|
1785 |
+
cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
|
1786 |
+
czIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
|
1787 |
+
MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
|
1788 |
+
Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB/MjD
|
1789 |
+
81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9S
|
1790 |
+
KcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
|
1791 |
+
-----END CERTIFICATE-----
|
1792 |
+
|
1793 |
+
IPS Servidores root
|
1794 |
+
===================
|
1795 |
+
-----BEGIN CERTIFICATE-----
|
1796 |
+
MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJD
|
1797 |
+
RUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYG
|
1798 |
+
A1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3
|
1799 |
+
DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMx
|
1800 |
+
CzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcG
|
1801 |
+
A1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
|
1802 |
+
Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqG
|
1803 |
+
SIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3PqHILVik
|
1804 |
+
gDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Eh
|
1805 |
+
im51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB
|
1806 |
+
ACzzw3lYJN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2
|
1807 |
+
/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58GNCr+Lh3B0Zx
|
1808 |
+
8coLY1xq+XKU1QFPoNtC
|
1809 |
+
-----END CERTIFICATE-----
|
1810 |
+
|
1811 |
+
IPS Timestamping root
|
1812 |
+
=====================
|
1813 |
+
-----BEGIN CERTIFICATE-----
|
1814 |
+
MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVTMRIwEAYDVQQI
|
1815 |
+
EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
|
1816 |
+
Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
|
1817 |
+
Qi02MDkyOTQ1MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1
|
1818 |
+
dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1819 |
+
cml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1
|
1820 |
+
MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQH
|
1821 |
+
EwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
|
1822 |
+
bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsT
|
1823 |
+
K0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQ
|
1824 |
+
UyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEW
|
1825 |
+
D2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLjuVqWajOY2ycJi
|
1826 |
+
oGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4Efdo/BdApWgnMjvEp+ZCccWZ73b/
|
1827 |
+
K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0Gm
|
1828 |
+
qaMCAwEAAaOCBIAwggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
|
1829 |
+
AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
|
1830 |
+
BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
|
1831 |
+
ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5J
|
1832 |
+
LkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRp
|
1833 |
+
b24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24g
|
1834 |
+
QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB
|
1835 |
+
/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
|
1836 |
+
CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
|
1837 |
+
KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVz
|
1838 |
+
MBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5n
|
1839 |
+
IENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
|
1840 |
+
BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8vd3d3
|
1841 |
+
Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCGSAGG+EIBAwQ4FjZo
|
1842 |
+
dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJ
|
1843 |
+
YIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
|
1844 |
+
Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lU
|
1845 |
+
aW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
|
1846 |
+
MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMv
|
1847 |
+
aXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
|
1848 |
+
MAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoe
|
1849 |
+
FAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWT
|
1850 |
+
s/zif/WN87GphV+I3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
|
1851 |
+
-----END CERTIFICATE-----
|
1852 |
+
|
1853 |
+
QuoVadis Root CA
|
1854 |
+
================
|
1855 |
+
-----BEGIN CERTIFICATE-----
|
1856 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
1857 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1858 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
1859 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
1860 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
1861 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
1862 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
1863 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
1864 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
1865 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
1866 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
1867 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
1868 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
1869 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
1870 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
1871 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
1872 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
1873 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
1874 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
1875 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
1876 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
1877 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
1878 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
1879 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
1880 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
1881 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
1882 |
+
5nrQNiOKSnQ2+Q==
|
1883 |
+
-----END CERTIFICATE-----
|
1884 |
+
|
1885 |
+
QuoVadis Root CA 2
|
1886 |
+
==================
|
1887 |
+
-----BEGIN CERTIFICATE-----
|
1888 |
+
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1889 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
1890 |
+
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1891 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1892 |
+
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
|
1893 |
+
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
1894 |
+
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
|
1895 |
+
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
|
1896 |
+
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
|
1897 |
+
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
1898 |
+
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
|
1899 |
+
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
|
1900 |
+
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
|
1901 |
+
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
|
1902 |
+
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
|
1903 |
+
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
|
1904 |
+
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
1905 |
+
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
|
1906 |
+
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
1907 |
+
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
1908 |
+
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
|
1909 |
+
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
1910 |
+
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
|
1911 |
+
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
|
1912 |
+
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
|
1913 |
+
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
|
1914 |
+
-----END CERTIFICATE-----
|
1915 |
+
|
1916 |
+
QuoVadis Root CA 3
|
1917 |
+
==================
|
1918 |
+
-----BEGIN CERTIFICATE-----
|
1919 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1920 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
1921 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1922 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1923 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
1924 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
1925 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
1926 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
1927 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
1928 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
1929 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
1930 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
1931 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
1932 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
1933 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
1934 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
1935 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
1936 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
1937 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
1938 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
1939 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
1940 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
1941 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
1942 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
1943 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
1944 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
1945 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
1946 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
1947 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
1948 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
1949 |
+
-----END CERTIFICATE-----
|
1950 |
+
|
1951 |
+
Security Communication Root CA
|
1952 |
+
==============================
|
1953 |
+
-----BEGIN CERTIFICATE-----
|
1954 |
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1955 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1956 |
+
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1957 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1958 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
1959 |
+
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
1960 |
+
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
1961 |
+
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
1962 |
+
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
1963 |
+
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
1964 |
+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
1965 |
+
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
1966 |
+
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
1967 |
+
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
1968 |
+
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
1969 |
+
FL39vmwLAw==
|
1970 |
+
-----END CERTIFICATE-----
|
1971 |
+
|
1972 |
+
Sonera Class 1 Root CA
|
1973 |
+
======================
|
1974 |
+
-----BEGIN CERTIFICATE-----
|
1975 |
+
MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1976 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
|
1977 |
+
NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1978 |
+
IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
|
1979 |
+
7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
|
1980 |
+
EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
|
1981 |
+
0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
|
1982 |
+
2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
|
1983 |
+
HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
|
1984 |
+
iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
|
1985 |
+
28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
|
1986 |
+
yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
|
1987 |
+
vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
|
1988 |
+
qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
|
1989 |
+
IRlXvVWa
|
1990 |
+
-----END CERTIFICATE-----
|
1991 |
+
|
1992 |
+
Sonera Class 2 Root CA
|
1993 |
+
======================
|
1994 |
+
-----BEGIN CERTIFICATE-----
|
1995 |
+
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1996 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1997 |
+
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1998 |
+
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1999 |
+
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
2000 |
+
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
2001 |
+
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
2002 |
+
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
2003 |
+
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
2004 |
+
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
2005 |
+
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
2006 |
+
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
2007 |
+
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
2008 |
+
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
2009 |
+
llpwrN9M
|
2010 |
+
-----END CERTIFICATE-----
|
2011 |
+
|
2012 |
+
Staat der Nederlanden Root CA
|
2013 |
+
=============================
|
2014 |
+
-----BEGIN CERTIFICATE-----
|
2015 |
+
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
2016 |
+
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
2017 |
+
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
2018 |
+
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
2019 |
+
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
2020 |
+
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
2021 |
+
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
2022 |
+
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
2023 |
+
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
2024 |
+
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
2025 |
+
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
2026 |
+
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
2027 |
+
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
2028 |
+
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
2029 |
+
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
2030 |
+
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
2031 |
+
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
2032 |
+
-----END CERTIFICATE-----
|
2033 |
+
|
2034 |
+
TDC Internet Root CA
|
2035 |
+
====================
|
2036 |
+
-----BEGIN CERTIFICATE-----
|
2037 |
+
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
|
2038 |
+
ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
|
2039 |
+
NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
|
2040 |
+
ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2041 |
+
MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
|
2042 |
+
xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
|
2043 |
+
znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
|
2044 |
+
5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
|
2045 |
+
otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
|
2046 |
+
AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
|
2047 |
+
VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
|
2048 |
+
MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
|
2049 |
+
AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
|
2050 |
+
UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
|
2051 |
+
CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
|
2052 |
+
gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
|
2053 |
+
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
|
2054 |
+
O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
|
2055 |
+
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
|
2056 |
+
-----END CERTIFICATE-----
|
2057 |
+
|
2058 |
+
TDC OCES Root CA
|
2059 |
+
================
|
2060 |
+
-----BEGIN CERTIFICATE-----
|
2061 |
+
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
|
2062 |
+
ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
|
2063 |
+
MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
|
2064 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
|
2065 |
+
nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
|
2066 |
+
zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
|
2067 |
+
iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
|
2068 |
+
dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
|
2069 |
+
3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
|
2070 |
+
5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
|
2071 |
+
ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
|
2072 |
+
cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
|
2073 |
+
Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
|
2074 |
+
LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
|
2075 |
+
MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
|
2076 |
+
aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
|
2077 |
+
MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
|
2078 |
+
+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
|
2079 |
+
NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
|
2080 |
+
A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
|
2081 |
+
A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
|
2082 |
+
AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
|
2083 |
+
AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
|
2084 |
+
-----END CERTIFICATE-----
|
2085 |
+
|
2086 |
+
UTN DATACorp SGC Root CA
|
2087 |
+
========================
|
2088 |
+
-----BEGIN CERTIFICATE-----
|
2089 |
+
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
|
2090 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
2091 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
|
2092 |
+
BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
|
2093 |
+
MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
|
2094 |
+
HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
|
2095 |
+
dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
2096 |
+
AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
|
2097 |
+
raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
|
2098 |
+
wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
|
2099 |
+
9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
|
2100 |
+
33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
|
2101 |
+
DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
|
2102 |
+
BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
|
2103 |
+
LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
|
2104 |
+
DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
2105 |
+
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
|
2106 |
+
I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
|
2107 |
+
EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
|
2108 |
+
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
|
2109 |
+
-----END CERTIFICATE-----
|
2110 |
+
|
2111 |
+
UTN USERFirst Email Root CA
|
2112 |
+
===========================
|
2113 |
+
-----BEGIN CERTIFICATE-----
|
2114 |
+
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
|
2115 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
2116 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
|
2117 |
+
BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
|
2118 |
+
OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
|
2119 |
+
FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
|
2120 |
+
ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
|
2121 |
+
dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2122 |
+
MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
|
2123 |
+
B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
|
2124 |
+
om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
|
2125 |
+
TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
|
2126 |
+
yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
|
2127 |
+
AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
|
2128 |
+
HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
|
2129 |
+
bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
|
2130 |
+
AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
|
2131 |
+
xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
|
2132 |
+
5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
|
2133 |
+
NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
|
2134 |
+
w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
|
2135 |
+
-----END CERTIFICATE-----
|
2136 |
+
|
2137 |
+
UTN USERFirst Hardware Root CA
|
2138 |
+
==============================
|
2139 |
+
-----BEGIN CERTIFICATE-----
|
2140 |
+
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
2141 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
2142 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
2143 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
|
2144 |
+
OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
|
2145 |
+
eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
|
2146 |
+
ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
|
2147 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
|
2148 |
+
wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
|
2149 |
+
tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
|
2150 |
+
i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
|
2151 |
+
Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
|
2152 |
+
gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
|
2153 |
+
lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
|
2154 |
+
UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
|
2155 |
+
BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
2156 |
+
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
|
2157 |
+
XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
|
2158 |
+
lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
|
2159 |
+
iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
|
2160 |
+
nfhmqA==
|
2161 |
+
-----END CERTIFICATE-----
|
2162 |
+
|
2163 |
+
UTN USERFirst Object Root CA
|
2164 |
+
============================
|
2165 |
+
-----BEGIN CERTIFICATE-----
|
2166 |
+
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
|
2167 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
2168 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
|
2169 |
+
BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
|
2170 |
+
NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
|
2171 |
+
HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
|
2172 |
+
dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
|
2173 |
+
BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
|
2174 |
+
loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
|
2175 |
+
w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
|
2176 |
+
lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
|
2177 |
+
RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
|
2178 |
+
BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
|
2179 |
+
ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
|
2180 |
+
c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
|
2181 |
+
DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
|
2182 |
+
NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
|
2183 |
+
PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
|
2184 |
+
qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
|
2185 |
+
hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
|
2186 |
+
-----END CERTIFICATE-----
|
2187 |
+
|
2188 |
+
Camerfirma Chambers of Commerce Root
|
2189 |
+
====================================
|
2190 |
+
-----BEGIN CERTIFICATE-----
|
2191 |
+
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
2192 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
2193 |
+
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
2194 |
+
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
2195 |
+
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
2196 |
+
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
2197 |
+
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
2198 |
+
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
2199 |
+
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
2200 |
+
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
2201 |
+
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
2202 |
+
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
2203 |
+
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
2204 |
+
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
2205 |
+
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
2206 |
+
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
2207 |
+
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
2208 |
+
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
2209 |
+
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
2210 |
+
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
2211 |
+
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
2212 |
+
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
2213 |
+
-----END CERTIFICATE-----
|
2214 |
+
|
2215 |
+
Camerfirma Global Chambersign Root
|
2216 |
+
==================================
|
2217 |
+
-----BEGIN CERTIFICATE-----
|
2218 |
+
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
2219 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
2220 |
+
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
2221 |
+
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
2222 |
+
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
2223 |
+
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
2224 |
+
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
2225 |
+
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
2226 |
+
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
2227 |
+
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
2228 |
+
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
2229 |
+
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
2230 |
+
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
2231 |
+
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
2232 |
+
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
2233 |
+
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
2234 |
+
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
2235 |
+
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
2236 |
+
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
2237 |
+
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
2238 |
+
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
2239 |
+
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
2240 |
+
-----END CERTIFICATE-----
|
2241 |
+
|
2242 |
+
NetLock Qualified (Class QA) Root
|
2243 |
+
=================================
|
2244 |
+
-----BEGIN CERTIFICATE-----
|
2245 |
+
MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
2246 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
2247 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
|
2248 |
+
eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
|
2249 |
+
bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
|
2250 |
+
MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
|
2251 |
+
LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
|
2252 |
+
dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
|
2253 |
+
aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
|
2254 |
+
CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
|
2255 |
+
8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
|
2256 |
+
m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
|
2257 |
+
0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
|
2258 |
+
0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
2259 |
+
HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
|
2260 |
+
YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
|
2261 |
+
biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
|
2262 |
+
a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
|
2263 |
+
YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
|
2264 |
+
YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
|
2265 |
+
ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
|
2266 |
+
L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
|
2267 |
+
Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
|
2268 |
+
aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
|
2269 |
+
YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
|
2270 |
+
IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
|
2271 |
+
DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
|
2272 |
+
wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
|
2273 |
+
W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
|
2274 |
+
R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
|
2275 |
+
5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
|
2276 |
+
-----END CERTIFICATE-----
|
2277 |
+
|
2278 |
+
NetLock Notary (Class A) Root
|
2279 |
+
=============================
|
2280 |
+
-----BEGIN CERTIFICATE-----
|
2281 |
+
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
2282 |
+
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
2283 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
2284 |
+
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
2285 |
+
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
2286 |
+
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
2287 |
+
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
2288 |
+
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
2289 |
+
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
2290 |
+
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
2291 |
+
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
2292 |
+
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
2293 |
+
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
2294 |
+
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
2295 |
+
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
2296 |
+
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
2297 |
+
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
2298 |
+
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
2299 |
+
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
2300 |
+
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
2301 |
+
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
2302 |
+
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
2303 |
+
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
2304 |
+
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
2305 |
+
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
2306 |
+
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
2307 |
+
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
2308 |
+
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
2309 |
+
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
2310 |
+
8CgHrTwXZoi1/baI
|
2311 |
+
-----END CERTIFICATE-----
|
2312 |
+
|
2313 |
+
NetLock Business (Class B) Root
|
2314 |
+
===============================
|
2315 |
+
-----BEGIN CERTIFICATE-----
|
2316 |
+
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
2317 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
2318 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
|
2319 |
+
VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
|
2320 |
+
VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
|
2321 |
+
bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
|
2322 |
+
VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
2323 |
+
iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
|
2324 |
+
o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
|
2325 |
+
1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
2326 |
+
HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
|
2327 |
+
RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
|
2328 |
+
dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
|
2329 |
+
ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
|
2330 |
+
c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
|
2331 |
+
YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
|
2332 |
+
c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
|
2333 |
+
Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
|
2334 |
+
bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
|
2335 |
+
IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
|
2336 |
+
YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
|
2337 |
+
cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
|
2338 |
+
43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
|
2339 |
+
stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
|
2340 |
+
-----END CERTIFICATE-----
|
2341 |
+
|
2342 |
+
NetLock Express (Class C) Root
|
2343 |
+
==============================
|
2344 |
+
-----BEGIN CERTIFICATE-----
|
2345 |
+
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
2346 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
2347 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
|
2348 |
+
KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
|
2349 |
+
BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
2350 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
|
2351 |
+
ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
|
2352 |
+
jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
|
2353 |
+
W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
|
2354 |
+
euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
|
2355 |
+
DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
|
2356 |
+
RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
|
2357 |
+
YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
|
2358 |
+
IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
|
2359 |
+
aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
|
2360 |
+
ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
|
2361 |
+
ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
|
2362 |
+
dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
|
2363 |
+
emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
|
2364 |
+
IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
|
2365 |
+
UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
|
2366 |
+
YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
|
2367 |
+
xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
|
2368 |
+
gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
|
2369 |
+
-----END CERTIFICATE-----
|
2370 |
+
|
2371 |
+
XRamp Global CA Root
|
2372 |
+
====================
|
2373 |
+
-----BEGIN CERTIFICATE-----
|
2374 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
2375 |
+
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
2376 |
+
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
2377 |
+
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
2378 |
+
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
2379 |
+
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
2380 |
+
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
2381 |
+
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
2382 |
+
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
2383 |
+
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
2384 |
+
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
2385 |
+
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
2386 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
2387 |
+
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
2388 |
+
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
2389 |
+
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
2390 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
2391 |
+
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
2392 |
+
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
2393 |
+
-----END CERTIFICATE-----
|
2394 |
+
|
2395 |
+
Go Daddy Class 2 CA
|
2396 |
+
===================
|
2397 |
+
-----BEGIN CERTIFICATE-----
|
2398 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
2399 |
+
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
2400 |
+
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
2401 |
+
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
2402 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
2403 |
+
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
2404 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
2405 |
+
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
2406 |
+
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
2407 |
+
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
2408 |
+
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
2409 |
+
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
2410 |
+
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
2411 |
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
2412 |
+
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
2413 |
+
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
2414 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
2415 |
+
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
2416 |
+
vZ8=
|
2417 |
+
-----END CERTIFICATE-----
|
2418 |
+
|
2419 |
+
Starfield Class 2 CA
|
2420 |
+
====================
|
2421 |
+
-----BEGIN CERTIFICATE-----
|
2422 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
2423 |
+
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
2424 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
2425 |
+
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
2426 |
+
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
2427 |
+
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
2428 |
+
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
2429 |
+
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
2430 |
+
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
2431 |
+
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
2432 |
+
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
2433 |
+
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
2434 |
+
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
2435 |
+
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
2436 |
+
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
2437 |
+
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
2438 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
2439 |
+
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
2440 |
+
QBFGmh95DmK/D5fs4C8fF5Q=
|
2441 |
+
-----END CERTIFICATE-----
|
2442 |
+
|
2443 |
+
StartCom Ltd.
|
2444 |
+
=============
|
2445 |
+
-----BEGIN CERTIFICATE-----
|
2446 |
+
MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
|
2447 |
+
BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsT
|
2448 |
+
EUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
2449 |
+
cml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoX
|
2450 |
+
DTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcT
|
2451 |
+
BUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVw
|
2452 |
+
LjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B
|
2453 |
+
CQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOe
|
2454 |
+
yEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+
|
2455 |
+
o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2
|
2456 |
+
IhULpNYILzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1Ud
|
2457 |
+
DgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+MtUNjIExtpid
|
2458 |
+
jShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWls
|
2459 |
+
YXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw
|
2460 |
+
JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
|
2461 |
+
YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
|
2462 |
+
HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIB
|
2463 |
+
DQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0
|
2464 |
+
cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9j
|
2465 |
+
ZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9y
|
2466 |
+
Zy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhB
|
2467 |
+
OlP1ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6w
|
2468 |
+
NnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjnfg==
|
2469 |
+
-----END CERTIFICATE-----
|
2470 |
+
|
2471 |
+
StartCom Certification Authority
|
2472 |
+
================================
|
2473 |
+
-----BEGIN CERTIFICATE-----
|
2474 |
+
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
2475 |
+
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
2476 |
+
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
2477 |
+
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
2478 |
+
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
2479 |
+
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
2480 |
+
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
2481 |
+
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
2482 |
+
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
2483 |
+
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
2484 |
+
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
2485 |
+
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
2486 |
+
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
2487 |
+
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
2488 |
+
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
2489 |
+
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
2490 |
+
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
2491 |
+
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
2492 |
+
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
2493 |
+
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
2494 |
+
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
2495 |
+
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
2496 |
+
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
2497 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
2498 |
+
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
2499 |
+
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
2500 |
+
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
2501 |
+
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
2502 |
+
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
2503 |
+
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
2504 |
+
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
2505 |
+
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
2506 |
+
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
2507 |
+
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
2508 |
+
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
2509 |
+
g14=
|
2510 |
+
-----END CERTIFICATE-----
|
2511 |
+
|
2512 |
+
Taiwan GRCA
|
2513 |
+
===========
|
2514 |
+
-----BEGIN CERTIFICATE-----
|
2515 |
+
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
|
2516 |
+
EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
|
2517 |
+
DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
|
2518 |
+
dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
2519 |
+
ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
|
2520 |
+
w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
|
2521 |
+
BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
|
2522 |
+
1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
|
2523 |
+
htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
|
2524 |
+
J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
|
2525 |
+
Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
|
2526 |
+
B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
|
2527 |
+
O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
|
2528 |
+
lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
|
2529 |
+
HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
|
2530 |
+
09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
|
2531 |
+
TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
|
2532 |
+
Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
|
2533 |
+
Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
|
2534 |
+
D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
|
2535 |
+
DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
|
2536 |
+
Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
|
2537 |
+
7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
|
2538 |
+
CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
|
2539 |
+
+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
|
2540 |
+
-----END CERTIFICATE-----
|
2541 |
+
|
2542 |
+
Firmaprofesional Root CA
|
2543 |
+
========================
|
2544 |
+
-----BEGIN CERTIFICATE-----
|
2545 |
+
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
|
2546 |
+
GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
|
2547 |
+
Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
|
2548 |
+
ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
|
2549 |
+
MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
|
2550 |
+
OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
|
2551 |
+
ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
|
2552 |
+
AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
|
2553 |
+
j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
|
2554 |
+
lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
|
2555 |
+
3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
|
2556 |
+
NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
|
2557 |
+
KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
|
2558 |
+
AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
|
2559 |
+
DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
|
2560 |
+
ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
|
2561 |
+
u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
|
2562 |
+
wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
|
2563 |
+
7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
|
2564 |
+
VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
|
2565 |
+
-----END CERTIFICATE-----
|
2566 |
+
|
2567 |
+
Wells Fargo Root CA
|
2568 |
+
===================
|
2569 |
+
-----BEGIN CERTIFICATE-----
|
2570 |
+
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
|
2571 |
+
BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
2572 |
+
cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
2573 |
+
MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
|
2574 |
+
bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
|
2575 |
+
MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
2576 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
|
2577 |
+
x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
|
2578 |
+
E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
|
2579 |
+
OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
|
2580 |
+
sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
|
2581 |
+
YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
|
2582 |
+
BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
|
2583 |
+
ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
|
2584 |
+
m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
|
2585 |
+
OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
|
2586 |
+
x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
|
2587 |
+
tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
|
2588 |
+
-----END CERTIFICATE-----
|
2589 |
+
|
2590 |
+
Swisscom Root CA 1
|
2591 |
+
==================
|
2592 |
+
-----BEGIN CERTIFICATE-----
|
2593 |
+
MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
|
2594 |
+
EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
|
2595 |
+
dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
|
2596 |
+
MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
|
2597 |
+
aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
|
2598 |
+
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
|
2599 |
+
MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
|
2600 |
+
NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
|
2601 |
+
AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
|
2602 |
+
b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
|
2603 |
+
7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
|
2604 |
+
cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
|
2605 |
+
WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
|
2606 |
+
haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
|
2607 |
+
MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
|
2608 |
+
HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
|
2609 |
+
BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
|
2610 |
+
MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
|
2611 |
+
jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
|
2612 |
+
MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
|
2613 |
+
VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
|
2614 |
+
vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
|
2615 |
+
OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
|
2616 |
+
1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
|
2617 |
+
nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
|
2618 |
+
x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
|
2619 |
+
NY6E0F/6MBr1mmz0DlP5OlvRHA==
|
2620 |
+
-----END CERTIFICATE-----
|
2621 |
+
|
2622 |
+
DigiCert Assured ID Root CA
|
2623 |
+
===========================
|
2624 |
+
-----BEGIN CERTIFICATE-----
|
2625 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
2626 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
2627 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
2628 |
+
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
2629 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
2630 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
2631 |
+
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
2632 |
+
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
2633 |
+
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
2634 |
+
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
2635 |
+
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
2636 |
+
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
2637 |
+
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
2638 |
+
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
2639 |
+
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
2640 |
+
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
2641 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
2642 |
+
-----END CERTIFICATE-----
|
2643 |
+
|
2644 |
+
DigiCert Global Root CA
|
2645 |
+
=======================
|
2646 |
+
-----BEGIN CERTIFICATE-----
|
2647 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
2648 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
2649 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
2650 |
+
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
2651 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
2652 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
2653 |
+
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
2654 |
+
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
2655 |
+
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
2656 |
+
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
2657 |
+
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
2658 |
+
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
2659 |
+
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
2660 |
+
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
2661 |
+
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
2662 |
+
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
2663 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
2664 |
+
-----END CERTIFICATE-----
|
2665 |
+
|
2666 |
+
DigiCert High Assurance EV Root CA
|
2667 |
+
==================================
|
2668 |
+
-----BEGIN CERTIFICATE-----
|
2669 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
2670 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
2671 |
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
2672 |
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
2673 |
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
2674 |
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
2675 |
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
2676 |
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
2677 |
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
2678 |
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
2679 |
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
2680 |
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
2681 |
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
2682 |
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
2683 |
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
2684 |
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
2685 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
2686 |
+
-----END CERTIFICATE-----
|
2687 |
+
|
2688 |
+
Certplus Class 2 Primary CA
|
2689 |
+
===========================
|
2690 |
+
-----BEGIN CERTIFICATE-----
|
2691 |
+
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
2692 |
+
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
2693 |
+
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
2694 |
+
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
2695 |
+
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
2696 |
+
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
2697 |
+
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
2698 |
+
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
2699 |
+
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
2700 |
+
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
2701 |
+
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
2702 |
+
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
2703 |
+
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
2704 |
+
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
2705 |
+
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
2706 |
+
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
2707 |
+
l7+ijrRU
|
2708 |
+
-----END CERTIFICATE-----
|
2709 |
+
|
2710 |
+
DST Root CA X3
|
2711 |
+
==============
|
2712 |
+
-----BEGIN CERTIFICATE-----
|
2713 |
+
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
2714 |
+
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
2715 |
+
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
2716 |
+
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
2717 |
+
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
2718 |
+
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
2719 |
+
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
2720 |
+
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
2721 |
+
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
2722 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
2723 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
2724 |
+
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
2725 |
+
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
2726 |
+
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
2727 |
+
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
2728 |
+
-----END CERTIFICATE-----
|
2729 |
+
|
2730 |
+
DST ACES CA X6
|
2731 |
+
==============
|
2732 |
+
-----BEGIN CERTIFICATE-----
|
2733 |
+
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
2734 |
+
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
2735 |
+
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
2736 |
+
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
2737 |
+
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
2738 |
+
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
2739 |
+
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
2740 |
+
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
2741 |
+
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
2742 |
+
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
2743 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
2744 |
+
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
2745 |
+
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
2746 |
+
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
2747 |
+
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
2748 |
+
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
2749 |
+
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
2750 |
+
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
2751 |
+
oKfN5XozNmr6mis=
|
2752 |
+
-----END CERTIFICATE-----
|
2753 |
+
|
2754 |
+
TURKTRUST Certificate Services Provider Root 1
|
2755 |
+
==============================================
|
2756 |
+
-----BEGIN CERTIFICATE-----
|
2757 |
+
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
2758 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
|
2759 |
+
MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
|
2760 |
+
acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
|
2761 |
+
MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
|
2762 |
+
U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
|
2763 |
+
TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
|
2764 |
+
aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
2765 |
+
AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
|
2766 |
+
yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
|
2767 |
+
Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
|
2768 |
+
8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
|
2769 |
+
W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
|
2770 |
+
BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
|
2771 |
+
sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
|
2772 |
+
q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
|
2773 |
+
B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
|
2774 |
+
nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
|
2775 |
+
-----END CERTIFICATE-----
|
2776 |
+
|
2777 |
+
TURKTRUST Certificate Services Provider Root 2
|
2778 |
+
==============================================
|
2779 |
+
-----BEGIN CERTIFICATE-----
|
2780 |
+
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
2781 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
2782 |
+
MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
2783 |
+
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
|
2784 |
+
MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
|
2785 |
+
dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
|
2786 |
+
A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
2787 |
+
acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
|
2788 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
|
2789 |
+
LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
|
2790 |
+
x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
|
2791 |
+
QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
|
2792 |
+
5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
|
2793 |
+
AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
|
2794 |
+
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
|
2795 |
+
Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
|
2796 |
+
Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
|
2797 |
+
hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
|
2798 |
+
9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
|
2799 |
+
UrbnBEI=
|
2800 |
+
-----END CERTIFICATE-----
|
2801 |
+
|
2802 |
+
SwissSign Platinum CA - G2
|
2803 |
+
==========================
|
2804 |
+
-----BEGIN CERTIFICATE-----
|
2805 |
+
MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
|
2806 |
+
BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
|
2807 |
+
HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
|
2808 |
+
U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
|
2809 |
+
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
|
2810 |
+
669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
|
2811 |
+
eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
|
2812 |
+
WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
|
2813 |
+
j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
|
2814 |
+
8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
|
2815 |
+
aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
|
2816 |
+
domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
|
2817 |
+
+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
|
2818 |
+
CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
|
2819 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
|
2820 |
+
zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
|
2821 |
+
IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
|
2822 |
+
Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
|
2823 |
+
NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
|
2824 |
+
U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
|
2825 |
+
KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
|
2826 |
+
9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
|
2827 |
+
aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
|
2828 |
+
OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
|
2829 |
+
Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
|
2830 |
+
IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
|
2831 |
+
-----END CERTIFICATE-----
|
2832 |
+
|
2833 |
+
SwissSign Gold CA - G2
|
2834 |
+
======================
|
2835 |
+
-----BEGIN CERTIFICATE-----
|
2836 |
+
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
|
2837 |
+
EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
|
2838 |
+
MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
|
2839 |
+
c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
|
2840 |
+
AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
|
2841 |
+
t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
|
2842 |
+
jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
|
2843 |
+
vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
|
2844 |
+
ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
|
2845 |
+
AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
|
2846 |
+
jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
|
2847 |
+
peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
|
2848 |
+
7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
|
2849 |
+
GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
|
2850 |
+
AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
|
2851 |
+
OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
|
2852 |
+
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
|
2853 |
+
5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
|
2854 |
+
44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
|
2855 |
+
Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
|
2856 |
+
Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
|
2857 |
+
mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
|
2858 |
+
vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
|
2859 |
+
KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
|
2860 |
+
NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
|
2861 |
+
viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
|
2862 |
+
-----END CERTIFICATE-----
|
2863 |
+
|
2864 |
+
SwissSign Silver CA - G2
|
2865 |
+
========================
|
2866 |
+
-----BEGIN CERTIFICATE-----
|
2867 |
+
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
|
2868 |
+
BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
|
2869 |
+
DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
|
2870 |
+
aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
|
2871 |
+
9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
|
2872 |
+
N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
|
2873 |
+
+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
|
2874 |
+
6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
|
2875 |
+
MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
|
2876 |
+
qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
|
2877 |
+
FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
|
2878 |
+
ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
|
2879 |
+
celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
|
2880 |
+
CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
|
2881 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
|
2882 |
+
tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
|
2883 |
+
cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
|
2884 |
+
4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
|
2885 |
+
kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
|
2886 |
+
3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
|
2887 |
+
/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
|
2888 |
+
DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
|
2889 |
+
e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
|
2890 |
+
WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
|
2891 |
+
DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
|
2892 |
+
DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
|
2893 |
+
-----END CERTIFICATE-----
|
2894 |
+
|
2895 |
+
GeoTrust Primary Certification Authority
|
2896 |
+
========================================
|
2897 |
+
-----BEGIN CERTIFICATE-----
|
2898 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
2899 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
2900 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
2901 |
+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
2902 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2903 |
+
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
2904 |
+
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
2905 |
+
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
2906 |
+
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
2907 |
+
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
2908 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
2909 |
+
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
2910 |
+
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
2911 |
+
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
2912 |
+
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
2913 |
+
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
2914 |
+
-----END CERTIFICATE-----
|
2915 |
+
|
2916 |
+
thawte Primary Root CA
|
2917 |
+
======================
|
2918 |
+
-----BEGIN CERTIFICATE-----
|
2919 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
2920 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2921 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2922 |
+
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
2923 |
+
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
2924 |
+
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
2925 |
+
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
2926 |
+
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
2927 |
+
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
2928 |
+
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
2929 |
+
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
2930 |
+
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
2931 |
+
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
2932 |
+
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
2933 |
+
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
2934 |
+
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
2935 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
2936 |
+
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
2937 |
+
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
2938 |
+
-----END CERTIFICATE-----
|
2939 |
+
|
2940 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
2941 |
+
============================================================
|
2942 |
+
-----BEGIN CERTIFICATE-----
|
2943 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
2944 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2945 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2946 |
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
2947 |
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
2948 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
2949 |
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
2950 |
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
2951 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2952 |
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
2953 |
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
2954 |
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
2955 |
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
2956 |
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
2957 |
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
2958 |
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
2959 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
2960 |
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
2961 |
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
2962 |
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
2963 |
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
2964 |
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
2965 |
+
-----END CERTIFICATE-----
|
2966 |
+
|
2967 |
+
SecureTrust CA
|
2968 |
+
==============
|
2969 |
+
-----BEGIN CERTIFICATE-----
|
2970 |
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
2971 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
2972 |
+
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
2973 |
+
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
2974 |
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
2975 |
+
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
2976 |
+
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
2977 |
+
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
2978 |
+
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
2979 |
+
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
2980 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
2981 |
+
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2982 |
+
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
2983 |
+
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
2984 |
+
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
2985 |
+
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
2986 |
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
2987 |
+
-----END CERTIFICATE-----
|
2988 |
+
|
2989 |
+
Secure Global CA
|
2990 |
+
================
|
2991 |
+
-----BEGIN CERTIFICATE-----
|
2992 |
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
2993 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
2994 |
+
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
2995 |
+
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
2996 |
+
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
2997 |
+
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
2998 |
+
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
2999 |
+
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
3000 |
+
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
3001 |
+
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
3002 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
3003 |
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
3004 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
3005 |
+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
3006 |
+
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
3007 |
+
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
3008 |
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
3009 |
+
-----END CERTIFICATE-----
|
3010 |
+
|
3011 |
+
COMODO Certification Authority
|
3012 |
+
==============================
|
3013 |
+
-----BEGIN CERTIFICATE-----
|
3014 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
3015 |
+
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
3016 |
+
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
3017 |
+
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
3018 |
+
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
3019 |
+
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3020 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
3021 |
+
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
3022 |
+
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
3023 |
+
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
3024 |
+
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
3025 |
+
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
3026 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
3027 |
+
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
3028 |
+
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
3029 |
+
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
3030 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
3031 |
+
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
3032 |
+
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
3033 |
+
-----END CERTIFICATE-----
|
3034 |
+
|
3035 |
+
DigiNotar Root CA
|
3036 |
+
=================
|
3037 |
+
-----BEGIN CERTIFICATE-----
|
3038 |
+
MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG
|
3039 |
+
EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G
|
3040 |
+
CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx
|
3041 |
+
OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90
|
3042 |
+
YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3
|
3043 |
+
DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq
|
3044 |
+
7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U
|
3045 |
+
i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8
|
3046 |
+
ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq
|
3047 |
+
bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4
|
3048 |
+
iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk
|
3049 |
+
XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb
|
3050 |
+
qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6
|
3051 |
+
xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc
|
3052 |
+
BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
3053 |
+
AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
|
3054 |
+
jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5
|
3055 |
+
wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA
|
3056 |
+
ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT
|
3057 |
+
FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf
|
3058 |
+
yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA
|
3059 |
+
ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ
|
3060 |
+
/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE
|
3061 |
+
CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo
|
3062 |
+
EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
|
3063 |
+
-----END CERTIFICATE-----
|
3064 |
+
|
3065 |
+
Network Solutions Certificate Authority
|
3066 |
+
=======================================
|
3067 |
+
-----BEGIN CERTIFICATE-----
|
3068 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
3069 |
+
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
3070 |
+
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
3071 |
+
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
3072 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
3073 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
3074 |
+
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
3075 |
+
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
3076 |
+
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
3077 |
+
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
3078 |
+
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
3079 |
+
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
3080 |
+
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
3081 |
+
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
3082 |
+
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
3083 |
+
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
3084 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
3085 |
+
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
3086 |
+
-----END CERTIFICATE-----
|
3087 |
+
|
3088 |
+
WellsSecure Public Root Certificate Authority
|
3089 |
+
=============================================
|
3090 |
+
-----BEGIN CERTIFICATE-----
|
3091 |
+
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
|
3092 |
+
F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
|
3093 |
+
NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
3094 |
+
MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
|
3095 |
+
bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
|
3096 |
+
VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
3097 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
|
3098 |
+
iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
|
3099 |
+
i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
|
3100 |
+
bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
|
3101 |
+
K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
|
3102 |
+
AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
|
3103 |
+
cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
|
3104 |
+
lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
|
3105 |
+
i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
|
3106 |
+
GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
|
3107 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
|
3108 |
+
K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
|
3109 |
+
bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
|
3110 |
+
qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
|
3111 |
+
E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
|
3112 |
+
tylv2G0xffX8oRAHh84vWdw+WNs=
|
3113 |
+
-----END CERTIFICATE-----
|
lib/CF/cloudfiles.php
ADDED
@@ -0,0 +1,2137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This is the PHP Cloud Files API.
|
4 |
+
*
|
5 |
+
* <code>
|
6 |
+
* # Authenticate to Cloud Files. The default is to automatically try
|
7 |
+
* # to re-authenticate if an authentication token expires.
|
8 |
+
* #
|
9 |
+
* # NOTE: Some versions of cURL include an outdated certificate authority (CA)
|
10 |
+
* # file. This API ships with a newer version obtained directly from
|
11 |
+
* # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
|
12 |
+
* # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
|
13 |
+
* #
|
14 |
+
* $auth = new CF_Authentication($username, $api_key);
|
15 |
+
* # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
|
16 |
+
* $auth->authenticate();
|
17 |
+
*
|
18 |
+
* # Establish a connection to the storage system
|
19 |
+
* #
|
20 |
+
* # NOTE: Some versions of cURL include an outdated certificate authority (CA)
|
21 |
+
* # file. This API ships with a newer version obtained directly from
|
22 |
+
* # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
|
23 |
+
* # call the CF_Connection instance's 'ssl_use_cabundle()' method.
|
24 |
+
* #
|
25 |
+
* $conn = new CF_Connection($auth);
|
26 |
+
* # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
|
27 |
+
*
|
28 |
+
* # Create a remote Container and storage Object
|
29 |
+
* #
|
30 |
+
* $images = $conn->create_container("photos");
|
31 |
+
* $bday = $images->create_object("first_birthday.jpg");
|
32 |
+
*
|
33 |
+
* # Upload content from a local file by streaming it. Note that we use
|
34 |
+
* # a "float" for the file size to overcome PHP's 32-bit integer limit for
|
35 |
+
* # very large files.
|
36 |
+
* #
|
37 |
+
* $fname = "/home/user/photos/birthdays/birthday1.jpg"; # filename to upload
|
38 |
+
* $size = (float) sprintf("%u", filesize($fname));
|
39 |
+
* $fp = open($fname, "r");
|
40 |
+
* $bday->write($fp, $size);
|
41 |
+
*
|
42 |
+
* # Or... use a convenience function instead
|
43 |
+
* #
|
44 |
+
* $bday->load_from_filename("/home/user/photos/birthdays/birthday1.jpg");
|
45 |
+
*
|
46 |
+
* # Now, publish the "photos" container to serve the images by CDN.
|
47 |
+
* # Use the "$uri" value to put in your web pages or send the link in an
|
48 |
+
* # email message, etc.
|
49 |
+
* #
|
50 |
+
* $uri = $images->make_public();
|
51 |
+
*
|
52 |
+
* # Or... print out the Object's public URI
|
53 |
+
* #
|
54 |
+
* print $bday->public_uri();
|
55 |
+
* </code>
|
56 |
+
*
|
57 |
+
* See the included tests directory for additional sample code.
|
58 |
+
*
|
59 |
+
* Requres PHP 5.x (for Exceptions and OO syntax) and PHP's cURL module.
|
60 |
+
*
|
61 |
+
* It uses the supporting "cloudfiles_http.php" module for HTTP(s) support and
|
62 |
+
* allows for connection re-use and streaming of content into/out of Cloud Files
|
63 |
+
* via PHP's cURL module.
|
64 |
+
*
|
65 |
+
* See COPYING for license information.
|
66 |
+
*
|
67 |
+
* @author Eric "EJ" Johnson <ej@racklabs.com>
|
68 |
+
* @copyright Copyright (c) 2008, Rackspace US, Inc.
|
69 |
+
* @package php-cloudfiles
|
70 |
+
*/
|
71 |
+
|
72 |
+
/**
|
73 |
+
*/
|
74 |
+
require_once("cloudfiles_exceptions.php");
|
75 |
+
require("cloudfiles_http.php");
|
76 |
+
define("DEFAULT_CF_API_VERSION", 1);
|
77 |
+
define("MAX_CONTAINER_NAME_LEN", 256);
|
78 |
+
define("MAX_OBJECT_NAME_LEN", 1024);
|
79 |
+
define("MAX_OBJECT_SIZE", 5*1024*1024*1024+1); # bigger than S3! ;-)
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Class for handling Cloud Files Authentication, call it's {@link authenticate()}
|
83 |
+
* method to obtain authorized service urls and an authentication token.
|
84 |
+
*
|
85 |
+
* Example:
|
86 |
+
* <code>
|
87 |
+
* # Create the authentication instance
|
88 |
+
* #
|
89 |
+
* $auth = new CF_Authentication("username", "api_key");
|
90 |
+
*
|
91 |
+
* # NOTE: Some versions of cURL include an outdated certificate authority (CA)
|
92 |
+
* # file. This API ships with a newer version obtained directly from
|
93 |
+
* # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
|
94 |
+
* # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
|
95 |
+
* #
|
96 |
+
* # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
|
97 |
+
*
|
98 |
+
* # Perform authentication request
|
99 |
+
* #
|
100 |
+
* $auth->authenticate();
|
101 |
+
* </code>
|
102 |
+
*
|
103 |
+
* @package php-cloudfiles
|
104 |
+
*/
|
105 |
+
class CF_Authentication
|
106 |
+
{
|
107 |
+
public $dbug;
|
108 |
+
public $username;
|
109 |
+
public $api_key;
|
110 |
+
public $auth_host;
|
111 |
+
public $account;
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Instance variables that are set after successful authentication
|
115 |
+
*/
|
116 |
+
public $storage_url;
|
117 |
+
public $cdnm_url;
|
118 |
+
public $auth_token;
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Class constructor (PHP 5 syntax)
|
122 |
+
*
|
123 |
+
* @param string $username Mosso username
|
124 |
+
* @param string $api_key Mosso API Access Key
|
125 |
+
* @param string $account <b>Deprecated</b> <i>Account name</i>
|
126 |
+
* @param string $auth_host <b>Deprecated</b> <i>Authentication service URI</i>
|
127 |
+
*/
|
128 |
+
function __construct($username=NULL, $api_key=NULL, $account=NULL, $auth_host=NULL)
|
129 |
+
{
|
130 |
+
|
131 |
+
$this->dbug = False;
|
132 |
+
$this->username = $username;
|
133 |
+
$this->api_key = $api_key;
|
134 |
+
$this->account_name = $account;
|
135 |
+
$this->auth_host = $auth_host;
|
136 |
+
|
137 |
+
$this->storage_url = NULL;
|
138 |
+
$this->cdnm_url = NULL;
|
139 |
+
$this->auth_token = NULL;
|
140 |
+
|
141 |
+
$this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Use the Certificate Authority bundle included with this API
|
146 |
+
*
|
147 |
+
* Most versions of PHP with cURL support include an outdated Certificate
|
148 |
+
* Authority (CA) bundle (the file that lists all valid certificate
|
149 |
+
* signing authorities). The SSL certificates used by the Cloud Files
|
150 |
+
* storage system are perfectly valid but have been created/signed by
|
151 |
+
* a CA not listed in these outdated cURL distributions.
|
152 |
+
*
|
153 |
+
* As a work-around, we've included an updated CA bundle obtained
|
154 |
+
* directly from cURL's web site (http://curl.haxx.se). You can direct
|
155 |
+
* the API to use this CA bundle by calling this method prior to making
|
156 |
+
* any remote calls. The best place to use this method is right after
|
157 |
+
* the CF_Authentication instance has been instantiated.
|
158 |
+
*
|
159 |
+
* You can specify your own CA bundle by passing in the full pathname
|
160 |
+
* to the bundle. You can use the included CA bundle by leaving the
|
161 |
+
* argument blank.
|
162 |
+
*
|
163 |
+
* @param string $path Specify path to CA bundle (default to included)
|
164 |
+
*/
|
165 |
+
function ssl_use_cabundle($path=NULL)
|
166 |
+
{
|
167 |
+
$this->cfs_http->ssl_use_cabundle($path);
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Attempt to validate Username/API Access Key
|
172 |
+
*
|
173 |
+
* Attempts to validate credentials with the authentication service. It
|
174 |
+
* either returns <kbd>True</kbd> or throws an Exception. Accepts a single
|
175 |
+
* (optional) argument for the storage system API version.
|
176 |
+
*
|
177 |
+
* Example:
|
178 |
+
* <code>
|
179 |
+
* # Create the authentication instance
|
180 |
+
* #
|
181 |
+
* $auth = new CF_Authentication("username", "api_key");
|
182 |
+
*
|
183 |
+
* # Perform authentication request
|
184 |
+
* #
|
185 |
+
* $auth->authenticate();
|
186 |
+
* </code>
|
187 |
+
*
|
188 |
+
* @param string $version API version for Auth service (optional)
|
189 |
+
* @return boolean <kbd>True</kbd> if successfully authenticated
|
190 |
+
* @throws AuthenticationException invalid credentials
|
191 |
+
* @throws InvalidResponseException invalid response
|
192 |
+
*/
|
193 |
+
function authenticate($version=DEFAULT_CF_API_VERSION)
|
194 |
+
{
|
195 |
+
list($status,$reason,$surl,$curl,$atoken) =
|
196 |
+
$this->cfs_http->authenticate($this->username, $this->api_key,
|
197 |
+
$this->account_name, $this->auth_host);
|
198 |
+
|
199 |
+
if ($status == 401) {
|
200 |
+
throw new AuthenticationException("Invalid username or access key.");
|
201 |
+
}
|
202 |
+
if ($status != 204) {
|
203 |
+
throw new InvalidResponseException(
|
204 |
+
"Unexpected response (".$status."): ".$reason);
|
205 |
+
}
|
206 |
+
|
207 |
+
if (!($surl || $curl) || !$atoken) {
|
208 |
+
throw new InvalidResponseException(
|
209 |
+
"Expected headers missing from auth service.");
|
210 |
+
}
|
211 |
+
$this->storage_url = $surl;
|
212 |
+
$this->cdnm_url = $curl;
|
213 |
+
$this->auth_token = $atoken;
|
214 |
+
return True;
|
215 |
+
}
|
216 |
+
/**
|
217 |
+
* Use Cached Token and Storage URL's rather then grabbing from the Auth System
|
218 |
+
*
|
219 |
+
* Example:
|
220 |
+
* <code>
|
221 |
+
* #Create an Auth instance
|
222 |
+
* $auth = new CF_Authentication();
|
223 |
+
* #Pass Cached URL's and Token as Args
|
224 |
+
* $auth->load_cached_credentials("auth_token", "storage_url", "cdn_management_url");
|
225 |
+
* </code>
|
226 |
+
*
|
227 |
+
* @param string $auth_token A Cloud Files Auth Token (Required)
|
228 |
+
* @param string $storage_url The Cloud Files Storage URL (Required)
|
229 |
+
* @param string $cdnm_url CDN Management URL (Required)
|
230 |
+
* @return boolean <kbd>True</kbd> if successful
|
231 |
+
* @throws SyntaxException If any of the Required Arguments are missing
|
232 |
+
*/
|
233 |
+
function load_cached_credentials($auth_token, $storage_url, $cdnm_url)
|
234 |
+
{
|
235 |
+
if(!$storage_url || !$cdnm_url)
|
236 |
+
{
|
237 |
+
throw new SyntaxException("Missing Required Interface URL's!");
|
238 |
+
return False;
|
239 |
+
}
|
240 |
+
if(!$auth_token)
|
241 |
+
{
|
242 |
+
throw new SyntaxException("Missing Auth Token!");
|
243 |
+
return False;
|
244 |
+
}
|
245 |
+
|
246 |
+
$this->storage_url = $storage_url;
|
247 |
+
$this->cdnm_url = $cdnm_url;
|
248 |
+
$this->auth_token = $auth_token;
|
249 |
+
return True;
|
250 |
+
}
|
251 |
+
/**
|
252 |
+
* Grab Cloud Files info to be Cached for later use with the load_cached_credentials method.
|
253 |
+
*
|
254 |
+
* Example:
|
255 |
+
* <code>
|
256 |
+
* #Create an Auth instance
|
257 |
+
* $auth = new CF_Authentication("UserName","API_Key");
|
258 |
+
* $auth->authenticate();
|
259 |
+
* $array = $auth->export_credentials();
|
260 |
+
* </code>
|
261 |
+
*
|
262 |
+
* @return array of url's and an auth token.
|
263 |
+
*/
|
264 |
+
function export_credentials()
|
265 |
+
{
|
266 |
+
$arr = array();
|
267 |
+
$arr['storage_url'] = $this->storage_url;
|
268 |
+
$arr['cdnm_url'] = $this->cdnm_url;
|
269 |
+
$arr['auth_token'] = $this->auth_token;
|
270 |
+
|
271 |
+
return $arr;
|
272 |
+
}
|
273 |
+
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Make sure the CF_Authentication instance has authenticated.
|
277 |
+
*
|
278 |
+
* Ensures that the instance variables necessary to communicate with
|
279 |
+
* Cloud Files have been set from a previous authenticate() call.
|
280 |
+
*
|
281 |
+
* @return boolean <kbd>True</kbd> if successfully authenticated
|
282 |
+
*/
|
283 |
+
function authenticated()
|
284 |
+
{
|
285 |
+
if (!($this->storage_url || $this->cdnm_url) || !$this->auth_token) {
|
286 |
+
return False;
|
287 |
+
}
|
288 |
+
return True;
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Toggle debugging - set cURL verbose flag
|
293 |
+
*/
|
294 |
+
function setDebug($bool)
|
295 |
+
{
|
296 |
+
$this->dbug = $bool;
|
297 |
+
$this->cfs_http->setDebug($bool);
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Class for establishing connections to the Cloud Files storage system.
|
303 |
+
* Connection instances are used to communicate with the storage system at
|
304 |
+
* the account level; listing and deleting Containers and returning Container
|
305 |
+
* instances.
|
306 |
+
*
|
307 |
+
* Example:
|
308 |
+
* <code>
|
309 |
+
* # Create the authentication instance
|
310 |
+
* #
|
311 |
+
* $auth = new CF_Authentication("username", "api_key");
|
312 |
+
*
|
313 |
+
* # Perform authentication request
|
314 |
+
* #
|
315 |
+
* $auth->authenticate();
|
316 |
+
*
|
317 |
+
* # Create a connection to the storage/cdn system(s) and pass in the
|
318 |
+
* # validated CF_Authentication instance.
|
319 |
+
* #
|
320 |
+
* $conn = new CF_Connection($auth);
|
321 |
+
*
|
322 |
+
* # NOTE: Some versions of cURL include an outdated certificate authority (CA)
|
323 |
+
* # file. This API ships with a newer version obtained directly from
|
324 |
+
* # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
|
325 |
+
* # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
|
326 |
+
* #
|
327 |
+
* # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
|
328 |
+
* </code>
|
329 |
+
*
|
330 |
+
* @package php-cloudfiles
|
331 |
+
*/
|
332 |
+
class CF_Connection
|
333 |
+
{
|
334 |
+
public $dbug;
|
335 |
+
public $cfs_http;
|
336 |
+
public $cfs_auth;
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Pass in a previously authenticated CF_Authentication instance.
|
340 |
+
*
|
341 |
+
* Example:
|
342 |
+
* <code>
|
343 |
+
* # Create the authentication instance
|
344 |
+
* #
|
345 |
+
* $auth = new CF_Authentication("username", "api_key");
|
346 |
+
*
|
347 |
+
* # Perform authentication request
|
348 |
+
* #
|
349 |
+
* $auth->authenticate();
|
350 |
+
*
|
351 |
+
* # Create a connection to the storage/cdn system(s) and pass in the
|
352 |
+
* # validated CF_Authentication instance.
|
353 |
+
* #
|
354 |
+
* $conn = new CF_Connection($auth);
|
355 |
+
*
|
356 |
+
* # If you are connecting via Rackspace servers and have access
|
357 |
+
* # to the servicenet network you can set the $servicenet to True
|
358 |
+
* # like this.
|
359 |
+
*
|
360 |
+
* $conn = new CF_Connection($auth, $servicenet=True);
|
361 |
+
*
|
362 |
+
* </code>
|
363 |
+
*
|
364 |
+
* If the environement variable RACKSPACE_SERVICENET is defined it will
|
365 |
+
* force to connect via the servicenet.
|
366 |
+
*
|
367 |
+
* @param obj $cfs_auth previously authenticated CF_Authentication instance
|
368 |
+
* @param boolean $servicenet enable/disable access via Rackspace servicenet.
|
369 |
+
* @throws AuthenticationException not authenticated
|
370 |
+
*/
|
371 |
+
function __construct($cfs_auth, $servicenet=False)
|
372 |
+
{
|
373 |
+
if (isset($_ENV['RACKSPACE_SERVICENET']))
|
374 |
+
$servicenet=True;
|
375 |
+
$this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
|
376 |
+
$this->cfs_auth = $cfs_auth;
|
377 |
+
if (!$this->cfs_auth->authenticated()) {
|
378 |
+
$e = "Need to pass in a previously authenticated ";
|
379 |
+
$e .= "CF_Authentication instance.";
|
380 |
+
throw new AuthenticationException($e);
|
381 |
+
}
|
382 |
+
$this->cfs_http->setCFAuth($this->cfs_auth, $servicenet=$servicenet);
|
383 |
+
$this->dbug = False;
|
384 |
+
}
|
385 |
+
|
386 |
+
/**
|
387 |
+
* Toggle debugging of instance and back-end HTTP module
|
388 |
+
*
|
389 |
+
* @param boolean $bool enable/disable cURL debugging
|
390 |
+
*/
|
391 |
+
function setDebug($bool)
|
392 |
+
{
|
393 |
+
$this->dbug = (boolean) $bool;
|
394 |
+
$this->cfs_http->setDebug($this->dbug);
|
395 |
+
}
|
396 |
+
|
397 |
+
/**
|
398 |
+
* Close a connection
|
399 |
+
*
|
400 |
+
* Example:
|
401 |
+
* <code>
|
402 |
+
*
|
403 |
+
* $conn->close();
|
404 |
+
*
|
405 |
+
* </code>
|
406 |
+
*
|
407 |
+
* Will close all current cUrl active connections.
|
408 |
+
*
|
409 |
+
*/
|
410 |
+
public function close()
|
411 |
+
{
|
412 |
+
$this->cfs_http->close();
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* Cloud Files account information
|
417 |
+
*
|
418 |
+
* Return an array of two floats (since PHP only supports 32-bit integers);
|
419 |
+
* number of containers on the account and total bytes used for the account.
|
420 |
+
*
|
421 |
+
* Example:
|
422 |
+
* <code>
|
423 |
+
* # ... authentication code excluded (see previous examples) ...
|
424 |
+
* #
|
425 |
+
* $conn = new CF_Authentication($auth);
|
426 |
+
*
|
427 |
+
* list($quantity, $bytes) = $conn->get_info();
|
428 |
+
* print "Number of containers: " . $quantity . "\n";
|
429 |
+
* print "Bytes stored in container: " . $bytes . "\n";
|
430 |
+
* </code>
|
431 |
+
*
|
432 |
+
* @return array (number of containers, total bytes stored)
|
433 |
+
* @throws InvalidResponseException unexpected response
|
434 |
+
*/
|
435 |
+
function get_info()
|
436 |
+
{
|
437 |
+
list($status, $reason, $container_count, $total_bytes) =
|
438 |
+
$this->cfs_http->head_account();
|
439 |
+
#if ($status == 401 && $this->_re_auth()) {
|
440 |
+
# return $this->get_info();
|
441 |
+
#}
|
442 |
+
if ($status < 200 || $status > 299) {
|
443 |
+
throw new InvalidResponseException(
|
444 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
445 |
+
}
|
446 |
+
return array($container_count, $total_bytes);
|
447 |
+
}
|
448 |
+
|
449 |
+
/**
|
450 |
+
* Create a Container
|
451 |
+
*
|
452 |
+
* Given a Container name, return a Container instance, creating a new
|
453 |
+
* remote Container if it does not exit.
|
454 |
+
*
|
455 |
+
* Example:
|
456 |
+
* <code>
|
457 |
+
* # ... authentication code excluded (see previous examples) ...
|
458 |
+
* #
|
459 |
+
* $conn = new CF_Authentication($auth);
|
460 |
+
*
|
461 |
+
* $images = $conn->create_container("my photos");
|
462 |
+
* </code>
|
463 |
+
*
|
464 |
+
* @param string $container_name container name
|
465 |
+
* @return CF_Container
|
466 |
+
* @throws SyntaxException invalid name
|
467 |
+
* @throws InvalidResponseException unexpected response
|
468 |
+
*/
|
469 |
+
function create_container($container_name=NULL)
|
470 |
+
{
|
471 |
+
if ($container_name != "0" and !isset($container_name))
|
472 |
+
throw new SyntaxException("Container name not set.");
|
473 |
+
|
474 |
+
if (!isset($container_name) or $container_name == "")
|
475 |
+
throw new SyntaxException("Container name not set.");
|
476 |
+
|
477 |
+
if (strpos($container_name, "/") !== False) {
|
478 |
+
$r = "Container name '".$container_name;
|
479 |
+
$r .= "' cannot contain a '/' character.";
|
480 |
+
throw new SyntaxException($r);
|
481 |
+
}
|
482 |
+
if (strlen($container_name) > MAX_CONTAINER_NAME_LEN) {
|
483 |
+
throw new SyntaxException(sprintf(
|
484 |
+
"Container name exeeds %d bytes.",
|
485 |
+
MAX_CONTAINER_NAME_LEN));
|
486 |
+
}
|
487 |
+
|
488 |
+
$return_code = $this->cfs_http->create_container($container_name);
|
489 |
+
if (!$return_code) {
|
490 |
+
throw new InvalidResponseException("Invalid response ("
|
491 |
+
. $return_code. "): " . $this->cfs_http->get_error());
|
492 |
+
}
|
493 |
+
#if ($status == 401 && $this->_re_auth()) {
|
494 |
+
# return $this->create_container($container_name);
|
495 |
+
#}
|
496 |
+
if ($return_code != 201 && $return_code != 202) {
|
497 |
+
throw new InvalidResponseException(
|
498 |
+
"Invalid response (".$return_code."): "
|
499 |
+
. $this->cfs_http->get_error());
|
500 |
+
}
|
501 |
+
return new CF_Container($this->cfs_auth, $this->cfs_http, $container_name);
|
502 |
+
}
|
503 |
+
|
504 |
+
/**
|
505 |
+
* Delete a Container
|
506 |
+
*
|
507 |
+
* Given either a Container instance or name, remove the remote Container.
|
508 |
+
* The Container must be empty prior to removing it.
|
509 |
+
*
|
510 |
+
* Example:
|
511 |
+
* <code>
|
512 |
+
* # ... authentication code excluded (see previous examples) ...
|
513 |
+
* #
|
514 |
+
* $conn = new CF_Authentication($auth);
|
515 |
+
*
|
516 |
+
* $conn->delete_container("my photos");
|
517 |
+
* </code>
|
518 |
+
*
|
519 |
+
* @param string|obj $container container name or instance
|
520 |
+
* @return boolean <kbd>True</kbd> if successfully deleted
|
521 |
+
* @throws SyntaxException missing proper argument
|
522 |
+
* @throws InvalidResponseException invalid response
|
523 |
+
* @throws NonEmptyContainerException container not empty
|
524 |
+
* @throws NoSuchContainerException remote container does not exist
|
525 |
+
*/
|
526 |
+
function delete_container($container=NULL)
|
527 |
+
{
|
528 |
+
$container_name = NULL;
|
529 |
+
|
530 |
+
if (is_object($container)) {
|
531 |
+
if (get_class($container) == "CF_Container") {
|
532 |
+
$container_name = $container->name;
|
533 |
+
}
|
534 |
+
}
|
535 |
+
if (is_string($container)) {
|
536 |
+
$container_name = $container;
|
537 |
+
}
|
538 |
+
|
539 |
+
if ($container_name != "0" and !isset($container_name))
|
540 |
+
throw new SyntaxException("Must specify container object or name.");
|
541 |
+
|
542 |
+
$return_code = $this->cfs_http->delete_container($container_name);
|
543 |
+
|
544 |
+
if (!$return_code) {
|
545 |
+
throw new InvalidResponseException("Failed to obtain http response");
|
546 |
+
}
|
547 |
+
#if ($status == 401 && $this->_re_auth()) {
|
548 |
+
# return $this->delete_container($container);
|
549 |
+
#}
|
550 |
+
if ($return_code == 409) {
|
551 |
+
throw new NonEmptyContainerException(
|
552 |
+
"Container must be empty prior to removing it.");
|
553 |
+
}
|
554 |
+
if ($return_code == 404) {
|
555 |
+
throw new NoSuchContainerException(
|
556 |
+
"Specified container did not exist to delete.");
|
557 |
+
}
|
558 |
+
if ($return_code != 204) {
|
559 |
+
throw new InvalidResponseException(
|
560 |
+
"Invalid response (".$return_code."): "
|
561 |
+
. $this->cfs_http->get_error());
|
562 |
+
}
|
563 |
+
return True;
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Return a Container instance
|
568 |
+
*
|
569 |
+
* For the given name, return a Container instance if the remote Container
|
570 |
+
* exists, otherwise throw a Not Found exception.
|
571 |
+
*
|
572 |
+
* Example:
|
573 |
+
* <code>
|
574 |
+
* # ... authentication code excluded (see previous examples) ...
|
575 |
+
* #
|
576 |
+
* $conn = new CF_Authentication($auth);
|
577 |
+
*
|
578 |
+
* $images = $conn->get_container("my photos");
|
579 |
+
* print "Number of Objects: " . $images->count . "\n";
|
580 |
+
* print "Bytes stored in container: " . $images->bytes . "\n";
|
581 |
+
* </code>
|
582 |
+
*
|
583 |
+
* @param string $container_name name of the remote Container
|
584 |
+
* @return container CF_Container instance
|
585 |
+
* @throws NoSuchContainerException thrown if no remote Container
|
586 |
+
* @throws InvalidResponseException unexpected response
|
587 |
+
*/
|
588 |
+
function get_container($container_name=NULL)
|
589 |
+
{
|
590 |
+
list($status, $reason, $count, $bytes) =
|
591 |
+
$this->cfs_http->head_container($container_name);
|
592 |
+
#if ($status == 401 && $this->_re_auth()) {
|
593 |
+
# return $this->get_container($container_name);
|
594 |
+
#}
|
595 |
+
if ($status == 404) {
|
596 |
+
throw new NoSuchContainerException("Container not found.");
|
597 |
+
}
|
598 |
+
if ($status < 200 || $status > 299) {
|
599 |
+
throw new InvalidResponseException(
|
600 |
+
"Invalid response: ".$this->cfs_http->get_error());
|
601 |
+
}
|
602 |
+
return new CF_Container($this->cfs_auth, $this->cfs_http,
|
603 |
+
$container_name, $count, $bytes);
|
604 |
+
}
|
605 |
+
|
606 |
+
/**
|
607 |
+
* Return array of Container instances
|
608 |
+
*
|
609 |
+
* Return an array of CF_Container instances on the account. The instances
|
610 |
+
* will be fully populated with Container attributes (bytes stored and
|
611 |
+
* Object count)
|
612 |
+
*
|
613 |
+
* Example:
|
614 |
+
* <code>
|
615 |
+
* # ... authentication code excluded (see previous examples) ...
|
616 |
+
* #
|
617 |
+
* $conn = new CF_Authentication($auth);
|
618 |
+
*
|
619 |
+
* $clist = $conn->get_containers();
|
620 |
+
* foreach ($clist as $cont) {
|
621 |
+
* print "Container name: " . $cont->name . "\n";
|
622 |
+
* print "Number of Objects: " . $cont->count . "\n";
|
623 |
+
* print "Bytes stored in container: " . $cont->bytes . "\n";
|
624 |
+
* }
|
625 |
+
* </code>
|
626 |
+
*
|
627 |
+
* @return array An array of CF_Container instances
|
628 |
+
* @throws InvalidResponseException unexpected response
|
629 |
+
*/
|
630 |
+
function get_containers($limit=0, $marker=NULL)
|
631 |
+
{
|
632 |
+
list($status, $reason, $container_info) =
|
633 |
+
$this->cfs_http->list_containers_info($limit, $marker);
|
634 |
+
#if ($status == 401 && $this->_re_auth()) {
|
635 |
+
# return $this->get_containers();
|
636 |
+
#}
|
637 |
+
if ($status < 200 || $status > 299) {
|
638 |
+
throw new InvalidResponseException(
|
639 |
+
"Invalid response: ".$this->cfs_http->get_error());
|
640 |
+
}
|
641 |
+
$containers = array();
|
642 |
+
foreach ($container_info as $name => $info) {
|
643 |
+
$containers[] = new CF_Container($this->cfs_auth, $this->cfs_http,
|
644 |
+
$info['name'], $info["count"], $info["bytes"], False);
|
645 |
+
}
|
646 |
+
return $containers;
|
647 |
+
}
|
648 |
+
|
649 |
+
/**
|
650 |
+
* Return list of remote Containers
|
651 |
+
*
|
652 |
+
* Return an array of strings containing the names of all remote Containers.
|
653 |
+
*
|
654 |
+
* Example:
|
655 |
+
* <code>
|
656 |
+
* # ... authentication code excluded (see previous examples) ...
|
657 |
+
* #
|
658 |
+
* $conn = new CF_Authentication($auth);
|
659 |
+
*
|
660 |
+
* $container_list = $conn->list_containers();
|
661 |
+
* print_r($container_list);
|
662 |
+
* Array
|
663 |
+
* (
|
664 |
+
* [0] => "my photos",
|
665 |
+
* [1] => "my docs"
|
666 |
+
* )
|
667 |
+
* </code>
|
668 |
+
*
|
669 |
+
* @param integer $limit restrict results to $limit Containers
|
670 |
+
* @param string $marker return results greater than $marker
|
671 |
+
* @return array list of remote Containers
|
672 |
+
* @throws InvalidResponseException unexpected response
|
673 |
+
*/
|
674 |
+
function list_containers($limit=0, $marker=NULL)
|
675 |
+
{
|
676 |
+
list($status, $reason, $containers) =
|
677 |
+
$this->cfs_http->list_containers($limit, $marker);
|
678 |
+
#if ($status == 401 && $this->_re_auth()) {
|
679 |
+
# return $this->list_containers($limit, $marker);
|
680 |
+
#}
|
681 |
+
if ($status < 200 || $status > 299) {
|
682 |
+
throw new InvalidResponseException(
|
683 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
684 |
+
}
|
685 |
+
return $containers;
|
686 |
+
}
|
687 |
+
|
688 |
+
/**
|
689 |
+
* Return array of information about remote Containers
|
690 |
+
*
|
691 |
+
* Return a nested array structure of Container info.
|
692 |
+
*
|
693 |
+
* Example:
|
694 |
+
* <code>
|
695 |
+
* # ... authentication code excluded (see previous examples) ...
|
696 |
+
* #
|
697 |
+
*
|
698 |
+
* $container_info = $conn->list_containers_info();
|
699 |
+
* print_r($container_info);
|
700 |
+
* Array
|
701 |
+
* (
|
702 |
+
* ["my photos"] =>
|
703 |
+
* Array
|
704 |
+
* (
|
705 |
+
* ["bytes"] => 78,
|
706 |
+
* ["count"] => 2
|
707 |
+
* )
|
708 |
+
* ["docs"] =>
|
709 |
+
* Array
|
710 |
+
* (
|
711 |
+
* ["bytes"] => 37323,
|
712 |
+
* ["count"] => 12
|
713 |
+
* )
|
714 |
+
* )
|
715 |
+
* </code>
|
716 |
+
*
|
717 |
+
* @param integer $limit restrict results to $limit Containers
|
718 |
+
* @param string $marker return results greater than $marker
|
719 |
+
* @return array nested array structure of Container info
|
720 |
+
* @throws InvalidResponseException unexpected response
|
721 |
+
*/
|
722 |
+
function list_containers_info($limit=0, $marker=NULL)
|
723 |
+
{
|
724 |
+
list($status, $reason, $container_info) =
|
725 |
+
$this->cfs_http->list_containers_info($limit, $marker);
|
726 |
+
#if ($status == 401 && $this->_re_auth()) {
|
727 |
+
# return $this->list_containers_info($limit, $marker);
|
728 |
+
#}
|
729 |
+
if ($status < 200 || $status > 299) {
|
730 |
+
throw new InvalidResponseException(
|
731 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
732 |
+
}
|
733 |
+
return $container_info;
|
734 |
+
}
|
735 |
+
|
736 |
+
/**
|
737 |
+
* Return list of Containers that have been published to the CDN.
|
738 |
+
*
|
739 |
+
* Return an array of strings containing the names of published Containers.
|
740 |
+
* Note that this function returns the list of any Container that has
|
741 |
+
* ever been CDN-enabled regardless of it's existence in the storage
|
742 |
+
* system.
|
743 |
+
*
|
744 |
+
* Example:
|
745 |
+
* <code>
|
746 |
+
* # ... authentication code excluded (see previous examples) ...
|
747 |
+
* #
|
748 |
+
* $conn = new CF_Authentication($auth);
|
749 |
+
*
|
750 |
+
* $public_containers = $conn->list_public_containers();
|
751 |
+
* print_r($public_containers);
|
752 |
+
* Array
|
753 |
+
* (
|
754 |
+
* [0] => "images",
|
755 |
+
* [1] => "css",
|
756 |
+
* [2] => "javascript"
|
757 |
+
* )
|
758 |
+
* </code>
|
759 |
+
*
|
760 |
+
* @return array list of published Container names
|
761 |
+
* @throws InvalidResponseException unexpected response
|
762 |
+
*/
|
763 |
+
function list_public_containers()
|
764 |
+
{
|
765 |
+
list($status, $reason, $containers) =
|
766 |
+
$this->cfs_http->list_cdn_containers();
|
767 |
+
#if ($status == 401 && $this->_re_auth()) {
|
768 |
+
# return $this->list_public_containers();
|
769 |
+
#}
|
770 |
+
if ($status < 200 || $status > 299) {
|
771 |
+
throw new InvalidResponseException(
|
772 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
773 |
+
}
|
774 |
+
return $containers;
|
775 |
+
}
|
776 |
+
|
777 |
+
/**
|
778 |
+
* Set a user-supplied callback function to report download progress
|
779 |
+
*
|
780 |
+
* The callback function is used to report incremental progress of a data
|
781 |
+
* download functions (e.g. $container->list_objects(), $obj->read(), etc).
|
782 |
+
* The specified function will be periodically called with the number of
|
783 |
+
* bytes transferred until the entire download is complete. This callback
|
784 |
+
* function can be useful for implementing "progress bars" for large
|
785 |
+
* downloads.
|
786 |
+
*
|
787 |
+
* The specified callback function should take a single integer parameter.
|
788 |
+
*
|
789 |
+
* <code>
|
790 |
+
* function read_callback($bytes_transferred) {
|
791 |
+
* print ">> downloaded " . $bytes_transferred . " bytes.\n";
|
792 |
+
* # ... do other things ...
|
793 |
+
* return;
|
794 |
+
* }
|
795 |
+
*
|
796 |
+
* $conn = new CF_Connection($auth_obj);
|
797 |
+
* $conn->set_read_progress_function("read_callback");
|
798 |
+
* print_r($conn->list_containers());
|
799 |
+
*
|
800 |
+
* # output would look like this:
|
801 |
+
* #
|
802 |
+
* >> downloaded 10 bytes.
|
803 |
+
* >> downloaded 11 bytes.
|
804 |
+
* Array
|
805 |
+
* (
|
806 |
+
* [0] => fuzzy.txt
|
807 |
+
* [1] => space name
|
808 |
+
* )
|
809 |
+
* </code>
|
810 |
+
*
|
811 |
+
* @param string $func_name the name of the user callback function
|
812 |
+
*/
|
813 |
+
function set_read_progress_function($func_name)
|
814 |
+
{
|
815 |
+
$this->cfs_http->setReadProgressFunc($func_name);
|
816 |
+
}
|
817 |
+
|
818 |
+
/**
|
819 |
+
* Set a user-supplied callback function to report upload progress
|
820 |
+
*
|
821 |
+
* The callback function is used to report incremental progress of a data
|
822 |
+
* upload functions (e.g. $obj->write() call). The specified function will
|
823 |
+
* be periodically called with the number of bytes transferred until the
|
824 |
+
* entire upload is complete. This callback function can be useful
|
825 |
+
* for implementing "progress bars" for large uploads/downloads.
|
826 |
+
*
|
827 |
+
* The specified callback function should take a single integer parameter.
|
828 |
+
*
|
829 |
+
* <code>
|
830 |
+
* function write_callback($bytes_transferred) {
|
831 |
+
* print ">> uploaded " . $bytes_transferred . " bytes.\n";
|
832 |
+
* # ... do other things ...
|
833 |
+
* return;
|
834 |
+
* }
|
835 |
+
*
|
836 |
+
* $conn = new CF_Connection($auth_obj);
|
837 |
+
* $conn->set_write_progress_function("write_callback");
|
838 |
+
* $container = $conn->create_container("stuff");
|
839 |
+
* $obj = $container->create_object("foo");
|
840 |
+
* $obj->write("The callback function will be called during upload.");
|
841 |
+
*
|
842 |
+
* # output would look like this:
|
843 |
+
* # >> uploaded 51 bytes.
|
844 |
+
* #
|
845 |
+
* </code>
|
846 |
+
*
|
847 |
+
* @param string $func_name the name of the user callback function
|
848 |
+
*/
|
849 |
+
function set_write_progress_function($func_name)
|
850 |
+
{
|
851 |
+
$this->cfs_http->setWriteProgressFunc($func_name);
|
852 |
+
}
|
853 |
+
|
854 |
+
/**
|
855 |
+
* Use the Certificate Authority bundle included with this API
|
856 |
+
*
|
857 |
+
* Most versions of PHP with cURL support include an outdated Certificate
|
858 |
+
* Authority (CA) bundle (the file that lists all valid certificate
|
859 |
+
* signing authorities). The SSL certificates used by the Cloud Files
|
860 |
+
* storage system are perfectly valid but have been created/signed by
|
861 |
+
* a CA not listed in these outdated cURL distributions.
|
862 |
+
*
|
863 |
+
* As a work-around, we've included an updated CA bundle obtained
|
864 |
+
* directly from cURL's web site (http://curl.haxx.se). You can direct
|
865 |
+
* the API to use this CA bundle by calling this method prior to making
|
866 |
+
* any remote calls. The best place to use this method is right after
|
867 |
+
* the CF_Authentication instance has been instantiated.
|
868 |
+
*
|
869 |
+
* You can specify your own CA bundle by passing in the full pathname
|
870 |
+
* to the bundle. You can use the included CA bundle by leaving the
|
871 |
+
* argument blank.
|
872 |
+
*
|
873 |
+
* @param string $path Specify path to CA bundle (default to included)
|
874 |
+
*/
|
875 |
+
function ssl_use_cabundle($path=NULL)
|
876 |
+
{
|
877 |
+
$this->cfs_http->ssl_use_cabundle($path);
|
878 |
+
}
|
879 |
+
|
880 |
+
#private function _re_auth()
|
881 |
+
#{
|
882 |
+
# $new_auth = new CF_Authentication(
|
883 |
+
# $this->cfs_auth->username,
|
884 |
+
# $this->cfs_auth->api_key,
|
885 |
+
# $this->cfs_auth->auth_host,
|
886 |
+
# $this->cfs_auth->account);
|
887 |
+
# $new_auth->authenticate();
|
888 |
+
# $this->cfs_auth = $new_auth;
|
889 |
+
# $this->cfs_http->setCFAuth($this->cfs_auth);
|
890 |
+
# return True;
|
891 |
+
#}
|
892 |
+
}
|
893 |
+
|
894 |
+
/**
|
895 |
+
* Container operations
|
896 |
+
*
|
897 |
+
* Containers are storage compartments where you put your data (objects).
|
898 |
+
* A container is similar to a directory or folder on a conventional filesystem
|
899 |
+
* with the exception that they exist in a flat namespace, you can not create
|
900 |
+
* containers inside of containers.
|
901 |
+
*
|
902 |
+
* You also have the option of marking a Container as "public" so that the
|
903 |
+
* Objects stored in the Container are publicly available via the CDN.
|
904 |
+
*
|
905 |
+
* @package php-cloudfiles
|
906 |
+
*/
|
907 |
+
class CF_Container
|
908 |
+
{
|
909 |
+
public $cfs_auth;
|
910 |
+
public $cfs_http;
|
911 |
+
public $name;
|
912 |
+
public $object_count;
|
913 |
+
public $bytes_used;
|
914 |
+
|
915 |
+
public $cdn_enabled;
|
916 |
+
public $cdn_uri;
|
917 |
+
public $cdn_ttl;
|
918 |
+
public $cdn_log_retention;
|
919 |
+
public $cdn_acl_user_agent;
|
920 |
+
public $cdn_acl_referrer;
|
921 |
+
|
922 |
+
/**
|
923 |
+
* Class constructor
|
924 |
+
*
|
925 |
+
* Constructor for Container
|
926 |
+
*
|
927 |
+
* @param obj $cfs_auth CF_Authentication instance
|
928 |
+
* @param obj $cfs_http HTTP connection manager
|
929 |
+
* @param string $name name of Container
|
930 |
+
* @param int $count number of Objects stored in this Container
|
931 |
+
* @param int $bytes number of bytes stored in this Container
|
932 |
+
* @throws SyntaxException invalid Container name
|
933 |
+
*/
|
934 |
+
function __construct(&$cfs_auth, &$cfs_http, $name, $count=0,
|
935 |
+
$bytes=0, $docdn=True)
|
936 |
+
{
|
937 |
+
if (strlen($name) > MAX_CONTAINER_NAME_LEN) {
|
938 |
+
throw new SyntaxException("Container name exceeds "
|
939 |
+
. "maximum allowed length.");
|
940 |
+
}
|
941 |
+
if (strpos($name, "/") !== False) {
|
942 |
+
throw new SyntaxException(
|
943 |
+
"Container names cannot contain a '/' character.");
|
944 |
+
}
|
945 |
+
$this->cfs_auth = $cfs_auth;
|
946 |
+
$this->cfs_http = $cfs_http;
|
947 |
+
$this->name = $name;
|
948 |
+
$this->object_count = $count;
|
949 |
+
$this->bytes_used = $bytes;
|
950 |
+
$this->cdn_enabled = NULL;
|
951 |
+
$this->cdn_uri = NULL;
|
952 |
+
$this->cdn_ttl = NULL;
|
953 |
+
$this->cdn_log_retention = NULL;
|
954 |
+
$this->cdn_acl_user_agent = NULL;
|
955 |
+
$this->cdn_acl_referrer = NULL;
|
956 |
+
if ($this->cfs_http->getCDNMUrl() != NULL && $docdn) {
|
957 |
+
$this->_cdn_initialize();
|
958 |
+
}
|
959 |
+
}
|
960 |
+
|
961 |
+
/**
|
962 |
+
* String representation of Container
|
963 |
+
*
|
964 |
+
* Pretty print the Container instance.
|
965 |
+
*
|
966 |
+
* @return string Container details
|
967 |
+
*/
|
968 |
+
function __toString()
|
969 |
+
{
|
970 |
+
$me = sprintf("name: %s, count: %.0f, bytes: %.0f",
|
971 |
+
$this->name, $this->object_count, $this->bytes_used);
|
972 |
+
if ($this->cfs_http->getCDNMUrl() != NULL) {
|
973 |
+
$me .= sprintf(", cdn: %s, cdn uri: %s, cdn ttl: %.0f, logs retention: %s",
|
974 |
+
$this->is_public() ? "Yes" : "No",
|
975 |
+
$this->cdn_uri, $this->cdn_ttl,
|
976 |
+
$this->cdn_log_retention ? "Yes" : "No"
|
977 |
+
);
|
978 |
+
|
979 |
+
if ($this->cdn_acl_user_agent != NULL) {
|
980 |
+
$me .= ", cdn acl user agent: " . $this->cdn_acl_user_agent;
|
981 |
+
}
|
982 |
+
|
983 |
+
if ($this->cdn_acl_referrer != NULL) {
|
984 |
+
$me .= ", cdn acl referrer: " . $this->cdn_acl_referrer;
|
985 |
+
}
|
986 |
+
|
987 |
+
|
988 |
+
}
|
989 |
+
return $me;
|
990 |
+
}
|
991 |
+
|
992 |
+
/**
|
993 |
+
* Enable Container content to be served via CDN or modify CDN attributes
|
994 |
+
*
|
995 |
+
* Either enable this Container's content to be served via CDN or
|
996 |
+
* adjust its CDN attributes. This Container will always return the
|
997 |
+
* same CDN-enabled URI each time it is toggled public/private/public.
|
998 |
+
*
|
999 |
+
* Example:
|
1000 |
+
* <code>
|
1001 |
+
* # ... authentication code excluded (see previous examples) ...
|
1002 |
+
* #
|
1003 |
+
* $conn = new CF_Authentication($auth);
|
1004 |
+
*
|
1005 |
+
* $public_container = $conn->create_container("public");
|
1006 |
+
*
|
1007 |
+
* # CDN-enable the container and set it's TTL for a month
|
1008 |
+
* #
|
1009 |
+
* $public_container->make_public(86400/2); # 12 hours (86400 seconds/day)
|
1010 |
+
* </code>
|
1011 |
+
*
|
1012 |
+
* @param int $ttl the time in seconds content will be cached in the CDN
|
1013 |
+
* @returns string the CDN enabled Container's URI
|
1014 |
+
* @throws CDNNotEnabledException CDN functionality not returned during auth
|
1015 |
+
* @throws AuthenticationException if auth token is not valid/expired
|
1016 |
+
* @throws InvalidResponseException unexpected response
|
1017 |
+
*/
|
1018 |
+
function make_public($ttl=86400)
|
1019 |
+
{
|
1020 |
+
if ($this->cfs_http->getCDNMUrl() == NULL) {
|
1021 |
+
throw new CDNNotEnabledException(
|
1022 |
+
"Authentication response did not indicate CDN availability");
|
1023 |
+
}
|
1024 |
+
if ($this->cdn_uri != NULL) {
|
1025 |
+
# previously published, assume we're setting new attributes
|
1026 |
+
list($status, $reason, $cdn_uri) =
|
1027 |
+
$this->cfs_http->update_cdn_container($this->name,$ttl,
|
1028 |
+
$this->cdn_log_retention,
|
1029 |
+
$this->cdn_acl_user_agent,
|
1030 |
+
$this->cdn_acl_referrer);
|
1031 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1032 |
+
# return $this->make_public($ttl);
|
1033 |
+
#}
|
1034 |
+
if ($status == 404) {
|
1035 |
+
# this instance _thinks_ the container was published, but the
|
1036 |
+
# cdn management system thinks otherwise - try again with a PUT
|
1037 |
+
list($status, $reason, $cdn_uri) =
|
1038 |
+
$this->cfs_http->add_cdn_container($this->name,$ttl);
|
1039 |
+
|
1040 |
+
}
|
1041 |
+
} else {
|
1042 |
+
# publish it for first time
|
1043 |
+
list($status, $reason, $cdn_uri) =
|
1044 |
+
$this->cfs_http->add_cdn_container($this->name,$ttl);
|
1045 |
+
}
|
1046 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1047 |
+
# return $this->make_public($ttl);
|
1048 |
+
#}
|
1049 |
+
if (!in_array($status, array(201,202))) {
|
1050 |
+
throw new InvalidResponseException(
|
1051 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1052 |
+
}
|
1053 |
+
$this->cdn_enabled = True;
|
1054 |
+
$this->cdn_ttl = $ttl;
|
1055 |
+
$this->cdn_uri = $cdn_uri;
|
1056 |
+
$this->cdn_log_retention = False;
|
1057 |
+
$this->cdn_acl_user_agent = "";
|
1058 |
+
$this->cdn_acl_referrer = "";
|
1059 |
+
return $this->cdn_uri;
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
/**
|
1063 |
+
* Enable ACL restriction by User Agent for this container.
|
1064 |
+
*
|
1065 |
+
* Example:
|
1066 |
+
* <code>
|
1067 |
+
* # ... authentication code excluded (see previous examples) ...
|
1068 |
+
* #
|
1069 |
+
* $conn = new CF_Authentication($auth);
|
1070 |
+
*
|
1071 |
+
* $public_container = $conn->get_container("public");
|
1072 |
+
*
|
1073 |
+
* # Enable ACL by Referrer
|
1074 |
+
* $public_container->acl_referrer("Mozilla");
|
1075 |
+
* </code>
|
1076 |
+
*
|
1077 |
+
* @returns boolean True if successful
|
1078 |
+
* @throws CDNNotEnabledException CDN functionality not returned during auth
|
1079 |
+
* @throws AuthenticationException if auth token is not valid/expired
|
1080 |
+
* @throws InvalidResponseException unexpected response
|
1081 |
+
*/
|
1082 |
+
function acl_user_agent($cdn_acl_user_agent="") {
|
1083 |
+
if ($this->cfs_http->getCDNMUrl() == NULL) {
|
1084 |
+
throw new CDNNotEnabledException(
|
1085 |
+
"Authentication response did not indicate CDN availability");
|
1086 |
+
}
|
1087 |
+
list($status,$reason) =
|
1088 |
+
$this->cfs_http->update_cdn_container($this->name,
|
1089 |
+
$this->cdn_ttl,
|
1090 |
+
$this->cdn_log_retention,
|
1091 |
+
$cdn_acl_user_agent,
|
1092 |
+
$this->cdn_acl_referrer
|
1093 |
+
);
|
1094 |
+
if (!in_array($status, array(202,404))) {
|
1095 |
+
throw new InvalidResponseException(
|
1096 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1097 |
+
}
|
1098 |
+
$this->cdn_acl_user_agent = $cdn_acl_user_agent;
|
1099 |
+
return True;
|
1100 |
+
}
|
1101 |
+
|
1102 |
+
/**
|
1103 |
+
* Enable ACL restriction by referer for this container.
|
1104 |
+
*
|
1105 |
+
* Example:
|
1106 |
+
* <code>
|
1107 |
+
* # ... authentication code excluded (see previous examples) ...
|
1108 |
+
* #
|
1109 |
+
* $conn = new CF_Authentication($auth);
|
1110 |
+
*
|
1111 |
+
* $public_container = $conn->get_container("public");
|
1112 |
+
*
|
1113 |
+
* # Enable Referrer
|
1114 |
+
* $public_container->acl_referrer("http://www.example.com/gallery.php");
|
1115 |
+
* </code>
|
1116 |
+
*
|
1117 |
+
* @returns boolean True if successful
|
1118 |
+
* @throws CDNNotEnabledException CDN functionality not returned during auth
|
1119 |
+
* @throws AuthenticationException if auth token is not valid/expired
|
1120 |
+
* @throws InvalidResponseException unexpected response
|
1121 |
+
*/
|
1122 |
+
function acl_referrer($cdn_acl_referrer="") {
|
1123 |
+
if ($this->cfs_http->getCDNMUrl() == NULL) {
|
1124 |
+
throw new CDNNotEnabledException(
|
1125 |
+
"Authentication response did not indicate CDN availability");
|
1126 |
+
}
|
1127 |
+
list($status,$reason) =
|
1128 |
+
$this->cfs_http->update_cdn_container($this->name,
|
1129 |
+
$this->cdn_ttl,
|
1130 |
+
$this->cdn_log_retention,
|
1131 |
+
$this->cdn_acl_user_agent,
|
1132 |
+
$cdn_acl_referrer
|
1133 |
+
);
|
1134 |
+
if (!in_array($status, array(202,404))) {
|
1135 |
+
throw new InvalidResponseException(
|
1136 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1137 |
+
}
|
1138 |
+
$this->cdn_acl_referrer = $cdn_acl_referrer;
|
1139 |
+
return True;
|
1140 |
+
}
|
1141 |
+
|
1142 |
+
/**
|
1143 |
+
* Enable log retention for this CDN container.
|
1144 |
+
*
|
1145 |
+
* Enable CDN log retention on the container. If enabled logs will
|
1146 |
+
* be periodically (at unpredictable intervals) compressed and
|
1147 |
+
* uploaded to a ".CDN_ACCESS_LOGS" container in the form of
|
1148 |
+
* "container_name.YYYYMMDDHH-XXXX.gz". Requires CDN be enabled on
|
1149 |
+
* the account.
|
1150 |
+
*
|
1151 |
+
* Example:
|
1152 |
+
* <code>
|
1153 |
+
* # ... authentication code excluded (see previous examples) ...
|
1154 |
+
* #
|
1155 |
+
* $conn = new CF_Authentication($auth);
|
1156 |
+
*
|
1157 |
+
* $public_container = $conn->get_container("public");
|
1158 |
+
*
|
1159 |
+
* # Enable logs retention.
|
1160 |
+
* $public_container->log_retention(True);
|
1161 |
+
* </code>
|
1162 |
+
*
|
1163 |
+
* @returns boolean True if successful
|
1164 |
+
* @throws CDNNotEnabledException CDN functionality not returned during auth
|
1165 |
+
* @throws AuthenticationException if auth token is not valid/expired
|
1166 |
+
* @throws InvalidResponseException unexpected response
|
1167 |
+
*/
|
1168 |
+
function log_retention($cdn_log_retention=False) {
|
1169 |
+
if ($this->cfs_http->getCDNMUrl() == NULL) {
|
1170 |
+
throw new CDNNotEnabledException(
|
1171 |
+
"Authentication response did not indicate CDN availability");
|
1172 |
+
}
|
1173 |
+
list($status,$reason) =
|
1174 |
+
$this->cfs_http->update_cdn_container($this->name,
|
1175 |
+
$this->cdn_ttl,
|
1176 |
+
$cdn_log_retention,
|
1177 |
+
$this->cdn_acl_user_agent,
|
1178 |
+
$this->cdn_acl_referrer
|
1179 |
+
);
|
1180 |
+
if (!in_array($status, array(202,404))) {
|
1181 |
+
throw new InvalidResponseException(
|
1182 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1183 |
+
}
|
1184 |
+
$this->cdn_log_retention = $cdn_log_retention;
|
1185 |
+
return True;
|
1186 |
+
}
|
1187 |
+
|
1188 |
+
/**
|
1189 |
+
* Disable the CDN sharing for this container
|
1190 |
+
*
|
1191 |
+
* Use this method to disallow distribution into the CDN of this Container's
|
1192 |
+
* content.
|
1193 |
+
*
|
1194 |
+
* NOTE: Any content already cached in the CDN will continue to be served
|
1195 |
+
* from its cache until the TTL expiration transpires. The default
|
1196 |
+
* TTL is typically one day, so "privatizing" the Container will take
|
1197 |
+
* up to 24 hours before the content is purged from the CDN cache.
|
1198 |
+
*
|
1199 |
+
* Example:
|
1200 |
+
* <code>
|
1201 |
+
* # ... authentication code excluded (see previous examples) ...
|
1202 |
+
* #
|
1203 |
+
* $conn = new CF_Authentication($auth);
|
1204 |
+
*
|
1205 |
+
* $public_container = $conn->get_container("public");
|
1206 |
+
*
|
1207 |
+
* # Disable CDN accessability
|
1208 |
+
* # ... still cached up to a month based on previous example
|
1209 |
+
* #
|
1210 |
+
* $public_container->make_private();
|
1211 |
+
* </code>
|
1212 |
+
*
|
1213 |
+
* @returns boolean True if successful
|
1214 |
+
* @throws CDNNotEnabledException CDN functionality not returned during auth
|
1215 |
+
* @throws AuthenticationException if auth token is not valid/expired
|
1216 |
+
* @throws InvalidResponseException unexpected response
|
1217 |
+
*/
|
1218 |
+
function make_private()
|
1219 |
+
{
|
1220 |
+
if ($this->cfs_http->getCDNMUrl() == NULL) {
|
1221 |
+
throw new CDNNotEnabledException(
|
1222 |
+
"Authentication response did not indicate CDN availability");
|
1223 |
+
}
|
1224 |
+
list($status,$reason) = $this->cfs_http->remove_cdn_container($this->name);
|
1225 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1226 |
+
# return $this->make_private();
|
1227 |
+
#}
|
1228 |
+
if (!in_array($status, array(202,404))) {
|
1229 |
+
throw new InvalidResponseException(
|
1230 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1231 |
+
}
|
1232 |
+
$this->cdn_enabled = False;
|
1233 |
+
$this->cdn_ttl = NULL;
|
1234 |
+
$this->cdn_uri = NULL;
|
1235 |
+
$this->cdn_log_retention = NULL;
|
1236 |
+
$this->cdn_acl_user_agent = NULL;
|
1237 |
+
$this->cdn_acl_referrer = NULL;
|
1238 |
+
return True;
|
1239 |
+
}
|
1240 |
+
|
1241 |
+
/**
|
1242 |
+
* Check if this Container is being publicly served via CDN
|
1243 |
+
*
|
1244 |
+
* Use this method to determine if the Container's content is currently
|
1245 |
+
* available through the CDN.
|
1246 |
+
*
|
1247 |
+
* Example:
|
1248 |
+
* <code>
|
1249 |
+
* # ... authentication code excluded (see previous examples) ...
|
1250 |
+
* #
|
1251 |
+
* $conn = new CF_Authentication($auth);
|
1252 |
+
*
|
1253 |
+
* $public_container = $conn->get_container("public");
|
1254 |
+
*
|
1255 |
+
* # Display CDN accessability
|
1256 |
+
* #
|
1257 |
+
* $public_container->is_public() ? print "Yes" : print "No";
|
1258 |
+
* </code>
|
1259 |
+
*
|
1260 |
+
* @returns boolean True if enabled, False otherwise
|
1261 |
+
*/
|
1262 |
+
function is_public()
|
1263 |
+
{
|
1264 |
+
return $this->cdn_enabled == True ? True : False;
|
1265 |
+
}
|
1266 |
+
|
1267 |
+
/**
|
1268 |
+
* Create a new remote storage Object
|
1269 |
+
*
|
1270 |
+
* Return a new Object instance. If the remote storage Object exists,
|
1271 |
+
* the instance's attributes are populated.
|
1272 |
+
*
|
1273 |
+
* Example:
|
1274 |
+
* <code>
|
1275 |
+
* # ... authentication code excluded (see previous examples) ...
|
1276 |
+
* #
|
1277 |
+
* $conn = new CF_Authentication($auth);
|
1278 |
+
*
|
1279 |
+
* $public_container = $conn->get_container("public");
|
1280 |
+
*
|
1281 |
+
* # This creates a local instance of a storage object but only creates
|
1282 |
+
* # it in the storage system when the object's write() method is called.
|
1283 |
+
* #
|
1284 |
+
* $pic = $public_container->create_object("baby.jpg");
|
1285 |
+
* </code>
|
1286 |
+
*
|
1287 |
+
* @param string $obj_name name of storage Object
|
1288 |
+
* @return obj CF_Object instance
|
1289 |
+
*/
|
1290 |
+
function create_object($obj_name=NULL)
|
1291 |
+
{
|
1292 |
+
return new CF_Object($this, $obj_name);
|
1293 |
+
}
|
1294 |
+
|
1295 |
+
/**
|
1296 |
+
* Return an Object instance for the remote storage Object
|
1297 |
+
*
|
1298 |
+
* Given a name, return a Object instance representing the
|
1299 |
+
* remote storage object.
|
1300 |
+
*
|
1301 |
+
* Example:
|
1302 |
+
* <code>
|
1303 |
+
* # ... authentication code excluded (see previous examples) ...
|
1304 |
+
* #
|
1305 |
+
* $conn = new CF_Authentication($auth);
|
1306 |
+
*
|
1307 |
+
* $public_container = $conn->get_container("public");
|
1308 |
+
*
|
1309 |
+
* # This call only fetches header information and not the content of
|
1310 |
+
* # the storage object. Use the Object's read() or stream() methods
|
1311 |
+
* # to obtain the object's data.
|
1312 |
+
* #
|
1313 |
+
* $pic = $public_container->get_object("baby.jpg");
|
1314 |
+
* </code>
|
1315 |
+
*
|
1316 |
+
* @param string $obj_name name of storage Object
|
1317 |
+
* @return obj CF_Object instance
|
1318 |
+
*/
|
1319 |
+
function get_object($obj_name=NULL)
|
1320 |
+
{
|
1321 |
+
return new CF_Object($this, $obj_name, True);
|
1322 |
+
}
|
1323 |
+
|
1324 |
+
/**
|
1325 |
+
* Return a list of Objects
|
1326 |
+
*
|
1327 |
+
* Return an array of strings listing the Object names in this Container.
|
1328 |
+
*
|
1329 |
+
* Example:
|
1330 |
+
* <code>
|
1331 |
+
* # ... authentication code excluded (see previous examples) ...
|
1332 |
+
* #
|
1333 |
+
* $images = $conn->get_container("my photos");
|
1334 |
+
*
|
1335 |
+
* # Grab the list of all storage objects
|
1336 |
+
* #
|
1337 |
+
* $all_objects = $images->list_objects();
|
1338 |
+
*
|
1339 |
+
* # Grab subsets of all storage objects
|
1340 |
+
* #
|
1341 |
+
* $first_ten = $images->list_objects(10);
|
1342 |
+
*
|
1343 |
+
* # Note the use of the previous result's last object name being
|
1344 |
+
* # used as the 'marker' parameter to fetch the next 10 objects
|
1345 |
+
* #
|
1346 |
+
* $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
|
1347 |
+
*
|
1348 |
+
* # Grab images starting with "birthday_party" and default limit/marker
|
1349 |
+
* # to match all photos with that prefix
|
1350 |
+
* #
|
1351 |
+
* $prefixed = $images->list_objects(0, NULL, "birthday");
|
1352 |
+
*
|
1353 |
+
* # Assuming you have created the appropriate directory marker Objects,
|
1354 |
+
* # you can traverse your pseudo-hierarchical containers
|
1355 |
+
* # with the "path" argument.
|
1356 |
+
* #
|
1357 |
+
* $animals = $images->list_objects(0,NULL,NULL,"pictures/animals");
|
1358 |
+
* $dogs = $images->list_objects(0,NULL,NULL,"pictures/animals/dogs");
|
1359 |
+
* </code>
|
1360 |
+
*
|
1361 |
+
* @param int $limit <i>optional</i> only return $limit names
|
1362 |
+
* @param int $marker <i>optional</i> subset of names starting at $marker
|
1363 |
+
* @param string $prefix <i>optional</i> Objects whose names begin with $prefix
|
1364 |
+
* @param string $path <i>optional</i> only return results under "pathname"
|
1365 |
+
* @return array array of strings
|
1366 |
+
* @throws InvalidResponseException unexpected response
|
1367 |
+
*/
|
1368 |
+
function list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
|
1369 |
+
{
|
1370 |
+
list($status, $reason, $obj_list) =
|
1371 |
+
$this->cfs_http->list_objects($this->name, $limit,
|
1372 |
+
$marker, $prefix, $path);
|
1373 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1374 |
+
# return $this->list_objects($limit, $marker, $prefix, $path);
|
1375 |
+
#}
|
1376 |
+
if ($status < 200 || $status > 299) {
|
1377 |
+
throw new InvalidResponseException(
|
1378 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1379 |
+
}
|
1380 |
+
return $obj_list;
|
1381 |
+
}
|
1382 |
+
|
1383 |
+
/**
|
1384 |
+
* Return an array of Objects
|
1385 |
+
*
|
1386 |
+
* Return an array of Object instances in this Container.
|
1387 |
+
*
|
1388 |
+
* Example:
|
1389 |
+
* <code>
|
1390 |
+
* # ... authentication code excluded (see previous examples) ...
|
1391 |
+
* #
|
1392 |
+
* $images = $conn->get_container("my photos");
|
1393 |
+
*
|
1394 |
+
* # Grab the list of all storage objects
|
1395 |
+
* #
|
1396 |
+
* $all_objects = $images->get_objects();
|
1397 |
+
*
|
1398 |
+
* # Grab subsets of all storage objects
|
1399 |
+
* #
|
1400 |
+
* $first_ten = $images->get_objects(10);
|
1401 |
+
*
|
1402 |
+
* # Note the use of the previous result's last object name being
|
1403 |
+
* # used as the 'marker' parameter to fetch the next 10 objects
|
1404 |
+
* #
|
1405 |
+
* $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
|
1406 |
+
*
|
1407 |
+
* # Grab images starting with "birthday_party" and default limit/marker
|
1408 |
+
* # to match all photos with that prefix
|
1409 |
+
* #
|
1410 |
+
* $prefixed = $images->get_objects(0, NULL, "birthday");
|
1411 |
+
*
|
1412 |
+
* # Assuming you have created the appropriate directory marker Objects,
|
1413 |
+
* # you can traverse your pseudo-hierarchical containers
|
1414 |
+
* # with the "path" argument.
|
1415 |
+
* #
|
1416 |
+
* $animals = $images->get_objects(0,NULL,NULL,"pictures/animals");
|
1417 |
+
* $dogs = $images->get_objects(0,NULL,NULL,"pictures/animals/dogs");
|
1418 |
+
* </code>
|
1419 |
+
*
|
1420 |
+
* @param int $limit <i>optional</i> only return $limit names
|
1421 |
+
* @param int $marker <i>optional</i> subset of names starting at $marker
|
1422 |
+
* @param string $prefix <i>optional</i> Objects whose names begin with $prefix
|
1423 |
+
* @param string $path <i>optional</i> only return results under "pathname"
|
1424 |
+
* @return array array of strings
|
1425 |
+
* @throws InvalidResponseException unexpected response
|
1426 |
+
*/
|
1427 |
+
function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
|
1428 |
+
{
|
1429 |
+
list($status, $reason, $obj_array) =
|
1430 |
+
$this->cfs_http->get_objects($this->name, $limit,
|
1431 |
+
$marker, $prefix, $path);
|
1432 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1433 |
+
# return $this->get_objects($limit, $marker, $prefix, $path);
|
1434 |
+
#}
|
1435 |
+
if ($status < 200 || $status > 299) {
|
1436 |
+
throw new InvalidResponseException(
|
1437 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1438 |
+
}
|
1439 |
+
$objects = array();
|
1440 |
+
foreach ($obj_array as $obj) {
|
1441 |
+
$tmp = new CF_Object($this, $obj["name"], False, False);
|
1442 |
+
$tmp->content_type = $obj["content_type"];
|
1443 |
+
$tmp->content_length = (float) $obj["bytes"];
|
1444 |
+
$tmp->set_etag($obj["hash"]);
|
1445 |
+
$tmp->last_modified = $obj["last_modified"];
|
1446 |
+
$objects[] = $tmp;
|
1447 |
+
}
|
1448 |
+
return $objects;
|
1449 |
+
}
|
1450 |
+
|
1451 |
+
/**
|
1452 |
+
* Delete a remote storage Object
|
1453 |
+
*
|
1454 |
+
* Given an Object instance or name, permanently remove the remote Object
|
1455 |
+
* and all associated metadata.
|
1456 |
+
*
|
1457 |
+
* Example:
|
1458 |
+
* <code>
|
1459 |
+
* # ... authentication code excluded (see previous examples) ...
|
1460 |
+
* #
|
1461 |
+
* $conn = new CF_Authentication($auth);
|
1462 |
+
*
|
1463 |
+
* $images = $conn->get_container("my photos");
|
1464 |
+
*
|
1465 |
+
* # Delete specific object
|
1466 |
+
* #
|
1467 |
+
* $images->delete_object("disco_dancing.jpg");
|
1468 |
+
* </code>
|
1469 |
+
*
|
1470 |
+
* @param obj $obj name or instance of Object to delete
|
1471 |
+
* @return boolean <kbd>True</kbd> if successfully removed
|
1472 |
+
* @throws SyntaxException invalid Object name
|
1473 |
+
* @throws NoSuchObjectException remote Object does not exist
|
1474 |
+
* @throws InvalidResponseException unexpected response
|
1475 |
+
*/
|
1476 |
+
function delete_object($obj)
|
1477 |
+
{
|
1478 |
+
$obj_name = NULL;
|
1479 |
+
if (is_object($obj)) {
|
1480 |
+
if (get_class($obj) == "CF_Object") {
|
1481 |
+
$obj_name = $obj->name;
|
1482 |
+
}
|
1483 |
+
}
|
1484 |
+
if (is_string($obj)) {
|
1485 |
+
$obj_name = $obj;
|
1486 |
+
}
|
1487 |
+
if (!$obj_name) {
|
1488 |
+
throw new SyntaxException("Object name not set.");
|
1489 |
+
}
|
1490 |
+
$status = $this->cfs_http->delete_object($this->name, $obj_name);
|
1491 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1492 |
+
# return $this->delete_object($obj);
|
1493 |
+
#}
|
1494 |
+
if ($status == 404) {
|
1495 |
+
$m = "Specified object '".$this->name."/".$obj_name;
|
1496 |
+
$m.= "' did not exist to delete.";
|
1497 |
+
throw new NoSuchObjectException($m);
|
1498 |
+
}
|
1499 |
+
if ($status != 204) {
|
1500 |
+
throw new InvalidResponseException(
|
1501 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1502 |
+
}
|
1503 |
+
return True;
|
1504 |
+
}
|
1505 |
+
|
1506 |
+
/**
|
1507 |
+
* Helper function to create "path" elements for a given Object name
|
1508 |
+
*
|
1509 |
+
* Given an Object whos name contains '/' path separators, this function
|
1510 |
+
* will create the "directory marker" Objects of one byte with the
|
1511 |
+
* Content-Type of "application/folder".
|
1512 |
+
*
|
1513 |
+
* It assumes the last element of the full path is the "real" Object
|
1514 |
+
* and does NOT create a remote storage Object for that last element.
|
1515 |
+
*/
|
1516 |
+
function create_paths($path_name)
|
1517 |
+
{
|
1518 |
+
if ($path_name[0] == '/') {
|
1519 |
+
$path_name = mb_substr($path_name, 0, 1);
|
1520 |
+
}
|
1521 |
+
$elements = explode('/', $path_name, -1);
|
1522 |
+
$build_path = "";
|
1523 |
+
foreach ($elements as $idx => $val) {
|
1524 |
+
if (!$build_path) {
|
1525 |
+
$build_path = $val;
|
1526 |
+
} else {
|
1527 |
+
$build_path .= "/" . $val;
|
1528 |
+
}
|
1529 |
+
$obj = new CF_Object($this, $build_path);
|
1530 |
+
$obj->content_type = "application/directory";
|
1531 |
+
$obj->write(".", 1);
|
1532 |
+
}
|
1533 |
+
}
|
1534 |
+
|
1535 |
+
/**
|
1536 |
+
* Internal method to grab CDN/Container info if appropriate to do so
|
1537 |
+
*
|
1538 |
+
* @throws InvalidResponseException unexpected response
|
1539 |
+
*/
|
1540 |
+
private function _cdn_initialize()
|
1541 |
+
{
|
1542 |
+
list($status, $reason, $cdn_enabled, $cdn_uri, $cdn_ttl,
|
1543 |
+
$cdn_log_retention, $cdn_acl_user_agent, $cdn_acl_referrer) =
|
1544 |
+
$this->cfs_http->head_cdn_container($this->name);
|
1545 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1546 |
+
# return $this->_cdn_initialize();
|
1547 |
+
#}
|
1548 |
+
if (!in_array($status, array(204,404))) {
|
1549 |
+
throw new InvalidResponseException(
|
1550 |
+
"Invalid response (".$status."): ".$this->cfs_http->get_error());
|
1551 |
+
}
|
1552 |
+
$this->cdn_enabled = $cdn_enabled;
|
1553 |
+
$this->cdn_uri = $cdn_uri;
|
1554 |
+
$this->cdn_ttl = $cdn_ttl;
|
1555 |
+
$this->cdn_log_retention = $cdn_log_retention;
|
1556 |
+
$this->cdn_acl_user_agent = $cdn_acl_user_agent;
|
1557 |
+
$this->cdn_acl_referrer = $cdn_acl_referrer;
|
1558 |
+
}
|
1559 |
+
|
1560 |
+
#private function _re_auth()
|
1561 |
+
#{
|
1562 |
+
# $new_auth = new CF_Authentication(
|
1563 |
+
# $this->cfs_auth->username,
|
1564 |
+
# $this->cfs_auth->api_key,
|
1565 |
+
# $this->cfs_auth->auth_host,
|
1566 |
+
# $this->cfs_auth->account);
|
1567 |
+
# $new_auth->authenticate();
|
1568 |
+
# $this->cfs_auth = $new_auth;
|
1569 |
+
# $this->cfs_http->setCFAuth($this->cfs_auth);
|
1570 |
+
# return True;
|
1571 |
+
#}
|
1572 |
+
}
|
1573 |
+
|
1574 |
+
|
1575 |
+
/**
|
1576 |
+
* Object operations
|
1577 |
+
*
|
1578 |
+
* An Object is analogous to a file on a conventional filesystem. You can
|
1579 |
+
* read data from, or write data to your Objects. You can also associate
|
1580 |
+
* arbitrary metadata with them.
|
1581 |
+
*
|
1582 |
+
* @package php-cloudfiles
|
1583 |
+
*/
|
1584 |
+
class CF_Object
|
1585 |
+
{
|
1586 |
+
public $container;
|
1587 |
+
public $name;
|
1588 |
+
public $last_modified;
|
1589 |
+
public $content_type;
|
1590 |
+
public $content_length;
|
1591 |
+
public $metadata;
|
1592 |
+
private $etag;
|
1593 |
+
|
1594 |
+
/**
|
1595 |
+
* Class constructor
|
1596 |
+
*
|
1597 |
+
* @param obj $container CF_Container instance
|
1598 |
+
* @param string $name name of Object
|
1599 |
+
* @param boolean $force_exists if set, throw an error if Object doesn't exist
|
1600 |
+
*/
|
1601 |
+
function __construct(&$container, $name, $force_exists=False, $dohead=True)
|
1602 |
+
{
|
1603 |
+
if ($name[0] == "/") {
|
1604 |
+
$r = "Object name '".$name;
|
1605 |
+
$r .= "' cannot contain begin with a '/' character.";
|
1606 |
+
throw new SyntaxException($r);
|
1607 |
+
}
|
1608 |
+
if (strlen($name) > MAX_OBJECT_NAME_LEN) {
|
1609 |
+
throw new SyntaxException("Object name exceeds "
|
1610 |
+
. "maximum allowed length.");
|
1611 |
+
}
|
1612 |
+
$this->container = $container;
|
1613 |
+
$this->name = $name;
|
1614 |
+
$this->etag = NULL;
|
1615 |
+
$this->_etag_override = False;
|
1616 |
+
$this->last_modified = NULL;
|
1617 |
+
$this->content_type = NULL;
|
1618 |
+
$this->content_length = 0;
|
1619 |
+
$this->metadata = array();
|
1620 |
+
if ($dohead) {
|
1621 |
+
if (!$this->_initialize() && $force_exists) {
|
1622 |
+
throw new NoSuchObjectException("No such object '".$name."'");
|
1623 |
+
}
|
1624 |
+
}
|
1625 |
+
}
|
1626 |
+
|
1627 |
+
/**
|
1628 |
+
* String representation of Object
|
1629 |
+
*
|
1630 |
+
* Pretty print the Object's location and name
|
1631 |
+
*
|
1632 |
+
* @return string Object information
|
1633 |
+
*/
|
1634 |
+
function __toString()
|
1635 |
+
{
|
1636 |
+
return $this->container->name . "/" . $this->name;
|
1637 |
+
}
|
1638 |
+
|
1639 |
+
/**
|
1640 |
+
* Internal check to get the proper mimetype.
|
1641 |
+
*
|
1642 |
+
* This function would go over the available PHP methods to get
|
1643 |
+
* the MIME type.
|
1644 |
+
*
|
1645 |
+
* By default it will try to use the PHP fileinfo library which is
|
1646 |
+
* available from PHP 5.3 or as an PECL extension
|
1647 |
+
* (http://pecl.php.net/package/Fileinfo).
|
1648 |
+
*
|
1649 |
+
* It will get the magic file by default from the system wide file
|
1650 |
+
* which is usually available in /usr/share/magic on Unix or try
|
1651 |
+
* to use the file specified in the source directory of the API
|
1652 |
+
* (share directory).
|
1653 |
+
*
|
1654 |
+
* if fileinfo is not available it will try to use the internal
|
1655 |
+
* mime_content_type function.
|
1656 |
+
*
|
1657 |
+
* @param string $handle name of file or buffer to guess the type from
|
1658 |
+
* @return boolean <kbd>True</kbd> if successful
|
1659 |
+
* @throws BadContentTypeException
|
1660 |
+
*/
|
1661 |
+
function _guess_content_type($handle) {
|
1662 |
+
if ($this->content_type)
|
1663 |
+
return;
|
1664 |
+
|
1665 |
+
$this->content_type = w3_get_mime_type($handle);
|
1666 |
+
|
1667 |
+
if (!$this->content_type) {
|
1668 |
+
throw new BadContentTypeException("Required Content-Type not set");
|
1669 |
+
}
|
1670 |
+
|
1671 |
+
return True;
|
1672 |
+
}
|
1673 |
+
|
1674 |
+
/**
|
1675 |
+
* String representation of the Object's public URI
|
1676 |
+
*
|
1677 |
+
* A string representing the Object's public URI assuming that it's
|
1678 |
+
* parent Container is CDN-enabled.
|
1679 |
+
*
|
1680 |
+
* Example:
|
1681 |
+
* <code>
|
1682 |
+
* # ... authentication/connection/container code excluded
|
1683 |
+
* # ... see previous examples
|
1684 |
+
*
|
1685 |
+
* # Print out the Object's CDN URI (if it has one) in an HTML img-tag
|
1686 |
+
* #
|
1687 |
+
* print "<img src='$pic->public_uri()' />\n";
|
1688 |
+
* </code>
|
1689 |
+
*
|
1690 |
+
* @return string Object's public URI or NULL
|
1691 |
+
*/
|
1692 |
+
function public_uri()
|
1693 |
+
{
|
1694 |
+
if ($this->container->cdn_enabled) {
|
1695 |
+
return $this->container->cdn_uri . "/" . $this->name;
|
1696 |
+
}
|
1697 |
+
return NULL;
|
1698 |
+
}
|
1699 |
+
|
1700 |
+
/**
|
1701 |
+
* Read the remote Object's data
|
1702 |
+
*
|
1703 |
+
* Returns the Object's data. This is useful for smaller Objects such
|
1704 |
+
* as images or office documents. Object's with larger content should use
|
1705 |
+
* the stream() method below.
|
1706 |
+
*
|
1707 |
+
* Pass in $hdrs array to set specific custom HTTP headers such as
|
1708 |
+
* If-Match, If-None-Match, If-Modified-Since, Range, etc.
|
1709 |
+
*
|
1710 |
+
* Example:
|
1711 |
+
* <code>
|
1712 |
+
* # ... authentication/connection/container code excluded
|
1713 |
+
* # ... see previous examples
|
1714 |
+
*
|
1715 |
+
* $my_docs = $conn->get_container("documents");
|
1716 |
+
* $doc = $my_docs->get_object("README");
|
1717 |
+
* $data = $doc->read(); # read image content into a string variable
|
1718 |
+
* print $data;
|
1719 |
+
*
|
1720 |
+
* # Or see stream() below for a different example.
|
1721 |
+
* #
|
1722 |
+
* </code>
|
1723 |
+
*
|
1724 |
+
* @param array $hdrs user-defined headers (Range, If-Match, etc.)
|
1725 |
+
* @return string Object's data
|
1726 |
+
* @throws InvalidResponseException unexpected response
|
1727 |
+
*/
|
1728 |
+
function read($hdrs=array())
|
1729 |
+
{
|
1730 |
+
list($status, $reason, $data) =
|
1731 |
+
$this->container->cfs_http->get_object_to_string($this, $hdrs);
|
1732 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1733 |
+
# return $this->read($hdrs);
|
1734 |
+
#}
|
1735 |
+
if (($status < 200) || ($status > 299
|
1736 |
+
&& $status != 412 && $status != 304)) {
|
1737 |
+
throw new InvalidResponseException("Invalid response (".$status."): "
|
1738 |
+
. $this->container->cfs_http->get_error());
|
1739 |
+
}
|
1740 |
+
return $data;
|
1741 |
+
}
|
1742 |
+
|
1743 |
+
/**
|
1744 |
+
* Streaming read of Object's data
|
1745 |
+
*
|
1746 |
+
* Given an open PHP resource (see PHP's fopen() method), fetch the Object's
|
1747 |
+
* data and write it to the open resource handle. This is useful for
|
1748 |
+
* streaming an Object's content to the browser (videos, images) or for
|
1749 |
+
* fetching content to a local file.
|
1750 |
+
*
|
1751 |
+
* Pass in $hdrs array to set specific custom HTTP headers such as
|
1752 |
+
* If-Match, If-None-Match, If-Modified-Since, Range, etc.
|
1753 |
+
*
|
1754 |
+
* Example:
|
1755 |
+
* <code>
|
1756 |
+
* # ... authentication/connection/container code excluded
|
1757 |
+
* # ... see previous examples
|
1758 |
+
*
|
1759 |
+
* # Assuming this is a web script to display the README to the
|
1760 |
+
* # user's browser:
|
1761 |
+
* #
|
1762 |
+
* <?php
|
1763 |
+
* // grab README from storage system
|
1764 |
+
* //
|
1765 |
+
* $my_docs = $conn->get_container("documents");
|
1766 |
+
* $doc = $my_docs->get_object("README");
|
1767 |
+
*
|
1768 |
+
* // Hand it back to user's browser with appropriate content-type
|
1769 |
+
* //
|
1770 |
+
* header("Content-Type: " . $doc->content_type);
|
1771 |
+
* $output = fopen("php://output", "w");
|
1772 |
+
* $doc->stream($output); # stream object content to PHP's output buffer
|
1773 |
+
* fclose($output);
|
1774 |
+
* ?>
|
1775 |
+
*
|
1776 |
+
* # See read() above for a more simple example.
|
1777 |
+
* #
|
1778 |
+
* </code>
|
1779 |
+
*
|
1780 |
+
* @param resource $fp open resource for writing data to
|
1781 |
+
* @param array $hdrs user-defined headers (Range, If-Match, etc.)
|
1782 |
+
* @return string Object's data
|
1783 |
+
* @throws InvalidResponseException unexpected response
|
1784 |
+
*/
|
1785 |
+
function stream(&$fp, $hdrs=array())
|
1786 |
+
{
|
1787 |
+
list($status, $reason) =
|
1788 |
+
$this->container->cfs_http->get_object_to_stream($this,$fp,$hdrs);
|
1789 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1790 |
+
# return $this->stream($fp, $hdrs);
|
1791 |
+
#}
|
1792 |
+
if (($status < 200) || ($status > 299
|
1793 |
+
&& $status != 412 && $status != 304)) {
|
1794 |
+
throw new InvalidResponseException("Invalid response (".$status."): "
|
1795 |
+
.$reason);
|
1796 |
+
}
|
1797 |
+
return True;
|
1798 |
+
}
|
1799 |
+
|
1800 |
+
/**
|
1801 |
+
* Store new Object metadata
|
1802 |
+
*
|
1803 |
+
* Write's an Object's metadata to the remote Object. This will overwrite
|
1804 |
+
* an prior Object metadata.
|
1805 |
+
*
|
1806 |
+
* Example:
|
1807 |
+
* <code>
|
1808 |
+
* # ... authentication/connection/container code excluded
|
1809 |
+
* # ... see previous examples
|
1810 |
+
*
|
1811 |
+
* $my_docs = $conn->get_container("documents");
|
1812 |
+
* $doc = $my_docs->get_object("README");
|
1813 |
+
*
|
1814 |
+
* # Define new metadata for the object
|
1815 |
+
* #
|
1816 |
+
* $doc->metadata = array(
|
1817 |
+
* "Author" => "EJ",
|
1818 |
+
* "Subject" => "How to use the PHP tests",
|
1819 |
+
* "Version" => "1.2.2"
|
1820 |
+
* );
|
1821 |
+
*
|
1822 |
+
* # Push the new metadata up to the storage system
|
1823 |
+
* #
|
1824 |
+
* $doc->sync_metadata();
|
1825 |
+
* </code>
|
1826 |
+
*
|
1827 |
+
* @return boolean <kbd>True</kbd> if successful, <kbd>False</kbd> otherwise
|
1828 |
+
* @throws InvalidResponseException unexpected response
|
1829 |
+
*/
|
1830 |
+
function sync_metadata()
|
1831 |
+
{
|
1832 |
+
if (!empty($this->metadata)) {
|
1833 |
+
$status = $this->container->cfs_http->update_object($this);
|
1834 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1835 |
+
# return $this->sync_metadata();
|
1836 |
+
#}
|
1837 |
+
if ($status != 202) {
|
1838 |
+
throw new InvalidResponseException("Invalid response ("
|
1839 |
+
.$status."): ".$this->container->cfs_http->get_error());
|
1840 |
+
}
|
1841 |
+
return True;
|
1842 |
+
}
|
1843 |
+
return False;
|
1844 |
+
}
|
1845 |
+
|
1846 |
+
/**
|
1847 |
+
* Upload Object's data to Cloud Files
|
1848 |
+
*
|
1849 |
+
* Write data to the remote Object. The $data argument can either be a
|
1850 |
+
* PHP resource open for reading (see PHP's fopen() method) or an in-memory
|
1851 |
+
* variable. If passing in a PHP resource, you must also include the $bytes
|
1852 |
+
* parameter.
|
1853 |
+
*
|
1854 |
+
* Example:
|
1855 |
+
* <code>
|
1856 |
+
* # ... authentication/connection/container code excluded
|
1857 |
+
* # ... see previous examples
|
1858 |
+
*
|
1859 |
+
* $my_docs = $conn->get_container("documents");
|
1860 |
+
* $doc = $my_docs->get_object("README");
|
1861 |
+
*
|
1862 |
+
* # Upload placeholder text in my README
|
1863 |
+
* #
|
1864 |
+
* $doc->write("This is just placeholder text for now...");
|
1865 |
+
* </code>
|
1866 |
+
*
|
1867 |
+
* @param string|resource $data string or open resource
|
1868 |
+
* @param float $bytes amount of data to upload (required for resources)
|
1869 |
+
* @param boolean $verify generate, send, and compare MD5 checksums
|
1870 |
+
* @return boolean <kbd>True</kbd> when data uploaded successfully
|
1871 |
+
* @throws SyntaxException missing required parameters
|
1872 |
+
* @throws BadContentTypeException if no Content-Type was/could be set
|
1873 |
+
* @throws MisMatchedChecksumException $verify is set and checksums unequal
|
1874 |
+
* @throws InvalidResponseException unexpected response
|
1875 |
+
*/
|
1876 |
+
function write($data=NULL, $bytes=0, $verify=True)
|
1877 |
+
{
|
1878 |
+
if (!$data) {
|
1879 |
+
throw new SyntaxException("Missing data source.");
|
1880 |
+
}
|
1881 |
+
if ($bytes > MAX_OBJECT_SIZE) {
|
1882 |
+
throw new SyntaxException("Bytes exceeds maximum object size.");
|
1883 |
+
}
|
1884 |
+
if ($verify) {
|
1885 |
+
if (!$this->_etag_override) {
|
1886 |
+
$this->etag = $this->compute_md5sum($data);
|
1887 |
+
}
|
1888 |
+
} else {
|
1889 |
+
$this->etag = NULL;
|
1890 |
+
}
|
1891 |
+
|
1892 |
+
$close_fh = False;
|
1893 |
+
if (!is_resource($data)) {
|
1894 |
+
# A hack to treat string data as a file handle. php://memory feels
|
1895 |
+
# like a better option, but it seems to break on Windows so use
|
1896 |
+
# a temporary file instead.
|
1897 |
+
#
|
1898 |
+
$fp = fopen("php://temp", "wb+");
|
1899 |
+
#$fp = fopen("php://memory", "wb+");
|
1900 |
+
fwrite($fp, $data, strlen($data));
|
1901 |
+
rewind($fp);
|
1902 |
+
$close_fh = True;
|
1903 |
+
$this->content_length = (float) strlen($data);
|
1904 |
+
if ($this->content_length > MAX_OBJECT_SIZE) {
|
1905 |
+
throw new SyntaxException("Data exceeds maximum object size");
|
1906 |
+
}
|
1907 |
+
$ct_data = substr($data, 0, 64);
|
1908 |
+
} else {
|
1909 |
+
$this->content_length = $bytes;
|
1910 |
+
$fp = $data;
|
1911 |
+
$ct_data = fread($data, 64);
|
1912 |
+
rewind($data);
|
1913 |
+
}
|
1914 |
+
|
1915 |
+
$this->_guess_content_type($ct_data);
|
1916 |
+
|
1917 |
+
list($status, $reason, $etag) =
|
1918 |
+
$this->container->cfs_http->put_object($this, $fp);
|
1919 |
+
#if ($status == 401 && $this->_re_auth()) {
|
1920 |
+
# return $this->write($data, $bytes, $verify);
|
1921 |
+
#}
|
1922 |
+
if ($status == 412) {
|
1923 |
+
if ($close_fh) { fclose($fp); }
|
1924 |
+
throw new SyntaxException("Missing Content-Type header");
|
1925 |
+
}
|
1926 |
+
if ($status == 422) {
|
1927 |
+
if ($close_fh) { fclose($fp); }
|
1928 |
+
throw new MisMatchedChecksumException(
|
1929 |
+
"Supplied and computed checksums do not match.");
|
1930 |
+
}
|
1931 |
+
if ($status != 201) {
|
1932 |
+
if ($close_fh) { fclose($fp); }
|
1933 |
+
throw new InvalidResponseException("Invalid response (".$status."): "
|
1934 |
+
. $this->container->cfs_http->get_error());
|
1935 |
+
}
|
1936 |
+
if (!$verify) {
|
1937 |
+
$this->etag = $etag;
|
1938 |
+
}
|
1939 |
+
if ($close_fh) { fclose($fp); }
|
1940 |
+
return True;
|
1941 |
+
}
|
1942 |
+
|
1943 |
+
/**
|
1944 |
+
* Upload Object data from local filename
|
1945 |
+
*
|
1946 |
+
* This is a convenience function to upload the data from a local file. A
|
1947 |
+
* True value for $verify will cause the method to compute the Object's MD5
|
1948 |
+
* checksum prior to uploading.
|
1949 |
+
*
|
1950 |
+
* Example:
|
1951 |
+
* <code>
|
1952 |
+
* # ... authentication/connection/container code excluded
|
1953 |
+
* # ... see previous examples
|
1954 |
+
*
|
1955 |
+
* $my_docs = $conn->get_container("documents");
|
1956 |
+
* $doc = $my_docs->get_object("README");
|
1957 |
+
*
|
1958 |
+
* # Upload my local README's content
|
1959 |
+
* #
|
1960 |
+
* $doc->load_from_filename("/home/ej/cloudfiles/readme");
|
1961 |
+
* </code>
|
1962 |
+
*
|
1963 |
+
* @param string $filename full path to local file
|
1964 |
+
* @param boolean $verify enable local/remote MD5 checksum validation
|
1965 |
+
* @return boolean <kbd>True</kbd> if data uploaded successfully
|
1966 |
+
* @throws SyntaxException missing required parameters
|
1967 |
+
* @throws BadContentTypeException if no Content-Type was/could be set
|
1968 |
+
* @throws MisMatchedChecksumException $verify is set and checksums unequal
|
1969 |
+
* @throws InvalidResponseException unexpected response
|
1970 |
+
* @throws IOException error opening file
|
1971 |
+
*/
|
1972 |
+
function load_from_filename($filename, $verify=True)
|
1973 |
+
{
|
1974 |
+
$fp = @fopen($filename, "r");
|
1975 |
+
if (!$fp) {
|
1976 |
+
throw new IOException("Could not open file for reading: ".$filename);
|
1977 |
+
}
|
1978 |
+
|
1979 |
+
clearstatcache();
|
1980 |
+
|
1981 |
+
$size = (float) sprintf("%u", filesize($filename));
|
1982 |
+
if ($size > MAX_OBJECT_SIZE) {
|
1983 |
+
throw new SyntaxException("File size exceeds maximum object size.");
|
1984 |
+
}
|
1985 |
+
|
1986 |
+
$this->_guess_content_type($filename);
|
1987 |
+
|
1988 |
+
$this->write($fp, $size, $verify);
|
1989 |
+
fclose($fp);
|
1990 |
+
return True;
|
1991 |
+
}
|
1992 |
+
|
1993 |
+
/**
|
1994 |
+
* Save Object's data to local filename
|
1995 |
+
*
|
1996 |
+
* Given a local filename, the Object's data will be written to the newly
|
1997 |
+
* created file.
|
1998 |
+
*
|
1999 |
+
* Example:
|
2000 |
+
* <code>
|
2001 |
+
* # ... authentication/connection/container code excluded
|
2002 |
+
* # ... see previous examples
|
2003 |
+
*
|
2004 |
+
* # Whoops! I deleted my local README, let me download/save it
|
2005 |
+
* #
|
2006 |
+
* $my_docs = $conn->get_container("documents");
|
2007 |
+
* $doc = $my_docs->get_object("README");
|
2008 |
+
*
|
2009 |
+
* $doc->save_to_filename("/home/ej/cloudfiles/readme.restored");
|
2010 |
+
* </code>
|
2011 |
+
*
|
2012 |
+
* @param string $filename name of local file to write data to
|
2013 |
+
* @return boolean <kbd>True</kbd> if successful
|
2014 |
+
* @throws IOException error opening file
|
2015 |
+
* @throws InvalidResponseException unexpected response
|
2016 |
+
*/
|
2017 |
+
function save_to_filename($filename)
|
2018 |
+
{
|
2019 |
+
$fp = @fopen($filename, "wb");
|
2020 |
+
if (!$fp) {
|
2021 |
+
throw new IOException("Could not open file for writing: ".$filename);
|
2022 |
+
}
|
2023 |
+
$result = $this->stream($fp);
|
2024 |
+
fclose($fp);
|
2025 |
+
return $result;
|
2026 |
+
}
|
2027 |
+
|
2028 |
+
/**
|
2029 |
+
* Set Object's MD5 checksum
|
2030 |
+
*
|
2031 |
+
* Manually set the Object's ETag. Including the ETag is mandatory for
|
2032 |
+
* Cloud Files to perform end-to-end verification. Omitting the ETag forces
|
2033 |
+
* the user to handle any data integrity checks.
|
2034 |
+
*
|
2035 |
+
* @param string $etag MD5 checksum hexidecimal string
|
2036 |
+
*/
|
2037 |
+
function set_etag($etag)
|
2038 |
+
{
|
2039 |
+
$this->etag = $etag;
|
2040 |
+
$this->_etag_override = True;
|
2041 |
+
}
|
2042 |
+
|
2043 |
+
/**
|
2044 |
+
* Object's MD5 checksum
|
2045 |
+
*
|
2046 |
+
* Accessor method for reading Object's private ETag attribute.
|
2047 |
+
*
|
2048 |
+
* @return string MD5 checksum hexidecimal string
|
2049 |
+
*/
|
2050 |
+
function getETag()
|
2051 |
+
{
|
2052 |
+
return $this->etag;
|
2053 |
+
}
|
2054 |
+
|
2055 |
+
/**
|
2056 |
+
* Compute the MD5 checksum
|
2057 |
+
*
|
2058 |
+
* Calculate the MD5 checksum on either a PHP resource or data. The argument
|
2059 |
+
* may either be a local filename, open resource for reading, or a string.
|
2060 |
+
*
|
2061 |
+
* <b>WARNING:</b> if you are uploading a big file over a stream
|
2062 |
+
* it could get very slow to compute the md5 you probably want to
|
2063 |
+
* set the $verify parameter to False in the write() method and
|
2064 |
+
* compute yourself the md5 before if you have it.
|
2065 |
+
*
|
2066 |
+
* @param filename|obj|string $data filename, open resource, or string
|
2067 |
+
* @return string MD5 checksum hexidecimal string
|
2068 |
+
*/
|
2069 |
+
function compute_md5sum(&$data)
|
2070 |
+
{
|
2071 |
+
|
2072 |
+
if (function_exists("hash_init") && is_resource($data)) {
|
2073 |
+
$ctx = hash_init('md5');
|
2074 |
+
while (!feof($data)) {
|
2075 |
+
$buffer = fgets($data, 65536);
|
2076 |
+
hash_update($ctx, $buffer);
|
2077 |
+
}
|
2078 |
+
$md5 = hash_final($ctx, false);
|
2079 |
+
rewind($data);
|
2080 |
+
} elseif ((string)is_file($data)) {
|
2081 |
+
$md5 = md5_file($data);
|
2082 |
+
} else {
|
2083 |
+
$md5 = md5($data);
|
2084 |
+
}
|
2085 |
+
return $md5;
|
2086 |
+
}
|
2087 |
+
|
2088 |
+
/**
|
2089 |
+
* PRIVATE: fetch information about the remote Object if it exists
|
2090 |
+
*/
|
2091 |
+
private function _initialize()
|
2092 |
+
{
|
2093 |
+
list($status, $reason, $etag, $last_modified, $content_type,
|
2094 |
+
$content_length, $metadata) =
|
2095 |
+
$this->container->cfs_http->head_object($this);
|
2096 |
+
#if ($status == 401 && $this->_re_auth()) {
|
2097 |
+
# return $this->_initialize();
|
2098 |
+
#}
|
2099 |
+
if ($status == 404) {
|
2100 |
+
return False;
|
2101 |
+
}
|
2102 |
+
if ($status < 200 || $status > 299) {
|
2103 |
+
throw new InvalidResponseException("Invalid response (".$status."): "
|
2104 |
+
. $this->container->cfs_http->get_error());
|
2105 |
+
}
|
2106 |
+
$this->etag = $etag;
|
2107 |
+
$this->last_modified = $last_modified;
|
2108 |
+
$this->content_type = $content_type;
|
2109 |
+
$this->content_length = $content_length;
|
2110 |
+
$this->metadata = $metadata;
|
2111 |
+
return True;
|
2112 |
+
}
|
2113 |
+
|
2114 |
+
#private function _re_auth()
|
2115 |
+
#{
|
2116 |
+
# $new_auth = new CF_Authentication(
|
2117 |
+
# $this->cfs_auth->username,
|
2118 |
+
# $this->cfs_auth->api_key,
|
2119 |
+
# $this->cfs_auth->auth_host,
|
2120 |
+
# $this->cfs_auth->account);
|
2121 |
+
# $new_auth->authenticate();
|
2122 |
+
# $this->container->cfs_auth = $new_auth;
|
2123 |
+
# $this->container->cfs_http->setCFAuth($this->cfs_auth);
|
2124 |
+
# return True;
|
2125 |
+
#}
|
2126 |
+
}
|
2127 |
+
|
2128 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
2129 |
+
|
2130 |
+
/*
|
2131 |
+
* Local variables:
|
2132 |
+
* tab-width: 4
|
2133 |
+
* c-basic-offset: 4
|
2134 |
+
* c-hanging-comment-ender-p: nil
|
2135 |
+
* End:
|
2136 |
+
*/
|
2137 |
+
?>
|
lib/CF/cloudfiles_exceptions.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Custom Exceptions for the CloudFiles API
|
4 |
+
*
|
5 |
+
* Requres PHP 5.x (for Exceptions and OO syntax)
|
6 |
+
*
|
7 |
+
* See COPYING for license information.
|
8 |
+
*
|
9 |
+
* @author Eric "EJ" Johnson <ej@racklabs.com>
|
10 |
+
* @copyright Copyright (c) 2008, Rackspace US, Inc.
|
11 |
+
* @package php-cloudfiles-exceptions
|
12 |
+
*/
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Custom Exceptions for the CloudFiles API
|
16 |
+
* @package php-cloudfiles-exceptions
|
17 |
+
*/
|
18 |
+
class SyntaxException extends Exception { }
|
19 |
+
class AuthenticationException extends Exception { }
|
20 |
+
class InvalidResponseException extends Exception { }
|
21 |
+
class NonEmptyContainerException extends Exception { }
|
22 |
+
class NoSuchObjectException extends Exception { }
|
23 |
+
class NoSuchContainerException extends Exception { }
|
24 |
+
class NoSuchAccountException extends Exception { }
|
25 |
+
class MisMatchedChecksumException extends Exception { }
|
26 |
+
class IOException extends Exception { }
|
27 |
+
class CDNNotEnabledException extends Exception { }
|
28 |
+
class BadContentTypeException extends Exception { }
|
29 |
+
class InvalidUTF8Exception extends Exception { }
|
30 |
+
class ConnectionNotOpenException extends Exception { }
|
31 |
+
|
32 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
33 |
+
|
34 |
+
/*
|
35 |
+
* Local variables:
|
36 |
+
* tab-width: 4
|
37 |
+
* c-basic-offset: 4
|
38 |
+
* c-hanging-comment-ender-p: nil
|
39 |
+
* End:
|
40 |
+
*/
|
41 |
+
?>
|
lib/CF/cloudfiles_http.php
ADDED
@@ -0,0 +1,1338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This is an HTTP client class for Cloud Files. It uses PHP's cURL module
|
4 |
+
* to handle the actual HTTP request/response. This is NOT a generic HTTP
|
5 |
+
* client class and is only used to abstract out the HTTP communication for
|
6 |
+
* the PHP Cloud Files API.
|
7 |
+
*
|
8 |
+
* This module was designed to re-use existing HTTP(S) connections between
|
9 |
+
* subsequent operations. For example, performing multiple PUT operations
|
10 |
+
* will re-use the same connection.
|
11 |
+
*
|
12 |
+
* This modules also provides support for streaming content into and out
|
13 |
+
* of Cloud Files. The majority (all?) of the PHP HTTP client modules expect
|
14 |
+
* to read the server's response into a string variable. This will not work
|
15 |
+
* with large files without killing your server. Methods like,
|
16 |
+
* get_object_to_stream() and put_object() take an open filehandle
|
17 |
+
* argument for streaming data out of or into Cloud Files.
|
18 |
+
*
|
19 |
+
* Requres PHP 5.x (for Exceptions and OO syntax)
|
20 |
+
*
|
21 |
+
* See COPYING for license information.
|
22 |
+
*
|
23 |
+
* @author Eric "EJ" Johnson <ej@racklabs.com>
|
24 |
+
* @copyright Copyright (c) 2008, Rackspace US, Inc.
|
25 |
+
* @package php-cloudfiles-http
|
26 |
+
*/
|
27 |
+
|
28 |
+
/**
|
29 |
+
*/
|
30 |
+
require_once("cloudfiles_exceptions.php");
|
31 |
+
|
32 |
+
define("PHP_CF_VERSION", "1.7.0");
|
33 |
+
define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION));
|
34 |
+
define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count");
|
35 |
+
define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used");
|
36 |
+
define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count");
|
37 |
+
define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used");
|
38 |
+
define("METADATA_HEADER", "X-Object-Meta-");
|
39 |
+
define("CDN_URI", "X-CDN-URI");
|
40 |
+
define("CDN_ENABLED", "X-CDN-Enabled");
|
41 |
+
define("CDN_LOG_RETENTION", "X-Log-Retention");
|
42 |
+
define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL");
|
43 |
+
define("CDN_ACL_REFERRER", "X-Referrer-ACL");
|
44 |
+
define("CDN_TTL", "X-TTL");
|
45 |
+
define("CDNM_URL", "X-CDN-Management-Url");
|
46 |
+
define("STORAGE_URL", "X-Storage-Url");
|
47 |
+
define("AUTH_TOKEN", "X-Auth-Token");
|
48 |
+
define("AUTH_USER_HEADER", "X-Auth-User");
|
49 |
+
define("AUTH_KEY_HEADER", "X-Auth-Key");
|
50 |
+
define("AUTH_USER_HEADER_LEGACY", "X-Storage-User");
|
51 |
+
define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass");
|
52 |
+
define("AUTH_TOKEN_LEGACY", "X-Storage-Token");
|
53 |
+
|
54 |
+
/**
|
55 |
+
* HTTP/cURL wrapper for Cloud Files
|
56 |
+
*
|
57 |
+
* This class should not be used directly. It's only purpose is to abstract
|
58 |
+
* out the HTTP communication from the main API.
|
59 |
+
*
|
60 |
+
* @package php-cloudfiles-http
|
61 |
+
*/
|
62 |
+
class CF_Http
|
63 |
+
{
|
64 |
+
private $error_str;
|
65 |
+
private $dbug;
|
66 |
+
private $cabundle_path;
|
67 |
+
private $api_version;
|
68 |
+
|
69 |
+
# Authentication instance variables
|
70 |
+
#
|
71 |
+
private $storage_url;
|
72 |
+
private $cdnm_url;
|
73 |
+
private $auth_token;
|
74 |
+
|
75 |
+
# Request/response variables
|
76 |
+
#
|
77 |
+
private $response_status;
|
78 |
+
private $response_reason;
|
79 |
+
private $connections;
|
80 |
+
|
81 |
+
# Variables used for content/header callbacks
|
82 |
+
#
|
83 |
+
private $_user_read_progress_callback_func;
|
84 |
+
private $_user_write_progress_callback_func;
|
85 |
+
private $_write_callback_type;
|
86 |
+
private $_text_list;
|
87 |
+
private $_account_container_count;
|
88 |
+
private $_account_bytes_used;
|
89 |
+
private $_container_object_count;
|
90 |
+
private $_container_bytes_used;
|
91 |
+
private $_obj_etag;
|
92 |
+
private $_obj_last_modified;
|
93 |
+
private $_obj_content_type;
|
94 |
+
private $_obj_content_length;
|
95 |
+
private $_obj_metadata;
|
96 |
+
private $_obj_write_resource;
|
97 |
+
private $_obj_write_string;
|
98 |
+
private $_cdn_enabled;
|
99 |
+
private $_cdn_uri;
|
100 |
+
private $_cdn_ttl;
|
101 |
+
private $_cdn_log_retention;
|
102 |
+
private $_cdn_acl_user_agent;
|
103 |
+
private $_cdn_acl_referrer;
|
104 |
+
|
105 |
+
function __construct($api_version)
|
106 |
+
{
|
107 |
+
$this->dbug = False;
|
108 |
+
$this->cabundle_path = NULL;
|
109 |
+
$this->api_version = $api_version;
|
110 |
+
$this->error_str = NULL;
|
111 |
+
|
112 |
+
$this->storage_url = NULL;
|
113 |
+
$this->cdnm_url = NULL;
|
114 |
+
$this->auth_token = NULL;
|
115 |
+
|
116 |
+
$this->response_status = NULL;
|
117 |
+
$this->response_reason = NULL;
|
118 |
+
|
119 |
+
# Curl connections array - since there is no way to "re-set" the
|
120 |
+
# connection paramaters for a cURL handle, we keep an array of
|
121 |
+
# the unique use-cases and funnel all of those same type
|
122 |
+
# requests through the appropriate curl connection.
|
123 |
+
#
|
124 |
+
$this->connections = array(
|
125 |
+
"GET_CALL" => NULL, # GET objects/containers/lists
|
126 |
+
"PUT_OBJ" => NULL, # PUT object
|
127 |
+
"HEAD" => NULL, # HEAD requests
|
128 |
+
"PUT_CONT" => NULL, # PUT container
|
129 |
+
"DEL_POST" => NULL, # DELETE containers/objects, POST objects
|
130 |
+
);
|
131 |
+
|
132 |
+
$this->_user_read_progress_callback_func = NULL;
|
133 |
+
$this->_user_write_progress_callback_func = NULL;
|
134 |
+
$this->_write_callback_type = NULL;
|
135 |
+
$this->_text_list = array();
|
136 |
+
$this->_return_list = NULL;
|
137 |
+
$this->_account_container_count = 0;
|
138 |
+
$this->_account_bytes_used = 0;
|
139 |
+
$this->_container_object_count = 0;
|
140 |
+
$this->_container_bytes_used = 0;
|
141 |
+
$this->_obj_write_resource = NULL;
|
142 |
+
$this->_obj_write_string = "";
|
143 |
+
$this->_obj_etag = NULL;
|
144 |
+
$this->_obj_last_modified = NULL;
|
145 |
+
$this->_obj_content_type = NULL;
|
146 |
+
$this->_obj_content_length = NULL;
|
147 |
+
$this->_obj_metadata = array();
|
148 |
+
$this->_cdn_enabled = NULL;
|
149 |
+
$this->_cdn_uri = NULL;
|
150 |
+
$this->_cdn_ttl = NULL;
|
151 |
+
$this->_cdn_log_retention = NULL;
|
152 |
+
$this->_cdn_acl_user_agent = NULL;
|
153 |
+
$this->_cdn_acl_referrer = NULL;
|
154 |
+
|
155 |
+
# The OS list with a PHP without an updated CA File for CURL to
|
156 |
+
# connect to SSL Websites. It is the first 3 letters of the PHP_OS
|
157 |
+
# variable.
|
158 |
+
$OS_CAFILE_NONUPDATED=array(
|
159 |
+
"win",
|
160 |
+
);
|
161 |
+
|
162 |
+
if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED))
|
163 |
+
$this->ssl_use_cabundle();
|
164 |
+
|
165 |
+
}
|
166 |
+
|
167 |
+
function ssl_use_cabundle($path=NULL)
|
168 |
+
{
|
169 |
+
if ($path) {
|
170 |
+
$this->cabundle_path = $path;
|
171 |
+
} else {
|
172 |
+
$this->cabundle_path = dirname(__FILE__) . "/cacert.pem";
|
173 |
+
}
|
174 |
+
if (!file_exists($this->cabundle_path)) {
|
175 |
+
throw new IOException("Could not use CA bundle: "
|
176 |
+
. $this->cabundle_path);
|
177 |
+
}
|
178 |
+
return;
|
179 |
+
}
|
180 |
+
|
181 |
+
# Uses separate cURL connection to authenticate
|
182 |
+
#
|
183 |
+
function authenticate($user, $pass, $acct=NULL, $host=NULL)
|
184 |
+
{
|
185 |
+
$path = array();
|
186 |
+
if (isset($acct) || isset($host)) {
|
187 |
+
$headers = array(
|
188 |
+
sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user),
|
189 |
+
sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass),
|
190 |
+
);
|
191 |
+
$path[] = $host;
|
192 |
+
$path[] = rawurlencode(sprintf("v%d",$this->api_version));
|
193 |
+
$path[] = rawurlencode($acct);
|
194 |
+
} else {
|
195 |
+
$headers = array(
|
196 |
+
sprintf("%s: %s", AUTH_USER_HEADER, $user),
|
197 |
+
sprintf("%s: %s", AUTH_KEY_HEADER, $pass),
|
198 |
+
);
|
199 |
+
$path[] = "https://auth.api.rackspacecloud.com";
|
200 |
+
}
|
201 |
+
$path[] = "v1.0";
|
202 |
+
$url = implode("/", $path);
|
203 |
+
|
204 |
+
$curl_ch = curl_init();
|
205 |
+
if (!is_null($this->cabundle_path)) {
|
206 |
+
curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True);
|
207 |
+
curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path);
|
208 |
+
}
|
209 |
+
curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug);
|
210 |
+
curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1);
|
211 |
+
curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4);
|
212 |
+
curl_setopt($curl_ch, CURLOPT_HEADER, 0);
|
213 |
+
curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers);
|
214 |
+
curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT);
|
215 |
+
curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE);
|
216 |
+
curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb'));
|
217 |
+
curl_setopt($curl_ch, CURLOPT_URL, $url);
|
218 |
+
curl_exec($curl_ch);
|
219 |
+
curl_close($curl_ch);
|
220 |
+
|
221 |
+
return array($this->response_status, $this->response_reason,
|
222 |
+
$this->storage_url, $this->cdnm_url, $this->auth_token);
|
223 |
+
}
|
224 |
+
|
225 |
+
# (CDN) GET /v1/Account
|
226 |
+
#
|
227 |
+
function list_cdn_containers()
|
228 |
+
{
|
229 |
+
$conn_type = "GET_CALL";
|
230 |
+
$url_path = $this->_make_path("CDN", $container_name);
|
231 |
+
|
232 |
+
$this->_write_callback_type = "TEXT_LIST";
|
233 |
+
$return_code = $this->_send_request($conn_type, $url_path);
|
234 |
+
|
235 |
+
if (!$return_code) {
|
236 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
237 |
+
array(0,$this->error_str,array());
|
238 |
+
}
|
239 |
+
if ($return_code == 401) {
|
240 |
+
return array($return_code,"Unauthorized",array());
|
241 |
+
}
|
242 |
+
if ($return_code == 404) {
|
243 |
+
return array($return_code,"Account not found.",array());
|
244 |
+
}
|
245 |
+
if ($return_code == 204) {
|
246 |
+
return array($return_code,"Account has no CDN enabled Containers.",
|
247 |
+
array());
|
248 |
+
}
|
249 |
+
if ($return_code == 200) {
|
250 |
+
$this->create_array();
|
251 |
+
return array($return_code,$this->response_reason,$this->_text_list);
|
252 |
+
}
|
253 |
+
$this->error_str = "Unexpected HTTP response: ".$this->response_reason;
|
254 |
+
return array($return_code,$this->error_str,array());
|
255 |
+
}
|
256 |
+
|
257 |
+
# (CDN) POST /v1/Account/Container
|
258 |
+
#
|
259 |
+
function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False,
|
260 |
+
$cdn_acl_user_agent="", $cdn_acl_referrer)
|
261 |
+
{
|
262 |
+
if ($container_name == "")
|
263 |
+
throw new SyntaxException("Container name not set.");
|
264 |
+
|
265 |
+
if ($container_name != "0" and !isset($container_name))
|
266 |
+
throw new SyntaxException("Container name not set.");
|
267 |
+
|
268 |
+
$url_path = $this->_make_path("CDN", $container_name);
|
269 |
+
$hdrs = array(
|
270 |
+
CDN_ENABLED => "True",
|
271 |
+
CDN_TTL => $ttl,
|
272 |
+
CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False",
|
273 |
+
CDN_ACL_USER_AGENT => $cdn_acl_user_agent,
|
274 |
+
CDN_ACL_REFERRER => $cdn_acl_referrer,
|
275 |
+
);
|
276 |
+
$return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
|
277 |
+
if ($return_code == 401) {
|
278 |
+
$this->error_str = "Unauthorized";
|
279 |
+
return array($return_code, $this->error_str, NULL);
|
280 |
+
}
|
281 |
+
if ($return_code == 404) {
|
282 |
+
$this->error_str = "Container not found.";
|
283 |
+
return array($return_code, $this->error_str, NULL);
|
284 |
+
}
|
285 |
+
if ($return_code != 202) {
|
286 |
+
$this->error_str="Unexpected HTTP response: ".$this->response_reason;
|
287 |
+
return array($return_code, $this->error_str, NULL);
|
288 |
+
}
|
289 |
+
return array($return_code, "Accepted", $this->_cdn_uri);
|
290 |
+
|
291 |
+
}
|
292 |
+
|
293 |
+
# (CDN) PUT /v1/Account/Container
|
294 |
+
#
|
295 |
+
function add_cdn_container($container_name, $ttl=86400)
|
296 |
+
{
|
297 |
+
if ($container_name == "")
|
298 |
+
throw new SyntaxException("Container name not set.");
|
299 |
+
|
300 |
+
if ($container_name != "0" and !isset($container_name))
|
301 |
+
throw new SyntaxException("Container name not set.");
|
302 |
+
|
303 |
+
$url_path = $this->_make_path("CDN", $container_name);
|
304 |
+
$hdrs = array(
|
305 |
+
CDN_ENABLED => "True",
|
306 |
+
CDN_TTL => $ttl,
|
307 |
+
);
|
308 |
+
$return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs);
|
309 |
+
if ($return_code == 401) {
|
310 |
+
$this->error_str = "Unauthorized";
|
311 |
+
return array($return_code,$this->response_reason,False);
|
312 |
+
}
|
313 |
+
if (!in_array($return_code, array(201,202))) {
|
314 |
+
$this->error_str="Unexpected HTTP response: ".$this->response_reason;
|
315 |
+
return array($return_code,$this->response_reason,False);
|
316 |
+
}
|
317 |
+
return array($return_code,$this->response_reason,$this->_cdn_uri);
|
318 |
+
}
|
319 |
+
|
320 |
+
# (CDN) POST /v1/Account/Container
|
321 |
+
#
|
322 |
+
function remove_cdn_container($container_name)
|
323 |
+
{
|
324 |
+
if ($container_name == "")
|
325 |
+
throw new SyntaxException("Container name not set.");
|
326 |
+
|
327 |
+
if ($container_name != "0" and !isset($container_name))
|
328 |
+
throw new SyntaxException("Container name not set.");
|
329 |
+
|
330 |
+
$url_path = $this->_make_path("CDN", $container_name);
|
331 |
+
$hdrs = array(CDN_ENABLED => "False");
|
332 |
+
$return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
|
333 |
+
if ($return_code == 401) {
|
334 |
+
$this->error_str = "Unauthorized";
|
335 |
+
return array($return_code, $this->error_str);
|
336 |
+
}
|
337 |
+
if ($return_code == 404) {
|
338 |
+
$this->error_str = "Container not found.";
|
339 |
+
return array($return_code, $this->error_str);
|
340 |
+
}
|
341 |
+
if ($return_code != 202) {
|
342 |
+
$this->error_str="Unexpected HTTP response: ".$this->response_reason;
|
343 |
+
return array($return_code, $this->error_str);
|
344 |
+
}
|
345 |
+
return array($return_code, "Accepted");
|
346 |
+
}
|
347 |
+
|
348 |
+
# (CDN) HEAD /v1/Account
|
349 |
+
#
|
350 |
+
function head_cdn_container($container_name)
|
351 |
+
{
|
352 |
+
if ($container_name == "")
|
353 |
+
throw new SyntaxException("Container name not set.");
|
354 |
+
|
355 |
+
if ($container_name != "0" and !isset($container_name))
|
356 |
+
throw new SyntaxException("Container name not set.");
|
357 |
+
|
358 |
+
$conn_type = "HEAD";
|
359 |
+
$url_path = $this->_make_path("CDN", $container_name);
|
360 |
+
$return_code = $this->_send_request($conn_type, $url_path);
|
361 |
+
|
362 |
+
if (!$return_code) {
|
363 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
364 |
+
return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL);
|
365 |
+
}
|
366 |
+
if ($return_code == 401) {
|
367 |
+
return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL);
|
368 |
+
}
|
369 |
+
if ($return_code == 404) {
|
370 |
+
return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL);
|
371 |
+
}
|
372 |
+
if ($return_code == 204) {
|
373 |
+
return array($return_code,$this->response_reason,
|
374 |
+
$this->_cdn_enabled, $this->_cdn_uri, $this->_cdn_ttl,
|
375 |
+
$this->_cdn_log_retention,
|
376 |
+
$this->_cdn_acl_user_agent,
|
377 |
+
$this->_cdn_acl_referrer
|
378 |
+
);
|
379 |
+
}
|
380 |
+
return array($return_code,$this->response_reason,
|
381 |
+
NULL,NULL,NULL,
|
382 |
+
$this->_cdn_log_retention,
|
383 |
+
$this->_cdn_acl_user_agent,
|
384 |
+
$this->_cdn_acl_referrer
|
385 |
+
);
|
386 |
+
}
|
387 |
+
|
388 |
+
# GET /v1/Account
|
389 |
+
#
|
390 |
+
function list_containers($limit=0, $marker=NULL)
|
391 |
+
{
|
392 |
+
$conn_type = "GET_CALL";
|
393 |
+
$url_path = $this->_make_path();
|
394 |
+
|
395 |
+
$limit = intval($limit);
|
396 |
+
$params = array();
|
397 |
+
if ($limit > 0) {
|
398 |
+
$params[] = "limit=$limit";
|
399 |
+
}
|
400 |
+
if ($marker) {
|
401 |
+
$params[] = "marker=".rawurlencode($marker);
|
402 |
+
}
|
403 |
+
if (!empty($params)) {
|
404 |
+
$url_path .= "?" . implode("&", $params);
|
405 |
+
}
|
406 |
+
|
407 |
+
$this->_write_callback_type = "TEXT_LIST";
|
408 |
+
$return_code = $this->_send_request($conn_type, $url_path);
|
409 |
+
|
410 |
+
if (!$return_code) {
|
411 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
412 |
+
return array(0,$this->error_str,array());
|
413 |
+
}
|
414 |
+
if ($return_code == 204) {
|
415 |
+
return array($return_code, "Account has no containers.", array());
|
416 |
+
}
|
417 |
+
if ($return_code == 404) {
|
418 |
+
$this->error_str = "Invalid account name for authentication token.";
|
419 |
+
return array($return_code,$this->error_str,array());
|
420 |
+
}
|
421 |
+
if ($return_code == 200) {
|
422 |
+
$this->create_array();
|
423 |
+
return array($return_code, $this->response_reason, $this->_text_list);
|
424 |
+
}
|
425 |
+
$this->error_str = "Unexpected HTTP response: ".$this->response_reason;
|
426 |
+
return array($return_code,$this->error_str,array());
|
427 |
+
}
|
428 |
+
|
429 |
+
# GET /v1/Account?format=json
|
430 |
+
#
|
431 |
+
function list_containers_info($limit=0, $marker=NULL)
|
432 |
+
{
|
433 |
+
$conn_type = "GET_CALL";
|
434 |
+
$url_path = $this->_make_path() . "?format=json";
|
435 |
+
|
436 |
+
$limit = intval($limit);
|
437 |
+
$params = array();
|
438 |
+
if ($limit > 0) {
|
439 |
+
$params[] = "limit=$limit";
|
440 |
+
}
|
441 |
+
if ($marker) {
|
442 |
+
$params[] = "marker=".rawurlencode($marker);
|
443 |
+
}
|
444 |
+
if (!empty($params)) {
|
445 |
+
$url_path .= "&" . implode("&", $params);
|
446 |
+
}
|
447 |
+
|
448 |
+
$this->_write_callback_type = "OBJECT_STRING";
|
449 |
+
$return_code = $this->_send_request($conn_type, $url_path);
|
450 |
+
|
451 |
+
if (!$return_code) {
|
452 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
453 |
+
return array(0,$this->error_str,array());
|
454 |
+
}
|
455 |
+
if ($return_code == 204) {
|
456 |
+
return array($return_code, "Account has no containers.", array());
|
457 |
+
}
|
458 |
+
if ($return_code == 404) {
|
459 |
+
$this->error_str = "Invalid account name for authentication token.";
|
460 |
+
return array($return_code,$this->error_str,array());
|
461 |
+
}
|
462 |
+
if ($return_code == 200) {
|
463 |
+
$json_body = json_decode($this->_obj_write_string, True);
|
464 |
+
return array($return_code, $this->response_reason, $json_body);
|
465 |
+
}
|
466 |
+
$this->error_str = "Unexpected HTTP response: ".$this->response_reason;
|
467 |
+
return array($return_code,$this->error_str,array());
|
468 |
+
}
|
469 |
+
|
470 |
+
# HEAD /v1/Account
|
471 |
+
#
|
472 |
+
function head_account()
|
473 |
+
{
|
474 |
+
$conn_type = "HEAD";
|
475 |
+
|
476 |
+
$url_path = $this->_make_path();
|
477 |
+
$return_code = $this->_send_request($conn_type,$url_path);
|
478 |
+
|
479 |
+
if (!$return_code) {
|
480 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
481 |
+
array(0,$this->error_str,0,0);
|
482 |
+
}
|
483 |
+
if ($return_code == 404) {
|
484 |
+
return array($return_code,"Account not found.",0,0);
|
485 |
+
}
|
486 |
+
if ($return_code == 204) {
|
487 |
+
return array($return_code,$this->response_reason,
|
488 |
+
$this->_account_container_count, $this->_account_bytes_used);
|
489 |
+
}
|
490 |
+
return array($return_code,$this->response_reason,0,0);
|
491 |
+
}
|
492 |
+
|
493 |
+
# PUT /v1/Account/Container
|
494 |
+
#
|
495 |
+
function create_container($container_name)
|
496 |
+
{
|
497 |
+
if ($container_name == "")
|
498 |
+
throw new SyntaxException("Container name not set.");
|
499 |
+
|
500 |
+
if ($container_name != "0" and !isset($container_name))
|
501 |
+
throw new SyntaxException("Container name not set.");
|
502 |
+
|
503 |
+
$url_path = $this->_make_path("STORAGE", $container_name);
|
504 |
+
$return_code = $this->_send_request("PUT_CONT",$url_path);
|
505 |
+
|
506 |
+
if (!$return_code) {
|
507 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
508 |
+
return False;
|
509 |
+
}
|
510 |
+
return $return_code;
|
511 |
+
}
|
512 |
+
|
513 |
+
# DELETE /v1/Account/Container
|
514 |
+
#
|
515 |
+
function delete_container($container_name)
|
516 |
+
{
|
517 |
+
if ($container_name == "")
|
518 |
+
throw new SyntaxException("Container name not set.");
|
519 |
+
|
520 |
+
if ($container_name != "0" and !isset($container_name))
|
521 |
+
throw new SyntaxException("Container name not set.");
|
522 |
+
|
523 |
+
$url_path = $this->_make_path("STORAGE", $container_name);
|
524 |
+
$return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE");
|
525 |
+
|
526 |
+
if (!$return_code) {
|
527 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
528 |
+
}
|
529 |
+
if ($return_code == 409) {
|
530 |
+
$this->error_str = "Container must be empty prior to removing it.";
|
531 |
+
}
|
532 |
+
if ($return_code == 404) {
|
533 |
+
$this->error_str = "Specified container did not exist to delete.";
|
534 |
+
}
|
535 |
+
if ($return_code != 204) {
|
536 |
+
$this->error_str = "Unexpected HTTP return code: $return_code.";
|
537 |
+
}
|
538 |
+
return $return_code;
|
539 |
+
}
|
540 |
+
|
541 |
+
# GET /v1/Account/Container
|
542 |
+
#
|
543 |
+
function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
|
544 |
+
{
|
545 |
+
if (!$cname) {
|
546 |
+
$this->error_str = "Container name not set.";
|
547 |
+
return array(0, $this->error_str, array());
|
548 |
+
}
|
549 |
+
|
550 |
+
$url_path = $this->_make_path("STORAGE", $cname);
|
551 |
+
|
552 |
+
$limit = intval($limit);
|
553 |
+
$params = array();
|
554 |
+
if ($limit > 0) {
|
555 |
+
$params[] = "limit=$limit";
|
556 |
+
}
|
557 |
+
if ($marker) {
|
558 |
+
$params[] = "marker=".rawurlencode($marker);
|
559 |
+
}
|
560 |
+
if ($prefix) {
|
561 |
+
$params[] = "prefix=".rawurlencode($prefix);
|
562 |
+
}
|
563 |
+
if ($path) {
|
564 |
+
$params[] = "path=".rawurlencode($path);
|
565 |
+
}
|
566 |
+
if (!empty($params)) {
|
567 |
+
$url_path .= "?" . implode("&", $params);
|
568 |
+
}
|
569 |
+
|
570 |
+
$conn_type = "GET_CALL";
|
571 |
+
$this->_write_callback_type = "TEXT_LIST";
|
572 |
+
$return_code = $this->_send_request($conn_type,$url_path);
|
573 |
+
|
574 |
+
if (!$return_code) {
|
575 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
576 |
+
return array(0,$this->error_str,array());
|
577 |
+
}
|
578 |
+
if ($return_code == 204) {
|
579 |
+
$this->error_str = "Container has no Objects.";
|
580 |
+
return array($return_code,$this->error_str,array());
|
581 |
+
}
|
582 |
+
if ($return_code == 404) {
|
583 |
+
$this->error_str = "Container has no Objects.";
|
584 |
+
return array($return_code,$this->error_str,array());
|
585 |
+
}
|
586 |
+
if ($return_code == 200) {
|
587 |
+
$this->create_array();
|
588 |
+
return array($return_code,$this->response_reason, $this->_text_list);
|
589 |
+
}
|
590 |
+
$this->error_str = "Unexpected HTTP response code: $return_code";
|
591 |
+
return array(0,$this->error_str,array());
|
592 |
+
}
|
593 |
+
|
594 |
+
# GET /v1/Account/Container?format=json
|
595 |
+
#
|
596 |
+
function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
|
597 |
+
{
|
598 |
+
if (!$cname) {
|
599 |
+
$this->error_str = "Container name not set.";
|
600 |
+
return array(0, $this->error_str, array());
|
601 |
+
}
|
602 |
+
|
603 |
+
$url_path = $this->_make_path("STORAGE", $cname);
|
604 |
+
|
605 |
+
$limit = intval($limit);
|
606 |
+
$params = array();
|
607 |
+
$params[] = "format=json";
|
608 |
+
if ($limit > 0) {
|
609 |
+
$params[] = "limit=$limit";
|
610 |
+
}
|
611 |
+
if ($marker) {
|
612 |
+
$params[] = "marker=".rawurlencode($marker);
|
613 |
+
}
|
614 |
+
if ($prefix) {
|
615 |
+
$params[] = "prefix=".rawurlencode($prefix);
|
616 |
+
}
|
617 |
+
if ($path) {
|
618 |
+
$params[] = "path=".rawurlencode($path);
|
619 |
+
}
|
620 |
+
if (!empty($params)) {
|
621 |
+
$url_path .= "?" . implode("&", $params);
|
622 |
+
}
|
623 |
+
|
624 |
+
$conn_type = "GET_CALL";
|
625 |
+
$this->_write_callback_type = "OBJECT_STRING";
|
626 |
+
$return_code = $this->_send_request($conn_type,$url_path);
|
627 |
+
|
628 |
+
if (!$return_code) {
|
629 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
630 |
+
return array(0,$this->error_str,array());
|
631 |
+
}
|
632 |
+
if ($return_code == 204) {
|
633 |
+
$this->error_str = "Container has no Objects.";
|
634 |
+
return array($return_code,$this->error_str,array());
|
635 |
+
}
|
636 |
+
if ($return_code == 404) {
|
637 |
+
$this->error_str = "Container has no Objects.";
|
638 |
+
return array($return_code,$this->error_str,array());
|
639 |
+
}
|
640 |
+
if ($return_code == 200) {
|
641 |
+
$json_body = json_decode($this->_obj_write_string, True);
|
642 |
+
return array($return_code,$this->response_reason, $json_body);
|
643 |
+
}
|
644 |
+
$this->error_str = "Unexpected HTTP response code: $return_code";
|
645 |
+
return array(0,$this->error_str,array());
|
646 |
+
}
|
647 |
+
|
648 |
+
|
649 |
+
# HEAD /v1/Account/Container
|
650 |
+
#
|
651 |
+
function head_container($container_name)
|
652 |
+
{
|
653 |
+
|
654 |
+
if ($container_name == "") {
|
655 |
+
$this->error_str = "Container name not set.";
|
656 |
+
return False;
|
657 |
+
}
|
658 |
+
|
659 |
+
if ($container_name != "0" and !isset($container_name)) {
|
660 |
+
$this->error_str = "Container name not set.";
|
661 |
+
return False;
|
662 |
+
}
|
663 |
+
|
664 |
+
$conn_type = "HEAD";
|
665 |
+
|
666 |
+
$url_path = $this->_make_path("STORAGE", $container_name);
|
667 |
+
$return_code = $this->_send_request($conn_type,$url_path);
|
668 |
+
|
669 |
+
if (!$return_code) {
|
670 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
671 |
+
array(0,$this->error_str,0,0);
|
672 |
+
}
|
673 |
+
if ($return_code == 404) {
|
674 |
+
return array($return_code,"Container not found.",0,0);
|
675 |
+
}
|
676 |
+
if ($return_code == 204 || $return_code == 200) {
|
677 |
+
return array($return_code,$this->response_reason,
|
678 |
+
$this->_container_object_count, $this->_container_bytes_used);
|
679 |
+
}
|
680 |
+
return array($return_code,$this->response_reason,0,0);
|
681 |
+
}
|
682 |
+
|
683 |
+
# GET /v1/Account/Container/Object
|
684 |
+
#
|
685 |
+
function get_object_to_string(&$obj, $hdrs=array())
|
686 |
+
{
|
687 |
+
if (!is_object($obj) || get_class($obj) != "CF_Object") {
|
688 |
+
throw new SyntaxException(
|
689 |
+
"Method argument is not a valid CF_Object.");
|
690 |
+
}
|
691 |
+
|
692 |
+
$conn_type = "GET_CALL";
|
693 |
+
|
694 |
+
$url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
|
695 |
+
$this->_write_callback_type = "OBJECT_STRING";
|
696 |
+
$return_code = $this->_send_request($conn_type,$url_path,$hdrs);
|
697 |
+
|
698 |
+
if (!$return_code) {
|
699 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
700 |
+
return array($return_code0,$this->error_str,NULL);
|
701 |
+
}
|
702 |
+
if ($return_code == 404) {
|
703 |
+
$this->error_str = "Object not found.";
|
704 |
+
return array($return_code0,$this->error_str,NULL);
|
705 |
+
}
|
706 |
+
if (($return_code < 200) || ($return_code > 299
|
707 |
+
&& $return_code != 412 && $return_code != 304)) {
|
708 |
+
$this->error_str = "Unexpected HTTP return code: $return_code";
|
709 |
+
return array($return_code,$this->error_str,NULL);
|
710 |
+
}
|
711 |
+
return array($return_code,$this->response_reason, $this->_obj_write_string);
|
712 |
+
}
|
713 |
+
|
714 |
+
# GET /v1/Account/Container/Object
|
715 |
+
#
|
716 |
+
function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array())
|
717 |
+
{
|
718 |
+
if (!is_object($obj) || get_class($obj) != "CF_Object") {
|
719 |
+
throw new SyntaxException(
|
720 |
+
"Method argument is not a valid CF_Object.");
|
721 |
+
}
|
722 |
+
if (!is_resource($resource)) {
|
723 |
+
throw new SyntaxException(
|
724 |
+
"Resource argument not a valid PHP resource.");
|
725 |
+
}
|
726 |
+
|
727 |
+
$conn_type = "GET_CALL";
|
728 |
+
|
729 |
+
$url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
|
730 |
+
$this->_obj_write_resource = $resource;
|
731 |
+
$this->_write_callback_type = "OBJECT_STREAM";
|
732 |
+
$return_code = $this->_send_request($conn_type,$url_path,$hdrs);
|
733 |
+
|
734 |
+
if (!$return_code) {
|
735 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
736 |
+
return array($return_code,$this->error_str);
|
737 |
+
}
|
738 |
+
if ($return_code == 404) {
|
739 |
+
$this->error_str = "Object not found.";
|
740 |
+
return array($return_code,$this->error_str);
|
741 |
+
}
|
742 |
+
if (($return_code < 200) || ($return_code > 299
|
743 |
+
&& $return_code != 412 && $return_code != 304)) {
|
744 |
+
$this->error_str = "Unexpected HTTP return code: $return_code";
|
745 |
+
return array($return_code,$this->error_str);
|
746 |
+
}
|
747 |
+
return array($return_code,$this->response_reason);
|
748 |
+
}
|
749 |
+
|
750 |
+
# PUT /v1/Account/Container/Object
|
751 |
+
#
|
752 |
+
function put_object(&$obj, &$fp)
|
753 |
+
{
|
754 |
+
if (!is_object($obj) || get_class($obj) != "CF_Object") {
|
755 |
+
throw new SyntaxException(
|
756 |
+
"Method argument is not a valid CF_Object.");
|
757 |
+
}
|
758 |
+
if (!is_resource($fp)) {
|
759 |
+
throw new SyntaxException(
|
760 |
+
"File pointer argument is not a valid resource.");
|
761 |
+
}
|
762 |
+
|
763 |
+
$conn_type = "PUT_OBJ";
|
764 |
+
$url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
|
765 |
+
|
766 |
+
$hdrs = $this->_metadata_headers($obj);
|
767 |
+
|
768 |
+
$etag = $obj->getETag();
|
769 |
+
if (isset($etag)) {
|
770 |
+
$hdrs[] = "ETag: " . $etag;
|
771 |
+
}
|
772 |
+
if (!$obj->content_type) {
|
773 |
+
$hdrs[] = "Content-Type: application/octet-stream";
|
774 |
+
} else {
|
775 |
+
$hdrs[] = "Content-Type: " . $obj->content_type;
|
776 |
+
}
|
777 |
+
|
778 |
+
$this->_init($conn_type);
|
779 |
+
curl_setopt($this->connections[$conn_type],
|
780 |
+
CURLOPT_INFILE, $fp);
|
781 |
+
if (!$obj->content_length) {
|
782 |
+
# We don''t know the Content-Length, so assumed "chunked" PUT
|
783 |
+
#
|
784 |
+
curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True);
|
785 |
+
$hdrs[] = 'Transfer-Encoding: chunked';
|
786 |
+
} else {
|
787 |
+
# We know the Content-Length, so use regular transfer
|
788 |
+
#
|
789 |
+
curl_setopt($this->connections[$conn_type],
|
790 |
+
CURLOPT_INFILESIZE, $obj->content_length);
|
791 |
+
}
|
792 |
+
$return_code = $this->_send_request($conn_type,$url_path,$hdrs);
|
793 |
+
|
794 |
+
if (!$return_code) {
|
795 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
796 |
+
return array(0,$this->error_str,NULL);
|
797 |
+
}
|
798 |
+
if ($return_code == 412) {
|
799 |
+
$this->error_str = "Missing Content-Type header";
|
800 |
+
return array($return_code,$this->error_str,NULL);
|
801 |
+
}
|
802 |
+
if ($return_code == 422) {
|
803 |
+
$this->error_str = "Derived and computed checksums do not match.";
|
804 |
+
return array($return_code,$this->error_str,NULL);
|
805 |
+
}
|
806 |
+
if ($return_code != 201) {
|
807 |
+
$this->error_str = "Unexpected HTTP return code: $return_code";
|
808 |
+
return array($return_code,$this->error_str,NULL);
|
809 |
+
}
|
810 |
+
return array($return_code,$this->response_reason,$this->_obj_etag);
|
811 |
+
}
|
812 |
+
|
813 |
+
# POST /v1/Account/Container/Object
|
814 |
+
#
|
815 |
+
function update_object(&$obj)
|
816 |
+
{
|
817 |
+
if (!is_object($obj) || get_class($obj) != "CF_Object") {
|
818 |
+
throw new SyntaxException(
|
819 |
+
"Method argument is not a valid CF_Object.");
|
820 |
+
}
|
821 |
+
|
822 |
+
if (!is_array($obj->metadata) || empty($obj->metadata)) {
|
823 |
+
$this->error_str = "Metadata array is empty.";
|
824 |
+
return 0;
|
825 |
+
}
|
826 |
+
|
827 |
+
$url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
|
828 |
+
|
829 |
+
$hdrs = $this->_metadata_headers($obj);
|
830 |
+
$return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
|
831 |
+
if (!$return_code) {
|
832 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
833 |
+
return 0;
|
834 |
+
}
|
835 |
+
if ($return_code == 404) {
|
836 |
+
$this->error_str = "Account, Container, or Object not found.";
|
837 |
+
}
|
838 |
+
if ($return_code != 202) {
|
839 |
+
$this->error_str = "Unexpected HTTP return code: $return_code";
|
840 |
+
}
|
841 |
+
return $return_code;
|
842 |
+
}
|
843 |
+
|
844 |
+
# HEAD /v1/Account/Container/Object
|
845 |
+
#
|
846 |
+
function head_object(&$obj)
|
847 |
+
{
|
848 |
+
if (!is_object($obj) || get_class($obj) != "CF_Object") {
|
849 |
+
throw new SyntaxException(
|
850 |
+
"Method argument is not a valid CF_Object.");
|
851 |
+
}
|
852 |
+
|
853 |
+
$conn_type = "HEAD";
|
854 |
+
|
855 |
+
$url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
|
856 |
+
$return_code = $this->_send_request($conn_type,$url_path);
|
857 |
+
|
858 |
+
if (!$return_code) {
|
859 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
860 |
+
return array(0, $this->error_str." ".$this->response_reason,
|
861 |
+
NULL, NULL, NULL, NULL, array());
|
862 |
+
}
|
863 |
+
|
864 |
+
if ($return_code == 404) {
|
865 |
+
return array($return_code, $this->response_reason,
|
866 |
+
NULL, NULL, NULL, NULL, array());
|
867 |
+
}
|
868 |
+
if ($return_code == 204 || $return_code == 200) {
|
869 |
+
return array($return_code,$this->response_reason,
|
870 |
+
$this->_obj_etag,
|
871 |
+
$this->_obj_last_modified,
|
872 |
+
$this->_obj_content_type,
|
873 |
+
$this->_obj_content_length,
|
874 |
+
$this->_obj_metadata);
|
875 |
+
}
|
876 |
+
$this->error_str = "Unexpected HTTP return code: $return_code";
|
877 |
+
return array($return_code, $this->error_str." ".$this->response_reason,
|
878 |
+
NULL, NULL, NULL, NULL, array());
|
879 |
+
}
|
880 |
+
|
881 |
+
# DELETE /v1/Account/Container/Object
|
882 |
+
#
|
883 |
+
function delete_object($container_name, $object_name)
|
884 |
+
{
|
885 |
+
if ($container_name == "") {
|
886 |
+
$this->error_str = "Container name not set.";
|
887 |
+
return 0;
|
888 |
+
}
|
889 |
+
|
890 |
+
if ($container_name != "0" and !isset($container_name)) {
|
891 |
+
$this->error_str = "Container name not set.";
|
892 |
+
return 0;
|
893 |
+
}
|
894 |
+
|
895 |
+
if (!$object_name) {
|
896 |
+
$this->error_str = "Object name not set.";
|
897 |
+
return 0;
|
898 |
+
}
|
899 |
+
|
900 |
+
$url_path = $this->_make_path("STORAGE", $container_name,$object_name);
|
901 |
+
$return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE");
|
902 |
+
if (!$return_code) {
|
903 |
+
$this->error_str .= ": Failed to obtain valid HTTP response.";
|
904 |
+
return 0;
|
905 |
+
}
|
906 |
+
if ($return_code == 404) {
|
907 |
+
$this->error_str = "Specified container did not exist to delete.";
|
908 |
+
}
|
909 |
+
if ($return_code != 204) {
|
910 |
+
$this->error_str = "Unexpected HTTP return code: $return_code.";
|
911 |
+
}
|
912 |
+
return $return_code;
|
913 |
+
}
|
914 |
+
|
915 |
+
function get_error()
|
916 |
+
{
|
917 |
+
return $this->error_str;
|
918 |
+
}
|
919 |
+
|
920 |
+
function setDebug($bool)
|
921 |
+
{
|
922 |
+
$this->dbug = $bool;
|
923 |
+
foreach ($this->connections as $k => $v) {
|
924 |
+
if (!is_null($v)) {
|
925 |
+
curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug);
|
926 |
+
}
|
927 |
+
}
|
928 |
+
}
|
929 |
+
|
930 |
+
function getCDNMUrl()
|
931 |
+
{
|
932 |
+
return $this->cdnm_url;
|
933 |
+
}
|
934 |
+
|
935 |
+
function getStorageUrl()
|
936 |
+
{
|
937 |
+
return $this->storage_url;
|
938 |
+
}
|
939 |
+
|
940 |
+
function getAuthToken()
|
941 |
+
{
|
942 |
+
return $this->auth_token;
|
943 |
+
}
|
944 |
+
|
945 |
+
function setCFAuth($cfs_auth, $servicenet=False)
|
946 |
+
{
|
947 |
+
if ($servicenet) {
|
948 |
+
$this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8);
|
949 |
+
} else {
|
950 |
+
$this->storage_url = $cfs_auth->storage_url;
|
951 |
+
}
|
952 |
+
$this->auth_token = $cfs_auth->auth_token;
|
953 |
+
$this->cdnm_url = $cfs_auth->cdnm_url;
|
954 |
+
}
|
955 |
+
|
956 |
+
function setReadProgressFunc($func_name)
|
957 |
+
{
|
958 |
+
$this->_user_read_progress_callback_func = $func_name;
|
959 |
+
}
|
960 |
+
|
961 |
+
function setWriteProgressFunc($func_name)
|
962 |
+
{
|
963 |
+
$this->_user_write_progress_callback_func = $func_name;
|
964 |
+
}
|
965 |
+
|
966 |
+
private function _header_cb($ch, $header)
|
967 |
+
{
|
968 |
+
preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
|
969 |
+
if (isset($matches[1])) {
|
970 |
+
$this->response_status = $matches[1];
|
971 |
+
}
|
972 |
+
if (isset($matches[2])) {
|
973 |
+
$this->response_reason = $matches[2];
|
974 |
+
}
|
975 |
+
if (stripos($header, CDN_ENABLED) === 0) {
|
976 |
+
$val = trim(substr($header, strlen(CDN_ENABLED)+1));
|
977 |
+
if (strtolower($val) == "true") {
|
978 |
+
$this->_cdn_enabled = True;
|
979 |
+
} elseif (strtolower($val) == "false") {
|
980 |
+
$this->_cdn_enabled = False;
|
981 |
+
} else {
|
982 |
+
$this->_cdn_enabled = NULL;
|
983 |
+
}
|
984 |
+
return strlen($header);
|
985 |
+
}
|
986 |
+
if (stripos($header, CDN_URI) === 0) {
|
987 |
+
$this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1));
|
988 |
+
return strlen($header);
|
989 |
+
}
|
990 |
+
if (stripos($header, CDN_TTL) === 0) {
|
991 |
+
$this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0;
|
992 |
+
return strlen($header);
|
993 |
+
}
|
994 |
+
if (stripos($header, CDN_LOG_RETENTION) === 0) {
|
995 |
+
$this->_cdn_log_retention =
|
996 |
+
trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False;
|
997 |
+
return strlen($header);
|
998 |
+
}
|
999 |
+
|
1000 |
+
if (stripos($header, CDN_ACL_USER_AGENT) === 0) {
|
1001 |
+
$this->_cdn_acl_user_agent =
|
1002 |
+
trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1));
|
1003 |
+
return strlen($header);
|
1004 |
+
}
|
1005 |
+
|
1006 |
+
if (stripos($header, CDN_ACL_REFERRER) === 0) {
|
1007 |
+
$this->_cdn_acl_referrer =
|
1008 |
+
trim(substr($header, strlen(CDN_ACL_REFERRER)+1));
|
1009 |
+
return strlen($header);
|
1010 |
+
}
|
1011 |
+
|
1012 |
+
if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) {
|
1013 |
+
$this->_account_container_count = (float) trim(substr($header,
|
1014 |
+
strlen(ACCOUNT_CONTAINER_COUNT)+1))+0;
|
1015 |
+
return strlen($header);
|
1016 |
+
}
|
1017 |
+
if (stripos($header, ACCOUNT_BYTES_USED) === 0) {
|
1018 |
+
$this->_account_bytes_used = (float) trim(substr($header,
|
1019 |
+
strlen(ACCOUNT_BYTES_USED)+1))+0;
|
1020 |
+
return strlen($header);
|
1021 |
+
}
|
1022 |
+
if (stripos($header, CONTAINER_OBJ_COUNT) === 0) {
|
1023 |
+
$this->_container_object_count = (float) trim(substr($header,
|
1024 |
+
strlen(CONTAINER_OBJ_COUNT)+1))+0;
|
1025 |
+
return strlen($header);
|
1026 |
+
}
|
1027 |
+
if (stripos($header, CONTAINER_BYTES_USED) === 0) {
|
1028 |
+
$this->_container_bytes_used = (float) trim(substr($header,
|
1029 |
+
strlen(CONTAINER_BYTES_USED)+1))+0;
|
1030 |
+
return strlen($header);
|
1031 |
+
}
|
1032 |
+
if (stripos($header, METADATA_HEADER) === 0) {
|
1033 |
+
# $header => X-Object-Meta-Foo: bar baz
|
1034 |
+
$temp = substr($header, strlen(METADATA_HEADER));
|
1035 |
+
# $temp => Foo: bar baz
|
1036 |
+
$parts = explode(":", $temp);
|
1037 |
+
# $parts[0] => Foo
|
1038 |
+
$val = substr(strstr($temp, ":"), 1);
|
1039 |
+
# $val => bar baz
|
1040 |
+
$this->_obj_metadata[$parts[0]] = trim($val);
|
1041 |
+
return strlen($header);
|
1042 |
+
}
|
1043 |
+
if (stripos($header, "ETag:") === 0) {
|
1044 |
+
# $header => ETag: abc123def456...
|
1045 |
+
$val = substr(strstr($header, ":"), 1);
|
1046 |
+
# $val => abc123def456...
|
1047 |
+
$this->_obj_etag = trim($val);
|
1048 |
+
return strlen($header);
|
1049 |
+
}
|
1050 |
+
if (stripos($header, "Last-Modified:") === 0) {
|
1051 |
+
$val = substr(strstr($header, ":"), 1);
|
1052 |
+
$this->_obj_last_modified = trim($val);
|
1053 |
+
return strlen($header);
|
1054 |
+
}
|
1055 |
+
if (stripos($header, "Content-Type:") === 0) {
|
1056 |
+
$val = substr(strstr($header, ":"), 1);
|
1057 |
+
$this->_obj_content_type = trim($val);
|
1058 |
+
return strlen($header);
|
1059 |
+
}
|
1060 |
+
if (stripos($header, "Content-Length:") === 0) {
|
1061 |
+
$val = substr(strstr($header, ":"), 1);
|
1062 |
+
$this->_obj_content_length = (float) trim($val)+0;
|
1063 |
+
return strlen($header);
|
1064 |
+
}
|
1065 |
+
return strlen($header);
|
1066 |
+
}
|
1067 |
+
|
1068 |
+
private function _read_cb($ch, $fd, $length)
|
1069 |
+
{
|
1070 |
+
$data = fread($fd, $length);
|
1071 |
+
$len = strlen($data);
|
1072 |
+
if (isset($this->_user_write_progress_callback_func)) {
|
1073 |
+
call_user_func($this->_user_write_progress_callback_func, $len);
|
1074 |
+
}
|
1075 |
+
return $data;
|
1076 |
+
}
|
1077 |
+
|
1078 |
+
private function _write_cb($ch, $data)
|
1079 |
+
{
|
1080 |
+
$dlen = strlen($data);
|
1081 |
+
switch ($this->_write_callback_type) {
|
1082 |
+
case "TEXT_LIST":
|
1083 |
+
$this->_return_list = $this->_return_list . $data;
|
1084 |
+
//= explode("\n",$data); # keep tab,space
|
1085 |
+
//his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space
|
1086 |
+
break;
|
1087 |
+
case "OBJECT_STREAM":
|
1088 |
+
fwrite($this->_obj_write_resource, $data, $dlen);
|
1089 |
+
break;
|
1090 |
+
case "OBJECT_STRING":
|
1091 |
+
$this->_obj_write_string .= $data;
|
1092 |
+
break;
|
1093 |
+
}
|
1094 |
+
if (isset($this->_user_read_progress_callback_func)) {
|
1095 |
+
call_user_func($this->_user_read_progress_callback_func, $dlen);
|
1096 |
+
}
|
1097 |
+
return $dlen;
|
1098 |
+
}
|
1099 |
+
|
1100 |
+
private function _auth_hdr_cb($ch, $header)
|
1101 |
+
{
|
1102 |
+
preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
|
1103 |
+
if (isset($matches[1])) {
|
1104 |
+
$this->response_status = $matches[1];
|
1105 |
+
}
|
1106 |
+
if (isset($matches[2])) {
|
1107 |
+
$this->response_reason = $matches[2];
|
1108 |
+
}
|
1109 |
+
if (stripos($header, STORAGE_URL) === 0) {
|
1110 |
+
$this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1));
|
1111 |
+
}
|
1112 |
+
if (stripos($header, CDNM_URL) === 0) {
|
1113 |
+
$this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1));
|
1114 |
+
}
|
1115 |
+
if (stripos($header, AUTH_TOKEN) === 0) {
|
1116 |
+
$this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1));
|
1117 |
+
}
|
1118 |
+
if (stripos($header, AUTH_TOKEN_LEGACY) === 0) {
|
1119 |
+
$this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1));
|
1120 |
+
}
|
1121 |
+
return strlen($header);
|
1122 |
+
}
|
1123 |
+
|
1124 |
+
private function _make_headers($hdrs=NULL)
|
1125 |
+
{
|
1126 |
+
$new_headers = array();
|
1127 |
+
$has_stoken = False;
|
1128 |
+
$has_uagent = False;
|
1129 |
+
if (is_array($hdrs)) {
|
1130 |
+
foreach ($hdrs as $h => $v) {
|
1131 |
+
if (is_int($h)) {
|
1132 |
+
$parts = explode(":", $v);
|
1133 |
+
$header = $parts[0];
|
1134 |
+
$value = trim(substr(strstr($v, ":"), 1));
|
1135 |
+
} else {
|
1136 |
+
$header = $h;
|
1137 |
+
$value = trim($v);
|
1138 |
+
}
|
1139 |
+
|
1140 |
+
if (stripos($header, AUTH_TOKEN) === 0) {
|
1141 |
+
$has_stoken = True;
|
1142 |
+
}
|
1143 |
+
if (stripos($header, "user-agent") === 0) {
|
1144 |
+
$has_uagent = True;
|
1145 |
+
}
|
1146 |
+
$new_headers[] = $header . ": " . $value;
|
1147 |
+
}
|
1148 |
+
}
|
1149 |
+
if (!$has_stoken) {
|
1150 |
+
$new_headers[] = AUTH_TOKEN . ": " . $this->auth_token;
|
1151 |
+
}
|
1152 |
+
if (!$has_uagent) {
|
1153 |
+
$new_headers[] = "User-Agent: " . USER_AGENT;
|
1154 |
+
}
|
1155 |
+
return $new_headers;
|
1156 |
+
}
|
1157 |
+
|
1158 |
+
private function _init($conn_type, $force_new=False)
|
1159 |
+
{
|
1160 |
+
if (!array_key_exists($conn_type, $this->connections)) {
|
1161 |
+
$this->error_str = "Invalid CURL_XXX connection type";
|
1162 |
+
return False;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
if (is_null($this->connections[$conn_type]) || $force_new) {
|
1166 |
+
$ch = curl_init();
|
1167 |
+
} else {
|
1168 |
+
return;
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); }
|
1172 |
+
|
1173 |
+
if (!is_null($this->cabundle_path)) {
|
1174 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
|
1175 |
+
curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path);
|
1176 |
+
}
|
1177 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
|
1178 |
+
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
1179 |
+
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
|
1180 |
+
curl_setopt($ch, CURLOPT_HEADER, 0);
|
1181 |
+
curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb'));
|
1182 |
+
|
1183 |
+
if ($conn_type == "GET_CALL") {
|
1184 |
+
curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb'));
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
if ($conn_type == "PUT_OBJ") {
|
1188 |
+
curl_setopt($ch, CURLOPT_PUT, 1);
|
1189 |
+
curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb'));
|
1190 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
1191 |
+
}
|
1192 |
+
if ($conn_type == "HEAD") {
|
1193 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD");
|
1194 |
+
curl_setopt($ch, CURLOPT_NOBODY, 1);
|
1195 |
+
}
|
1196 |
+
if ($conn_type == "PUT_CONT") {
|
1197 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
|
1198 |
+
curl_setopt($ch, CURLOPT_INFILESIZE, 0);
|
1199 |
+
curl_setopt($ch, CURLOPT_NOBODY, 1);
|
1200 |
+
}
|
1201 |
+
if ($conn_type == "DEL_POST") {
|
1202 |
+
curl_setopt($ch, CURLOPT_NOBODY, 1);
|
1203 |
+
}
|
1204 |
+
$this->connections[$conn_type] = $ch;
|
1205 |
+
return;
|
1206 |
+
}
|
1207 |
+
|
1208 |
+
private function _reset_callback_vars()
|
1209 |
+
{
|
1210 |
+
$this->_text_list = array();
|
1211 |
+
$this->_return_list = NULL;
|
1212 |
+
$this->_account_container_count = 0;
|
1213 |
+
$this->_account_bytes_used = 0;
|
1214 |
+
$this->_container_object_count = 0;
|
1215 |
+
$this->_container_bytes_used = 0;
|
1216 |
+
$this->_obj_etag = NULL;
|
1217 |
+
$this->_obj_last_modified = NULL;
|
1218 |
+
$this->_obj_content_type = NULL;
|
1219 |
+
$this->_obj_content_length = NULL;
|
1220 |
+
$this->_obj_metadata = array();
|
1221 |
+
$this->_obj_write_string = "";
|
1222 |
+
$this->_cdn_enabled = NULL;
|
1223 |
+
$this->_cdn_uri = NULL;
|
1224 |
+
$this->_cdn_ttl = NULL;
|
1225 |
+
$this->response_status = 0;
|
1226 |
+
$this->response_reason = "";
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
private function _make_path($t="STORAGE",$c=NULL,$o=NULL)
|
1230 |
+
{
|
1231 |
+
$path = array();
|
1232 |
+
switch ($t) {
|
1233 |
+
case "STORAGE":
|
1234 |
+
$path[] = $this->storage_url; break;
|
1235 |
+
case "CDN":
|
1236 |
+
$path[] = $this->cdnm_url; break;
|
1237 |
+
}
|
1238 |
+
if ($c == "0")
|
1239 |
+
$path[] = rawurlencode($c);
|
1240 |
+
|
1241 |
+
if ($c) {
|
1242 |
+
$path[] = rawurlencode($c);
|
1243 |
+
}
|
1244 |
+
if ($o) {
|
1245 |
+
# mimic Python''s urllib.quote() feature of a "safe" '/' character
|
1246 |
+
#
|
1247 |
+
$path[] = str_replace("%2F","/",rawurlencode($o));
|
1248 |
+
}
|
1249 |
+
return implode("/",$path);
|
1250 |
+
}
|
1251 |
+
|
1252 |
+
private function _metadata_headers(&$obj)
|
1253 |
+
{
|
1254 |
+
$hdrs = array();
|
1255 |
+
foreach ($obj->metadata as $k => $v) {
|
1256 |
+
if (strpos($k,":") !== False) {
|
1257 |
+
throw new SyntaxException(
|
1258 |
+
"Metadata keys cannot contain a ':' character.");
|
1259 |
+
}
|
1260 |
+
$k = trim($k);
|
1261 |
+
$key = sprintf("%s%s", METADATA_HEADER, $k);
|
1262 |
+
if (!array_key_exists($key, $hdrs)) {
|
1263 |
+
if (strlen($k) > 128 || strlen($v) > 256) {
|
1264 |
+
$this->error_str = "Metadata key or value exceeds ";
|
1265 |
+
$this->error_str .= "maximum length: ($k: $v)";
|
1266 |
+
return 0;
|
1267 |
+
}
|
1268 |
+
$hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v));
|
1269 |
+
}
|
1270 |
+
}
|
1271 |
+
return $hdrs;
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET")
|
1275 |
+
{
|
1276 |
+
$this->_init($conn_type);
|
1277 |
+
$this->_reset_callback_vars();
|
1278 |
+
$headers = $this->_make_headers($hdrs);
|
1279 |
+
|
1280 |
+
if (gettype($this->connections[$conn_type]) == "unknown type")
|
1281 |
+
throw new ConnectionNotOpenException (
|
1282 |
+
"Connection is not open."
|
1283 |
+
);
|
1284 |
+
|
1285 |
+
switch ($method) {
|
1286 |
+
case "DELETE":
|
1287 |
+
curl_setopt($this->connections[$conn_type],
|
1288 |
+
CURLOPT_CUSTOMREQUEST, "DELETE");
|
1289 |
+
break;
|
1290 |
+
case "POST":
|
1291 |
+
curl_setopt($this->connections[$conn_type],
|
1292 |
+
CURLOPT_CUSTOMREQUEST, "POST");
|
1293 |
+
default:
|
1294 |
+
break;
|
1295 |
+
}
|
1296 |
+
|
1297 |
+
curl_setopt($this->connections[$conn_type],
|
1298 |
+
CURLOPT_HTTPHEADER, $headers);
|
1299 |
+
|
1300 |
+
curl_setopt($this->connections[$conn_type],
|
1301 |
+
CURLOPT_URL, $url_path);
|
1302 |
+
|
1303 |
+
if (!curl_exec($this->connections[$conn_type])) {
|
1304 |
+
$this->error_str = "(curl error: "
|
1305 |
+
. curl_errno($this->connections[$conn_type]) . ") ";
|
1306 |
+
$this->error_str .= curl_error($this->connections[$conn_type]);
|
1307 |
+
return False;
|
1308 |
+
}
|
1309 |
+
return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE);
|
1310 |
+
}
|
1311 |
+
|
1312 |
+
function close()
|
1313 |
+
{
|
1314 |
+
foreach ($this->connections as $cnx) {
|
1315 |
+
if (isset($cnx)) {
|
1316 |
+
curl_close($cnx);
|
1317 |
+
$this->connections[$cnx] = NULL;
|
1318 |
+
}
|
1319 |
+
}
|
1320 |
+
}
|
1321 |
+
private function create_array()
|
1322 |
+
{
|
1323 |
+
$this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B"));
|
1324 |
+
return True;
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
}
|
1328 |
+
|
1329 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
1330 |
+
|
1331 |
+
/*
|
1332 |
+
* Local variables:
|
1333 |
+
* tab-width: 4
|
1334 |
+
* c-basic-offset: 4
|
1335 |
+
* c-hanging-comment-ender-p: nil
|
1336 |
+
* End:
|
1337 |
+
*/
|
1338 |
+
?>
|
lib/Minify/HTTP/ConditionalGet.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?php
|
2 |
/**
|
3 |
* Class HTTP_ConditionalGet
|
4 |
* @package Minify
|
5 |
* @subpackage HTTP
|
6 |
-
*/
|
7 |
-
|
8 |
/**
|
9 |
* Implement conditional GET via a timestamp or hash of content
|
10 |
*
|
@@ -12,12 +12,12 @@
|
|
12 |
* <code>
|
13 |
* list($updateTime, $content) = getDbUpdateAndContent();
|
14 |
* $cg = new HTTP_ConditionalGet(array(
|
15 |
-
*
|
16 |
-
*
|
17 |
* ));
|
18 |
* $cg->sendHeaders();
|
19 |
* if ($cg->cacheIsValid) {
|
20 |
-
*
|
21 |
* }
|
22 |
* echo $content;
|
23 |
* </code>
|
@@ -32,11 +32,11 @@
|
|
32 |
* <code>
|
33 |
* $content = getContentFromDB();
|
34 |
* $cg = new HTTP_ConditionalGet(array(
|
35 |
-
*
|
36 |
* ));
|
37 |
* $cg->sendHeaders();
|
38 |
* if ($cg->cacheIsValid) {
|
39 |
-
*
|
40 |
* }
|
41 |
* echo $content;
|
42 |
* </code>
|
@@ -45,23 +45,24 @@
|
|
45 |
* <code>
|
46 |
* // before content
|
47 |
* $cg = new HTTP_ConditionalGet(array(
|
48 |
-
*
|
49 |
-
*
|
50 |
-
*
|
51 |
-
*
|
52 |
-
*
|
53 |
* ));
|
54 |
* $cg->sendHeaders();
|
55 |
* if ($cg->cacheIsValid) {
|
56 |
-
*
|
57 |
* }
|
58 |
* </code>
|
59 |
* @package Minify
|
60 |
* @subpackage HTTP
|
61 |
* @author Stephen Clay <steve@mrclay.org>
|
62 |
-
*/
|
63 |
-
class HTTP_ConditionalGet
|
64 |
-
|
|
|
65 |
/**
|
66 |
* Does the client have a valid copy of the requested resource?
|
67 |
*
|
@@ -69,9 +70,9 @@ class HTTP_ConditionalGet {
|
|
69 |
* not send content, just call sendHeaders() if you haven't already.
|
70 |
*
|
71 |
* @var bool
|
72 |
-
*/
|
73 |
-
public $cacheIsValid = null;
|
74 |
-
|
75 |
/**
|
76 |
* @param array $spec options
|
77 |
*
|
@@ -108,55 +109,95 @@ class HTTP_ConditionalGet {
|
|
108 |
* conditional GET to revalidate its cache.
|
109 |
*
|
110 |
* @return null
|
111 |
-
*/
|
112 |
-
public function __construct($spec)
|
113 |
-
{
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
|
|
|
|
|
|
|
|
|
|
118 |
// backwards compatibility (can be removed later)
|
119 |
-
if (isset($spec['setExpires'])
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
$this->
|
127 |
-
$
|
128 |
-
|
129 |
-
}
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
143 |
if (isset($spec['eTag'])) { // Use it
|
144 |
-
$this->_setEtag($spec['eTag'], $scope);
|
145 |
} else { // base both headers on time
|
146 |
-
$this->_setEtag($spec['lastModifiedTime'] . $etagAppend, $scope);
|
147 |
-
}
|
148 |
} elseif (isset($spec['eTag'])) { // Use it
|
149 |
-
$this->_setEtag($spec['eTag'], $scope);
|
150 |
} elseif (isset($spec['contentHash'])) { // Use the hash as the ETag
|
151 |
-
$this->_setEtag($spec['contentHash'] . $etagAppend, $scope);
|
152 |
-
}
|
153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
// invalidate cache if disabled, otherwise check
|
155 |
-
$this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate'])
|
156 |
-
|
157 |
-
|
158 |
-
}
|
159 |
-
|
160 |
/**
|
161 |
* Get array of output headers to be sent
|
162 |
*
|
@@ -166,18 +207,18 @@ class HTTP_ConditionalGet {
|
|
166 |
* Otherwise something like:
|
167 |
* <code>
|
168 |
* array(
|
169 |
-
*
|
170 |
-
*
|
171 |
* )
|
172 |
* </code>
|
173 |
*
|
174 |
* @return array
|
175 |
-
*/
|
176 |
-
public function getHeaders()
|
177 |
-
{
|
178 |
-
return $this->_headers;
|
179 |
-
}
|
180 |
-
|
181 |
/**
|
182 |
* Set the Content-Length header in bytes
|
183 |
*
|
@@ -188,12 +229,12 @@ class HTTP_ConditionalGet {
|
|
188 |
* @param int $bytes
|
189 |
*
|
190 |
* @return int copy of input $bytes
|
191 |
-
*/
|
192 |
-
public function setContentLength($bytes)
|
193 |
-
{
|
194 |
-
return $this->_headers['Content-Length'] = $bytes;
|
195 |
-
}
|
196 |
-
|
197 |
/**
|
198 |
* Send headers
|
199 |
*
|
@@ -204,19 +245,19 @@ class HTTP_ConditionalGet {
|
|
204 |
* still return the headers.
|
205 |
*
|
206 |
* @return null
|
207 |
-
*/
|
208 |
-
public function sendHeaders()
|
209 |
-
{
|
210 |
-
$headers = $this->_headers;
|
211 |
-
if (array_key_exists('_responseCode', $headers)) {
|
212 |
-
header($headers['_responseCode']);
|
213 |
-
unset($headers['_responseCode']);
|
214 |
-
}
|
215 |
-
foreach ($headers as $name => $val) {
|
216 |
-
header($name . ': ' . $val);
|
217 |
-
}
|
218 |
-
}
|
219 |
-
|
220 |
/**
|
221 |
* Exit if the client's cache is valid for this resource
|
222 |
*
|
@@ -232,21 +273,20 @@ class HTTP_ConditionalGet {
|
|
232 |
* @param array $options (default empty) additional options for constructor
|
233 |
*
|
234 |
* @return null
|
235 |
-
*/
|
236 |
-
public static function check($lastModifiedTime = null, $isPublic = false, $options = array())
|
237 |
-
{
|
238 |
-
if (null !== $lastModifiedTime) {
|
239 |
-
$options['lastModifiedTime'] = (int)$lastModifiedTime;
|
240 |
-
}
|
241 |
-
$options['isPublic'] = (bool)$isPublic;
|
242 |
-
$cg = new HTTP_ConditionalGet($options);
|
243 |
-
$cg->sendHeaders();
|
244 |
-
if ($cg->cacheIsValid) {
|
245 |
-
exit();
|
246 |
-
}
|
247 |
-
}
|
248 |
-
|
249 |
-
|
250 |
/**
|
251 |
* Get a GMT formatted date for use in HTTP headers
|
252 |
*
|
@@ -257,92 +297,102 @@ class HTTP_ConditionalGet {
|
|
257 |
* @param int $time unix timestamp
|
258 |
*
|
259 |
* @return string
|
260 |
-
*/
|
261 |
-
public static function gmtDate($time)
|
262 |
-
{
|
263 |
-
return gmdate('D, d M Y H:i:s \G\M\T', $time);
|
264 |
-
}
|
265 |
-
|
266 |
-
protected $_headers = array();
|
267 |
-
protected $_lmTime = null;
|
268 |
-
protected $_etag = null;
|
269 |
-
protected $_stripEtag = false;
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
protected function
|
278 |
-
{
|
279 |
-
$this->
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
/**
|
284 |
* Determine validity of client cache and queue 304 header if valid
|
285 |
-
*/
|
286 |
-
protected function _isCacheValid()
|
287 |
-
{
|
288 |
-
if (null === $this->_etag) {
|
289 |
// lmTime is copied to ETag, so this condition implies that the
|
290 |
// server sent neither ETag nor Last-Modified, so the client can't
|
291 |
// possibly has a valid cache.
|
292 |
-
return false;
|
293 |
-
}
|
294 |
-
$isValid = ($this->resourceMatchedEtag() || $this->resourceNotModified());
|
295 |
-
if ($isValid) {
|
296 |
-
$this->_headers['_responseCode'] = 'HTTP/1.0 304 Not Modified';
|
297 |
-
}
|
298 |
-
return $isValid;
|
299 |
-
}
|
300 |
-
|
301 |
-
protected function resourceMatchedEtag()
|
302 |
-
{
|
303 |
-
if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
|
304 |
-
return false;
|
305 |
-
}
|
306 |
-
$clientEtagList = get_magic_quotes_gpc()
|
307 |
-
|
308 |
-
|
309 |
-
$
|
310 |
-
|
311 |
-
|
312 |
-
foreach ($clientEtags as $clientEtag) {
|
313 |
-
if ($this->normalizeEtag($clientEtag) === $compareTo) {
|
314 |
// respond with the client's matched ETag, even if it's not what
|
315 |
-
// we would've sent by default
|
316 |
-
$this->
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
|
|
337 |
// IE has tacked on extra data to this header, strip it
|
338 |
-
$ifModifiedSince = substr($ifModifiedSince, 0, $semicolon);
|
339 |
-
}
|
340 |
-
if ($ifModifiedSince == self::gmtDate($this->_lmTime)) {
|
341 |
// Apache 2.2's behavior. If there was no ETag match, send the
|
342 |
-
// non-encoded version of the ETag value.
|
343 |
-
$this->
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
|
|
|
|
348 |
}
|
1 |
+
<?php
|
2 |
/**
|
3 |
* Class HTTP_ConditionalGet
|
4 |
* @package Minify
|
5 |
* @subpackage HTTP
|
6 |
+
*/
|
7 |
+
|
8 |
/**
|
9 |
* Implement conditional GET via a timestamp or hash of content
|
10 |
*
|
12 |
* <code>
|
13 |
* list($updateTime, $content) = getDbUpdateAndContent();
|
14 |
* $cg = new HTTP_ConditionalGet(array(
|
15 |
+
* 'lastModifiedTime' => $updateTime
|
16 |
+
* ,'isPublic' => true
|
17 |
* ));
|
18 |
* $cg->sendHeaders();
|
19 |
* if ($cg->cacheIsValid) {
|
20 |
+
* exit();
|
21 |
* }
|
22 |
* echo $content;
|
23 |
* </code>
|
32 |
* <code>
|
33 |
* $content = getContentFromDB();
|
34 |
* $cg = new HTTP_ConditionalGet(array(
|
35 |
+
* 'contentHash' => md5($content)
|
36 |
* ));
|
37 |
* $cg->sendHeaders();
|
38 |
* if ($cg->cacheIsValid) {
|
39 |
+
* exit();
|
40 |
* }
|
41 |
* echo $content;
|
42 |
* </code>
|
45 |
* <code>
|
46 |
* // before content
|
47 |
* $cg = new HTTP_ConditionalGet(array(
|
48 |
+
* 'lastUpdateTime' => max(
|
49 |
+
* filemtime(__FILE__)
|
50 |
+
* ,filemtime('/path/to/header.inc')
|
51 |
+
* ,filemtime('/path/to/footer.inc')
|
52 |
+
* )
|
53 |
* ));
|
54 |
* $cg->sendHeaders();
|
55 |
* if ($cg->cacheIsValid) {
|
56 |
+
* exit();
|
57 |
* }
|
58 |
* </code>
|
59 |
* @package Minify
|
60 |
* @subpackage HTTP
|
61 |
* @author Stephen Clay <steve@mrclay.org>
|
62 |
+
*/
|
63 |
+
class HTTP_ConditionalGet
|
64 |
+
{
|
65 |
+
|
66 |
/**
|
67 |
* Does the client have a valid copy of the requested resource?
|
68 |
*
|
70 |
* not send content, just call sendHeaders() if you haven't already.
|
71 |
*
|
72 |
* @var bool
|
73 |
+
*/
|
74 |
+
public $cacheIsValid = null;
|
75 |
+
|
76 |
/**
|
77 |
* @param array $spec options
|
78 |
*
|
109 |
* conditional GET to revalidate its cache.
|
110 |
*
|
111 |
* @return null
|
112 |
+
*/
|
113 |
+
public function __construct($spec)
|
114 |
+
{
|
115 |
+
if (isset($spec['cacheHeaders']) && is_array($spec['cacheHeaders'])) {
|
116 |
+
$this->_cacheHeaders = $spec['cacheHeaders'];
|
117 |
+
}
|
118 |
+
|
119 |
+
$scope = ($this->_cacheHeaders['cacheheaders_enabled'] && $this->_cacheHeaders['cacheheaders'] != 'no_cache') ? 'public' : 'private';
|
120 |
+
$maxAge = 0;
|
121 |
+
|
122 |
+
$this->_headers['Pragma'] = $scope;
|
123 |
+
|
124 |
// backwards compatibility (can be removed later)
|
125 |
+
if (isset($spec['setExpires']) && is_numeric($spec['setExpires']) && !isset($spec['maxAge'])) {
|
126 |
+
$spec['maxAge'] = $spec['setExpires'] - $_SERVER['REQUEST_TIME'];
|
127 |
+
}
|
128 |
+
|
129 |
+
if (isset($spec['maxAge'])) {
|
130 |
+
$maxAge = $spec['maxAge'];
|
131 |
+
|
132 |
+
if ($this->_cacheHeaders['expires_enabled'] && $maxAge) {
|
133 |
+
$this->_headers['Expires'] = self::gmtDate($_SERVER['REQUEST_TIME'] + $maxAge);
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
$etagAppend = '';
|
138 |
+
|
139 |
+
if (isset($spec['encoding'])) {
|
140 |
+
$this->_stripEtag = true;
|
141 |
+
$this->_headers['Vary'] = 'Accept-Encoding';
|
142 |
+
if ('' !== $spec['encoding']) {
|
143 |
+
if (0 === strpos($spec['encoding'], 'x-')) {
|
144 |
+
$spec['encoding'] = substr($spec['encoding'], 2);
|
145 |
+
}
|
146 |
+
$etagAppend = ';' . substr($spec['encoding'], 0, 2);
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
if (isset($spec['lastModifiedTime'])) {
|
151 |
+
$this->_setLastModified($spec['lastModifiedTime']);
|
152 |
if (isset($spec['eTag'])) { // Use it
|
153 |
+
$this->_setEtag($spec['eTag'], $scope);
|
154 |
} else { // base both headers on time
|
155 |
+
$this->_setEtag($spec['lastModifiedTime'] . $etagAppend, $scope);
|
156 |
+
}
|
157 |
} elseif (isset($spec['eTag'])) { // Use it
|
158 |
+
$this->_setEtag($spec['eTag'], $scope);
|
159 |
} elseif (isset($spec['contentHash'])) { // Use the hash as the ETag
|
160 |
+
$this->_setEtag($spec['contentHash'] . $etagAppend, $scope);
|
161 |
+
}
|
162 |
+
|
163 |
+
if ($this->_cacheHeaders['cacheheaders_enabled']) {
|
164 |
+
switch ($this->_cacheHeaders['cacheheaders']) {
|
165 |
+
case 'cache':
|
166 |
+
$this->_headers['Cache-Control'] = 'public';
|
167 |
+
break;
|
168 |
+
|
169 |
+
case 'cache_validation':
|
170 |
+
$this->_headers['Cache-Control'] = 'public, must-revalidate, proxy-revalidate';
|
171 |
+
break;
|
172 |
+
|
173 |
+
case 'cache_noproxy':
|
174 |
+
$this->_headers['Cache-Control'] = 'public, must-revalidate';
|
175 |
+
break;
|
176 |
+
|
177 |
+
case 'cache_maxage':
|
178 |
+
$this->_headers['Cache-Control'] = "max-age={$maxAge}, {$scope}, must-revalidate, proxy-revalidate";
|
179 |
+
break;
|
180 |
+
|
181 |
+
case 'no_cache':
|
182 |
+
$this->_headers['Cache-Control'] = 'max-age=0, private, no-store, no-cache, must-revalidate';
|
183 |
+
break;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Disable caching for preview mode
|
189 |
+
*/
|
190 |
+
if (w3_is_preview_mode()) {
|
191 |
+
$this->_headers = array_merge($this->_headers, array(
|
192 |
+
'Pragma' => 'private',
|
193 |
+
'Cache-Control' => 'private'
|
194 |
+
));
|
195 |
+
}
|
196 |
+
|
197 |
// invalidate cache if disabled, otherwise check
|
198 |
+
$this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate']) ? false : $this->_isCacheValid();
|
199 |
+
}
|
200 |
+
|
|
|
|
|
201 |
/**
|
202 |
* Get array of output headers to be sent
|
203 |
*
|
207 |
* Otherwise something like:
|
208 |
* <code>
|
209 |
* array(
|
210 |
+
* 'Cache-Control' => 'max-age=0, public'
|
211 |
+
* ,'ETag' => '"foobar"'
|
212 |
* )
|
213 |
* </code>
|
214 |
*
|
215 |
* @return array
|
216 |
+
*/
|
217 |
+
public function getHeaders()
|
218 |
+
{
|
219 |
+
return $this->_headers;
|
220 |
+
}
|
221 |
+
|
222 |
/**
|
223 |
* Set the Content-Length header in bytes
|
224 |
*
|
229 |
* @param int $bytes
|
230 |
*
|
231 |
* @return int copy of input $bytes
|
232 |
+
*/
|
233 |
+
public function setContentLength($bytes)
|
234 |
+
{
|
235 |
+
return $this->_headers['Content-Length'] = $bytes;
|
236 |
+
}
|
237 |
+
|
238 |
/**
|
239 |
* Send headers
|
240 |
*
|
245 |
* still return the headers.
|
246 |
*
|
247 |
* @return null
|
248 |
+
*/
|
249 |
+
public function sendHeaders()
|
250 |
+
{
|
251 |
+
$headers = $this->_headers;
|
252 |
+
if (array_key_exists('_responseCode', $headers)) {
|
253 |
+
header($headers['_responseCode']);
|
254 |
+
unset($headers['_responseCode']);
|
255 |
+
}
|
256 |
+
foreach ($headers as $name => $val) {
|
257 |
+
header($name . ': ' . $val);
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
/**
|
262 |
* Exit if the client's cache is valid for this resource
|
263 |
*
|
273 |
* @param array $options (default empty) additional options for constructor
|
274 |
*
|
275 |
* @return null
|
276 |
+
*/
|
277 |
+
public static function check($lastModifiedTime = null, $isPublic = false, $options = array())
|
278 |
+
{
|
279 |
+
if (null !== $lastModifiedTime) {
|
280 |
+
$options['lastModifiedTime'] = (int) $lastModifiedTime;
|
281 |
+
}
|
282 |
+
$options['isPublic'] = (bool) $isPublic;
|
283 |
+
$cg = new HTTP_ConditionalGet($options);
|
284 |
+
$cg->sendHeaders();
|
285 |
+
if ($cg->cacheIsValid) {
|
286 |
+
exit();
|
287 |
+
}
|
288 |
+
}
|
289 |
+
|
|
|
290 |
/**
|
291 |
* Get a GMT formatted date for use in HTTP headers
|
292 |
*
|
297 |
* @param int $time unix timestamp
|
298 |
*
|
299 |
* @return string
|
300 |
+
*/
|
301 |
+
public static function gmtDate($time)
|
302 |
+
{
|
303 |
+
return gmdate('D, d M Y H:i:s \G\M\T', $time);
|
304 |
+
}
|
305 |
+
|
306 |
+
protected $_headers = array();
|
307 |
+
protected $_lmTime = null;
|
308 |
+
protected $_etag = null;
|
309 |
+
protected $_stripEtag = false;
|
310 |
+
protected $_cacheHeaders = array(
|
311 |
+
'use_etag' => true,
|
312 |
+
'expires_enabled' => true,
|
313 |
+
'cacheheaders_enabled' => true,
|
314 |
+
'cacheheaders' => 'cache_validation'
|
315 |
+
);
|
316 |
+
|
317 |
+
protected function _setEtag($hash, $scope)
|
318 |
+
{
|
319 |
+
$this->_etag = '"' . substr($scope, 0, 3) . $hash . '"';
|
320 |
+
|
321 |
+
if ($this->_cacheHeaders['use_etag']) {
|
322 |
+
$this->_headers['ETag'] = $this->_etag;
|
323 |
+
}
|
324 |
+
}
|
325 |
+
|
326 |
+
protected function _setLastModified($time)
|
327 |
+
{
|
328 |
+
$this->_lmTime = (int) $time;
|
329 |
+
$this->_headers['Last-Modified'] = self::gmtDate($time);
|
330 |
+
}
|
331 |
+
|
332 |
/**
|
333 |
* Determine validity of client cache and queue 304 header if valid
|
334 |
+
*/
|
335 |
+
protected function _isCacheValid()
|
336 |
+
{
|
337 |
+
if (null === $this->_etag) {
|
338 |
// lmTime is copied to ETag, so this condition implies that the
|
339 |
// server sent neither ETag nor Last-Modified, so the client can't
|
340 |
// possibly has a valid cache.
|
341 |
+
return false;
|
342 |
+
}
|
343 |
+
$isValid = ($this->resourceMatchedEtag() || $this->resourceNotModified());
|
344 |
+
if ($isValid) {
|
345 |
+
$this->_headers['_responseCode'] = 'HTTP/1.0 304 Not Modified';
|
346 |
+
}
|
347 |
+
return $isValid;
|
348 |
+
}
|
349 |
+
|
350 |
+
protected function resourceMatchedEtag()
|
351 |
+
{
|
352 |
+
if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
|
353 |
+
return false;
|
354 |
+
}
|
355 |
+
$clientEtagList = get_magic_quotes_gpc() ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : $_SERVER['HTTP_IF_NONE_MATCH'];
|
356 |
+
$clientEtags = explode(',', $clientEtagList);
|
357 |
+
|
358 |
+
$compareTo = $this->normalizeEtag($this->_etag);
|
359 |
+
foreach ($clientEtags as $clientEtag) {
|
360 |
+
if ($this->normalizeEtag($clientEtag) === $compareTo) {
|
|
|
|
|
361 |
// respond with the client's matched ETag, even if it's not what
|
362 |
+
// we would've sent by default
|
363 |
+
if ($this->_cacheHeaders['use_etag']) {
|
364 |
+
$this->_headers['ETag'] = trim($clientEtag);
|
365 |
+
}
|
366 |
+
return true;
|
367 |
+
}
|
368 |
+
}
|
369 |
+
return false;
|
370 |
+
}
|
371 |
+
|
372 |
+
protected function normalizeEtag($etag)
|
373 |
+
{
|
374 |
+
$etag = trim($etag);
|
375 |
+
return $this->_stripEtag ? preg_replace('/;\\w\\w"$/', '"', $etag) : $etag;
|
376 |
+
}
|
377 |
+
|
378 |
+
protected function resourceNotModified()
|
379 |
+
{
|
380 |
+
if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
|
381 |
+
return false;
|
382 |
+
}
|
383 |
+
$ifModifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
|
384 |
+
if (false !== ($semicolon = strrpos($ifModifiedSince, ';'))) {
|
385 |
// IE has tacked on extra data to this header, strip it
|
386 |
+
$ifModifiedSince = substr($ifModifiedSince, 0, $semicolon);
|
387 |
+
}
|
388 |
+
if ($ifModifiedSince == self::gmtDate($this->_lmTime)) {
|
389 |
// Apache 2.2's behavior. If there was no ETag match, send the
|
390 |
+
// non-encoded version of the ETag value.
|
391 |
+
if ($this->_cacheHeaders['use_etag']) {
|
392 |
+
$this->_headers['ETag'] = $this->normalizeEtag($this->_etag);
|
393 |
+
}
|
394 |
+
return true;
|
395 |
+
}
|
396 |
+
return false;
|
397 |
+
}
|
398 |
}
|
lib/Minify/HTTP/Encoder.php
CHANGED
@@ -186,7 +186,7 @@ class HTTP_Encoder {
|
|
186 |
* alias of that method to use in the Content-Encoding header (some browsers
|
187 |
* call gzip "x-gzip" etc.)
|
188 |
*/
|
189 |
-
public static function getAcceptedEncoding(
|
190 |
{
|
191 |
// @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
|
192 |
|
@@ -198,14 +198,10 @@ class HTTP_Encoder {
|
|
198 |
return array('', '');
|
199 |
}
|
200 |
|
201 |
-
if (stristr($
|
202 |
return array('gzip', 'gzip');
|
203 |
}
|
204 |
|
205 |
-
if (stristr($compressions, 'deflate') && stristr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate')) {
|
206 |
-
return array('deflate', 'deflate');
|
207 |
-
}
|
208 |
-
|
209 |
return array('', '');
|
210 |
}
|
211 |
|
186 |
* alias of that method to use in the Content-Encoding header (some browsers
|
187 |
* call gzip "x-gzip" etc.)
|
188 |
*/
|
189 |
+
public static function getAcceptedEncoding()
|
190 |
{
|
191 |
// @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
|
192 |
|
198 |
return array('', '');
|
199 |
}
|
200 |
|
201 |
+
if (stristr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode')) {
|
202 |
return array('gzip', 'gzip');
|
203 |
}
|
204 |
|
|
|
|
|
|
|
|
|
205 |
return array('', '');
|
206 |
}
|
207 |
|
lib/Minify/Minify.php
CHANGED
@@ -207,7 +207,7 @@ class Minify {
|
|
207 |
}
|
208 |
|
209 |
// determine encoding
|
210 |
-
if (self::$_options['encodeOutput']
|
211 |
if (self::$_options['encodeMethod'] !== null) {
|
212 |
// controller specifically requested this
|
213 |
$contentEncoding = self::$_options['encodeMethod'];
|
@@ -226,7 +226,8 @@ class Minify {
|
|
226 |
// check client cache
|
227 |
require_once W3TC_LIB_MINIFY_DIR . '/HTTP/ConditionalGet.php';
|
228 |
$cgOptions = array(
|
229 |
-
'
|
|
|
230 |
,'isPublic' => self::$_options['isPublic']
|
231 |
,'encoding' => self::$_options['encodeMethod']
|
232 |
);
|
@@ -285,13 +286,9 @@ class Minify {
|
|
285 |
$content = self::_combineMinify();
|
286 |
self::$_cache->store($cacheId, $content);
|
287 |
|
288 |
-
if (
|
289 |
self::$_cache->store($cacheId . '.gzip', gzencode($content, self::$_options['encodeLevel']));
|
290 |
}
|
291 |
-
|
292 |
-
if (stristr(self::$_options['encodeOutput'], 'deflate') && function_exists('gzdeflate')) {
|
293 |
-
self::$_cache->store($cacheId . '.deflate', gzdeflate($content, self::$_options['encodeLevel']));
|
294 |
-
}
|
295 |
}
|
296 |
} else {
|
297 |
// no cache
|
@@ -387,6 +384,8 @@ class Minify {
|
|
387 |
if (isset($_SERVER['SERVER_SOFTWARE'])
|
388 |
&& 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')
|
389 |
) {
|
|
|
|
|
390 |
$_SERVER['DOCUMENT_ROOT'] = rtrim(substr(
|
391 |
$_SERVER['PATH_TRANSLATED']
|
392 |
,0
|
207 |
}
|
208 |
|
209 |
// determine encoding
|
210 |
+
if (self::$_options['encodeOutput']) {
|
211 |
if (self::$_options['encodeMethod'] !== null) {
|
212 |
// controller specifically requested this
|
213 |
$contentEncoding = self::$_options['encodeMethod'];
|
226 |
// check client cache
|
227 |
require_once W3TC_LIB_MINIFY_DIR . '/HTTP/ConditionalGet.php';
|
228 |
$cgOptions = array(
|
229 |
+
'cacheHeaders' => self::$_options['cacheHeaders']
|
230 |
+
,'lastModifiedTime' => self::$_options['lastModifiedTime']
|
231 |
,'isPublic' => self::$_options['isPublic']
|
232 |
,'encoding' => self::$_options['encodeMethod']
|
233 |
);
|
286 |
$content = self::_combineMinify();
|
287 |
self::$_cache->store($cacheId, $content);
|
288 |
|
289 |
+
if (self::$_options['encodeOutput'] && function_exists('gzencode')) {
|
290 |
self::$_cache->store($cacheId . '.gzip', gzencode($content, self::$_options['encodeLevel']));
|
291 |
}
|
|
|
|
|
|
|
|
|
292 |
}
|
293 |
} else {
|
294 |
// no cache
|
384 |
if (isset($_SERVER['SERVER_SOFTWARE'])
|
385 |
&& 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')
|
386 |
) {
|
387 |
+
$_SERVER['PATH_TRANSLATED']= preg_replace('~[/\\\]+~', '/', $_SERVER['PATH_TRANSLATED']);
|
388 |
+
|
389 |
$_SERVER['DOCUMENT_ROOT'] = rtrim(substr(
|
390 |
$_SERVER['PATH_TRANSLATED']
|
391 |
,0
|
lib/Minify/Minify/CSS/Compressor.php
CHANGED
@@ -68,6 +68,11 @@ class Minify_CSS_Compressor {
|
|
68 |
*/
|
69 |
protected function _process($css)
|
70 |
{
|
|
|
|
|
|
|
|
|
|
|
71 |
$css = str_replace("\r\n", "\n", $css);
|
72 |
|
73 |
// preserve empty comment after '>'
|
@@ -110,7 +115,7 @@ class Minify_CSS_Compressor {
|
|
110 |
\\s*
|
111 |
(\\b|[#\'"]) # 3 = first character of a value
|
112 |
/x', '$1$2:$3', $css);
|
113 |
-
|
114 |
// remove ws in selectors
|
115 |
$css = preg_replace_callback('/
|
116 |
(?: # non-capture
|
@@ -124,7 +129,7 @@ class Minify_CSS_Compressor {
|
|
124 |
{ # open declaration block
|
125 |
/x'
|
126 |
,array($this, '_selectorsCB'), $css);
|
127 |
-
|
128 |
// minimize hex colors
|
129 |
$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
|
130 |
, '$1#$2$3$4$5', $css);
|
@@ -150,6 +155,13 @@ class Minify_CSS_Compressor {
|
|
150 |
|
151 |
// prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
|
152 |
$css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
|
154 |
return trim($css);
|
155 |
}
|
@@ -247,4 +259,16 @@ class Minify_CSS_Compressor {
|
|
247 |
/x', '$1', $m[1]);
|
248 |
return 'font-family:' . $m[1] . $m[2];
|
249 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
}
|
68 |
*/
|
69 |
protected function _process($css)
|
70 |
{
|
71 |
+
$this->_replacementHash = 'MINIFYCSS' . md5($_SERVER['REQUEST_TIME']);
|
72 |
+
$this->_placeholders = array();
|
73 |
+
|
74 |
+
$css = preg_replace_callback('~(".*"|\'.*\')~U', array($this, '_removeQuotesCB'), $css);
|
75 |
+
|
76 |
$css = str_replace("\r\n", "\n", $css);
|
77 |
|
78 |
// preserve empty comment after '>'
|
115 |
\\s*
|
116 |
(\\b|[#\'"]) # 3 = first character of a value
|
117 |
/x', '$1$2:$3', $css);
|
118 |
+
|
119 |
// remove ws in selectors
|
120 |
$css = preg_replace_callback('/
|
121 |
(?: # non-capture
|
129 |
{ # open declaration block
|
130 |
/x'
|
131 |
,array($this, '_selectorsCB'), $css);
|
132 |
+
|
133 |
// minimize hex colors
|
134 |
$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
|
135 |
, '$1#$2$3$4$5', $css);
|
155 |
|
156 |
// prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
|
157 |
$css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
|
158 |
+
|
159 |
+
// fill placeholders
|
160 |
+
$css = str_replace(
|
161 |
+
array_keys($this->_placeholders)
|
162 |
+
,array_values($this->_placeholders)
|
163 |
+
,$css
|
164 |
+
);
|
165 |
|
166 |
return trim($css);
|
167 |
}
|
259 |
/x', '$1', $m[1]);
|
260 |
return 'font-family:' . $m[1] . $m[2];
|
261 |
}
|
262 |
+
|
263 |
+
protected function _reservePlace($content)
|
264 |
+
{
|
265 |
+
$placeholder = '"' . $this->_replacementHash . count($this->_placeholders) . '"';
|
266 |
+
$this->_placeholders[$placeholder] = $content;
|
267 |
+
return $placeholder;
|
268 |
+
}
|
269 |
+
|
270 |
+
protected function _removeQuotesCB($m)
|
271 |
+
{
|
272 |
+
return $this->_reservePlace($m[1]);
|
273 |
+
}
|
274 |
}
|
lib/Minify/Minify/CSS/UriRewriter.php
CHANGED
@@ -175,7 +175,7 @@ class Minify_CSS_UriRewriter {
|
|
175 |
$dir = (ltrim((strpos($dir_obj, '/') === 0 ? w3_realpath($dir_obj) : w3_realpath($dir_css . $dir_obj)), '/'));
|
176 |
$file = basename($uri);
|
177 |
|
178 |
-
$uri = sprintf('%s://%s%s/%s
|
179 |
}
|
180 |
} else {
|
181 |
$uri = self::$_prependPath . $uri;
|
@@ -271,7 +271,7 @@ class Minify_CSS_UriRewriter {
|
|
271 |
|
272 |
self::$debugText .= "traversals removed : {$uri}\n\n";
|
273 |
|
274 |
-
$uri = str_replace(
|
275 |
|
276 |
return $uri;
|
277 |
}
|
175 |
$dir = (ltrim((strpos($dir_obj, '/') === 0 ? w3_realpath($dir_obj) : w3_realpath($dir_css . $dir_obj)), '/'));
|
176 |
$file = basename($uri);
|
177 |
|
178 |
+
$uri = sprintf('%s://%s%s/%s/%s', $scheme, $host, $port, $dir, $file);
|
179 |
}
|
180 |
} else {
|
181 |
$uri = self::$_prependPath . $uri;
|
271 |
|
272 |
self::$debugText .= "traversals removed : {$uri}\n\n";
|
273 |
|
274 |
+
$uri = str_replace(w3_get_base_path(), w3_get_site_path(), $uri);
|
275 |
|
276 |
return $uri;
|
277 |
}
|
lib/Minify/Minify/Cache/File.php
CHANGED
@@ -32,13 +32,20 @@ class Minify_Cache_File {
|
|
32 |
: null;
|
33 |
if (is_file($this->_path . '/' . $id)) {
|
34 |
@unlink($this->_path . '/' . $id);
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
|
37 |
return false;
|
38 |
}
|
39 |
// write control
|
40 |
-
if ($data
|
41 |
-
@unlink($
|
42 |
return false;
|
43 |
}
|
44 |
return true;
|
32 |
: null;
|
33 |
if (is_file($this->_path . '/' . $id)) {
|
34 |
@unlink($this->_path . '/' . $id);
|
35 |
+
}
|
36 |
+
|
37 |
+
$dir = dirname($id);
|
38 |
+
|
39 |
+
if ($dir) {
|
40 |
+
w3_mkdir($dir, 0755, $this->_path);
|
41 |
+
}
|
42 |
+
|
43 |
if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
|
44 |
return false;
|
45 |
}
|
46 |
// write control
|
47 |
+
if ($data != $this->fetch($id)) {
|
48 |
+
@unlink($this->_path . '/' . $id);
|
49 |
return false;
|
50 |
}
|
51 |
return true;
|
lib/Minify/Minify/CombineOnly.php
CHANGED
@@ -25,4 +25,4 @@ class Minify_CombineOnly
|
|
25 |
|
26 |
return $content;
|
27 |
}
|
28 |
-
}
|
25 |
|
26 |
return $content;
|
27 |
}
|
28 |
+
}
|
lib/Minify/Minify/Controller/MinApp.php
CHANGED
@@ -63,7 +63,7 @@ class Minify_Controller_MinApp extends Minify_Controller_Base {
|
|
63 |
));
|
64 |
} else {
|
65 |
$this->log("The path \"{$file}\" could not be found (or was not a file)");
|
66 |
-
|
67 |
}
|
68 |
}
|
69 |
} elseif (! $cOptions['groupsOnly'] && isset($_GET['f'])) {
|
63 |
));
|
64 |
} else {
|
65 |
$this->log("The path \"{$file}\" could not be found (or was not a file)");
|
66 |
+
continue;
|
67 |
}
|
68 |
}
|
69 |
} elseif (! $cOptions['groupsOnly'] && isset($_GET['f'])) {
|
lib/Minify/Minify/HTML.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* Class Minify_HTML
|
4 |
* @package Minify
|
5 |
*/
|
6 |
|
7 |
/**
|
8 |
* Compress HTML
|
9 |
*
|
10 |
-
* This is a heavy regex-based removal of whitespace, unnecessary comments and
|
11 |
* tokens. IE conditional comments are preserved. There are also options to have
|
12 |
-
* STYLE and SCRIPT blocks compressed by callback functions.
|
13 |
-
*
|
14 |
* A test suite is available.
|
15 |
-
*
|
16 |
* @package Minify
|
17 |
* @author Stephen Clay <steve@mrclay.org>
|
18 |
*/
|
@@ -27,21 +27,21 @@ class Minify_HTML {
|
|
27 |
*
|
28 |
* 'cssMinifier' : (optional) callback function to process content of STYLE
|
29 |
* elements.
|
30 |
-
*
|
31 |
* 'jsMinifier' : (optional) callback function to process content of SCRIPT
|
32 |
* elements. Note: the type attribute is ignored.
|
33 |
-
*
|
34 |
* 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
|
35 |
* unset, minify will sniff for an XHTML doctype.
|
36 |
-
*
|
37 |
* @return string
|
38 |
*/
|
39 |
public static function minify($html, $options = array()) {
|
40 |
$min = new Minify_HTML($html, $options);
|
41 |
return $min->process();
|
42 |
}
|
43 |
-
|
44 |
-
|
45 |
/**
|
46 |
* Create a minifier object
|
47 |
*
|
@@ -51,13 +51,13 @@ class Minify_HTML {
|
|
51 |
*
|
52 |
* 'cssMinifier' : (optional) callback function to process content of STYLE
|
53 |
* elements.
|
54 |
-
*
|
55 |
* 'jsMinifier' : (optional) callback function to process content of SCRIPT
|
56 |
* elements. Note: the type attribute is ignored.
|
57 |
-
*
|
58 |
* 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
|
59 |
* unset, minify will sniff for an XHTML doctype.
|
60 |
-
*
|
61 |
* @return null
|
62 |
*/
|
63 |
public function __construct($html, $options = array())
|
@@ -72,17 +72,18 @@ class Minify_HTML {
|
|
72 |
if (isset($options['jsMinifier'])) {
|
73 |
$this->_jsMinifier = $options['jsMinifier'];
|
74 |
}
|
75 |
-
|
76 |
-
$this->_stripCrlf = (isset($options['stripCrlf']) ? (boolean) $options['stripCrlf'] : false) ;
|
77 |
-
$this->_cssStripCrlf = (isset($options['cssStripCrlf']) ? (boolean) $options['cssStripCrlf'] : false);
|
78 |
-
$this->_cssStripComments = (isset($options['cssStripComments']) ? (boolean) $options['cssStripComments'] : false);
|
79 |
-
$this->_jsStripCrlf = (isset($options['jsStripCrlf']) ? (boolean) $options['jsStripCrlf'] : false);
|
80 |
-
$this->_jsStripComments = (isset($options['jsStripComments']) ? (boolean) $options['jsStripComments'] : false);
|
|
|
81 |
}
|
82 |
-
|
83 |
/**
|
84 |
* Minify the markeup given in the constructor
|
85 |
-
*
|
86 |
* @return string
|
87 |
*/
|
88 |
public function process()
|
@@ -90,65 +91,71 @@ class Minify_HTML {
|
|
90 |
if ($this->_isXhtml === null) {
|
91 |
$this->_isXhtml = (false !== strpos($this->_html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'));
|
92 |
}
|
93 |
-
|
94 |
$this->_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']);
|
95 |
$this->_placeholders = array();
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
// replace SCRIPTs (and minify) with placeholders
|
98 |
$this->_html = preg_replace_callback(
|
99 |
'/(\\s*)(<script\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i'
|
100 |
,array($this, '_removeScriptCB')
|
101 |
,$this->_html);
|
102 |
-
|
103 |
// replace STYLEs (and minify) with placeholders
|
104 |
$this->_html = preg_replace_callback(
|
105 |
'/\\s*(<style\\b[^>]*?>)([\\s\\S]*?)<\\/style>\\s*/i'
|
106 |
,array($this, '_removeStyleCB')
|
107 |
,$this->_html);
|
108 |
-
|
109 |
// remove HTML comments (not containing IE conditional comments).
|
110 |
$this->_html = preg_replace_callback(
|
111 |
'/<!--([\\s\\S]*?)-->/'
|
112 |
,array($this, '_commentCB')
|
113 |
,$this->_html);
|
114 |
-
|
115 |
// replace PREs with placeholders
|
116 |
$this->_html = preg_replace_callback('/\\s*(<pre\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i'
|
117 |
,array($this, '_removePreCB')
|
118 |
,$this->_html);
|
119 |
-
|
120 |
// replace TEXTAREAs with placeholders
|
121 |
$this->_html = preg_replace_callback(
|
122 |
'/\\s*(<textarea\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i'
|
123 |
,array($this, '_removeTextareaCB')
|
124 |
,$this->_html);
|
125 |
-
|
126 |
// trim each line.
|
127 |
// @todo take into account attribute values that span multiple lines.
|
128 |
$this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html);
|
129 |
-
|
130 |
// remove ws around block/undisplayed elements
|
131 |
$this->_html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body'
|
132 |
.'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form'
|
133 |
.'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta'
|
134 |
.'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)'
|
135 |
.'|ul)\\b[^>]*>)/i', '$1', $this->_html);
|
136 |
-
|
137 |
// remove ws outside of all elements
|
138 |
$this->_html = preg_replace_callback(
|
139 |
'/>([^<]+)</'
|
140 |
,array($this, '_outsideTagCB')
|
141 |
,$this->_html);
|
142 |
-
|
143 |
// use newlines before 1st attribute in open tags (to limit line lengths)
|
144 |
$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);
|
145 |
-
|
146 |
if ($this->_stripCrlf) {
|
147 |
$this->_html = preg_replace("~[\r\n]+~", ' ', $this->_html);
|
148 |
} else {
|
149 |
$this->_html = preg_replace("~[\r\n]+~", "\n", $this->_html);
|
150 |
}
|
151 |
-
|
152 |
// fill placeholders
|
153 |
$this->_html = str_replace(
|
154 |
array_keys($this->_placeholders)
|
@@ -157,14 +164,25 @@ class Minify_HTML {
|
|
157 |
);
|
158 |
return $this->_html;
|
159 |
}
|
160 |
-
|
161 |
protected function _commentCB($m)
|
162 |
{
|
163 |
-
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<!['))
|
164 |
? $m[0]
|
165 |
: '';
|
166 |
}
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
protected function _reservePlace($content)
|
169 |
{
|
170 |
$placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%';
|
@@ -177,17 +195,22 @@ class Minify_HTML {
|
|
177 |
protected $_placeholders = array();
|
178 |
protected $_cssMinifier = null;
|
179 |
protected $_jsMinifier = null;
|
|
|
|
|
|
|
|
|
|
|
180 |
|
181 |
protected function _outsideTagCB($m)
|
182 |
{
|
183 |
return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<';
|
184 |
}
|
185 |
-
|
186 |
protected function _removePreCB($m)
|
187 |
{
|
188 |
return $this->_reservePlace($m[1]);
|
189 |
}
|
190 |
-
|
191 |
protected function _removeTextareaCB($m)
|
192 |
{
|
193 |
return $this->_reservePlace($m[1]);
|
@@ -199,26 +222,26 @@ class Minify_HTML {
|
|
199 |
$css = $m[2];
|
200 |
// remove HTML comments
|
201 |
$css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css);
|
202 |
-
|
203 |
// remove CDATA section markers
|
204 |
$css = $this->_removeCdata($css);
|
205 |
-
|
206 |
// minify
|
207 |
$minifier = $this->_cssMinifier
|
208 |
? $this->_cssMinifier
|
209 |
: 'trim';
|
210 |
$css = call_user_func($minifier, $css);
|
211 |
-
|
212 |
if ($this->_cssStripComments) {
|
213 |
$css = preg_replace('~/\*.*\*/~Us', '', $css);
|
214 |
}
|
215 |
-
|
216 |
if ($this->_cssStripCrlf) {
|
217 |
$css = preg_replace("~[\r\n]+~", ' ', $css);
|
218 |
} else {
|
219 |
$css = preg_replace("~[\r\n]+~", "\n", $css);
|
220 |
-
}
|
221 |
-
|
222 |
return $this->_reservePlace($this->_needsCdata($css)
|
223 |
? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
|
224 |
: "{$openStyle}{$css}</style>"
|
@@ -229,34 +252,34 @@ class Minify_HTML {
|
|
229 |
{
|
230 |
$openScript = $m[2];
|
231 |
$js = $m[3];
|
232 |
-
|
233 |
// whitespace surrounding? preserve at least one space
|
234 |
$ws1 = ($m[1] === '') ? '' : ' ';
|
235 |
$ws2 = ($m[4] === '') ? '' : ' ';
|
236 |
-
|
237 |
// remove HTML comments (and ending "//" if present)
|
238 |
$js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js);
|
239 |
-
|
240 |
// remove CDATA section markers
|
241 |
$js = $this->_removeCdata($js);
|
242 |
-
|
243 |
// minify
|
244 |
$minifier = $this->_jsMinifier
|
245 |
? $this->_jsMinifier
|
246 |
-
: 'trim';
|
247 |
$js = call_user_func($minifier, $js);
|
248 |
-
|
249 |
if ($this->_jsStripComments) {
|
250 |
$js = preg_replace('~^//.*$~m', '', $js);
|
251 |
$js = preg_replace('~/\*.*\*/~Us', '', $js);
|
252 |
}
|
253 |
-
|
254 |
if ($this->_jsStripCrlf) {
|
255 |
$js = preg_replace("~[\r\n]+~", '', $js);
|
256 |
} else {
|
257 |
$js = preg_replace("~[\r\n]+~", "\n", $js);
|
258 |
}
|
259 |
-
|
260 |
return $this->_reservePlace($this->_needsCdata($js)
|
261 |
? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}"
|
262 |
: "{$ws1}{$openScript}{$js}</script>{$ws2}"
|
@@ -269,15 +292,20 @@ class Minify_HTML {
|
|
269 |
$str = str_replace('//<![CDATA[', '', $str);
|
270 |
$str = str_replace('/*<![CDATA[*/', '', $str);
|
271 |
$str = str_replace('<![CDATA[', '', $str);
|
272 |
-
|
273 |
$str = str_replace('//]]>', '', $str);
|
274 |
$str = str_replace('/*]]>*/', '', $str);
|
275 |
$str = str_replace(']]>', '', $str);
|
276 |
}
|
277 |
-
|
278 |
return $str;
|
279 |
}
|
280 |
-
|
|
|
|
|
|
|
|
|
|
|
281 |
protected function _needsCdata($str)
|
282 |
{
|
283 |
return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str));
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Class Minify_HTML
|
4 |
* @package Minify
|
5 |
*/
|
6 |
|
7 |
/**
|
8 |
* Compress HTML
|
9 |
*
|
10 |
+
* This is a heavy regex-based removal of whitespace, unnecessary comments and
|
11 |
* tokens. IE conditional comments are preserved. There are also options to have
|
12 |
+
* STYLE and SCRIPT blocks compressed by callback functions.
|
13 |
+
*
|
14 |
* A test suite is available.
|
15 |
+
*
|
16 |
* @package Minify
|
17 |
* @author Stephen Clay <steve@mrclay.org>
|
18 |
*/
|
27 |
*
|
28 |
* 'cssMinifier' : (optional) callback function to process content of STYLE
|
29 |
* elements.
|
30 |
+
*
|
31 |
* 'jsMinifier' : (optional) callback function to process content of SCRIPT
|
32 |
* elements. Note: the type attribute is ignored.
|
33 |
+
*
|
34 |
* 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
|
35 |
* unset, minify will sniff for an XHTML doctype.
|
36 |
+
*
|
37 |
* @return string
|
38 |
*/
|
39 |
public static function minify($html, $options = array()) {
|
40 |
$min = new Minify_HTML($html, $options);
|
41 |
return $min->process();
|
42 |
}
|
43 |
+
|
44 |
+
|
45 |
/**
|
46 |
* Create a minifier object
|
47 |
*
|
51 |
*
|
52 |
* 'cssMinifier' : (optional) callback function to process content of STYLE
|
53 |
* elements.
|
54 |
+
*
|
55 |
* 'jsMinifier' : (optional) callback function to process content of SCRIPT
|
56 |
* elements. Note: the type attribute is ignored.
|
57 |
+
*
|
58 |
* 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
|
59 |
* unset, minify will sniff for an XHTML doctype.
|
60 |
+
*
|
61 |
* @return null
|
62 |
*/
|
63 |
public function __construct($html, $options = array())
|
72 |
if (isset($options['jsMinifier'])) {
|
73 |
$this->_jsMinifier = $options['jsMinifier'];
|
74 |
}
|
75 |
+
|
76 |
+
$this->_stripCrlf = (isset($options['stripCrlf']) ? (boolean) $options['stripCrlf'] : false) ;
|
77 |
+
$this->_cssStripCrlf = (isset($options['cssStripCrlf']) ? (boolean) $options['cssStripCrlf'] : false);
|
78 |
+
$this->_cssStripComments = (isset($options['cssStripComments']) ? (boolean) $options['cssStripComments'] : false);
|
79 |
+
$this->_jsStripCrlf = (isset($options['jsStripCrlf']) ? (boolean) $options['jsStripCrlf'] : false);
|
80 |
+
$this->_jsStripComments = (isset($options['jsStripComments']) ? (boolean) $options['jsStripComments'] : false);
|
81 |
+
$this->_ignoredComments = (isset($options['ignoredComments']) ? (array) $options['ignoredComments'] : array());
|
82 |
}
|
83 |
+
|
84 |
/**
|
85 |
* Minify the markeup given in the constructor
|
86 |
+
*
|
87 |
* @return string
|
88 |
*/
|
89 |
public function process()
|
91 |
if ($this->_isXhtml === null) {
|
92 |
$this->_isXhtml = (false !== strpos($this->_html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'));
|
93 |
}
|
94 |
+
|
95 |
$this->_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']);
|
96 |
$this->_placeholders = array();
|
97 |
+
|
98 |
+
// replace dynamic tags
|
99 |
+
$this->_html = preg_replace_callback(
|
100 |
+
'~(<!--\s*m(func|clude)(.*)-->\s*<!--\s*/m(func|clude)\s*-->)~is'
|
101 |
+
,array($this, '_removeComment')
|
102 |
+
,$this->_html);
|
103 |
+
|
104 |
// replace SCRIPTs (and minify) with placeholders
|
105 |
$this->_html = preg_replace_callback(
|
106 |
'/(\\s*)(<script\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i'
|
107 |
,array($this, '_removeScriptCB')
|
108 |
,$this->_html);
|
109 |
+
|
110 |
// replace STYLEs (and minify) with placeholders
|
111 |
$this->_html = preg_replace_callback(
|
112 |
'/\\s*(<style\\b[^>]*?>)([\\s\\S]*?)<\\/style>\\s*/i'
|
113 |
,array($this, '_removeStyleCB')
|
114 |
,$this->_html);
|
115 |
+
|
116 |
// remove HTML comments (not containing IE conditional comments).
|
117 |
$this->_html = preg_replace_callback(
|
118 |
'/<!--([\\s\\S]*?)-->/'
|
119 |
,array($this, '_commentCB')
|
120 |
,$this->_html);
|
121 |
+
|
122 |
// replace PREs with placeholders
|
123 |
$this->_html = preg_replace_callback('/\\s*(<pre\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i'
|
124 |
,array($this, '_removePreCB')
|
125 |
,$this->_html);
|
126 |
+
|
127 |
// replace TEXTAREAs with placeholders
|
128 |
$this->_html = preg_replace_callback(
|
129 |
'/\\s*(<textarea\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i'
|
130 |
,array($this, '_removeTextareaCB')
|
131 |
,$this->_html);
|
132 |
+
|
133 |
// trim each line.
|
134 |
// @todo take into account attribute values that span multiple lines.
|
135 |
$this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html);
|
136 |
+
|
137 |
// remove ws around block/undisplayed elements
|
138 |
$this->_html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body'
|
139 |
.'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form'
|
140 |
.'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta'
|
141 |
.'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)'
|
142 |
.'|ul)\\b[^>]*>)/i', '$1', $this->_html);
|
143 |
+
|
144 |
// remove ws outside of all elements
|
145 |
$this->_html = preg_replace_callback(
|
146 |
'/>([^<]+)</'
|
147 |
,array($this, '_outsideTagCB')
|
148 |
,$this->_html);
|
149 |
+
|
150 |
// use newlines before 1st attribute in open tags (to limit line lengths)
|
151 |
$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);
|
152 |
+
|
153 |
if ($this->_stripCrlf) {
|
154 |
$this->_html = preg_replace("~[\r\n]+~", ' ', $this->_html);
|
155 |
} else {
|
156 |
$this->_html = preg_replace("~[\r\n]+~", "\n", $this->_html);
|
157 |
}
|
158 |
+
|
159 |
// fill placeholders
|
160 |
$this->_html = str_replace(
|
161 |
array_keys($this->_placeholders)
|
164 |
);
|
165 |
return $this->_html;
|
166 |
}
|
167 |
+
|
168 |
protected function _commentCB($m)
|
169 |
{
|
170 |
+
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<![') || $this->_ignoredComment($m[1]))
|
171 |
? $m[0]
|
172 |
: '';
|
173 |
}
|
174 |
+
|
175 |
+
protected function _ignoredComment($comment)
|
176 |
+
{
|
177 |
+
foreach ($this->_ignoredComments as $ignoredComment) {
|
178 |
+
if (stristr($comment, $ignoredComment) !== false) {
|
179 |
+
return true;
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
return false;
|
184 |
+
}
|
185 |
+
|
186 |
protected function _reservePlace($content)
|
187 |
{
|
188 |
$placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%';
|
195 |
protected $_placeholders = array();
|
196 |
protected $_cssMinifier = null;
|
197 |
protected $_jsMinifier = null;
|
198 |
+
protected $_stripCrlf = null;
|
199 |
+
protected $_cssStripCrlf = null;
|
200 |
+
protected $_jsStripCrlf = null;
|
201 |
+
protected $_jsStripComments = null;
|
202 |
+
protected $_ignoredComments = null;
|
203 |
|
204 |
protected function _outsideTagCB($m)
|
205 |
{
|
206 |
return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<';
|
207 |
}
|
208 |
+
|
209 |
protected function _removePreCB($m)
|
210 |
{
|
211 |
return $this->_reservePlace($m[1]);
|
212 |
}
|
213 |
+
|
214 |
protected function _removeTextareaCB($m)
|
215 |
{
|
216 |
return $this->_reservePlace($m[1]);
|
222 |
$css = $m[2];
|
223 |
// remove HTML comments
|
224 |
$css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css);
|
225 |
+
|
226 |
// remove CDATA section markers
|
227 |
$css = $this->_removeCdata($css);
|
228 |
+
|
229 |
// minify
|
230 |
$minifier = $this->_cssMinifier
|
231 |
? $this->_cssMinifier
|
232 |
: 'trim';
|
233 |
$css = call_user_func($minifier, $css);
|
234 |
+
|
235 |
if ($this->_cssStripComments) {
|
236 |
$css = preg_replace('~/\*.*\*/~Us', '', $css);
|
237 |
}
|
238 |
+
|
239 |
if ($this->_cssStripCrlf) {
|
240 |
$css = preg_replace("~[\r\n]+~", ' ', $css);
|
241 |
} else {
|
242 |
$css = preg_replace("~[\r\n]+~", "\n", $css);
|
243 |
+
}
|
244 |
+
|
245 |
return $this->_reservePlace($this->_needsCdata($css)
|
246 |
? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
|
247 |
: "{$openStyle}{$css}</style>"
|
252 |
{
|
253 |
$openScript = $m[2];
|
254 |
$js = $m[3];
|
255 |
+
|
256 |
// whitespace surrounding? preserve at least one space
|
257 |
$ws1 = ($m[1] === '') ? '' : ' ';
|
258 |
$ws2 = ($m[4] === '') ? '' : ' ';
|
259 |
+
|
260 |
// remove HTML comments (and ending "//" if present)
|
261 |
$js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js);
|
262 |
+
|
263 |
// remove CDATA section markers
|
264 |
$js = $this->_removeCdata($js);
|
265 |
+
|
266 |
// minify
|
267 |
$minifier = $this->_jsMinifier
|
268 |
? $this->_jsMinifier
|
269 |
+
: 'trim';
|
270 |
$js = call_user_func($minifier, $js);
|
271 |
+
|
272 |
if ($this->_jsStripComments) {
|
273 |
$js = preg_replace('~^//.*$~m', '', $js);
|
274 |
$js = preg_replace('~/\*.*\*/~Us', '', $js);
|
275 |
}
|
276 |
+
|
277 |
if ($this->_jsStripCrlf) {
|
278 |
$js = preg_replace("~[\r\n]+~", '', $js);
|
279 |
} else {
|
280 |
$js = preg_replace("~[\r\n]+~", "\n", $js);
|
281 |
}
|
282 |
+
|
283 |
return $this->_reservePlace($this->_needsCdata($js)
|
284 |
? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}"
|
285 |
: "{$ws1}{$openScript}{$js}</script>{$ws2}"
|
292 |
$str = str_replace('//<![CDATA[', '', $str);
|
293 |
$str = str_replace('/*<![CDATA[*/', '', $str);
|
294 |
$str = str_replace('<![CDATA[', '', $str);
|
295 |
+
|
296 |
$str = str_replace('//]]>', '', $str);
|
297 |
$str = str_replace('/*]]>*/', '', $str);
|
298 |
$str = str_replace(']]>', '', $str);
|
299 |
}
|
300 |
+
|
301 |
return $str;
|
302 |
}
|
303 |
+
|
304 |
+
protected function _removeComment($m)
|
305 |
+
{
|
306 |
+
return $this->_reservePlace($m[1]);
|
307 |
+
}
|
308 |
+
|
309 |
protected function _needsCdata($str)
|
310 |
{
|
311 |
return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str));
|
lib/S3.php
CHANGED
@@ -1046,11 +1046,7 @@ class S3 {
|
|
1046 |
public static function __getMimeType(&$file) {
|
1047 |
$type = w3_get_mime_type($file);
|
1048 |
|
1049 |
-
|
1050 |
-
$type = trim(mime_content_type($file));
|
1051 |
-
}
|
1052 |
-
|
1053 |
-
return (! empty($type) ? $type : 'application/octet-stream');
|
1054 |
}
|
1055 |
|
1056 |
|
@@ -1224,6 +1220,7 @@ final class S3Request {
|
|
1224 |
curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback'));
|
1225 |
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, '__responseHeaderCallback'));
|
1226 |
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
|
|
1227 |
|
1228 |
// Request types
|
1229 |
switch ($this->verb) {
|
1046 |
public static function __getMimeType(&$file) {
|
1047 |
$type = w3_get_mime_type($file);
|
1048 |
|
1049 |
+
return $type;
|
|
|
|
|
|
|
|
|
1050 |
}
|
1051 |
|
1052 |
|
1220 |
curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback'));
|
1221 |
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, '__responseHeaderCallback'));
|
1222 |
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
1223 |
+
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
|
1224 |
|
1225 |
// Request types
|
1226 |
switch ($this->verb) {
|
lib/W3/Cache/Apc.php
CHANGED
@@ -18,7 +18,7 @@ class W3_Cache_Apc extends W3_Cache_Base
|
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
-
function add($key,
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
@@ -35,7 +35,7 @@ class W3_Cache_Apc extends W3_Cache_Base
|
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
-
function set($key,
|
39 |
{
|
40 |
return apc_store($key, serialize($var), $expire);
|
41 |
}
|
@@ -59,7 +59,7 @@ class W3_Cache_Apc extends W3_Cache_Base
|
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
-
function replace($key,
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
+
function add($key, &$var, $expire = 0)
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
+
function set($key, &$var, $expire = 0)
|
39 |
{
|
40 |
return apc_store($key, serialize($var), $expire);
|
41 |
}
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
+
function replace($key, &$var, $expire = 0)
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
lib/W3/Cache/Base.php
CHANGED
@@ -18,7 +18,7 @@ class W3_Cache_Base
|
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
-
function add($key,
|
22 |
{
|
23 |
return false;
|
24 |
}
|
@@ -32,7 +32,7 @@ class W3_Cache_Base
|
|
32 |
* @param integer $expire
|
33 |
* @return boolean
|
34 |
*/
|
35 |
-
function set($key,
|
36 |
{
|
37 |
return false;
|
38 |
}
|
@@ -69,7 +69,7 @@ class W3_Cache_Base
|
|
69 |
* @param integer $expire
|
70 |
* @return boolean
|
71 |
*/
|
72 |
-
function replace($key,
|
73 |
{
|
74 |
return false;
|
75 |
}
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
+
function add($key, &$data, $expire = 0)
|
22 |
{
|
23 |
return false;
|
24 |
}
|
32 |
* @param integer $expire
|
33 |
* @return boolean
|
34 |
*/
|
35 |
+
function set($key, &$data, $expire = 0)
|
36 |
{
|
37 |
return false;
|
38 |
}
|
69 |
* @param integer $expire
|
70 |
* @return boolean
|
71 |
*/
|
72 |
+
function replace($key, &$data, $expire = 0)
|
73 |
{
|
74 |
return false;
|
75 |
}
|
lib/W3/Cache/Eaccelerator.php
CHANGED
@@ -18,7 +18,7 @@ class W3_Cache_Eaccelerator extends W3_Cache_Base
|
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
-
function add($key,
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
@@ -35,7 +35,7 @@ class W3_Cache_Eaccelerator extends W3_Cache_Base
|
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
-
function set($key,
|
39 |
{
|
40 |
return eaccelerator_put($key, serialize($var), $expire);
|
41 |
}
|
@@ -59,7 +59,7 @@ class W3_Cache_Eaccelerator extends W3_Cache_Base
|
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
-
function replace($key,
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
+
function add($key, &$var, $expire = 0)
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
+
function set($key, &$var, $expire = 0)
|
39 |
{
|
40 |
return eaccelerator_put($key, serialize($var), $expire);
|
41 |
}
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
+
function replace($key, &$var, $expire = 0)
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
lib/W3/Cache/File.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!
|
4 |
define('W3_CACHE_FILE_EXPIRE_MAX', 2592000);
|
5 |
}
|
6 |
|
@@ -21,6 +21,13 @@ class W3_Cache_File extends W3_Cache_Base
|
|
21 |
*/
|
22 |
var $_cache_dir = '';
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
/**
|
25 |
* PHP5 constructor
|
26 |
*
|
@@ -29,6 +36,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
29 |
function __construct($config = array())
|
30 |
{
|
31 |
$this->_cache_dir = isset($config['cache_dir']) ? trim($config['cache_dir']) : 'cache';
|
|
|
32 |
}
|
33 |
|
34 |
/**
|
@@ -50,7 +58,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
50 |
* @param integer $expire
|
51 |
* @return boolean
|
52 |
*/
|
53 |
-
function add($key,
|
54 |
{
|
55 |
if ($this->get($key) === false) {
|
56 |
return $this->set($key, $var, $expire);
|
@@ -67,7 +75,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
67 |
* @param integer $expire
|
68 |
* @return boolean
|
69 |
*/
|
70 |
-
function set($key,
|
71 |
{
|
72 |
$sub_path = $this->_get_path($key);
|
73 |
$path = $this->_cache_dir . '/' . $sub_path;
|
@@ -75,12 +83,22 @@ class W3_Cache_File extends W3_Cache_Base
|
|
75 |
$sub_dir = dirname($sub_path);
|
76 |
$dir = dirname($path);
|
77 |
|
78 |
-
if ((is_dir($dir) || w3_mkdir($sub_dir, 0755, $this->_cache_dir))) {
|
79 |
$fp = @fopen($path, 'wb');
|
|
|
80 |
if ($fp) {
|
|
|
|
|
|
|
|
|
81 |
@fputs($fp, pack('L', $expire));
|
82 |
@fputs($fp, @serialize($var));
|
83 |
@fclose($fp);
|
|
|
|
|
|
|
|
|
|
|
84 |
return true;
|
85 |
}
|
86 |
}
|
@@ -101,21 +119,36 @@ class W3_Cache_File extends W3_Cache_Base
|
|
101 |
|
102 |
if (is_readable($path)) {
|
103 |
$ftime = @filemtime($path);
|
|
|
104 |
if ($ftime) {
|
105 |
$fp = @fopen($path, 'rb');
|
|
|
106 |
if ($fp) {
|
|
|
|
|
|
|
|
|
107 |
$expires = @fread($fp, 4);
|
|
|
108 |
if ($expires !== false) {
|
109 |
-
list
|
110 |
$expire = ($expire && $expire <= W3_CACHE_FILE_EXPIRE_MAX ? $expire : W3_CACHE_FILE_EXPIRE_MAX);
|
|
|
111 |
if ($ftime > time() - $expire) {
|
112 |
$data = '';
|
113 |
-
|
|
|
114 |
$data .= @fread($fp, 4096);
|
115 |
}
|
|
|
116 |
$var = @unserialize($data);
|
117 |
}
|
118 |
}
|
|
|
|
|
|
|
|
|
|
|
119 |
@fclose($fp);
|
120 |
}
|
121 |
}
|
@@ -132,7 +165,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
132 |
* @param integer $expire
|
133 |
* @return boolean
|
134 |
*/
|
135 |
-
function replace($key,
|
136 |
{
|
137 |
if ($this->get($key) !== false) {
|
138 |
return $this->set($key, $var, $expire);
|
@@ -165,6 +198,8 @@ class W3_Cache_File extends W3_Cache_Base
|
|
165 |
*/
|
166 |
function flush()
|
167 |
{
|
|
|
|
|
168 |
w3_emptydir($this->_cache_dir);
|
169 |
|
170 |
return true;
|
@@ -172,7 +207,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
172 |
|
173 |
/**
|
174 |
* Returns modification time of cache file
|
175 |
-
|
176 |
* @param integer $key
|
177 |
*/
|
178 |
function mtime($key)
|
@@ -195,7 +230,7 @@ class W3_Cache_File extends W3_Cache_Base
|
|
195 |
function _get_path($key)
|
196 |
{
|
197 |
$hash = md5($key);
|
198 |
-
$path = sprintf('%s/%s/%s', substr($hash, 0,
|
199 |
|
200 |
return $path;
|
201 |
}
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('W3_CACHE_FILE_EXPIRE_MAX')) {
|
4 |
define('W3_CACHE_FILE_EXPIRE_MAX', 2592000);
|
5 |
}
|
6 |
|
21 |
*/
|
22 |
var $_cache_dir = '';
|
23 |
|
24 |
+
/**
|
25 |
+
* File locking
|
26 |
+
*
|
27 |
+
* @var boolean
|
28 |
+
*/
|
29 |
+
var $_locking = false;
|
30 |
+
|
31 |
/**
|
32 |
* PHP5 constructor
|
33 |
*
|
36 |
function __construct($config = array())
|
37 |
{
|
38 |
$this->_cache_dir = isset($config['cache_dir']) ? trim($config['cache_dir']) : 'cache';
|
39 |
+
$this->_locking = isset($config['locking']) ? (boolean) $config['locking'] : false;
|
40 |
}
|
41 |
|
42 |
/**
|
58 |
* @param integer $expire
|
59 |
* @return boolean
|
60 |
*/
|
61 |
+
function add($key, &$var, $expire = 0)
|
62 |
{
|
63 |
if ($this->get($key) === false) {
|
64 |
return $this->set($key, $var, $expire);
|
75 |
* @param integer $expire
|
76 |
* @return boolean
|
77 |
*/
|
78 |
+
function set($key, &$var, $expire = 0)
|
79 |
{
|
80 |
$sub_path = $this->_get_path($key);
|
81 |
$path = $this->_cache_dir . '/' . $sub_path;
|
83 |
$sub_dir = dirname($sub_path);
|
84 |
$dir = dirname($path);
|
85 |
|
86 |
+
if ((@is_dir($dir) || w3_mkdir($sub_dir, 0755, $this->_cache_dir))) {
|
87 |
$fp = @fopen($path, 'wb');
|
88 |
+
|
89 |
if ($fp) {
|
90 |
+
if ($this->_locking) {
|
91 |
+
@flock($fp, LOCK_EX);
|
92 |
+
}
|
93 |
+
|
94 |
@fputs($fp, pack('L', $expire));
|
95 |
@fputs($fp, @serialize($var));
|
96 |
@fclose($fp);
|
97 |
+
|
98 |
+
if ($this->_locking) {
|
99 |
+
@flock($fp, LOCK_UN);
|
100 |
+
}
|
101 |
+
|
102 |
return true;
|
103 |
}
|
104 |
}
|
119 |
|
120 |
if (is_readable($path)) {
|
121 |
$ftime = @filemtime($path);
|
122 |
+
|
123 |
if ($ftime) {
|
124 |
$fp = @fopen($path, 'rb');
|
125 |
+
|
126 |
if ($fp) {
|
127 |
+
if ($this->_locking) {
|
128 |
+
@flock($fp, LOCK_SH);
|
129 |
+
}
|
130 |
+
|
131 |
$expires = @fread($fp, 4);
|
132 |
+
|
133 |
if ($expires !== false) {
|
134 |
+
list(, $expire) = @unpack('L', $expires);
|
135 |
$expire = ($expire && $expire <= W3_CACHE_FILE_EXPIRE_MAX ? $expire : W3_CACHE_FILE_EXPIRE_MAX);
|
136 |
+
|
137 |
if ($ftime > time() - $expire) {
|
138 |
$data = '';
|
139 |
+
|
140 |
+
while (!@feof($fp)) {
|
141 |
$data .= @fread($fp, 4096);
|
142 |
}
|
143 |
+
|
144 |
$var = @unserialize($data);
|
145 |
}
|
146 |
}
|
147 |
+
|
148 |
+
if ($this->_locking) {
|
149 |
+
@flock($fp, LOCK_UN);
|
150 |
+
}
|
151 |
+
|
152 |
@fclose($fp);
|
153 |
}
|
154 |
}
|
165 |
* @param integer $expire
|
166 |
* @return boolean
|
167 |
*/
|
168 |
+
function replace($key, &$var, $expire = 0)
|
169 |
{
|
170 |
if ($this->get($key) !== false) {
|
171 |
return $this->set($key, $var, $expire);
|
198 |
*/
|
199 |
function flush()
|
200 |
{
|
201 |
+
@set_time_limit(180);
|
202 |
+
|
203 |
w3_emptydir($this->_cache_dir);
|
204 |
|
205 |
return true;
|
207 |
|
208 |
/**
|
209 |
* Returns modification time of cache file
|
210 |
+
*
|
211 |
* @param integer $key
|
212 |
*/
|
213 |
function mtime($key)
|
230 |
function _get_path($key)
|
231 |
{
|
232 |
$hash = md5($key);
|
233 |
+
$path = sprintf('%s/%s/%s/%s', substr($hash, 0, 1), substr($hash, 1, 1), substr($hash, 2, 1), $hash);
|
234 |
|
235 |
return $path;
|
236 |
}
|
lib/W3/Cache/File/Manager.php
CHANGED
@@ -18,6 +18,8 @@ class W3_Cache_File_Manager
|
|
18 |
|
19 |
function clean()
|
20 |
{
|
|
|
|
|
21 |
$this->_clean($this->_cache_dir, false);
|
22 |
}
|
23 |
|
@@ -26,13 +28,13 @@ class W3_Cache_File_Manager
|
|
26 |
$dir = @opendir($path);
|
27 |
|
28 |
if ($dir) {
|
29 |
-
while (($entry = @readdir($dir))) {
|
30 |
if ($entry != '.' && $entry != '..') {
|
31 |
$full_path = $path . '/' . $entry;
|
32 |
|
33 |
-
if (is_dir($full_path)) {
|
34 |
$this->_clean($full_path);
|
35 |
-
} elseif (
|
36 |
@unlink($full_path);
|
37 |
}
|
38 |
}
|
@@ -60,7 +62,7 @@ class W3_Cache_File_Manager
|
|
60 |
$expires = @fread($fp, 4);
|
61 |
|
62 |
if ($expires !== false) {
|
63 |
-
list
|
64 |
$expire = ($expire && $expire <= W3_CACHE_FILE_EXPIRE_MAX ? $expire : W3_CACHE_FILE_EXPIRE_MAX);
|
65 |
if ($ftime > (time() - $expire)) {
|
66 |
$valid = true;
|
18 |
|
19 |
function clean()
|
20 |
{
|
21 |
+
@set_time_limit(180);
|
22 |
+
|
23 |
$this->_clean($this->_cache_dir, false);
|
24 |
}
|
25 |
|
28 |
$dir = @opendir($path);
|
29 |
|
30 |
if ($dir) {
|
31 |
+
while (($entry = @readdir($dir)) !== false) {
|
32 |
if ($entry != '.' && $entry != '..') {
|
33 |
$full_path = $path . '/' . $entry;
|
34 |
|
35 |
+
if (@is_dir($full_path)) {
|
36 |
$this->_clean($full_path);
|
37 |
+
} elseif (!$this->is_valid($full_path)) {
|
38 |
@unlink($full_path);
|
39 |
}
|
40 |
}
|
62 |
$expires = @fread($fp, 4);
|
63 |
|
64 |
if ($expires !== false) {
|
65 |
+
list(, $expire) = @unpack('L', $expires);
|
66 |
$expire = ($expire && $expire <= W3_CACHE_FILE_EXPIRE_MAX ? $expire : W3_CACHE_FILE_EXPIRE_MAX);
|
67 |
if ($ftime > (time() - $expire)) {
|
68 |
$valid = true;
|
lib/W3/Cache/File/PgCache.php
CHANGED
@@ -10,19 +10,35 @@ require_once W3TC_LIB_W3_DIR . '/Cache/File.php';
|
|
10 |
*/
|
11 |
class W3_Cache_File_PgCache extends W3_Cache_File
|
12 |
{
|
|
|
|
|
|
|
|
|
|
|
13 |
var $_expire = 0;
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
function __construct($config = array())
|
16 |
{
|
17 |
parent::__construct($config);
|
18 |
|
19 |
$this->_expire = (isset($config['expire']) ? (int) $config['expire'] : 0);
|
20 |
|
21 |
-
if (
|
22 |
$this->_expire = W3_CACHE_FILE_EXPIRE_MAX;
|
23 |
}
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
26 |
function W3_Cache_File_PgCache($config = array())
|
27 |
{
|
28 |
$this->__construct($config);
|
@@ -30,7 +46,7 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
30 |
|
31 |
/**
|
32 |
* Sets data
|
33 |
-
|
34 |
* @param string $key
|
35 |
* @param string $var
|
36 |
* @return boolean
|
@@ -43,12 +59,21 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
43 |
$sub_dir = dirname($sub_path);
|
44 |
$dir = dirname($path);
|
45 |
|
46 |
-
if ((is_dir($dir) || w3_mkdir($sub_dir, 0755, $this->_cache_dir))) {
|
47 |
$fp = @fopen($path, 'w');
|
|
|
48 |
if ($fp) {
|
|
|
|
|
|
|
|
|
49 |
@fputs($fp, $var);
|
50 |
@fclose($fp);
|
51 |
|
|
|
|
|
|
|
|
|
52 |
return true;
|
53 |
}
|
54 |
}
|
@@ -58,7 +83,7 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
58 |
|
59 |
/**
|
60 |
* Returns data
|
61 |
-
|
62 |
* @param string $key
|
63 |
* @return string
|
64 |
*/
|
@@ -74,11 +99,21 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
74 |
$fp = @fopen($path, 'r');
|
75 |
|
76 |
if ($fp) {
|
|
|
|
|
|
|
|
|
77 |
$var = '';
|
78 |
-
|
|
|
79 |
$var .= @fread($fp, 4096);
|
80 |
}
|
|
|
81 |
@fclose($fp);
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
}
|
84 |
}
|
@@ -93,6 +128,8 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
93 |
*/
|
94 |
function flush()
|
95 |
{
|
|
|
|
|
96 |
w3_emptydir($this->_cache_dir, array(
|
97 |
$this->_cache_dir . '/.htaccess'
|
98 |
));
|
@@ -102,7 +139,7 @@ class W3_Cache_File_PgCache extends W3_Cache_File
|
|
102 |
|
103 |
/**
|
104 |
* Returns cache file path by key
|
105 |
-
|
106 |
* @param string $key
|
107 |
* @return string
|
108 |
*/
|
10 |
*/
|
11 |
class W3_Cache_File_PgCache extends W3_Cache_File
|
12 |
{
|
13 |
+
/**
|
14 |
+
* Expire
|
15 |
+
*
|
16 |
+
* @var integer
|
17 |
+
*/
|
18 |
var $_expire = 0;
|
19 |
|
20 |
+
/**
|
21 |
+
* PHP5 style constructor
|
22 |
+
*
|
23 |
+
* @param array $config
|
24 |
+
* @return void
|
25 |
+
*/
|
26 |
function __construct($config = array())
|
27 |
{
|
28 |
parent::__construct($config);
|
29 |
|
30 |
$this->_expire = (isset($config['expire']) ? (int) $config['expire'] : 0);
|
31 |
|
32 |
+
if (!$this->_expire || $this->_expire > W3_CACHE_FILE_EXPIRE_MAX) {
|
33 |
$this->_expire = W3_CACHE_FILE_EXPIRE_MAX;
|
34 |
}
|
35 |
}
|
36 |
|
37 |
+
/**
|
38 |
+
* PHP4 style constructor
|
39 |
+
* @param array $config
|
40 |
+
* @return void
|
41 |
+
*/
|
42 |
function W3_Cache_File_PgCache($config = array())
|
43 |
{
|
44 |
$this->__construct($config);
|
46 |
|
47 |
/**
|
48 |
* Sets data
|
49 |
+
*
|
50 |
* @param string $key
|
51 |
* @param string $var
|
52 |
* @return boolean
|
59 |
$sub_dir = dirname($sub_path);
|
60 |
$dir = dirname($path);
|
61 |
|
62 |
+
if ((@is_dir($dir) || w3_mkdir($sub_dir, 0755, $this->_cache_dir))) {
|
63 |
$fp = @fopen($path, 'w');
|
64 |
+
|
65 |
if ($fp) {
|
66 |
+
if ($this->_locking) {
|
67 |
+
@flock($fp, LOCK_EX);
|
68 |
+
}
|
69 |
+
|
70 |
@fputs($fp, $var);
|
71 |
@fclose($fp);
|
72 |
|
73 |
+
if ($this->_locking) {
|
74 |
+
@flock($fp, LOCK_UN);
|
75 |
+
}
|
76 |
+
|
77 |
return true;
|
78 |
}
|
79 |
}
|
83 |
|
84 |
/**
|
85 |
* Returns data
|
86 |
+
*
|
87 |
* @param string $key
|
88 |
* @return string
|
89 |
*/
|
99 |
$fp = @fopen($path, 'r');
|
100 |
|
101 |
if ($fp) {
|
102 |
+
if ($this->_locking) {
|
103 |
+
@flock($fp, LOCK_SH);
|
104 |
+
}
|
105 |
+
|
106 |
$var = '';
|
107 |
+
|
108 |
+
while (!@feof($fp)) {
|
109 |
$var .= @fread($fp, 4096);
|
110 |
}
|
111 |
+
|
112 |
@fclose($fp);
|
113 |
+
|
114 |
+
if ($this->_locking) {
|
115 |
+
@flock($fp, LOCK_UN);
|
116 |
+
}
|
117 |
}
|
118 |
}
|
119 |
}
|
128 |
*/
|
129 |
function flush()
|
130 |
{
|
131 |
+
@set_time_limit(180);
|
132 |
+
|
133 |
w3_emptydir($this->_cache_dir, array(
|
134 |
$this->_cache_dir . '/.htaccess'
|
135 |
));
|
139 |
|
140 |
/**
|
141 |
* Returns cache file path by key
|
142 |
+
*
|
143 |
* @param string $key
|
144 |
* @return string
|
145 |
*/
|
lib/W3/Cache/Memcached.php
CHANGED
@@ -58,7 +58,7 @@ class W3_Cache_Memcached extends W3_Cache_Base
|
|
58 |
* @param integer $expire
|
59 |
* @return boolean
|
60 |
*/
|
61 |
-
function add($key,
|
62 |
{
|
63 |
return @$this->_memcache->add($key, $var, false, $expire);
|
64 |
}
|
@@ -71,7 +71,7 @@ class W3_Cache_Memcached extends W3_Cache_Base
|
|
71 |
* @param integer $expire
|
72 |
* @return boolean
|
73 |
*/
|
74 |
-
function set($key,
|
75 |
{
|
76 |
return @$this->_memcache->set($key, $var, false, $expire);
|
77 |
}
|
@@ -95,7 +95,7 @@ class W3_Cache_Memcached extends W3_Cache_Base
|
|
95 |
* @param integer $expire
|
96 |
* @return boolean
|
97 |
*/
|
98 |
-
function replace($key,
|
99 |
{
|
100 |
return @$this->_memcache->replace($key, $var, false, $expire);
|
101 |
}
|
58 |
* @param integer $expire
|
59 |
* @return boolean
|
60 |
*/
|
61 |
+
function add($key, &$var, $expire = 0)
|
62 |
{
|
63 |
return @$this->_memcache->add($key, $var, false, $expire);
|
64 |
}
|
71 |
* @param integer $expire
|
72 |
* @return boolean
|
73 |
*/
|
74 |
+
function set($key, &$var, $expire = 0)
|
75 |
{
|
76 |
return @$this->_memcache->set($key, $var, false, $expire);
|
77 |
}
|
95 |
* @param integer $expire
|
96 |
* @return boolean
|
97 |
*/
|
98 |
+
function replace($key, &$var, $expire = 0)
|
99 |
{
|
100 |
return @$this->_memcache->replace($key, $var, false, $expire);
|
101 |
}
|
lib/W3/Cache/Xcache.php
CHANGED
@@ -18,7 +18,7 @@ class W3_Cache_Xcache extends W3_Cache_Base
|
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
-
function add($key,
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
@@ -35,7 +35,7 @@ class W3_Cache_Xcache extends W3_Cache_Base
|
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
-
function set($key,
|
39 |
{
|
40 |
return xcache_set($key, serialize($var), $expire);
|
41 |
}
|
@@ -59,7 +59,7 @@ class W3_Cache_Xcache extends W3_Cache_Base
|
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
-
function replace($key,
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
18 |
* @param integer $expire
|
19 |
* @return boolean
|
20 |
*/
|
21 |
+
function add($key, &$var, $expire = 0)
|
22 |
{
|
23 |
if ($this->get($key) === false) {
|
24 |
return $this->set($key, $var, $expire);
|
35 |
* @param integer $expire
|
36 |
* @return boolean
|
37 |
*/
|
38 |
+
function set($key, &$var, $expire = 0)
|
39 |
{
|
40 |
return xcache_set($key, serialize($var), $expire);
|
41 |
}
|
59 |
* @param integer $expire
|
60 |
* @return boolean
|
61 |
*/
|
62 |
+
function replace($key, &$var, $expire = 0)
|
63 |
{
|
64 |
if ($this->get($key) !== false) {
|
65 |
return $this->set($key, $var, $expire);
|
lib/W3/Cdn.php
CHANGED
@@ -4,22 +4,30 @@
|
|
4 |
* W3 CDN Class
|
5 |
*/
|
6 |
|
7 |
-
if (!
|
8 |
define('W3_CDN_FTP', 'ftp');
|
9 |
}
|
10 |
|
11 |
-
if (!
|
12 |
define('W3_CDN_CF', 'cf');
|
13 |
}
|
14 |
|
15 |
-
if (!
|
16 |
define('W3_CDN_S3', 's3');
|
17 |
}
|
18 |
|
19 |
-
if (!
|
20 |
define('W3_CDN_MIRROR', 'mirror');
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
/**
|
24 |
* Class W3_Cdn
|
25 |
*/
|
@@ -38,29 +46,39 @@ class W3_Cdn
|
|
38 |
|
39 |
$instance_key = sprintf('%s_%s', $engine, md5(serialize($config)));
|
40 |
|
41 |
-
if (!
|
42 |
switch (true) {
|
43 |
-
case ($engine == W3_CDN_FTP):
|
44 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Ftp.php';
|
45 |
$instances[$instance_key] = & new W3_Cdn_Ftp($config);
|
46 |
break;
|
47 |
|
48 |
-
case (W3TC_PHP5 && $engine ==
|
|
|
|
|
|
|
|
|
|
|
49 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Cf.php';
|
50 |
$instances[$instance_key] = & new W3_Cdn_Cf($config);
|
51 |
break;
|
52 |
|
53 |
-
case (W3TC_PHP5 && $engine ==
|
54 |
-
require_once W3TC_LIB_W3_DIR . '/Cdn/
|
55 |
-
$instances[$instance_key] = & new
|
56 |
break;
|
57 |
|
58 |
-
case ($engine == W3_CDN_MIRROR):
|
59 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Mirror.php';
|
60 |
$instances[$instance_key] = & new W3_Cdn_Mirror($config);
|
61 |
break;
|
62 |
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
64 |
trigger_error('Incorrect CDN engine', E_USER_WARNING);
|
65 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
66 |
$instances[$instance_key] = & new W3_Cdn_Base();
|
4 |
* W3 CDN Class
|
5 |
*/
|
6 |
|
7 |
+
if (!defined('W3_CDN_FTP')) {
|
8 |
define('W3_CDN_FTP', 'ftp');
|
9 |
}
|
10 |
|
11 |
+
if (!defined('W3_CDN_CF')) {
|
12 |
define('W3_CDN_CF', 'cf');
|
13 |
}
|
14 |
|
15 |
+
if (!defined('W3_CDN_S3')) {
|
16 |
define('W3_CDN_S3', 's3');
|
17 |
}
|
18 |
|
19 |
+
if (!defined('W3_CDN_MIRROR')) {
|
20 |
define('W3_CDN_MIRROR', 'mirror');
|
21 |
}
|
22 |
|
23 |
+
if (!defined('W3_CDN_NETDNA')) {
|
24 |
+
define('W3_CDN_NETDNA', 'netdna');
|
25 |
+
}
|
26 |
+
|
27 |
+
if (!defined('W3_CDN_RSCF')) {
|
28 |
+
define('W3_CDN_RSCF', 'rscf');
|
29 |
+
}
|
30 |
+
|
31 |
/**
|
32 |
* Class W3_Cdn
|
33 |
*/
|
46 |
|
47 |
$instance_key = sprintf('%s_%s', $engine, md5(serialize($config)));
|
48 |
|
49 |
+
if (!isset($instances[$instance_key])) {
|
50 |
switch (true) {
|
51 |
+
case ($engine == W3_CDN_FTP) :
|
52 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Ftp.php';
|
53 |
$instances[$instance_key] = & new W3_Cdn_Ftp($config);
|
54 |
break;
|
55 |
|
56 |
+
case (W3TC_PHP5 && $engine == W3_CDN_S3) :
|
57 |
+
require_once W3TC_LIB_W3_DIR . '/Cdn/S3.php';
|
58 |
+
$instances[$instance_key] = & new W3_Cdn_S3($config);
|
59 |
+
break;
|
60 |
+
|
61 |
+
case (W3TC_PHP5 && $engine == W3_CDN_CF) :
|
62 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Cf.php';
|
63 |
$instances[$instance_key] = & new W3_Cdn_Cf($config);
|
64 |
break;
|
65 |
|
66 |
+
case (W3TC_PHP5 && $engine == W3_CDN_RSCF) :
|
67 |
+
require_once W3TC_LIB_W3_DIR . '/Cdn/Rscf.php';
|
68 |
+
$instances[$instance_key] = & new W3_Cdn_Rscf($config);
|
69 |
break;
|
70 |
|
71 |
+
case ($engine == W3_CDN_MIRROR) :
|
72 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Mirror.php';
|
73 |
$instances[$instance_key] = & new W3_Cdn_Mirror($config);
|
74 |
break;
|
75 |
|
76 |
+
case ($engine == W3_CDN_NETDNA) :
|
77 |
+
require_once W3TC_LIB_W3_DIR . '/Cdn/Netdna.php';
|
78 |
+
$instances[$instance_key] = & new W3_Cdn_Netdna($config);
|
79 |
+
break;
|
80 |
+
|
81 |
+
default :
|
82 |
trigger_error('Incorrect CDN engine', E_USER_WARNING);
|
83 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
84 |
$instances[$instance_key] = & new W3_Cdn_Base();
|
lib/W3/Cdn/Base.php
CHANGED
@@ -4,16 +4,16 @@
|
|
4 |
* W3 CDN Base class
|
5 |
*/
|
6 |
|
7 |
-
if (!
|
8 |
-
define('
|
9 |
}
|
10 |
|
11 |
-
if (!
|
12 |
-
define('
|
13 |
}
|
14 |
|
15 |
-
if (!
|
16 |
-
define('
|
17 |
}
|
18 |
|
19 |
/**
|
@@ -28,6 +28,12 @@ class W3_Cdn_Base
|
|
28 |
*/
|
29 |
var $_config = array();
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* PHP5 Constructor
|
33 |
*
|
@@ -58,7 +64,8 @@ class W3_Cdn_Base
|
|
58 |
*/
|
59 |
function upload($files, &$results, $force_rewrite = false)
|
60 |
{
|
61 |
-
$results = $this->get_results($files,
|
|
|
62 |
return false;
|
63 |
}
|
64 |
|
@@ -71,10 +78,23 @@ class W3_Cdn_Base
|
|
71 |
*/
|
72 |
function delete($files, &$results)
|
73 |
{
|
74 |
-
$results = $this->get_results($files,
|
|
|
75 |
return false;
|
76 |
}
|
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
/**
|
79 |
* Test CDN server
|
80 |
*
|
@@ -82,21 +102,54 @@ class W3_Cdn_Base
|
|
82 |
* @return boolean
|
83 |
*/
|
84 |
function test(&$error)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
{
|
86 |
$error = 'Not implemented.';
|
|
|
87 |
return false;
|
88 |
}
|
89 |
|
90 |
/**
|
91 |
-
* Returns
|
92 |
-
*
|
93 |
* @return string
|
94 |
*/
|
95 |
function get_domain()
|
96 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
return false;
|
98 |
}
|
99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
/**
|
101 |
* Returns via string
|
102 |
*
|
@@ -104,7 +157,13 @@ class W3_Cdn_Base
|
|
104 |
*/
|
105 |
function get_via()
|
106 |
{
|
107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
}
|
109 |
|
110 |
/**
|
@@ -115,10 +174,48 @@ class W3_Cdn_Base
|
|
115 |
*/
|
116 |
function format_url($path)
|
117 |
{
|
118 |
-
$
|
|
|
119 |
|
120 |
-
if ($
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
return $url;
|
124 |
}
|
@@ -134,7 +231,7 @@ class W3_Cdn_Base
|
|
134 |
* @param string $error
|
135 |
* @return array
|
136 |
*/
|
137 |
-
function get_results($files, $result =
|
138 |
{
|
139 |
$results = array();
|
140 |
|
@@ -154,7 +251,7 @@ class W3_Cdn_Base
|
|
154 |
* @param string $error
|
155 |
* @return array
|
156 |
*/
|
157 |
-
function get_result($local_path, $remote_path, $result =
|
158 |
{
|
159 |
return array(
|
160 |
'local_path' => $local_path,
|
@@ -163,4 +260,206 @@ class W3_Cdn_Base
|
|
163 |
'error' => $error
|
164 |
);
|
165 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
}
|
4 |
* W3 CDN Base class
|
5 |
*/
|
6 |
|
7 |
+
if (!defined('W3TC_CDN_RESULT_HALT')) {
|
8 |
+
define('W3TC_CDN_RESULT_HALT', -1);
|
9 |
}
|
10 |
|
11 |
+
if (!defined('W3TC_CDN_RESULT_ERROR')) {
|
12 |
+
define('W3TC_CDN_RESULT_ERROR', 0);
|
13 |
}
|
14 |
|
15 |
+
if (!defined('W3TC_CDN_RESULT_OK')) {
|
16 |
+
define('W3TC_CDN_RESULT_OK', 1);
|
17 |
}
|
18 |
|
19 |
/**
|
28 |
*/
|
29 |
var $_config = array();
|
30 |
|
31 |
+
/**
|
32 |
+
* Cache config
|
33 |
+
* @var array
|
34 |
+
*/
|
35 |
+
var $cache_config = array();
|
36 |
+
|
37 |
/**
|
38 |
* PHP5 Constructor
|
39 |
*
|
64 |
*/
|
65 |
function upload($files, &$results, $force_rewrite = false)
|
66 |
{
|
67 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, 'Not implemented.');
|
68 |
+
|
69 |
return false;
|
70 |
}
|
71 |
|
78 |
*/
|
79 |
function delete($files, &$results)
|
80 |
{
|
81 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, 'Not implemented.');
|
82 |
+
|
83 |
return false;
|
84 |
}
|
85 |
|
86 |
+
/**
|
87 |
+
* Purges URLs from CDN
|
88 |
+
*
|
89 |
+
* @param array $files
|
90 |
+
* @param array $results
|
91 |
+
* @return boolean
|
92 |
+
*/
|
93 |
+
function purge($files, &$results)
|
94 |
+
{
|
95 |
+
return $this->upload($files, $results, true);
|
96 |
+
}
|
97 |
+
|
98 |
/**
|
99 |
* Test CDN server
|
100 |
*
|
102 |
* @return boolean
|
103 |
*/
|
104 |
function test(&$error)
|
105 |
+
{
|
106 |
+
if (!$this->_test_domains($error)) {
|
107 |
+
return false;
|
108 |
+
}
|
109 |
+
|
110 |
+
return true;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Create bucket / container for some CDN engines
|
115 |
+
*
|
116 |
+
* @param string $container_id
|
117 |
+
* @param string $error
|
118 |
+
* @return boolean
|
119 |
+
*/
|
120 |
+
function create_container(&$container_id, &$error)
|
121 |
{
|
122 |
$error = 'Not implemented.';
|
123 |
+
|
124 |
return false;
|
125 |
}
|
126 |
|
127 |
/**
|
128 |
+
* Returns first domain
|
129 |
+
*
|
130 |
* @return string
|
131 |
*/
|
132 |
function get_domain()
|
133 |
{
|
134 |
+
$domains = $this->get_domains();
|
135 |
+
|
136 |
+
if (count($domains)) {
|
137 |
+
return current($domains);
|
138 |
+
}
|
139 |
+
|
140 |
return false;
|
141 |
}
|
142 |
|
143 |
+
/**
|
144 |
+
* Returns array of CDN domains
|
145 |
+
*
|
146 |
+
* @return array
|
147 |
+
*/
|
148 |
+
function get_domains()
|
149 |
+
{
|
150 |
+
return array();
|
151 |
+
}
|
152 |
+
|
153 |
/**
|
154 |
* Returns via string
|
155 |
*
|
157 |
*/
|
158 |
function get_via()
|
159 |
{
|
160 |
+
$domain = $this->get_domain();
|
161 |
+
|
162 |
+
if ($domain) {
|
163 |
+
return $domain;
|
164 |
+
}
|
165 |
+
|
166 |
+
return 'N/A';
|
167 |
}
|
168 |
|
169 |
/**
|
174 |
*/
|
175 |
function format_url($path)
|
176 |
{
|
177 |
+
$domains = $this->get_domains();
|
178 |
+
$count = count($domains);
|
179 |
|
180 |
+
if ($count) {
|
181 |
+
switch (true) {
|
182 |
+
/**
|
183 |
+
* Reserved CSS
|
184 |
+
*/
|
185 |
+
case (isset($domains[0]) && $this->_is_css($path)):
|
186 |
+
$host = $domains[0];
|
187 |
+
break;
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Reserved JS in head
|
191 |
+
*/
|
192 |
+
case (isset($domains[1]) && $this->_is_js($path)):
|
193 |
+
$host = $domains[1];
|
194 |
+
break;
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Reserved JS after body
|
198 |
+
*/
|
199 |
+
case (isset($domains[2]) && $this->_is_js_body($path)):
|
200 |
+
$host = $domains[2];
|
201 |
+
break;
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Reserved JS before /body
|
205 |
+
*/
|
206 |
+
case (isset($domains[3]) && $this->_is_js_footer($path)):
|
207 |
+
$host = $domains[3];
|
208 |
+
break;
|
209 |
+
|
210 |
+
default:
|
211 |
+
if ($count > 4) {
|
212 |
+
$host = $this->_get_host(array_slice($domains, 4), $path);
|
213 |
+
} else {
|
214 |
+
$host = $this->_get_host($domains, $path);
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
$url = sprintf('%s://%s/%s', (w3_is_https() ? 'https' : 'http'), $host, $path);
|
219 |
|
220 |
return $url;
|
221 |
}
|
231 |
* @param string $error
|
232 |
* @return array
|
233 |
*/
|
234 |
+
function get_results($files, $result = W3TC_CDN_RESULT_OK, $error = 'OK')
|
235 |
{
|
236 |
$results = array();
|
237 |
|
251 |
* @param string $error
|
252 |
* @return array
|
253 |
*/
|
254 |
+
function get_result($local_path, $remote_path, $result = W3TC_CDN_RESULT_OK, $error = 'OK')
|
255 |
{
|
256 |
return array(
|
257 |
'local_path' => $local_path,
|
260 |
'error' => $error
|
261 |
);
|
262 |
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Returns headers for file
|
266 |
+
*
|
267 |
+
* @param string $file
|
268 |
+
* @return array
|
269 |
+
*/
|
270 |
+
function get_headers($file)
|
271 |
+
{
|
272 |
+
$mime_type = w3_get_mime_type($file);
|
273 |
+
$last_modified = time();
|
274 |
+
|
275 |
+
$headers = array(
|
276 |
+
'Content-Type' => $mime_type,
|
277 |
+
'Last-Modified' => w3_http_date($last_modified)
|
278 |
+
);
|
279 |
+
|
280 |
+
if (isset($this->cache_config[$mime_type])) {
|
281 |
+
if ($this->cache_config[$mime_type]['etag']) {
|
282 |
+
$headers['Etag'] = @md5_file($file);
|
283 |
+
}
|
284 |
+
|
285 |
+
if ($this->cache_config[$mime_type]['w3tc']) {
|
286 |
+
$headers['X-Powered-By'] = W3TC_POWERED_BY;
|
287 |
+
}
|
288 |
+
|
289 |
+
if ($this->cache_config[$mime_type]['lifetime']) {
|
290 |
+
$headers['Expires'] = w3_http_date($last_modified + $this->cache_config[$mime_type]['lifetime']);
|
291 |
+
}
|
292 |
+
|
293 |
+
switch ($this->cache_config[$mime_type]['cache_control']) {
|
294 |
+
case 'cache':
|
295 |
+
$headers = array_merge($headers, array(
|
296 |
+
'Pragma' => 'public',
|
297 |
+
'Cache-Control' => 'public'
|
298 |
+
));
|
299 |
+
break;
|
300 |
+
|
301 |
+
case 'cache_validation':
|
302 |
+
$headers = array_merge($headers, array(
|
303 |
+
'Pragma' => 'public',
|
304 |
+
'Cache-Control' => 'public, must-revalidate, proxy-revalidate'
|
305 |
+
));
|
306 |
+
break;
|
307 |
+
|
308 |
+
case 'cache_noproxy':
|
309 |
+
$headers = array_merge($headers, array(
|
310 |
+
'Pragma' => 'public',
|
311 |
+
'Cache-Control' => 'public, must-revalidate'
|
312 |
+
));
|
313 |
+
break;
|
314 |
+
|
315 |
+
case 'cache_maxage':
|
316 |
+
$headers = array_merge($headers, array(
|
317 |
+
'Pragma' => 'public',
|
318 |
+
'Cache-Control' => 'max-age=' . $this->cache_config[$mime_type]['lifetime'] . ', public, must-revalidate, proxy-revalidate'
|
319 |
+
));
|
320 |
+
break;
|
321 |
+
|
322 |
+
case 'no_cache':
|
323 |
+
$headers = array_merge($headers, array(
|
324 |
+
'Pragma' => 'no-cache',
|
325 |
+
'Cache-Control' => 'max-age=0, private, no-store, no-cache, must-revalidate'
|
326 |
+
));
|
327 |
+
break;
|
328 |
+
}
|
329 |
+
}
|
330 |
+
|
331 |
+
return $headers;
|
332 |
+
}
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Use gzip compression only for text-based files
|
336 |
+
*
|
337 |
+
* @param string $file
|
338 |
+
* @return boolean
|
339 |
+
*/
|
340 |
+
function may_gzip($file)
|
341 |
+
{
|
342 |
+
/**
|
343 |
+
* Remove query string
|
344 |
+
*/
|
345 |
+
$file = preg_replace('~\?.*$~', '', $file);
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Check by file extension
|
349 |
+
*/
|
350 |
+
if (preg_match('~\.(ico|js|css|xml|xsd|xsl|svg|htm|html|txt)$~i', $file)) {
|
351 |
+
return true;
|
352 |
+
}
|
353 |
+
|
354 |
+
return false;
|
355 |
+
}
|
356 |
+
|
357 |
+
/**
|
358 |
+
* Test domains
|
359 |
+
*
|
360 |
+
* @param string $error
|
361 |
+
* @return boolean
|
362 |
+
*/
|
363 |
+
function _test_domains(&$error)
|
364 |
+
{
|
365 |
+
$domains = $this->get_domains();
|
366 |
+
|
367 |
+
if (!count($domains)) {
|
368 |
+
$error = 'Empty domains / CNAMEs list.';
|
369 |
+
|
370 |
+
return false;
|
371 |
+
|
372 |
+
}
|
373 |
+
|
374 |
+
foreach ($domains as $domain) {
|
375 |
+
if ($domain && gethostbyname($domain) === $domain) {
|
376 |
+
$error = sprintf('Unable to resolve domain: %s.', $domain);
|
377 |
+
|
378 |
+
return false;
|
379 |
+
}
|
380 |
+
}
|
381 |
+
|
382 |
+
return true;
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Check if css file
|
387 |
+
*
|
388 |
+
* @param string $path
|
389 |
+
* @return boolean
|
390 |
+
*/
|
391 |
+
function _is_css($path)
|
392 |
+
{
|
393 |
+
return preg_match('~[a-z0-9\-_]+\.include\.[0-9]+\.css$~', $path);
|
394 |
+
}
|
395 |
+
|
396 |
+
/**
|
397 |
+
* Check if JS file in heeader
|
398 |
+
*
|
399 |
+
* @param string $path
|
400 |
+
* @return boolean
|
401 |
+
*/
|
402 |
+
function _is_js($path)
|
403 |
+
{
|
404 |
+
return preg_match('~[a-z0-9\-_]+\.include(-nb)?\.[0-9]+\.js$~', $path);
|
405 |
+
}
|
406 |
+
|
407 |
+
/**
|
408 |
+
* Check if JS file after body
|
409 |
+
*
|
410 |
+
* @param string $path
|
411 |
+
* @return boolean
|
412 |
+
*/
|
413 |
+
function _is_js_body($path)
|
414 |
+
{
|
415 |
+
return preg_match('~[a-z0-9\-_]+\.include-body(-nb)?\.[0-9]+\.js$~', $path);
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Check if JS file before /body
|
420 |
+
*
|
421 |
+
* @param string $path
|
422 |
+
* @return boolean
|
423 |
+
*/
|
424 |
+
function _is_js_footer($path)
|
425 |
+
{
|
426 |
+
return preg_match('~[a-z0-9\-_]+\.include-footer(-nb)?\.[0-9]+\.js$~', $path);
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Returns host for path
|
431 |
+
*
|
432 |
+
* @param array $domains
|
433 |
+
* @param string $path
|
434 |
+
* @return string
|
435 |
+
*/
|
436 |
+
function _get_host($domains, $path)
|
437 |
+
{
|
438 |
+
$count = count($domains);
|
439 |
+
|
440 |
+
if ($count) {
|
441 |
+
/**
|
442 |
+
* Use for equal URLs same host to allow caching by browser
|
443 |
+
*/
|
444 |
+
$hash = $this->_get_hash($path);
|
445 |
+
$host = $domains[$hash % $count];
|
446 |
+
|
447 |
+
return $host;
|
448 |
+
}
|
449 |
+
|
450 |
+
return false;
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* Returns integer hash for key
|
455 |
+
*
|
456 |
+
* @param string $key
|
457 |
+
* @return integer
|
458 |
+
*/
|
459 |
+
function _get_hash($key)
|
460 |
+
{
|
461 |
+
$hash = abs(crc32($key));
|
462 |
+
|
463 |
+
return $hash;
|
464 |
+
}
|
465 |
}
|
lib/W3/Cdn/Cf.php
CHANGED
@@ -5,21 +5,23 @@ require_once W3TC_LIB_W3_DIR . '/Cdn/S3.php';
|
|
5 |
class W3_Cdn_Cf extends W3_Cdn_S3
|
6 |
{
|
7 |
/**
|
8 |
-
* Returns CDN
|
9 |
-
|
10 |
* @return string
|
11 |
*/
|
12 |
-
function
|
13 |
{
|
14 |
-
if (!
|
15 |
-
return $this->_config['cname'];
|
16 |
-
} elseif (!
|
17 |
$domain = sprintf('%s.cloudfront.net', $this->_config['id']);
|
18 |
|
19 |
-
return
|
|
|
|
|
20 |
}
|
21 |
|
22 |
-
return
|
23 |
}
|
24 |
/**
|
25 |
* Tests CF
|
@@ -32,7 +34,7 @@ class W3_Cdn_Cf extends W3_Cdn_S3
|
|
32 |
/**
|
33 |
* Test S3 first
|
34 |
*/
|
35 |
-
if (!
|
36 |
return false;
|
37 |
}
|
38 |
|
@@ -41,7 +43,7 @@ class W3_Cdn_Cf extends W3_Cdn_S3
|
|
41 |
*/
|
42 |
$dists = @$this->_s3->listDistributions();
|
43 |
|
44 |
-
if (
|
45 |
$error = 'Unable to list distributions.';
|
46 |
|
47 |
return false;
|
@@ -59,28 +61,30 @@ class W3_Cdn_Cf extends W3_Cdn_S3
|
|
59 |
}
|
60 |
}
|
61 |
|
62 |
-
if (
|
63 |
$error = sprintf('Distribution for bucket "%s" not found.', $this->_config['bucket']);
|
64 |
|
65 |
return false;
|
66 |
}
|
67 |
|
68 |
-
if (
|
69 |
$error = sprintf('Distribution for bucket "%s" is disabled.', $this->_config['bucket']);
|
70 |
|
71 |
return false;
|
72 |
}
|
73 |
|
74 |
-
if ($this->_config['cname']
|
|
|
75 |
$cnames = (isset($dist['cnames']) ? (array) $dist['cnames'] : array());
|
76 |
|
77 |
-
|
78 |
-
$
|
79 |
-
|
80 |
-
|
|
|
|
|
81 |
}
|
82 |
-
|
83 |
-
} elseif ($this->_config['id'] != '') {
|
84 |
$domain = $this->get_domain();
|
85 |
|
86 |
if ($domain != $dist['domain']) {
|
@@ -93,13 +97,45 @@ class W3_Cdn_Cf extends W3_Cdn_S3
|
|
93 |
return true;
|
94 |
}
|
95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
/**
|
97 |
* Returns via string
|
98 |
-
|
99 |
* @return string
|
100 |
*/
|
101 |
function get_via()
|
102 |
{
|
103 |
-
return sprintf('Amazon Web Services: CloudFront: %s',
|
104 |
}
|
105 |
}
|
5 |
class W3_Cdn_Cf extends W3_Cdn_S3
|
6 |
{
|
7 |
/**
|
8 |
+
* Returns array of CDN domains
|
9 |
+
*
|
10 |
* @return string
|
11 |
*/
|
12 |
+
function get_domains()
|
13 |
{
|
14 |
+
if (!empty($this->_config['cname'])) {
|
15 |
+
return (array) $this->_config['cname'];
|
16 |
+
} elseif (!empty($this->_config['id'])) {
|
17 |
$domain = sprintf('%s.cloudfront.net', $this->_config['id']);
|
18 |
|
19 |
+
return array(
|
20 |
+
$domain
|
21 |
+
);
|
22 |
}
|
23 |
|
24 |
+
return array();
|
25 |
}
|
26 |
/**
|
27 |
* Tests CF
|
34 |
/**
|
35 |
* Test S3 first
|
36 |
*/
|
37 |
+
if (!parent::test($error)) {
|
38 |
return false;
|
39 |
}
|
40 |
|
43 |
*/
|
44 |
$dists = @$this->_s3->listDistributions();
|
45 |
|
46 |
+
if (!$dists) {
|
47 |
$error = 'Unable to list distributions.';
|
48 |
|
49 |
return false;
|
61 |
}
|
62 |
}
|
63 |
|
64 |
+
if (!$dist) {
|
65 |
$error = sprintf('Distribution for bucket "%s" not found.', $this->_config['bucket']);
|
66 |
|
67 |
return false;
|
68 |
}
|
69 |
|
70 |
+
if (!$dist['enabled']) {
|
71 |
$error = sprintf('Distribution for bucket "%s" is disabled.', $this->_config['bucket']);
|
72 |
|
73 |
return false;
|
74 |
}
|
75 |
|
76 |
+
if (!empty($this->_config['cname'])) {
|
77 |
+
$domains = (array) $this->_config['cname'];
|
78 |
$cnames = (isset($dist['cnames']) ? (array) $dist['cnames'] : array());
|
79 |
|
80 |
+
foreach ($domains as $domain) {
|
81 |
+
if ($domain && !in_array($domain, $cnames)) {
|
82 |
+
$error = sprintf('Domain name %s is not in distribution CNAME list.', $domain);
|
83 |
+
|
84 |
+
return false;
|
85 |
+
}
|
86 |
}
|
87 |
+
} elseif (!empty($this->_config['id'])) {
|
|
|
88 |
$domain = $this->get_domain();
|
89 |
|
90 |
if ($domain != $dist['domain']) {
|
97 |
return true;
|
98 |
}
|
99 |
|
100 |
+
/**
|
101 |
+
* Create bucket
|
102 |
+
*
|
103 |
+
* @param string $container_id
|
104 |
+
* @param string $error
|
105 |
+
* @return boolean
|
106 |
+
*/
|
107 |
+
function create_container(&$container_id, &$error)
|
108 |
+
{
|
109 |
+
if (parent::create_container($container_id, $error)) {
|
110 |
+
$cnames = (!empty($this->_config['cname']) ? (array) $this->_config['cname'] : array());
|
111 |
+
|
112 |
+
$dist = $this->_s3->createDistribution($this->_config['bucket'], true, array());
|
113 |
+
|
114 |
+
if (!$dist) {
|
115 |
+
$error = sprintf('Unable to create distribution for bucket %s.', $this->_config['bucket']);
|
116 |
+
|
117 |
+
return false;
|
118 |
+
}
|
119 |
+
|
120 |
+
$matches = null;
|
121 |
+
|
122 |
+
if (preg_match('~^(.+)\.cloudfront\.net$~', $dist['domain'], $matches)) {
|
123 |
+
$container_id = $matches[1];
|
124 |
+
}
|
125 |
+
|
126 |
+
return true;
|
127 |
+
}
|
128 |
+
|
129 |
+
return false;
|
130 |
+
}
|
131 |
+
|
132 |
/**
|
133 |
* Returns via string
|
134 |
+
*
|
135 |
* @return string
|
136 |
*/
|
137 |
function get_via()
|
138 |
{
|
139 |
+
return sprintf('Amazon Web Services: CloudFront: %s', parent::get_via());
|
140 |
}
|
141 |
}
|
lib/W3/Cdn/Ftp.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*/
|
6 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
7 |
|
8 |
-
if (!
|
9 |
define('W3_CDN_FTP_CONNECT_TIMEOUT', 30);
|
10 |
}
|
11 |
|
@@ -31,35 +31,37 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
31 |
{
|
32 |
if (empty($this->_config['host'])) {
|
33 |
$error = 'Empty host.';
|
|
|
34 |
return false;
|
35 |
}
|
36 |
|
37 |
-
if (!
|
38 |
$this->_config['port'] = 21;
|
39 |
}
|
40 |
|
41 |
$this->_ftp = @ftp_connect($this->_config['host'], $this->_config['port'], W3_CDN_FTP_CONNECT_TIMEOUT);
|
42 |
|
43 |
-
if (
|
44 |
$error = sprintf('Unable to connect to %s:%d.', $this->_config['host'], $this->_config['port']);
|
|
|
45 |
return false;
|
46 |
}
|
47 |
|
48 |
-
if (
|
49 |
$this->_disconnect();
|
50 |
$error = 'Incorrect login or password.';
|
51 |
|
52 |
return false;
|
53 |
}
|
54 |
|
55 |
-
if (isset($this->_config['pasv']) &&
|
56 |
$this->_disconnect();
|
57 |
$error = 'Unable to change mode to passive.';
|
58 |
|
59 |
return false;
|
60 |
}
|
61 |
|
62 |
-
if (!
|
63 |
$this->_disconnect();
|
64 |
$error = sprintf('Unable to change directory to: %s.', $this->_config['path']);
|
65 |
|
@@ -102,16 +104,16 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
102 |
$count = 0;
|
103 |
$error = null;
|
104 |
|
105 |
-
if (
|
106 |
-
$results = $this->get_results($files,
|
107 |
return false;
|
108 |
}
|
109 |
|
110 |
$home = @ftp_pwd($this->_ftp);
|
111 |
|
112 |
foreach ($files as $local_path => $remote_path) {
|
113 |
-
if (!
|
114 |
-
$results[] = $this->get_result($local_path, $remote_path,
|
115 |
continue;
|
116 |
}
|
117 |
|
@@ -121,19 +123,19 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
121 |
$remote_dirs = preg_split('~\\/+~', $remote_dir);
|
122 |
|
123 |
foreach ($remote_dirs as $dir) {
|
124 |
-
if (
|
125 |
-
if (
|
126 |
@ftp_close($this->_ftp);
|
127 |
-
$results[] = $this->get_result($local_path, $remote_path,
|
128 |
-
continue;
|
129 |
}
|
130 |
|
131 |
@ftp_chmod($this->_ftp, 0755, $dir);
|
132 |
|
133 |
-
if (
|
134 |
@ftp_close($this->_ftp);
|
135 |
-
$results[] = $this->get_result($local_path, $remote_path,
|
136 |
-
continue;
|
137 |
}
|
138 |
}
|
139 |
}
|
@@ -141,13 +143,13 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
141 |
$remote_file = basename($remote_path);
|
142 |
$mtime = @filemtime($local_path);
|
143 |
|
144 |
-
if (
|
145 |
$size = @filesize($local_path);
|
146 |
$ftp_size = @ftp_size($this->_ftp, $remote_file);
|
147 |
$ftp_mtime = @ftp_mdtm($this->_ftp, $remote_file);
|
148 |
|
149 |
if ($size === $ftp_size && $mtime === $ftp_mtime) {
|
150 |
-
$results[] = $this->get_result($local_path, $remote_path,
|
151 |
continue;
|
152 |
}
|
153 |
}
|
@@ -155,7 +157,7 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
155 |
$result = @ftp_put($this->_ftp, $remote_file, $local_path, FTP_BINARY);
|
156 |
$this->_mdtm($remote_file, $mtime);
|
157 |
|
158 |
-
$results[] = $this->get_result($local_path, $remote_path, ($result ?
|
159 |
|
160 |
if ($result) {
|
161 |
$count++;
|
@@ -180,14 +182,14 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
180 |
$error = null;
|
181 |
$count = 0;
|
182 |
|
183 |
-
if (
|
184 |
-
$results = $this->get_results($files,
|
185 |
return false;
|
186 |
}
|
187 |
|
188 |
foreach ($files as $local_path => $remote_path) {
|
189 |
$result = @ftp_delete($this->_ftp, $remote_path);
|
190 |
-
$results[] = $this->get_result($local_path, $remote_path, ($result ?
|
191 |
|
192 |
if ($result) {
|
193 |
$count++;
|
@@ -195,7 +197,7 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
195 |
|
196 |
while (true) {
|
197 |
$remote_path = dirname($remote_path);
|
198 |
-
if ($remote_path == '.' ||
|
199 |
break;
|
200 |
}
|
201 |
}
|
@@ -214,41 +216,49 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
214 |
*/
|
215 |
function test(&$error)
|
216 |
{
|
|
|
|
|
|
|
|
|
217 |
$rand = md5(time());
|
218 |
$upload_info = w3_upload_info();
|
219 |
$tmp_dir = 'test_dir_' . $rand;
|
220 |
$tmp_file = 'test_file_' . $rand;
|
221 |
$tmp_path = $upload_info['path'] . '/' . $tmp_file;
|
222 |
|
223 |
-
if (
|
224 |
$error = sprintf('Unable to create file: %s.', $tmp_path);
|
|
|
225 |
return false;
|
226 |
}
|
227 |
|
228 |
-
if (
|
229 |
return false;
|
230 |
}
|
231 |
|
232 |
-
if (
|
233 |
$this->_disconnect();
|
234 |
$error = sprintf('Unable to make directory: %s.', $tmp_dir);
|
|
|
235 |
return false;
|
236 |
} else {
|
237 |
@ftp_chmod($this->_ftp, 0755, $tmp_dir);
|
238 |
}
|
239 |
|
240 |
-
if (
|
241 |
$this->_disconnect();
|
242 |
$error = sprintf('Unable to change directory to: %s.', $tmp_dir);
|
|
|
243 |
return false;
|
244 |
}
|
245 |
|
246 |
-
if (
|
247 |
@ftp_cdup($this->_ftp);
|
248 |
@ftp_rmdir($this->_ftp, $tmp_dir);
|
249 |
@unlink($tmp_path);
|
250 |
$this->_disconnect();
|
251 |
$error = sprintf('Unable to upload file: %s.', $tmp_path);
|
|
|
252 |
return false;
|
253 |
}
|
254 |
|
@@ -262,16 +272,16 @@ class W3_Cdn_Ftp extends W3_Cdn_Base
|
|
262 |
}
|
263 |
|
264 |
/**
|
265 |
-
* Returns CDN
|
266 |
*
|
267 |
* @return string
|
268 |
*/
|
269 |
-
function
|
270 |
{
|
271 |
-
if (!
|
272 |
-
return $this->_config['domain'];
|
273 |
}
|
274 |
|
275 |
-
return
|
276 |
}
|
277 |
}
|
5 |
*/
|
6 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
7 |
|
8 |
+
if (!defined('W3_CDN_FTP_CONNECT_TIMEOUT')) {
|
9 |
define('W3_CDN_FTP_CONNECT_TIMEOUT', 30);
|
10 |
}
|
11 |
|
31 |
{
|
32 |
if (empty($this->_config['host'])) {
|
33 |
$error = 'Empty host.';
|
34 |
+
|
35 |
return false;
|
36 |
}
|
37 |
|
38 |
+
if (!isset($this->_config['port'])) {
|
39 |
$this->_config['port'] = 21;
|
40 |
}
|
41 |
|
42 |
$this->_ftp = @ftp_connect($this->_config['host'], $this->_config['port'], W3_CDN_FTP_CONNECT_TIMEOUT);
|
43 |
|
44 |
+
if (!$this->_ftp) {
|
45 |
$error = sprintf('Unable to connect to %s:%d.', $this->_config['host'], $this->_config['port']);
|
46 |
+
|
47 |
return false;
|
48 |
}
|
49 |
|
50 |
+
if (!@ftp_login($this->_ftp, $this->_config['user'], $this->_config['pass'])) {
|
51 |
$this->_disconnect();
|
52 |
$error = 'Incorrect login or password.';
|
53 |
|
54 |
return false;
|
55 |
}
|
56 |
|
57 |
+
if (isset($this->_config['pasv']) && !@ftp_pasv($this->_ftp, $this->_config['pasv'])) {
|
58 |
$this->_disconnect();
|
59 |
$error = 'Unable to change mode to passive.';
|
60 |
|
61 |
return false;
|
62 |
}
|
63 |
|
64 |
+
if (!empty($this->_config['path']) && !@ftp_chdir($this->_ftp, $this->_config['path'])) {
|
65 |
$this->_disconnect();
|
66 |
$error = sprintf('Unable to change directory to: %s.', $this->_config['path']);
|
67 |
|
104 |
$count = 0;
|
105 |
$error = null;
|
106 |
|
107 |
+
if (!$this->_connect($error)) {
|
108 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
109 |
return false;
|
110 |
}
|
111 |
|
112 |
$home = @ftp_pwd($this->_ftp);
|
113 |
|
114 |
foreach ($files as $local_path => $remote_path) {
|
115 |
+
if (!file_exists($local_path)) {
|
116 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Source file not found');
|
117 |
continue;
|
118 |
}
|
119 |
|
123 |
$remote_dirs = preg_split('~\\/+~', $remote_dir);
|
124 |
|
125 |
foreach ($remote_dirs as $dir) {
|
126 |
+
if (!@ftp_chdir($this->_ftp, $dir)) {
|
127 |
+
if (!@ftp_mkdir($this->_ftp, $dir)) {
|
128 |
@ftp_close($this->_ftp);
|
129 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to create directory');
|
130 |
+
continue 2;
|
131 |
}
|
132 |
|
133 |
@ftp_chmod($this->_ftp, 0755, $dir);
|
134 |
|
135 |
+
if (!@ftp_chdir($this->_ftp, $dir)) {
|
136 |
@ftp_close($this->_ftp);
|
137 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to change directory');
|
138 |
+
continue 2;
|
139 |
}
|
140 |
}
|
141 |
}
|
143 |
$remote_file = basename($remote_path);
|
144 |
$mtime = @filemtime($local_path);
|
145 |
|
146 |
+
if (!$force_rewrite) {
|
147 |
$size = @filesize($local_path);
|
148 |
$ftp_size = @ftp_size($this->_ftp, $remote_file);
|
149 |
$ftp_mtime = @ftp_mdtm($this->_ftp, $remote_file);
|
150 |
|
151 |
if ($size === $ftp_size && $mtime === $ftp_mtime) {
|
152 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'File already exists');
|
153 |
continue;
|
154 |
}
|
155 |
}
|
157 |
$result = @ftp_put($this->_ftp, $remote_file, $local_path, FTP_BINARY);
|
158 |
$this->_mdtm($remote_file, $mtime);
|
159 |
|
160 |
+
$results[] = $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to upload file'));
|
161 |
|
162 |
if ($result) {
|
163 |
$count++;
|
182 |
$error = null;
|
183 |
$count = 0;
|
184 |
|
185 |
+
if (!$this->_connect($error)) {
|
186 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
187 |
return false;
|
188 |
}
|
189 |
|
190 |
foreach ($files as $local_path => $remote_path) {
|
191 |
$result = @ftp_delete($this->_ftp, $remote_path);
|
192 |
+
$results[] = $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to delete file'));
|
193 |
|
194 |
if ($result) {
|
195 |
$count++;
|
197 |
|
198 |
while (true) {
|
199 |
$remote_path = dirname($remote_path);
|
200 |
+
if ($remote_path == '.' || !@ftp_rmdir($this->_ftp, $remote_path)) {
|
201 |
break;
|
202 |
}
|
203 |
}
|
216 |
*/
|
217 |
function test(&$error)
|
218 |
{
|
219 |
+
if (!parent::test($error)) {
|
220 |
+
return false;
|
221 |
+
}
|
222 |
+
|
223 |
$rand = md5(time());
|
224 |
$upload_info = w3_upload_info();
|
225 |
$tmp_dir = 'test_dir_' . $rand;
|
226 |
$tmp_file = 'test_file_' . $rand;
|
227 |
$tmp_path = $upload_info['path'] . '/' . $tmp_file;
|
228 |
|
229 |
+
if (!@file_put_contents($tmp_path, $rand)) {
|
230 |
$error = sprintf('Unable to create file: %s.', $tmp_path);
|
231 |
+
|
232 |
return false;
|
233 |
}
|
234 |
|
235 |
+
if (!$this->_connect($error)) {
|
236 |
return false;
|
237 |
}
|
238 |
|
239 |
+
if (!@ftp_mkdir($this->_ftp, $tmp_dir)) {
|
240 |
$this->_disconnect();
|
241 |
$error = sprintf('Unable to make directory: %s.', $tmp_dir);
|
242 |
+
|
243 |
return false;
|
244 |
} else {
|
245 |
@ftp_chmod($this->_ftp, 0755, $tmp_dir);
|
246 |
}
|
247 |
|
248 |
+
if (!@ftp_chdir($this->_ftp, $tmp_dir)) {
|
249 |
$this->_disconnect();
|
250 |
$error = sprintf('Unable to change directory to: %s.', $tmp_dir);
|
251 |
+
|
252 |
return false;
|
253 |
}
|
254 |
|
255 |
+
if (!@ftp_put($this->_ftp, $tmp_file, $tmp_path, FTP_BINARY)) {
|
256 |
@ftp_cdup($this->_ftp);
|
257 |
@ftp_rmdir($this->_ftp, $tmp_dir);
|
258 |
@unlink($tmp_path);
|
259 |
$this->_disconnect();
|
260 |
$error = sprintf('Unable to upload file: %s.', $tmp_path);
|
261 |
+
|
262 |
return false;
|
263 |
}
|
264 |
|
272 |
}
|
273 |
|
274 |
/**
|
275 |
+
* Returns array of CDN domains
|
276 |
*
|
277 |
* @return string
|
278 |
*/
|
279 |
+
function get_domains()
|
280 |
{
|
281 |
+
if (!empty($this->_config['domain'])) {
|
282 |
+
return (array) $this->_config['domain'];
|
283 |
}
|
284 |
|
285 |
+
return array();
|
286 |
}
|
287 |
}
|
lib/W3/Cdn/Mirror.php
CHANGED
@@ -11,7 +11,7 @@ require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
|
11 |
class W3_Cdn_Mirror extends W3_Cdn_Base
|
12 |
{
|
13 |
/**
|
14 |
-
* Uploads files
|
15 |
*
|
16 |
* @param array $files
|
17 |
* @param array $results
|
@@ -20,13 +20,13 @@ class W3_Cdn_Mirror extends W3_Cdn_Base
|
|
20 |
*/
|
21 |
function upload($files, &$results, $force_rewrite = false)
|
22 |
{
|
23 |
-
$results = $this->get_results($files,
|
24 |
|
25 |
return count($files);
|
26 |
}
|
27 |
|
28 |
/**
|
29 |
-
* Deletes files
|
30 |
*
|
31 |
* @param array $files
|
32 |
* @param array $results
|
@@ -34,32 +34,22 @@ class W3_Cdn_Mirror extends W3_Cdn_Base
|
|
34 |
*/
|
35 |
function delete($files, &$results)
|
36 |
{
|
37 |
-
$results = $this->get_results($files,
|
38 |
|
39 |
return count($files);
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
-
*
|
44 |
-
*
|
45 |
-
* @
|
46 |
-
* @return boolean
|
47 |
-
*/
|
48 |
-
function test(&$error)
|
49 |
-
{
|
50 |
-
return true;
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Returns CDN domain
|
55 |
-
* @return string
|
56 |
*/
|
57 |
-
function
|
58 |
{
|
59 |
-
if (!
|
60 |
-
return $this->_config['domain'];
|
61 |
}
|
62 |
|
63 |
-
return
|
64 |
}
|
65 |
}
|
11 |
class W3_Cdn_Mirror extends W3_Cdn_Base
|
12 |
{
|
13 |
/**
|
14 |
+
* Uploads files stub
|
15 |
*
|
16 |
* @param array $files
|
17 |
* @param array $results
|
20 |
*/
|
21 |
function upload($files, &$results, $force_rewrite = false)
|
22 |
{
|
23 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_OK, 'OK');
|
24 |
|
25 |
return count($files);
|
26 |
}
|
27 |
|
28 |
/**
|
29 |
+
* Deletes files stub
|
30 |
*
|
31 |
* @param array $files
|
32 |
* @param array $results
|
34 |
*/
|
35 |
function delete($files, &$results)
|
36 |
{
|
37 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_OK, 'OK');
|
38 |
|
39 |
return count($files);
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
+
* Returns array of CDN domains
|
44 |
+
*
|
45 |
+
* @return array
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
*/
|
47 |
+
function get_domains()
|
48 |
{
|
49 |
+
if (!empty($this->_config['domain'])) {
|
50 |
+
return (array) $this->_config['domain'];
|
51 |
}
|
52 |
|
53 |
+
return array();
|
54 |
}
|
55 |
}
|
lib/W3/Cdn/Netdna.php
ADDED
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* W3 CDN Netdna Class
|
5 |
+
*/
|
6 |
+
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Class W3_Cdn_Netdna
|
10 |
+
*/
|
11 |
+
class W3_Cdn_Netdna extends W3_Cdn_Base
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* Uploads files stub
|
15 |
+
*
|
16 |
+
* @param array $files
|
17 |
+
* @param array $results
|
18 |
+
* @param boolean $force_rewrite
|
19 |
+
* @return boolean
|
20 |
+
*/
|
21 |
+
function upload($files, &$results, $force_rewrite = false)
|
22 |
+
{
|
23 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_OK, 'OK');
|
24 |
+
|
25 |
+
return count($files);
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Deletes files stub
|
30 |
+
*
|
31 |
+
* @param array $files
|
32 |
+
* @param array $results
|
33 |
+
* @return boolean
|
34 |
+
*/
|
35 |
+
function delete($files, &$results)
|
36 |
+
{
|
37 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_OK, 'OK');
|
38 |
+
|
39 |
+
return count($files);
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Purges remote files
|
44 |
+
*
|
45 |
+
* @param array $files
|
46 |
+
* @param array $results
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
function purge($files, &$results)
|
50 |
+
{
|
51 |
+
if (empty($this->_config['apiid'])) {
|
52 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, 'Empty API ID.');
|
53 |
+
|
54 |
+
return false;
|
55 |
+
}
|
56 |
+
|
57 |
+
if (empty($this->_config['apikey'])) {
|
58 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, 'Empty API key.');
|
59 |
+
|
60 |
+
return false;
|
61 |
+
}
|
62 |
+
|
63 |
+
if ($this->sha256('test') === false) {
|
64 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, "hash() or mhash() function doesn't exists.");
|
65 |
+
|
66 |
+
return false;
|
67 |
+
}
|
68 |
+
|
69 |
+
if (!class_exists('IXR_Client')) {
|
70 |
+
require_once (ABSPATH . WPINC . '/class-IXR.php');
|
71 |
+
}
|
72 |
+
|
73 |
+
$date = date('c');
|
74 |
+
$method = 'purge';
|
75 |
+
$auth_string = sprintf('%s:%s:%s', $date, $this->_config['apikey'], $method);
|
76 |
+
$auth_key = $this->sha256($auth_string);
|
77 |
+
$domain_url = w3_get_domain_url();
|
78 |
+
|
79 |
+
$client = new IXR_Client('http://api.netdna.com/xmlrpc/cache');
|
80 |
+
$client->timeout = 30;
|
81 |
+
|
82 |
+
$count = 0;
|
83 |
+
$results = array();
|
84 |
+
|
85 |
+
foreach ($files as $local_path => $remote_path) {
|
86 |
+
$url = $this->format_url($remote_path);
|
87 |
+
|
88 |
+
$client->query('cache.' . $method, $this->_config['apiid'], $auth_key, $date, $url);
|
89 |
+
|
90 |
+
if (!$client->isError()) {
|
91 |
+
$val = $client->getResponse();
|
92 |
+
|
93 |
+
if ($val) {
|
94 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_OK, 'OK');
|
95 |
+
$count++;
|
96 |
+
} else {
|
97 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unexpected Error');
|
98 |
+
}
|
99 |
+
|
100 |
+
} else {
|
101 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, $client->getErrorMessage());
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
return $count;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Returns array of CDN domains
|
110 |
+
*
|
111 |
+
* @return array
|
112 |
+
*/
|
113 |
+
function get_domains()
|
114 |
+
{
|
115 |
+
if (!empty($this->_config['domain'])) {
|
116 |
+
return (array) $this->_config['domain'];
|
117 |
+
}
|
118 |
+
|
119 |
+
return array();
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Returns SHA 256 hash of string
|
124 |
+
*
|
125 |
+
* @param string $string
|
126 |
+
* @return string
|
127 |
+
*/
|
128 |
+
function sha256($string)
|
129 |
+
{
|
130 |
+
if (function_exists('hash')) {
|
131 |
+
return hash('sha256', $string);
|
132 |
+
} elseif (function_exists('mhash')) {
|
133 |
+
return bin2hex(mhash(MHASH_SHA256, $string));
|
134 |
+
}
|
135 |
+
|
136 |
+
return false;
|
137 |
+
}
|
138 |
+
}
|
lib/W3/Cdn/Rscf.php
ADDED
@@ -0,0 +1,304 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Rackspace Cloud Files CDN engine
|
5 |
+
*/
|
6 |
+
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
7 |
+
require_once W3TC_LIB_CF_DIR . '/cloudfiles.php';
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class W3_Cdn_Rscf
|
11 |
+
*/
|
12 |
+
class W3_Cdn_Rscf extends W3_Cdn_Base
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* Auth object
|
16 |
+
*
|
17 |
+
* @var CF_Authentication
|
18 |
+
*/
|
19 |
+
var $_auth = null;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Connection object
|
23 |
+
*
|
24 |
+
* @var CF_Connection
|
25 |
+
*/
|
26 |
+
var $_connection = null;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Container object
|
30 |
+
*
|
31 |
+
* @var CF_Container
|
32 |
+
*/
|
33 |
+
var $_container = null;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Init connection object
|
37 |
+
*
|
38 |
+
* @param string $error
|
39 |
+
* @return boolean
|
40 |
+
*/
|
41 |
+
function _init(&$error)
|
42 |
+
{
|
43 |
+
if (empty($this->_config['user'])) {
|
44 |
+
$error = 'Empty username';
|
45 |
+
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
if (empty($this->_config['key'])) {
|
50 |
+
$error = 'Empty API key';
|
51 |
+
|
52 |
+
return false;
|
53 |
+
}
|
54 |
+
|
55 |
+
try {
|
56 |
+
$this->_auth = new CF_Authentication($this->_config['user'], $this->_config['key']);
|
57 |
+
$this->_auth->ssl_use_cabundle();
|
58 |
+
$this->_auth->authenticate();
|
59 |
+
|
60 |
+
$this->_connection = new CF_Connection($this->_auth);
|
61 |
+
$this->_connection->ssl_use_cabundle();
|
62 |
+
} catch (Exception $exception) {
|
63 |
+
$error = $exception->getMessage();
|
64 |
+
|
65 |
+
return false;
|
66 |
+
}
|
67 |
+
|
68 |
+
return true;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Init container object
|
73 |
+
*
|
74 |
+
* @param string $error
|
75 |
+
* @return boolean
|
76 |
+
*/
|
77 |
+
function _init_container(&$error)
|
78 |
+
{
|
79 |
+
if (empty($this->_config['container'])) {
|
80 |
+
$error = 'Empty container';
|
81 |
+
|
82 |
+
return false;
|
83 |
+
}
|
84 |
+
|
85 |
+
try {
|
86 |
+
$this->_container = $this->_connection->get_container($this->_config['container']);
|
87 |
+
} catch (Exception $exception) {
|
88 |
+
$error = $exception->getMessage();
|
89 |
+
|
90 |
+
return false;
|
91 |
+
}
|
92 |
+
|
93 |
+
return true;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Uploads files to CDN
|
98 |
+
*
|
99 |
+
* @param array $files
|
100 |
+
* @param array $results
|
101 |
+
* @param boolean $force_rewrite
|
102 |
+
* @return integer
|
103 |
+
*/
|
104 |
+
function upload($files, &$results, $force_rewrite = false)
|
105 |
+
{
|
106 |
+
$count = 0;
|
107 |
+
$error = null;
|
108 |
+
|
109 |
+
if (!$this->_init($error) || !$this->_init_container($error)) {
|
110 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
111 |
+
return false;
|
112 |
+
}
|
113 |
+
|
114 |
+
foreach ($files as $local_path => $remote_path) {
|
115 |
+
if (!file_exists($local_path)) {
|
116 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Source file not found');
|
117 |
+
continue;
|
118 |
+
}
|
119 |
+
|
120 |
+
try {
|
121 |
+
$object = & new CF_Object($this->_container, $remote_path, false, false);
|
122 |
+
} catch (Exception $exception) {
|
123 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to create object');
|
124 |
+
continue;
|
125 |
+
}
|
126 |
+
|
127 |
+
if (!$force_rewrite) {
|
128 |
+
try {
|
129 |
+
list($status, $reason, $etag, $last_modified, $content_type, $content_length, $metadata) = $this->_container->cfs_http->head_object($object);
|
130 |
+
} catch (Exception $exception) {
|
131 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to get object info');
|
132 |
+
continue;
|
133 |
+
}
|
134 |
+
|
135 |
+
if ($status >= 200 && $status < 300) {
|
136 |
+
$hash = @md5_file($local_path);
|
137 |
+
|
138 |
+
if ($hash === $etag) {
|
139 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Object already exists');
|
140 |
+
continue;
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
try {
|
146 |
+
$object->load_from_filename($local_path);
|
147 |
+
|
148 |
+
$result = true;
|
149 |
+
$count++;
|
150 |
+
} catch (Exception $exception) {
|
151 |
+
$result = false;
|
152 |
+
}
|
153 |
+
|
154 |
+
$results[] = $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to put object'));
|
155 |
+
}
|
156 |
+
|
157 |
+
return $count;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Deletes files from CDN
|
162 |
+
*
|
163 |
+
* @param array $files
|
164 |
+
* @param array $results
|
165 |
+
* @return integer
|
166 |
+
*/
|
167 |
+
function delete($files, &$results)
|
168 |
+
{
|
169 |
+
$error = null;
|
170 |
+
$count = 0;
|
171 |
+
|
172 |
+
if (!$this->_init($error) || !$this->_init_container($error)) {
|
173 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
|
177 |
+
foreach ($files as $local_path => $remote_path) {
|
178 |
+
try {
|
179 |
+
$result = $this->_container->delete_object($remote_path);
|
180 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_OK, 'OK');
|
181 |
+
$count++;
|
182 |
+
} catch (Exception $exception) {
|
183 |
+
$results[] = $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to delete object');
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
return $count;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Test CDN connection
|
192 |
+
*
|
193 |
+
* @param string $error
|
194 |
+
* @return boolean
|
195 |
+
*/
|
196 |
+
function test(&$error)
|
197 |
+
{
|
198 |
+
if (!parent::test(&$error)) {
|
199 |
+
return false;
|
200 |
+
}
|
201 |
+
|
202 |
+
if (!$this->_init($error) || !$this->_init_container($error)) {
|
203 |
+
return false;
|
204 |
+
}
|
205 |
+
|
206 |
+
try {
|
207 |
+
$string = 'test_rscf_' . md5(time());
|
208 |
+
|
209 |
+
$object = $this->_container->create_object($string);
|
210 |
+
$object->content_type = 'text/plain';
|
211 |
+
$object->write($string, strlen($string));
|
212 |
+
|
213 |
+
$object = $this->_container->get_object($string);
|
214 |
+
$data = $object->read();
|
215 |
+
|
216 |
+
if ($data != $string) {
|
217 |
+
throw new Exception('Objects are not equal.');
|
218 |
+
}
|
219 |
+
|
220 |
+
$this->_container->delete_object($string);
|
221 |
+
} catch (Exception $exception) {
|
222 |
+
$error = $exception->getMessage();
|
223 |
+
|
224 |
+
return false;
|
225 |
+
}
|
226 |
+
|
227 |
+
return true;
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Returns CDN domain
|
232 |
+
*
|
233 |
+
* @return string
|
234 |
+
*/
|
235 |
+
function get_domains()
|
236 |
+
{
|
237 |
+
if (!empty($this->_config['cname'])) {
|
238 |
+
return (array) $this->_config['cname'];
|
239 |
+
} elseif (!empty($this->_config['id'])) {
|
240 |
+
$domain = sprintf('%s.cdn.cloudfiles.rackspacecloud.com', $this->_config['id']);
|
241 |
+
|
242 |
+
return array(
|
243 |
+
$domain
|
244 |
+
);
|
245 |
+
}
|
246 |
+
|
247 |
+
return array();
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* Returns VIA string
|
252 |
+
*
|
253 |
+
* @return string
|
254 |
+
*/
|
255 |
+
function get_via()
|
256 |
+
{
|
257 |
+
return sprintf('Rackspace Cloud Files: %s', parent::get_via());
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Creates container
|
262 |
+
*
|
263 |
+
* @param string $container_id
|
264 |
+
* @param string $error
|
265 |
+
* @return boolean
|
266 |
+
*/
|
267 |
+
function create_container(&$container_id, &$error)
|
268 |
+
{
|
269 |
+
if (!$this->_init($error)) {
|
270 |
+
return false;
|
271 |
+
}
|
272 |
+
|
273 |
+
try {
|
274 |
+
$containers = $this->_connection->list_containers();
|
275 |
+
} catch (Exception $exception) {
|
276 |
+
$error = sprintf('Unable to list containers (%s).', $exception->getMessage());
|
277 |
+
|
278 |
+
return false;
|
279 |
+
}
|
280 |
+
|
281 |
+
if (in_array($this->_config['container'], (array) $containers)) {
|
282 |
+
$error = sprintf('Container already exists: %s.', $this->_config['container']);
|
283 |
+
|
284 |
+
return false;
|
285 |
+
}
|
286 |
+
|
287 |
+
try {
|
288 |
+
$container = $this->_connection->create_container($this->_config['container']);
|
289 |
+
$container->make_public();
|
290 |
+
} catch (Exception $exception) {
|
291 |
+
$error = sprintf('Unable to create container: %s (%s).', $this->_config['container'], $exception->getMessage());
|
292 |
+
|
293 |
+
return false;
|
294 |
+
}
|
295 |
+
|
296 |
+
$matches = null;
|
297 |
+
|
298 |
+
if (preg_match('~^https?://(.+)\.cdn\.cloudfiles\.rackspacecloud\.com$~', $container->cdn_uri, $matches)) {
|
299 |
+
$container_id = $matches[1];
|
300 |
+
}
|
301 |
+
|
302 |
+
return true;
|
303 |
+
}
|
304 |
+
}
|
lib/W3/Cdn/S3.php
CHANGED
@@ -1,8 +1,17 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
3 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
4 |
-
require_once W3TC_LIB_DIR . '/S3.php';
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
class W3_Cdn_S3 extends W3_Cdn_Base
|
7 |
{
|
8 |
/**
|
@@ -12,6 +21,13 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
12 |
*/
|
13 |
var $_s3 = null;
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* Inits S3 object
|
17 |
*
|
@@ -44,7 +60,7 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
* Uploads files to
|
48 |
*
|
49 |
* @param array $files
|
50 |
* @param array $results
|
@@ -56,40 +72,114 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
56 |
$count = 0;
|
57 |
$error = null;
|
58 |
|
59 |
-
if (
|
60 |
-
$results = $this->get_results($files,
|
61 |
return false;
|
62 |
}
|
63 |
|
64 |
foreach ($files as $local_path => $remote_path) {
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
68 |
}
|
69 |
|
70 |
-
if (
|
71 |
-
$
|
|
|
|
|
72 |
|
73 |
-
if ($
|
74 |
-
$
|
75 |
-
$s3_hash = (isset($info['hash']) ? $info['hash'] : '');
|
76 |
-
|
77 |
-
if ($hash === $s3_hash) {
|
78 |
-
$results[] = $this->get_result($local_path, $remote_path, W3_CDN_RESULT_ERROR, 'Object already exists');
|
79 |
-
continue;
|
80 |
-
}
|
81 |
}
|
82 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
-
if ($
|
88 |
-
$
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
91 |
|
92 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
|
95 |
/**
|
@@ -104,18 +194,28 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
104 |
$error = null;
|
105 |
$count = 0;
|
106 |
|
107 |
-
if (
|
108 |
-
$results = $this->get_results($files,
|
109 |
return false;
|
110 |
}
|
111 |
|
112 |
foreach ($files as $local_path => $remote_path) {
|
113 |
$result = @$this->_s3->deleteObject($this->_config['bucket'], $remote_path);
|
114 |
-
$results[] = $this->get_result($local_path, $remote_path, ($result ?
|
115 |
|
116 |
if ($result) {
|
117 |
$count++;
|
118 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
}
|
120 |
|
121 |
return $count;
|
@@ -129,47 +229,37 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
129 |
*/
|
130 |
function test(&$error)
|
131 |
{
|
132 |
-
|
133 |
-
|
134 |
-
if (! $this->_init($error)) {
|
135 |
return false;
|
136 |
}
|
137 |
|
138 |
-
$
|
139 |
-
|
140 |
-
if (! $domain) {
|
141 |
-
$error = 'Empty domain.';
|
142 |
-
|
143 |
-
return false;
|
144 |
-
}
|
145 |
|
146 |
-
if (
|
147 |
-
$error = sprintf('Unable to resolve domain: %s.', $domain);
|
148 |
-
|
149 |
return false;
|
150 |
}
|
151 |
|
152 |
$buckets = @$this->_s3->listBuckets();
|
153 |
|
154 |
-
if (
|
155 |
$error = 'Unable to list buckets (check your credentials).';
|
156 |
|
157 |
return false;
|
158 |
}
|
159 |
|
160 |
-
if (!
|
161 |
$error = sprintf('Bucket doesn\'t exist: %s', $this->_config['bucket']);
|
162 |
|
163 |
return false;
|
164 |
}
|
165 |
|
166 |
-
if (
|
167 |
$error = 'Unable to put object.';
|
168 |
|
169 |
return false;
|
170 |
}
|
171 |
|
172 |
-
if (!
|
173 |
$error = 'Unable to get object.';
|
174 |
|
175 |
return false;
|
@@ -182,7 +272,7 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
182 |
return false;
|
183 |
}
|
184 |
|
185 |
-
if (
|
186 |
$error = 'Unable to delete object.';
|
187 |
|
188 |
return false;
|
@@ -196,15 +286,19 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
196 |
*
|
197 |
* @return string
|
198 |
*/
|
199 |
-
function
|
200 |
{
|
201 |
-
if (!
|
|
|
|
|
202 |
$domain = sprintf('%s.s3.amazonaws.com', $this->_config['bucket']);
|
203 |
|
204 |
-
return
|
|
|
|
|
205 |
}
|
206 |
|
207 |
-
return
|
208 |
}
|
209 |
|
210 |
/**
|
@@ -214,26 +308,25 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
214 |
*/
|
215 |
function get_via()
|
216 |
{
|
217 |
-
|
218 |
-
|
219 |
-
return sprintf('Amazon Web Services: S3: %s', ($domain ? $domain : 'N/A'));
|
220 |
}
|
221 |
|
222 |
/**
|
223 |
* Creates bucket
|
224 |
*
|
|
|
225 |
* @param string $error
|
226 |
* @return boolean
|
227 |
*/
|
228 |
-
function
|
229 |
{
|
230 |
-
if (
|
231 |
return false;
|
232 |
}
|
233 |
|
234 |
$buckets = @$this->_s3->listBuckets();
|
235 |
|
236 |
-
if (
|
237 |
$error = 'Unable to list buckets (check your credentials).';
|
238 |
|
239 |
return false;
|
@@ -245,7 +338,7 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
245 |
return false;
|
246 |
}
|
247 |
|
248 |
-
if (
|
249 |
$error = sprintf('Unable to create bucket: %s.', $this->_config['bucket']);
|
250 |
|
251 |
return false;
|
@@ -253,4 +346,26 @@ class W3_Cdn_S3 extends W3_Cdn_Base
|
|
253 |
|
254 |
return true;
|
255 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
}
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Amazon S3 CDN engine
|
5 |
+
*/
|
6 |
require_once W3TC_LIB_W3_DIR . '/Cdn/Base.php';
|
|
|
7 |
|
8 |
+
if (!class_exists('S3')) {
|
9 |
+
require_once W3TC_LIB_DIR . '/S3.php';
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Class W3_Cdn_S3
|
14 |
+
*/
|
15 |
class W3_Cdn_S3 extends W3_Cdn_Base
|
16 |
{
|
17 |
/**
|
21 |
*/
|
22 |
var $_s3 = null;
|
23 |
|
24 |
+
/**
|
25 |
+
* gzip extension
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
var $_gzip_extension = '.gzip';
|
30 |
+
|
31 |
/**
|
32 |
* Inits S3 object
|
33 |
*
|
60 |
}
|
61 |
|
62 |
/**
|
63 |
+
* Uploads files to S3
|
64 |
*
|
65 |
* @param array $files
|
66 |
* @param array $results
|
72 |
$count = 0;
|
73 |
$error = null;
|
74 |
|
75 |
+
if (!$this->_init($error)) {
|
76 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
77 |
return false;
|
78 |
}
|
79 |
|
80 |
foreach ($files as $local_path => $remote_path) {
|
81 |
+
$result = $this->_upload($local_path, $remote_path, $force_rewrite);
|
82 |
+
$results[] = $result;
|
83 |
+
|
84 |
+
if ($result['result'] == W3TC_CDN_RESULT_OK) {
|
85 |
+
$count++;
|
86 |
}
|
87 |
|
88 |
+
if ($this->_config['compression'] && $this->may_gzip($remote_path)) {
|
89 |
+
$remote_path_gzip = $remote_path . $this->_gzip_extension;
|
90 |
+
$result = $this->_upload_gzip($local_path, $remote_path_gzip, $force_rewrite);
|
91 |
+
$results[] = $result;
|
92 |
|
93 |
+
if ($result['result'] == W3TC_CDN_RESULT_OK) {
|
94 |
+
$count++;
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
}
|
96 |
}
|
97 |
+
}
|
98 |
+
|
99 |
+
return $count;
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Uploads single file to S3
|
104 |
+
*
|
105 |
+
* @param string $local_path
|
106 |
+
* @param string $remote_path
|
107 |
+
* @param boolean $force_rewrite
|
108 |
+
* @return array
|
109 |
+
*/
|
110 |
+
function _upload($local_path, $remote_path, $force_rewrite = false)
|
111 |
+
{
|
112 |
+
if (!file_exists($local_path)) {
|
113 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Source file not found');
|
114 |
+
}
|
115 |
+
|
116 |
+
if (!$force_rewrite) {
|
117 |
+
$info = @$this->_s3->getObjectInfo($this->_config['bucket'], $remote_path);
|
118 |
|
119 |
+
if ($info) {
|
120 |
+
$hash = @md5_file($local_path);
|
121 |
+
$s3_hash = (isset($info['hash']) ? $info['hash'] : '');
|
122 |
+
|
123 |
+
if ($hash === $s3_hash) {
|
124 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Object already exists');
|
125 |
+
}
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
$headers = $this->get_headers($local_path);
|
130 |
+
$result = @$this->_s3->putObjectFile($local_path, $this->_config['bucket'], $remote_path, S3::ACL_PUBLIC_READ, array(), $headers);
|
131 |
+
|
132 |
+
return $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to put object'));
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Uploads gzip version of file
|
137 |
+
*
|
138 |
+
* @param string $local_path
|
139 |
+
* @param string $remote_path
|
140 |
+
* @param boolean $force_rewrite
|
141 |
+
* @return array
|
142 |
+
*/
|
143 |
+
function _upload_gzip($local_path, $remote_path, $force_rewrite = false)
|
144 |
+
{
|
145 |
+
if (!function_exists('gzencode')) {
|
146 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, "GZIP library doesn't exists");
|
147 |
+
}
|
148 |
+
|
149 |
+
if (!file_exists($local_path)) {
|
150 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Source file not found');
|
151 |
+
}
|
152 |
+
|
153 |
+
$contents = @file_get_contents($local_path);
|
154 |
+
|
155 |
+
if ($contents === false) {
|
156 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Unable to read file');
|
157 |
+
}
|
158 |
+
|
159 |
+
$data = gzencode($contents);
|
160 |
+
|
161 |
+
if (!$force_rewrite) {
|
162 |
+
$info = @$this->_s3->getObjectInfo($this->_config['bucket'], $remote_path);
|
163 |
|
164 |
+
if ($info) {
|
165 |
+
$hash = md5($data);
|
166 |
+
$s3_hash = (isset($info['hash']) ? $info['hash'] : '');
|
167 |
+
|
168 |
+
if ($hash === $s3_hash) {
|
169 |
+
return $this->get_result($local_path, $remote_path, W3TC_CDN_RESULT_ERROR, 'Object already exists');
|
170 |
+
}
|
171 |
}
|
172 |
}
|
173 |
|
174 |
+
$headers = $this->get_headers($local_path);
|
175 |
+
$headers = array_merge($headers, array(
|
176 |
+
'Vary' => 'Accept-Encoding',
|
177 |
+
'Content-Encoding' => 'gzip'
|
178 |
+
));
|
179 |
+
|
180 |
+
$result = @$this->_s3->putObjectString($data, $this->_config['bucket'], $remote_path, S3::ACL_PUBLIC_READ, array(), $headers);
|
181 |
+
|
182 |
+
return $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to put object'));
|
183 |
}
|
184 |
|
185 |
/**
|
194 |
$error = null;
|
195 |
$count = 0;
|
196 |
|
197 |
+
if (!$this->_init($error)) {
|
198 |
+
$results = $this->get_results($files, W3TC_CDN_RESULT_HALT, $error);
|
199 |
return false;
|
200 |
}
|
201 |
|
202 |
foreach ($files as $local_path => $remote_path) {
|
203 |
$result = @$this->_s3->deleteObject($this->_config['bucket'], $remote_path);
|
204 |
+
$results[] = $this->get_result($local_path, $remote_path, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to delete object'));
|
205 |
|
206 |
if ($result) {
|
207 |
$count++;
|
208 |
}
|
209 |
+
|
210 |
+
if ($this->_config['compression']) {
|
211 |
+
$remote_path_gzip = $remote_path . $this->_gzip_extension;
|
212 |
+
$result = @$this->_s3->deleteObject($this->_config['bucket'], $remote_path_gzip);
|
213 |
+
$results[] = $this->get_result($local_path, $remote_path_gzip, ($result ? W3TC_CDN_RESULT_OK : W3TC_CDN_RESULT_ERROR), ($result ? 'OK' : 'Unable to delete object'));
|
214 |
+
|
215 |
+
if ($result) {
|
216 |
+
$count++;
|
217 |
+
}
|
218 |
+
}
|
219 |
}
|
220 |
|
221 |
return $count;
|
229 |
*/
|
230 |
function test(&$error)
|
231 |
{
|
232 |
+
if (!parent::test($error)) {
|
|
|
|
|
233 |
return false;
|
234 |
}
|
235 |
|
236 |
+
$string = 'test_s3_' . md5(time());
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
|
238 |
+
if (!$this->_init($error)) {
|
|
|
|
|
239 |
return false;
|
240 |
}
|
241 |
|
242 |
$buckets = @$this->_s3->listBuckets();
|
243 |
|
244 |
+
if (!$buckets) {
|
245 |
$error = 'Unable to list buckets (check your credentials).';
|
246 |
|
247 |
return false;
|
248 |
}
|
249 |
|
250 |
+
if (!in_array($this->_config['bucket'], (array) $buckets)) {
|
251 |
$error = sprintf('Bucket doesn\'t exist: %s', $this->_config['bucket']);
|
252 |
|
253 |
return false;
|
254 |
}
|
255 |
|
256 |
+
if (!@$this->_s3->putObjectString($string, $this->_config['bucket'], $string, S3::ACL_PUBLIC_READ)) {
|
257 |
$error = 'Unable to put object.';
|
258 |
|
259 |
return false;
|
260 |
}
|
261 |
|
262 |
+
if (!($object = @$this->_s3->getObject($this->_config['bucket'], $string))) {
|
263 |
$error = 'Unable to get object.';
|
264 |
|
265 |
return false;
|
272 |
return false;
|
273 |
}
|
274 |
|
275 |
+
if (!@$this->_s3->deleteObject($this->_config['bucket'], $string)) {
|
276 |
$error = 'Unable to delete object.';
|
277 |
|
278 |
return false;
|
286 |
*
|
287 |
* @return string
|
288 |
*/
|
289 |
+
function get_domains()
|
290 |
{
|
291 |
+
if (!empty($this->_config['cname'])) {
|
292 |
+
return (array) $this->_config['cname'];
|
293 |
+
} elseif (!empty($this->_config['bucket'])) {
|
294 |
$domain = sprintf('%s.s3.amazonaws.com', $this->_config['bucket']);
|
295 |
|
296 |
+
return array(
|
297 |
+
$domain
|
298 |
+
);
|
299 |
}
|
300 |
|
301 |
+
return array();
|
302 |
}
|
303 |
|
304 |
/**
|
308 |
*/
|
309 |
function get_via()
|
310 |
{
|
311 |
+
return sprintf('Amazon Web Services: S3: %s', parent::get_via());
|
|
|
|
|
312 |
}
|
313 |
|
314 |
/**
|
315 |
* Creates bucket
|
316 |
*
|
317 |
+
* @param string $container_id
|
318 |
* @param string $error
|
319 |
* @return boolean
|
320 |
*/
|
321 |
+
function create_container(&$container_id, &$error)
|
322 |
{
|
323 |
+
if (!$this->_init($error)) {
|
324 |
return false;
|
325 |
}
|
326 |
|
327 |
$buckets = @$this->_s3->listBuckets();
|
328 |
|
329 |
+
if (!$buckets) {
|
330 |
$error = 'Unable to list buckets (check your credentials).';
|
331 |
|
332 |
return false;
|
338 |
return false;
|
339 |
}
|
340 |
|
341 |
+
if (!@$this->_s3->putBucket($this->_config['bucket'], S3::ACL_PUBLIC_READ)) {
|
342 |
$error = sprintf('Unable to create bucket: %s.', $this->_config['bucket']);
|
343 |
|
344 |
return false;
|
346 |
|
347 |
return true;
|
348 |
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Formats URL for object
|
352 |
+
* @param string $path
|
353 |
+
* @return string
|
354 |
+
*/
|
355 |
+
function format_url($path)
|
356 |
+
{
|
357 |
+
$url = parent::format_url($path);
|
358 |
+
|
359 |
+
if ($this->_config['compression'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && stristr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false && $this->may_gzip($path)) {
|
360 |
+
if (($qpos = strpos($url, '?')) !== false) {
|
361 |
+
$url = substr_replace($url, $this->_gzip_extension, $qpos, 0);
|
362 |
+
} else {
|
363 |
+
$url .= $this->_gzip_extension;
|
364 |
+
}
|
365 |
+
|
366 |
+
return $url;
|
367 |
+
}
|
368 |
+
|
369 |
+
return $url;
|
370 |
+
}
|
371 |
}
|
lib/W3/Config.php
CHANGED
@@ -31,6 +31,7 @@ class W3_Config
|
|
31 |
'dbcache.debug' => 'boolean',
|
32 |
'dbcache.engine' => 'string',
|
33 |
'dbcache.file.gc' => 'integer',
|
|
|
34 |
'dbcache.memcached.servers' => 'array',
|
35 |
'dbcache.memcached.persistant' => 'boolean',
|
36 |
'dbcache.reject.logged' => 'boolean',
|
@@ -39,14 +40,26 @@ class W3_Config
|
|
39 |
'dbcache.reject.sql' => 'array',
|
40 |
'dbcache.lifetime' => 'integer',
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
'pgcache.enabled' => 'boolean',
|
43 |
'pgcache.debug' => 'boolean',
|
44 |
'pgcache.engine' => 'string',
|
45 |
'pgcache.file.gc' => 'integer',
|
|
|
46 |
'pgcache.memcached.servers' => 'array',
|
47 |
'pgcache.memcached.persistant' => 'boolean',
|
48 |
-
'pgcache.lifetime' => 'integer',
|
49 |
-
'pgcache.compression' => 'string',
|
50 |
'pgcache.cache.query' => 'boolean',
|
51 |
'pgcache.cache.home' => 'boolean',
|
52 |
'pgcache.cache.feed' => 'boolean',
|
@@ -58,30 +71,32 @@ class W3_Config
|
|
58 |
'pgcache.reject.uri' => 'array',
|
59 |
'pgcache.reject.ua' => 'array',
|
60 |
'pgcache.reject.cookie' => 'array',
|
61 |
-
'pgcache.
|
62 |
-
'pgcache.
|
|
|
|
|
|
|
|
|
63 |
|
64 |
'minify.enabled' => 'boolean',
|
65 |
'minify.debug' => 'boolean',
|
66 |
'minify.engine' => 'string',
|
67 |
-
'minify.file.locking' => 'boolean',
|
68 |
'minify.file.gc' => 'integer',
|
|
|
69 |
'minify.memcached.servers' => 'array',
|
70 |
'minify.memcached.persistant' => 'boolean',
|
71 |
'minify.rewrite' => 'boolean',
|
72 |
'minify.fixtime' => 'integer',
|
73 |
-
'minify.compression' => 'string',
|
74 |
'minify.options' => 'array',
|
75 |
'minify.symlinks' => 'array',
|
76 |
-
'minify.maxage' => 'integer',
|
77 |
'minify.lifetime' => 'integer',
|
78 |
'minify.upload' => 'boolean',
|
79 |
'minify.html.enable' => 'boolean',
|
80 |
-
'minify.html.reject.admin' => 'boolean',
|
81 |
'minify.html.reject.feed' => 'boolean',
|
82 |
'minify.html.inline.css' => 'boolean',
|
83 |
'minify.html.inline.js' => 'boolean',
|
84 |
'minify.html.strip.crlf' => 'boolean',
|
|
|
85 |
'minify.css.enable' => 'boolean',
|
86 |
'minify.css.combine' => 'boolean',
|
87 |
'minify.css.strip.comments' => 'boolean',
|
@@ -89,12 +104,15 @@ class W3_Config
|
|
89 |
'minify.css.groups' => 'array',
|
90 |
'minify.js.enable' => 'boolean',
|
91 |
'minify.js.combine.header' => 'boolean',
|
|
|
92 |
'minify.js.combine.footer' => 'boolean',
|
93 |
'minify.js.strip.comments' => 'boolean',
|
94 |
'minify.js.strip.crlf' => 'boolean',
|
95 |
'minify.js.groups' => 'array',
|
96 |
'minify.reject.ua' => 'array',
|
97 |
'minify.reject.uri' => 'array',
|
|
|
|
|
98 |
|
99 |
'cdn.enabled' => 'boolean',
|
100 |
'cdn.debug' => 'boolean',
|
@@ -110,25 +128,63 @@ class W3_Config
|
|
110 |
'cdn.import.files' => 'string',
|
111 |
'cdn.queue.limit' => 'integer',
|
112 |
'cdn.force.rewrite' => 'boolean',
|
113 |
-
'cdn.
|
|
|
|
|
|
|
|
|
|
|
114 |
'cdn.ftp.host' => 'string',
|
115 |
'cdn.ftp.user' => 'string',
|
116 |
'cdn.ftp.pass' => 'string',
|
117 |
'cdn.ftp.path' => 'string',
|
118 |
'cdn.ftp.pasv' => 'boolean',
|
119 |
-
'cdn.ftp.domain' => '
|
120 |
'cdn.s3.key' => 'string',
|
121 |
'cdn.s3.secret' => 'string',
|
122 |
'cdn.s3.bucket' => 'string',
|
|
|
123 |
'cdn.cf.key' => 'string',
|
124 |
'cdn.cf.secret' => 'string',
|
125 |
'cdn.cf.bucket' => 'string',
|
126 |
'cdn.cf.id' => 'string',
|
127 |
-
'cdn.cf.cname' => '
|
|
|
|
|
|
|
|
|
|
|
128 |
'cdn.reject.ua' => 'array',
|
129 |
'cdn.reject.uri' => 'array',
|
130 |
'cdn.reject.files' => 'array',
|
131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
'common.support' => 'string',
|
133 |
'common.install' => 'integer',
|
134 |
'common.tweeted' => 'integer',
|
@@ -136,7 +192,6 @@ class W3_Config
|
|
136 |
'widget.latest.enabled' => 'boolean',
|
137 |
'widget.latest.items' => 'integer',
|
138 |
|
139 |
-
'notes.defaults' => 'boolean',
|
140 |
'notes.wp_content_perms' => 'boolean',
|
141 |
'notes.php_is_old' => 'boolean',
|
142 |
'notes.theme_changed' => 'boolean',
|
@@ -151,7 +206,11 @@ class W3_Config
|
|
151 |
'notes.support_us' => 'boolean',
|
152 |
'notes.no_curl' => 'boolean',
|
153 |
'notes.no_zlib' => 'boolean',
|
154 |
-
'notes.zlib_output_compression' => 'boolean'
|
|
|
|
|
|
|
|
|
155 |
);
|
156 |
|
157 |
var $_defaults = array(
|
@@ -159,6 +218,7 @@ class W3_Config
|
|
159 |
'dbcache.debug' => false,
|
160 |
'dbcache.engine' => 'file',
|
161 |
'dbcache.file.gc' => 3600,
|
|
|
162 |
'dbcache.memcached.servers' => array(
|
163 |
'127.0.0.1:11211'
|
164 |
),
|
@@ -167,20 +227,47 @@ class W3_Config
|
|
167 |
'dbcache.reject.uri' => array(),
|
168 |
'dbcache.reject.cookie' => array(),
|
169 |
'dbcache.reject.sql' => array(
|
170 |
-
'gdsr_'
|
|
|
171 |
),
|
172 |
'dbcache.lifetime' => 180,
|
173 |
|
174 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
'pgcache.debug' => false,
|
176 |
'pgcache.engine' => 'file_pgcache',
|
177 |
'pgcache.file.gc' => 3600,
|
|
|
178 |
'pgcache.memcached.servers' => array(
|
179 |
'127.0.0.1:11211'
|
180 |
),
|
181 |
'pgcache.memcached.persistant' => true,
|
182 |
-
'pgcache.lifetime' => 3600,
|
183 |
-
'pgcache.compression' => 'gzip',
|
184 |
'pgcache.cache.query' => true,
|
185 |
'pgcache.cache.home' => true,
|
186 |
'pgcache.cache.feed' => true,
|
@@ -189,7 +276,8 @@ class W3_Config
|
|
189 |
'pgcache.cache.headers' => array(
|
190 |
'Last-Modified',
|
191 |
'Content-Type',
|
192 |
-
'X-Pingback'
|
|
|
193 |
),
|
194 |
'pgcache.accept.files' => array(
|
195 |
'wp-comments-popup.php',
|
@@ -201,147 +289,45 @@ class W3_Config
|
|
201 |
'wp-.*\.php',
|
202 |
'index\.php'
|
203 |
),
|
204 |
-
'pgcache.reject.ua' => array(
|
205 |
-
'bot',
|
206 |
-
'ia_archive',
|
207 |
-
'slurp',
|
208 |
-
'crawl',
|
209 |
-
'spider'
|
210 |
-
),
|
211 |
'pgcache.reject.cookie' => array(),
|
212 |
-
'pgcache.
|
213 |
-
'pgcache.
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
'Alcatel',
|
219 |
-
'Amoi',
|
220 |
-
'Android',
|
221 |
-
'Audiovox',
|
222 |
-
'AvantGo',
|
223 |
-
'BenQ',
|
224 |
-
'Bird',
|
225 |
-
'BlackBerry',
|
226 |
-
'Blazer',
|
227 |
-
'CDM',
|
228 |
-
'Cellphone',
|
229 |
-
'DDIPOCKET',
|
230 |
-
'Danger',
|
231 |
-
'DoCoMo',
|
232 |
-
'Elaine/3.0',
|
233 |
-
'Ericsson',
|
234 |
-
'EudoraWeb',
|
235 |
-
'Fly',
|
236 |
-
'HP.iPAQ',
|
237 |
-
'Haier',
|
238 |
-
'Huawei',
|
239 |
-
'IEMobile',
|
240 |
-
'J-PHONE',
|
241 |
-
'KDDI',
|
242 |
-
'KONKA',
|
243 |
-
'KWC',
|
244 |
-
'KYOCERA/WX310K',
|
245 |
-
'LG',
|
246 |
-
'LG/U990',
|
247 |
-
'Lenovo',
|
248 |
-
'MIDP-2.0',
|
249 |
-
'MMEF20',
|
250 |
-
'MOT-V',
|
251 |
-
'MobilePhone',
|
252 |
-
'Motorola',
|
253 |
-
'NEWGEN',
|
254 |
-
'NetFront',
|
255 |
-
'Newt',
|
256 |
-
'Nintendo Wii',
|
257 |
-
'Nitro',
|
258 |
-
'Nokia',
|
259 |
-
'Novarra',
|
260 |
-
'O2',
|
261 |
-
'Opera Mini',
|
262 |
-
'Opera.Mobi',
|
263 |
-
'PANTECH',
|
264 |
-
'PDXGW',
|
265 |
-
'PG',
|
266 |
-
'PPC',
|
267 |
-
'PT',
|
268 |
-
'Palm',
|
269 |
-
'Panasonic',
|
270 |
-
'Philips',
|
271 |
-
'Playstation Portable',
|
272 |
-
'ProxiNet',
|
273 |
-
'Proxinet',
|
274 |
-
'Qtek',
|
275 |
-
'SCH',
|
276 |
-
'SEC',
|
277 |
-
'SGH',
|
278 |
-
'SHARP-TQ-GX10',
|
279 |
-
'SPH',
|
280 |
-
'Sagem',
|
281 |
-
'Samsung',
|
282 |
-
'Sanyo',
|
283 |
-
'Sendo',
|
284 |
-
'Sharp',
|
285 |
-
'Small',
|
286 |
-
'Smartphone',
|
287 |
-
'SoftBank',
|
288 |
-
'SonyEricsson',
|
289 |
-
'Symbian',
|
290 |
-
'Symbian OS',
|
291 |
-
'SymbianOS',
|
292 |
-
'TS21i-10',
|
293 |
-
'Toshiba',
|
294 |
-
'Treo',
|
295 |
-
'UP.Browser',
|
296 |
-
'UP.Link',
|
297 |
-
'UTS',
|
298 |
-
'Vertu',
|
299 |
-
'WILLCOME',
|
300 |
-
'WinWAP',
|
301 |
-
'Windows CE',
|
302 |
-
'Windows.CE',
|
303 |
-
'Xda',
|
304 |
-
'ZTE',
|
305 |
-
'dopod',
|
306 |
-
'hiptop',
|
307 |
-
'htc',
|
308 |
-
'i-mobile',
|
309 |
-
'iPhone',
|
310 |
-
'iPod',
|
311 |
-
'nokia',
|
312 |
-
'portalmmm',
|
313 |
-
'vodafone'
|
314 |
-
),
|
315 |
|
316 |
-
'minify.enabled' =>
|
317 |
'minify.debug' => false,
|
318 |
'minify.engine' => 'file',
|
319 |
-
'minify.file.locking' => true,
|
320 |
'minify.file.gc' => 86400,
|
|
|
321 |
'minify.memcached.servers' => array(
|
322 |
'127.0.0.1:11211'
|
323 |
),
|
324 |
'minify.memcached.persistant' => true,
|
325 |
'minify.rewrite' => true,
|
326 |
'minify.fixtime' => 0,
|
327 |
-
'minify.compression' => 'gzip',
|
328 |
'minify.options' => array(
|
329 |
-
'bubbleCssImports' =>
|
330 |
'minApp' => array(
|
331 |
'groupsOnly' => false,
|
332 |
'maxFiles' => 20
|
333 |
)
|
334 |
),
|
335 |
'minify.symlinks' => array(),
|
336 |
-
'minify.maxage' => 86400,
|
337 |
'minify.lifetime' => 86400,
|
338 |
'minify.upload' => true,
|
339 |
'minify.html.enable' => false,
|
340 |
-
'minify.html.reject.admin' => false,
|
341 |
'minify.html.reject.feed' => false,
|
342 |
'minify.html.inline.css' => false,
|
343 |
'minify.html.inline.js' => false,
|
344 |
'minify.html.strip.crlf' => false,
|
|
|
|
|
|
|
|
|
345 |
'minify.css.enable' => true,
|
346 |
'minify.css.combine' => false,
|
347 |
'minify.css.strip.comments' => false,
|
@@ -349,12 +335,15 @@ class W3_Config
|
|
349 |
'minify.css.groups' => array(),
|
350 |
'minify.js.enable' => true,
|
351 |
'minify.js.combine.header' => false,
|
|
|
352 |
'minify.js.combine.footer' => false,
|
353 |
'minify.js.strip.comments' => false,
|
354 |
'minify.js.strip.crlf' => false,
|
355 |
'minify.js.groups' => array(),
|
356 |
'minify.reject.ua' => array(),
|
357 |
'minify.reject.uri' => array(),
|
|
|
|
|
358 |
|
359 |
'cdn.enabled' => false,
|
360 |
'cdn.debug' => false,
|
@@ -362,7 +351,7 @@ class W3_Config
|
|
362 |
'cdn.includes.enable' => true,
|
363 |
'cdn.includes.files' => '*.css;*.js;*.gif;*.png;*.jpg',
|
364 |
'cdn.theme.enable' => true,
|
365 |
-
'cdn.theme.files' => '*.css;*.js;*.gif;*.png;*.jpg;*.ico',
|
366 |
'cdn.minify.enable' => true,
|
367 |
'cdn.custom.enable' => true,
|
368 |
'cdn.custom.files' => array(
|
@@ -373,27 +362,219 @@ class W3_Config
|
|
373 |
'cdn.import.files' => '*.jpg;*.png;*.gif;*.avi;*.wmv;*.mpg;*.wav;*.mp3;*.txt;*.rtf;*.doc;*.xls;*.rar;*.zip;*.tar;*.gz;*.exe',
|
374 |
'cdn.queue.limit' => 25,
|
375 |
'cdn.force.rewrite' => false,
|
376 |
-
'cdn.
|
|
|
|
|
|
|
|
|
|
|
377 |
'cdn.ftp.host' => '',
|
378 |
'cdn.ftp.user' => '',
|
379 |
'cdn.ftp.pass' => '',
|
380 |
'cdn.ftp.path' => '',
|
381 |
'cdn.ftp.pasv' => false,
|
382 |
-
'cdn.ftp.domain' =>
|
383 |
'cdn.s3.key' => '',
|
384 |
'cdn.s3.secret' => '',
|
385 |
'cdn.s3.bucket' => '',
|
|
|
386 |
'cdn.cf.key' => '',
|
387 |
'cdn.cf.secret' => '',
|
388 |
'cdn.cf.bucket' => '',
|
389 |
'cdn.cf.id' => '',
|
390 |
-
'cdn.cf.cname' =>
|
|
|
|
|
|
|
|
|
|
|
391 |
'cdn.reject.ua' => array(),
|
392 |
'cdn.reject.uri' => array(),
|
393 |
'cdn.reject.files' => array(
|
394 |
'wp-content/uploads/wpcf7_captcha/*'
|
395 |
),
|
396 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
'dbcache.debug' => 'boolean',
|
32 |
'dbcache.engine' => 'string',
|
33 |
'dbcache.file.gc' => 'integer',
|
34 |
+
'dbcache.file.locking' => 'boolean',
|
35 |
'dbcache.memcached.servers' => 'array',
|
36 |
'dbcache.memcached.persistant' => 'boolean',
|
37 |
'dbcache.reject.logged' => 'boolean',
|
40 |
'dbcache.reject.sql' => 'array',
|
41 |
'dbcache.lifetime' => 'integer',
|
42 |
|
43 |
+
'objectcache.enabled' => 'boolean',
|
44 |
+
'objectcache.debug' => 'boolean',
|
45 |
+
'objectcache.engine' => 'string',
|
46 |
+
'objectcache.file.gc' => 'integer',
|
47 |
+
'objectcache.file.locking' => 'boolean',
|
48 |
+
'objectcache.memcached.servers' => 'array',
|
49 |
+
'objectcache.memcached.persistant' => 'boolean',
|
50 |
+
'objectcache.reject.admin' => 'boolean',
|
51 |
+
'objectcache.reject.uri' => 'array',
|
52 |
+
'objectcache.groups.global' => 'array',
|
53 |
+
'objectcache.groups.nonpersistent' => 'array',
|
54 |
+
'objectcache.lifetime' => 'integer',
|
55 |
+
|
56 |
'pgcache.enabled' => 'boolean',
|
57 |
'pgcache.debug' => 'boolean',
|
58 |
'pgcache.engine' => 'string',
|
59 |
'pgcache.file.gc' => 'integer',
|
60 |
+
'pgcache.file.locking' => 'boolean',
|
61 |
'pgcache.memcached.servers' => 'array',
|
62 |
'pgcache.memcached.persistant' => 'boolean',
|
|
|
|
|
63 |
'pgcache.cache.query' => 'boolean',
|
64 |
'pgcache.cache.home' => 'boolean',
|
65 |
'pgcache.cache.feed' => 'boolean',
|
71 |
'pgcache.reject.uri' => 'array',
|
72 |
'pgcache.reject.ua' => 'array',
|
73 |
'pgcache.reject.cookie' => 'array',
|
74 |
+
'pgcache.varnish.enabled' => 'boolean',
|
75 |
+
'pgcache.varnish.servers' => 'array',
|
76 |
+
'pgcache.prime.enabled' => 'boolean',
|
77 |
+
'pgcache.prime.interval' => 'integer',
|
78 |
+
'pgcache.prime.limit' => 'integer',
|
79 |
+
'pgcache.prime.sitemap' => 'string',
|
80 |
|
81 |
'minify.enabled' => 'boolean',
|
82 |
'minify.debug' => 'boolean',
|
83 |
'minify.engine' => 'string',
|
|
|
84 |
'minify.file.gc' => 'integer',
|
85 |
+
'minify.file.locking' => 'boolean',
|
86 |
'minify.memcached.servers' => 'array',
|
87 |
'minify.memcached.persistant' => 'boolean',
|
88 |
'minify.rewrite' => 'boolean',
|
89 |
'minify.fixtime' => 'integer',
|
|
|
90 |
'minify.options' => 'array',
|
91 |
'minify.symlinks' => 'array',
|
|
|
92 |
'minify.lifetime' => 'integer',
|
93 |
'minify.upload' => 'boolean',
|
94 |
'minify.html.enable' => 'boolean',
|
|
|
95 |
'minify.html.reject.feed' => 'boolean',
|
96 |
'minify.html.inline.css' => 'boolean',
|
97 |
'minify.html.inline.js' => 'boolean',
|
98 |
'minify.html.strip.crlf' => 'boolean',
|
99 |
+
'minify.html.comments.ignore' => 'array',
|
100 |
'minify.css.enable' => 'boolean',
|
101 |
'minify.css.combine' => 'boolean',
|
102 |
'minify.css.strip.comments' => 'boolean',
|
104 |
'minify.css.groups' => 'array',
|
105 |
'minify.js.enable' => 'boolean',
|
106 |
'minify.js.combine.header' => 'boolean',
|
107 |
+
'minify.js.combine.body' => 'boolean',
|
108 |
'minify.js.combine.footer' => 'boolean',
|
109 |
'minify.js.strip.comments' => 'boolean',
|
110 |
'minify.js.strip.crlf' => 'boolean',
|
111 |
'minify.js.groups' => 'array',
|
112 |
'minify.reject.ua' => 'array',
|
113 |
'minify.reject.uri' => 'array',
|
114 |
+
'minify.error.notification' => 'string',
|
115 |
+
'minify.error.notification.last' => 'integer',
|
116 |
|
117 |
'cdn.enabled' => 'boolean',
|
118 |
'cdn.debug' => 'boolean',
|
128 |
'cdn.import.files' => 'string',
|
129 |
'cdn.queue.limit' => 'integer',
|
130 |
'cdn.force.rewrite' => 'boolean',
|
131 |
+
'cdn.autoupload.enabled' => 'boolean',
|
132 |
+
'cdn.autoupload.interval' => 'integer',
|
133 |
+
'cdn.mirror.domain' => 'array',
|
134 |
+
'cdn.netdna.apiid' => 'string',
|
135 |
+
'cdn.netdna.apikey' => 'string',
|
136 |
+
'cdn.netdna.domain' => 'array',
|
137 |
'cdn.ftp.host' => 'string',
|
138 |
'cdn.ftp.user' => 'string',
|
139 |
'cdn.ftp.pass' => 'string',
|
140 |
'cdn.ftp.path' => 'string',
|
141 |
'cdn.ftp.pasv' => 'boolean',
|
142 |
+
'cdn.ftp.domain' => 'array',
|
143 |
'cdn.s3.key' => 'string',
|
144 |
'cdn.s3.secret' => 'string',
|
145 |
'cdn.s3.bucket' => 'string',
|
146 |
+
'cdn.s3.cname' => 'array',
|
147 |
'cdn.cf.key' => 'string',
|
148 |
'cdn.cf.secret' => 'string',
|
149 |
'cdn.cf.bucket' => 'string',
|
150 |
'cdn.cf.id' => 'string',
|
151 |
+
'cdn.cf.cname' => 'array',
|
152 |
+
'cdn.rscf.user' => 'string',
|
153 |
+
'cdn.rscf.key' => 'string',
|
154 |
+
'cdn.rscf.container' => 'string',
|
155 |
+
'cdn.rscf.id' => 'string',
|
156 |
+
'cdn.rscf.cname' => 'array',
|
157 |
'cdn.reject.ua' => 'array',
|
158 |
'cdn.reject.uri' => 'array',
|
159 |
'cdn.reject.files' => 'array',
|
160 |
|
161 |
+
'browsercache.enabled' => 'boolean',
|
162 |
+
'browsercache.no404wp' => 'boolean',
|
163 |
+
'browsercache.cssjs.compression' => 'boolean',
|
164 |
+
'browsercache.cssjs.expires' => 'boolean',
|
165 |
+
'browsercache.cssjs.lifetime' => 'integer',
|
166 |
+
'browsercache.cssjs.cache.control' => 'boolean',
|
167 |
+
'browsercache.cssjs.cache.policy' => 'string',
|
168 |
+
'browsercache.cssjs.etag' => 'boolean',
|
169 |
+
'browsercache.cssjs.w3tc' => 'boolean',
|
170 |
+
'browsercache.html.compression' => 'boolean',
|
171 |
+
'browsercache.html.expires' => 'boolean',
|
172 |
+
'browsercache.html.lifetime' => 'integer',
|
173 |
+
'browsercache.html.cache.control' => 'boolean',
|
174 |
+
'browsercache.html.cache.policy' => 'string',
|
175 |
+
'browsercache.html.etag' => 'boolean',
|
176 |
+
'browsercache.html.w3tc' => 'boolean',
|
177 |
+
'browsercache.other.compression' => 'boolean',
|
178 |
+
'browsercache.other.expires' => 'boolean',
|
179 |
+
'browsercache.other.lifetime' => 'integer',
|
180 |
+
'browsercache.other.cache.control' => 'boolean',
|
181 |
+
'browsercache.other.cache.policy' => 'string',
|
182 |
+
'browsercache.other.etag' => 'boolean',
|
183 |
+
'browsercache.other.w3tc' => 'boolean',
|
184 |
+
|
185 |
+
'mobile.enabled' => 'boolean',
|
186 |
+
'mobile.groups' => 'array',
|
187 |
+
|
188 |
'common.support' => 'string',
|
189 |
'common.install' => 'integer',
|
190 |
'common.tweeted' => 'integer',
|
192 |
'widget.latest.enabled' => 'boolean',
|
193 |
'widget.latest.items' => 'integer',
|
194 |
|
|
|
195 |
'notes.wp_content_perms' => 'boolean',
|
196 |
'notes.php_is_old' => 'boolean',
|
197 |
'notes.theme_changed' => 'boolean',
|
206 |
'notes.support_us' => 'boolean',
|
207 |
'notes.no_curl' => 'boolean',
|
208 |
'notes.no_zlib' => 'boolean',
|
209 |
+
'notes.zlib_output_compression' => 'boolean',
|
210 |
+
'notes.no_permalink_rules' => 'boolean',
|
211 |
+
'notes.browsercache_rules_cache' => 'boolean',
|
212 |
+
'notes.browsercache_rules_no404wp' => 'boolean',
|
213 |
+
'notes.minify_error' => 'boolean'
|
214 |
);
|
215 |
|
216 |
var $_defaults = array(
|
218 |
'dbcache.debug' => false,
|
219 |
'dbcache.engine' => 'file',
|
220 |
'dbcache.file.gc' => 3600,
|
221 |
+
'dbcache.file.locking' => false,
|
222 |
'dbcache.memcached.servers' => array(
|
223 |
'127.0.0.1:11211'
|
224 |
),
|
227 |
'dbcache.reject.uri' => array(),
|
228 |
'dbcache.reject.cookie' => array(),
|
229 |
'dbcache.reject.sql' => array(
|
230 |
+
'gdsr_',
|
231 |
+
'wp_rg_'
|
232 |
),
|
233 |
'dbcache.lifetime' => 180,
|
234 |
|
235 |
+
'objectcache.enabled' => false,
|
236 |
+
'objectcache.debug' => false,
|
237 |
+
'objectcache.engine' => 'file',
|
238 |
+
'objectcache.file.gc' => 3600,
|
239 |
+
'objectcache.file.locking' => false,
|
240 |
+
'objectcache.memcached.servers' => array(
|
241 |
+
'127.0.0.1:11211'
|
242 |
+
),
|
243 |
+
'objectcache.memcached.persistant' => true,
|
244 |
+
'objectcache.reject.admin' => true,
|
245 |
+
'objectcache.reject.uri' => array(),
|
246 |
+
'objectcache.groups.global' => array(
|
247 |
+
'users',
|
248 |
+
'userlogins',
|
249 |
+
'usermeta',
|
250 |
+
'site-options',
|
251 |
+
'site-lookup',
|
252 |
+
'blog-lookup',
|
253 |
+
'blog-details',
|
254 |
+
'rss'
|
255 |
+
),
|
256 |
+
'objectcache.groups.nonpersistent' => array(
|
257 |
+
'comment',
|
258 |
+
'counts'
|
259 |
+
),
|
260 |
+
'objectcache.lifetime' => 180,
|
261 |
+
|
262 |
+
'pgcache.enabled' => false,
|
263 |
'pgcache.debug' => false,
|
264 |
'pgcache.engine' => 'file_pgcache',
|
265 |
'pgcache.file.gc' => 3600,
|
266 |
+
'pgcache.file.locking' => false,
|
267 |
'pgcache.memcached.servers' => array(
|
268 |
'127.0.0.1:11211'
|
269 |
),
|
270 |
'pgcache.memcached.persistant' => true,
|
|
|
|
|
271 |
'pgcache.cache.query' => true,
|
272 |
'pgcache.cache.home' => true,
|
273 |
'pgcache.cache.feed' => true,
|
276 |
'pgcache.cache.headers' => array(
|
277 |
'Last-Modified',
|
278 |
'Content-Type',
|
279 |
+
'X-Pingback',
|
280 |
+
'P3P'
|
281 |
),
|
282 |
'pgcache.accept.files' => array(
|
283 |
'wp-comments-popup.php',
|
289 |
'wp-.*\.php',
|
290 |
'index\.php'
|
291 |
),
|
292 |
+
'pgcache.reject.ua' => array(),
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
'pgcache.reject.cookie' => array(),
|
294 |
+
'pgcache.varnish.enabled' => false,
|
295 |
+
'pgcache.varnish.servers' => array(),
|
296 |
+
'pgcache.prime.enabled' => false,
|
297 |
+
'pgcache.prime.interval' => 900,
|
298 |
+
'pgcache.prime.limit' => 10,
|
299 |
+
'pgcache.prime.sitemap' => '',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300 |
|
301 |
+
'minify.enabled' => false,
|
302 |
'minify.debug' => false,
|
303 |
'minify.engine' => 'file',
|
|
|
304 |
'minify.file.gc' => 86400,
|
305 |
+
'minify.file.locking' => false,
|
306 |
'minify.memcached.servers' => array(
|
307 |
'127.0.0.1:11211'
|
308 |
),
|
309 |
'minify.memcached.persistant' => true,
|
310 |
'minify.rewrite' => true,
|
311 |
'minify.fixtime' => 0,
|
|
|
312 |
'minify.options' => array(
|
313 |
+
'bubbleCssImports' => true,
|
314 |
'minApp' => array(
|
315 |
'groupsOnly' => false,
|
316 |
'maxFiles' => 20
|
317 |
)
|
318 |
),
|
319 |
'minify.symlinks' => array(),
|
|
|
320 |
'minify.lifetime' => 86400,
|
321 |
'minify.upload' => true,
|
322 |
'minify.html.enable' => false,
|
|
|
323 |
'minify.html.reject.feed' => false,
|
324 |
'minify.html.inline.css' => false,
|
325 |
'minify.html.inline.js' => false,
|
326 |
'minify.html.strip.crlf' => false,
|
327 |
+
'minify.html.comments.ignore' => array(
|
328 |
+
'google_ad_section_',
|
329 |
+
'RSPEAK_'
|
330 |
+
),
|
331 |
'minify.css.enable' => true,
|
332 |
'minify.css.combine' => false,
|
333 |
'minify.css.strip.comments' => false,
|
335 |
'minify.css.groups' => array(),
|
336 |
'minify.js.enable' => true,
|
337 |
'minify.js.combine.header' => false,
|
338 |
+
'minify.js.combine.body' => false,
|
339 |
'minify.js.combine.footer' => false,
|
340 |
'minify.js.strip.comments' => false,
|
341 |
'minify.js.strip.crlf' => false,
|
342 |
'minify.js.groups' => array(),
|
343 |
'minify.reject.ua' => array(),
|
344 |
'minify.reject.uri' => array(),
|
345 |
+
'minify.error.notification' => '',
|
346 |
+
'minify.error.notification.last' => 0,
|
347 |
|
348 |
'cdn.enabled' => false,
|
349 |
'cdn.debug' => false,
|
351 |
'cdn.includes.enable' => true,
|
352 |
'cdn.includes.files' => '*.css;*.js;*.gif;*.png;*.jpg',
|
353 |
'cdn.theme.enable' => true,
|
354 |
+
'cdn.theme.files' => '*.css;*.js;*.gif;*.png;*.jpg;*.ico;*.ttf;*.otf,*.woff',
|
355 |
'cdn.minify.enable' => true,
|
356 |
'cdn.custom.enable' => true,
|
357 |
'cdn.custom.files' => array(
|
362 |
'cdn.import.files' => '*.jpg;*.png;*.gif;*.avi;*.wmv;*.mpg;*.wav;*.mp3;*.txt;*.rtf;*.doc;*.xls;*.rar;*.zip;*.tar;*.gz;*.exe',
|
363 |
'cdn.queue.limit' => 25,
|
364 |
'cdn.force.rewrite' => false,
|
365 |
+
'cdn.autoupload.enabled' => false,
|
366 |
+
'cdn.autoupload.interval' => 3600,
|
367 |
+
'cdn.mirror.domain' => array(),
|
368 |
+
'cdn.netdna.apiid' => '',
|
369 |
+
'cdn.netdna.apikey' => '',
|
370 |
+
'cdn.netdna.domain' => array(),
|
371 |
'cdn.ftp.host' => '',
|
372 |
'cdn.ftp.user' => '',
|
373 |
'cdn.ftp.pass' => '',
|
374 |
'cdn.ftp.path' => '',
|
375 |
'cdn.ftp.pasv' => false,
|
376 |
+
'cdn.ftp.domain' => array(),
|
377 |
'cdn.s3.key' => '',
|
378 |
'cdn.s3.secret' => '',
|
379 |
'cdn.s3.bucket' => '',
|
380 |
+
'cdn.s3.cname' => array(),
|
381 |
'cdn.cf.key' => '',
|
382 |
'cdn.cf.secret' => '',
|
383 |
'cdn.cf.bucket' => '',
|
384 |
'cdn.cf.id' => '',
|
385 |
+
'cdn.cf.cname' => array(),
|
386 |
+
'cdn.rscf.user' => '',
|
387 |
+
'cdn.rscf.key' => '',
|
388 |
+
'cdn.rscf.container' => '',
|
389 |
+
'cdn.rscf.id' => '',
|
390 |
+
'cdn.rscf.cname' => array(),
|
391 |
'cdn.reject.ua' => array(),
|
392 |
'cdn.reject.uri' => array(),
|
393 |
'cdn.reject.files' => array(
|
394 |
'wp-content/uploads/wpcf7_captcha/*'
|
395 |
),
|
396 |
|
397 |
+
'browsercache.enabled' => true,
|
398 |
+
'browsercache.no404wp' => false,
|
399 |
+
'browsercache.cssjs.compression' => true,
|
400 |
+
'browsercache.cssjs.expires' => false,
|
401 |
+
'browsercache.cssjs.lifetime' => 3600,
|
402 |
+
'browsercache.cssjs.cache.control' => false,
|
403 |
+
'browsercache.cssjs.cache.policy' => 'cache_validation',
|
404 |
+
'browsercache.cssjs.etag' => false,
|
405 |
+
'browsercache.cssjs.w3tc' => true,
|
406 |
+
'browsercache.html.compression' => true,
|
407 |
+
'browsercache.html.expires' => false,
|
408 |
+
'browsercache.html.lifetime' => 3600,
|
409 |
+
'browsercache.html.cache.control' => false,
|
410 |
+
'browsercache.html.cache.policy' => 'cache_validation',
|
411 |
+
'browsercache.html.etag' => false,
|
412 |
+
'browsercache.html.w3tc' => true,
|
413 |
+
'browsercache.other.compression' => true,
|
414 |
+
'browsercache.other.expires' => false,
|
415 |
+
'browsercache.other.lifetime' => 31536000,
|
416 |
+
'browsercache.other.cache.control' => false,
|
417 |
+
'browsercache.other.cache.policy' => 'cache_validation',
|
418 |
+
'browsercache.other.etag' => false,
|
419 |
+
'browsercache.other.w3tc' => true,
|
420 |
+
|
421 |
+
'mobile.enabled' => true,
|
422 |
+
'mobile.groups' => array(
|
423 |
+
'high' => array(
|
424 |
+
'theme' => '',
|
425 |
+
'enabled' => true,
|
426 |
+
'redirect' => '',
|
427 |
+
'agents' => array(
|
428 |
+
'acer\ s100',
|
429 |
+
'android',
|
430 |
+
'archos5',
|
431 |
+
'blackberry9500',
|
432 |
+
'blackberry9530',
|
433 |
+
'blackberry9550',
|
434 |
+
'cupcake',
|
435 |
+
'docomo\ ht\-03a',
|
436 |
+
'dream',
|
437 |
+
'htc\ hero',
|
438 |
+
'htc\ magic',
|
439 |
+
'htc_dream',
|
440 |
+
'htc_magic',
|
441 |
+
'incognito',
|
442 |
+
'ipad',
|
443 |
+
'iphone',
|
444 |
+
'ipod',
|
445 |
+
'lg\-gw620',
|
446 |
+
'liquid\ build',
|
447 |
+
'maemo',
|
448 |
+
'mot\-mb200',
|
449 |
+
'mot\-mb300',
|
450 |
+
'nexus\ one',
|
451 |
+
'opera\ mini',
|
452 |
+
'samsung\-s8000',
|
453 |
+
'series60.*webkit',
|
454 |
+
'series60/5\.0',
|
455 |
+
'sonyericssone10',
|
456 |
+
'sonyericssonu20',
|
457 |
+
'sonyericssonx10',
|
458 |
+
't\-mobile\ mytouch\ 3g',
|
459 |
+
't\-mobile\ opal',
|
460 |
+
'tattoo',
|
461 |
+
'webmate',
|
462 |
+
'webos'
|
463 |
+
)
|
464 |
+
),
|
465 |
+
'low' => array(
|
466 |
+
'theme' => '',
|
467 |
+
'enabled' => true,
|
468 |
+
'redirect' => '',
|
469 |
+
'agents' => array(
|
470 |
+
'2\.0\ mmp',
|
471 |
+
'240x320',
|
472 |
+
'alcatel',
|
473 |
+
'amoi',
|
474 |
+
'asus',
|
475 |
+
'au\-mic',
|
476 |
+
'audiovox',
|
477 |
+
'avantgo',
|
478 |
+
'benq',
|
479 |
+
'bird',
|
480 |
+
'blackberry',
|
481 |
+
'blazer',
|
482 |
+
'cdm',
|
483 |
+
'cellphone',
|
484 |
+
'danger',
|
485 |
+
'ddipocket',
|
486 |
+
'docomo',
|
487 |
+
'dopod',
|
488 |
+
'elaine/3\.0',
|
489 |
+
'ericsson',
|
490 |
+
'eudoraweb',
|
491 |
+
'fly',
|
492 |
+
'haier',
|
493 |
+
'hiptop',
|
494 |
+
'hp\.ipaq',
|
495 |
+
'htc',
|
496 |
+
'huawei',
|
497 |
+
'i\-mobile',
|
498 |
+
'iemobile',
|
499 |
+
'j\-phone',
|
500 |
+
'kddi',
|
501 |
+
'konka',
|
502 |
+
'kwc',
|
503 |
+
'kyocera/wx310k',
|
504 |
+
'lenovo',
|
505 |
+
'lg',
|
506 |
+
'lg/u990',
|
507 |
+
'lge\ vx',
|
508 |
+
'midp',
|
509 |
+
'midp\-2\.0',
|
510 |
+
'mmef20',
|
511 |
+
'mmp',
|
512 |
+
'mobilephone',
|
513 |
+
'mot\-v',
|
514 |
+
'motorola',
|
515 |
+
'netfront',
|
516 |
+
'newgen',
|
517 |
+
'newt',
|
518 |
+
'nintendo\ ds',
|
519 |
+
'nintendo\ wii',
|
520 |
+
'nitro',
|
521 |
+
'nokia',
|
522 |
+
'novarra',
|
523 |
+
'o2',
|
524 |
+
'openweb',
|
525 |
+
'opera\ mobi',
|
526 |
+
'opera\.mobi',
|
527 |
+
'palm',
|
528 |
+
'panasonic',
|
529 |
+
'pantech',
|
530 |
+
'pdxgw',
|
531 |
+
'pg',
|
532 |
+
'philips',
|
533 |
+
'phone',
|
534 |
+
'playstation\ portable',
|
535 |
+
'portalmmm',
|
536 |
+
'ppc',
|
537 |
+
'proxinet',
|
538 |
+
'psp',
|
539 |
+
'pt',
|
540 |
+
'qtek',
|
541 |
+
'sagem',
|
542 |
+
'samsung',
|
543 |
+
'sanyo',
|
544 |
+
'sch',
|
545 |
+
'sec',
|
546 |
+
'sendo',
|
547 |
+
'sgh',
|
548 |
+
'sharp',
|
549 |
+
'sharp\-tq\-gx10',
|
550 |
+
'sie',
|
551 |
+
'small',
|
552 |
+
'smartphone',
|
553 |
+
'softbank',
|
554 |
+
'sonyericsson',
|
555 |
+
'sph',
|
556 |
+
'symbian',
|
557 |
+
'symbian\ os',
|
558 |
+
'symbianos',
|
559 |
+
'toshiba',
|
560 |
+
'treo',
|
561 |
+
'ts21i\-10',
|
562 |
+
'up\.browser',
|
563 |
+
'up\.link',
|
564 |
+
'uts',
|
565 |
+
'vertu',
|
566 |
+
'vodafone',
|
567 |
+
'wap',
|
568 |
+
'willcome',
|
569 |
+
'windows\ ce',
|
570 |
+
'windows\.ce',
|
571 |
+
|