WP Super Cache - Version 1.8

Version Description

Download this release

Release Info

Developer kraftbj
Plugin Icon 128x128 WP Super Cache
Version 1.8
Comparing to
See all releases

Code changes from version 1.7.9 to 1.8

.eslintignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ # Not loaded by default eslint, but we use tools/js-tools/load-eslint-ignore.js in .eslintrc to pull it in.
2
+
3
+ # @todo: Files below ignored as part of Automattic/jetpack/pull/25449
4
+ # They can be removed here as lint errors are addressed.
5
+ /inc/delete-cache-button.js
6
+ /inc/preload-notification.js
CHANGELOG.md ADDED
@@ -0,0 +1,605 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Changelog
2
+
3
+ ### This is a list detailing changes for all Super Cache releases.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.8] - 2022-08-16
9
+ ### Added
10
+ - Added WP Super cache to the repo.
11
+ - PHP 8 Support: Ensure the expected value for the $auto_release in sem_get is used.
12
+
13
+ ### Fixed
14
+ - Fixed the display issue with the survey link
15
+ - Updated readme.txt, changelog.md and the composer slug.
16
+
17
+ ## 1.7.9 - 2022-06-07
18
+
19
+ - Fix nonces used by "Delete Cache" button and remove JS from it on the frontend admin bar.
20
+ - Define the constant WPSCDISABLEDELETEBUTTON to disable the "Delete Cache" button in the admin bar.
21
+
22
+ ## 1.7.8 - 2022-06-07
23
+
24
+ * Change the admin bar "Delete Cache" button into an AJAX link #808 #810
25
+ * Fix link to log file in custom WordPress structure #807
26
+ * Add an auto updating preload message. #811 #816
27
+ * Use REQUEST_URI instead of GET to check GET status. #813
28
+ * Add commonWP and disclaimer to "recommended links" #812
29
+ * Hide warnings in case files deleted #814
30
+ * Remove the GET param when removing tracking params #818
31
+ * Check that post is private to unpublish it and clear cache 2249e58e6f585d936c0993e9d18e6382fa976a66
32
+ * Check $gc_flag was opened before closing it. #819
33
+
34
+ ## 1.7.7 - 2022-02-01
35
+
36
+ * Fixes to settings page
37
+
38
+ ## 1.7.6 - 2022-01-31
39
+
40
+ * Fix for PHP < 7.3
41
+
42
+ ## 1.7.5 - 2022-01-31
43
+
44
+ * Move the text of the settings pages into separate files. #791
45
+ * Allow editors to delete all the cache files. #793
46
+ * Only clear the cache from the current site, not the whole network (admin bar link). #794
47
+ * Check $cache_path is somewhat sane. #797
48
+ * realpath returns false if directory not found. #798
49
+ * Don't reject bots for new installs. They "preload pages" too. #800
50
+
51
+ ## 1.7.4 - 2021-07-08
52
+
53
+ * Make config file path configurable, props @sebastianpopp #755
54
+ * Stop a very rare/difficult attack when updating wp-config.php, props @guyasyou for reporting. #780
55
+ * Add textbox to add tracking parameters to ignore when caching. props @markfinst, @radex02 #777
56
+ * Add "Rejected Cookies" setting to the advanced settings page. #774
57
+
58
+ ## 1.7.3 - 2021-04-28
59
+
60
+ * Sanitize the settings that are written to the config file #763
61
+ * Fix the display of "direct cached" example urls in some circumstance. #766
62
+
63
+ ## 1.7.2 - 2021-03-15
64
+
65
+ * Fixed authenticated RCE in the settings page. Props @m0ze
66
+ * Small bug fixes.
67
+
68
+ ## 1.7.1 - 2020-01-30
69
+
70
+ * Minor fixes to docs. #709 #645
71
+ * Fixed typo on cache contents page. #719
72
+ * Fixed array index warning. #724
73
+ * Updated yellow box links. #725
74
+
75
+ ## 1.7.0 - 2020-01-27
76
+
77
+ * Added "wpsc_cdn_urls" filter to modify the URLs used to rewrite URLs. #697
78
+ * Fixed CDN functionality for logged in users. #698
79
+ * Disable settings that don't work in Expert mode. #699
80
+ * Don't enable mobile support by default, but it can still be enabled manually. #700
81
+ * Change "admin bar" to "Toolbar". Props @garrett-eclipse. #701
82
+ * Show settings enabled by "easy" settings page. #703
83
+
84
+ ## 1.6.9 - 2019-07-25
85
+
86
+ * Improve the variables and messaging used by advanced-cache.php code. #687
87
+ * Add a warning message to the debug log viewer. #688
88
+ * Disable raw viewing of the debug log. #691
89
+ * Clean up the debug log. #692 #694
90
+ * Added wpsc_update_check() in 9659af156344a77ae247dc582d52053d95c79b93.
91
+
92
+ ## 1.6.8 - 2019-06-27
93
+
94
+ * Added new constants, WPSC_SERVE_DISABLED (disable serving of cached files) and WPSC_SUPERCACHE_ONLY (only serve supercache cache files). #682 and #672
95
+ * Hide get_post() warning on some sites. #684
96
+ * Check if WPCACHEHOME is set correctly before maybe updating it. #683
97
+ * Remove object cache support as it never worked properly. #681
98
+ * Add "logged in users" to the "do not cache for users" setting and rename that setting to "Cache Restrictions" #657
99
+
100
+ ## 1.6.7 - 2019-05-30
101
+
102
+ * wp_cache_setting() can now save boolean values since many of the settings are bools. #676
103
+ * Check if $super_cache_enabled is true in a less strict way because it might be '1' rather than true. #677
104
+
105
+ ## 1.6.6 - 2019-05-28
106
+
107
+ * Fix problems with saving settings. Returns false ONLY when there's an issue with the config file, not when the setting isn't changed. Change other code to cope with that, including updating WPCACHEHOME (#670)
108
+ * When saving settings rename the temporary config file correctly, and delete wp-admin/.php if it exists. (#673)
109
+ * Fix adding WPCACHEHOME to wp-config.php when advanced-cache.php is not found and wp-config.php is RO. (#674)
110
+
111
+ ## 1.6.5 - 2019-05-27
112
+
113
+ * Check advanced-cache.php was created by the plugin before modifying/deleting it. (#666)
114
+ * When saving settings, save blank lines. Fixes problems with WP_CACHE and WPCACHEHOME in wp-config.php. Related to #652. (#667)
115
+ * Update outdated code and use is_multisite() (#600)
116
+ * Fix the delete cache button in the Toolbar. (#603)
117
+ * Code cleanup in #602
118
+ * Use get_post_status instead of post_status (#623)
119
+ * Fixes button - Update Direct Pages (#622)
120
+ * Removes apache_response_headers and uses only headers_list (#618)
121
+ * Function is_site_admin has been deprecated (#611)
122
+ * Fixes action urls in wp_cache_manager (#610)
123
+ * Remove the link to the HibbsLupusTrust tweet. (#635)
124
+ * Don't load wp-cache-config.php if it's already loaded (#605)
125
+ * PHPCS fixes and optimization for plugins/domain-mapping.php (#615)
126
+ * Introduces PHP_VERSION_ID for faster checking (#604)
127
+ * Fixes regex and optimizes ossdl-cdn.php (#596)
128
+ * Only update new settings and use a temporary file to avoid corruption. (#652)
129
+ * Serve cached files to rejected user agents, don't cache them. (#658)
130
+ * Combine multiple headers with the same name (#641)
131
+ * Open ‘Delete Cache’ link in same window (#656)
132
+ * Promote the Jetpack Site Accelerator on the CDN page. (#636)
133
+
134
+ ## 1.6.4 - 2018-08-22
135
+
136
+ * Changes between [1.6.3 and 1.6.4](https://github.com/Automattic/wp-super-cache/compare/1.6.3...1.6.4)
137
+ * Fixes for WP-CLI (#587) (#592)
138
+ * Bumped the minimum WordPress version to 3.1 to use functions introduced then. (#591)
139
+ * Fixes to wpsc_post_transition to avoid a fatal error using get_sample_permalink. (#595)
140
+ * Fixed the Toolbar "Delete Cache" link. (#589)
141
+ * Fixed the headings used in the settings page. (#597)
142
+
143
+ ## 1.6.3 - 2018-08-10
144
+
145
+ * Changes between [1.6.2 and 1.6.3](https://github.com/Automattic/wp-super-cache/compare/1.6.2...1.6.3)
146
+ * Added cookie helper functions (#580)
147
+ * Added plugin helper functions (#574)
148
+ * Added actions to modify cookie and plugin lists. (#582)
149
+ * Really disable garbage collection when timeout = 0 (#571)
150
+ * Added warnings about DISABLE_WP_CRON (#575)
151
+ * Don't clean expired cache files after preload if garbage collection is disabled (#572)
152
+ * On preload, if deleting a post don't delete the sub directories if it's the homepage. (#573)
153
+ * Fix generation of semaphores when using WP CLI (#576)
154
+ * Fix deleting from the Toolbar (#578)
155
+ * Avoid a strpos() warning. (#579)
156
+ * Improve deleting of cache in edit/delete/publish actions (#577)
157
+ * Fixes to headers code (#496)
158
+
159
+ ## 1.6.2 - 2018-06-19
160
+
161
+ * Fixed serving expired supercache files (#562)
162
+ * Write directly to the config file to avoid permission problems with wp-content. (#563)
163
+ * Correctly set the .htaccess rules on the main site of a multisite. (#557)
164
+ * Check if set_transient() exists before using it. (#565)
165
+ * Removed searchengine.php example plugin as it sets a cookie to track users. Still available [here](https://github.com/Automattic/wp-super-cache/blob/4cda5c0f2218e40e118232b5bf22d227fb3206b7/plugins/searchengine.php). (#567)
166
+ * For advanced users only. Change the vary and cache control headers. See https://github.com/Automattic/wp-super-cache/pull/555 (#555)
167
+
168
+ ## 1.6.1 - 2018-05-15
169
+
170
+ * Fix the name of the WP Crontrol plugin. (#549)
171
+ * Handle errors during deactivation/uninstall by email rather than exiting. (#551)
172
+ * Add a notice when settings can't be updated. (#552 and #553)
173
+
174
+ ## 1.6.0 - 2018-04-30
175
+
176
+ * Fix issues in multisite plugin (#501)
177
+ * Fixes wp-cli plugin deactivate/activate (#499)
178
+ * Cleanup - change quotes. (#495)
179
+ * $htaccess_path defines the path to the global .htacess file. (#507)
180
+ * Fix 'cannot redeclare gzip_accepted()' (#511)
181
+ * Correct the renaming of tmp_wpcache_filename (removed unnecessary slash in path) which caused renaming to fail. (#516)
182
+ * Add check for Jetpack mobile theme cookie (#515)
183
+ * Optimize wp_cache_phase2 and create wpsc_register_post_hooks (#508)
184
+ * WPCACHEHOME has a trailing slash (#513)
185
+ * Cleanup cache enable/disable and update_mod_rewrite_rules (#500)
186
+ * Post Update now clears category cache (#519)
187
+ * Various fixes for saving the debug page form (#542)
188
+ * Expert-caching and empty parameters, like ?amp, should not serve cached page (#533)
189
+ * Tiny Yslow description fix (#527)
190
+ * Add ipad to mobile list (#525)
191
+ * Hide opcache_invalidate() warnings since it's disabled some places. (#543)
192
+ * Check that HTTP_REFERER exists before checking it. (#544)
193
+ * Replace Cron View" with WP Crontrol because it's still updated. (#546)
194
+ * adding hook (wp_cache_cleared) for full cache purges (#537)
195
+
196
+ ## 1.5.9 - 2017-12-15
197
+
198
+ * Fixed fatal error if the debug log was deleted while debugging was enabled and a visitor came to the site.
199
+ * Fixed the dynamic caching test plugin because of PHP7 changes. Dynamic cache mode must be enabled now.
200
+ * Lots of WordPress coding style formatting fixes to the code.
201
+ * All changes: https://github.com/Automattic/wp-super-cache/compare/1.5.8...1.5.9
202
+
203
+ ## 1.5.8 - 2017-10-31
204
+
205
+ * PHP 7 fixes. (#429)
206
+ * Fix debug comments checkbox. (#433)
207
+ * Only register uninstall function in admin pages to save queries. (#430)
208
+ * Check that wp-cache-phase1.php is loaded before saving settings page. (#428)
209
+ * If a url has a "?" in it then don't delete the associated cache. It'll delete the whole cache after stripping out ?... part. (#427 & #420)
210
+ * Allow static functions in classes to be used in cacheactions. (#425)
211
+ * Don't make AJAX requests anonymous. (#423)
212
+ * Fixed link to chmod explanation. (#421)
213
+ * Add more escaping to the CDN settings page. (#416)
214
+ * Use SERVER_PROTOCOL to determine http protocol. (#412 & #413)
215
+ * If preload stalls only send one email per day, but do display an admin notice. (#432)
216
+ * Fixed more PHP warnings in #438 and #437
217
+ * Hide mod_rewrite warnings for Nginx users. #434
218
+
219
+ ## 1.5.7.1 - 2017-10-11
220
+
221
+ * If the HTTP HOST is empty then don't use it in strpos to avoid a PHP warning. (#408)
222
+ * Don't preload posts with permalinks that contain rejected strings. (#407)
223
+ * Generate a list of archive feeds that can be deleted when the site is updated. Also fixes corrupted config file issue and fatal error with older versions of WordPress. (#403)
224
+
225
+ ## 1.5.7 - 2017-10-06
226
+
227
+ * Fix fatal error in plugins/searchengine.php (#398)
228
+
229
+ ## 1.5.6 - 2017-10-04
230
+
231
+ * REST API: Added /plugins endpoint to handle the plugins settings page. (#382)
232
+ * Minor changes to indentaion and spaces to tabs conversion (#371) (#395)
233
+ * Don't set $wp_super_cache_comments here as it's not saved. (#379)
234
+ * realpath() only works on directories. The cache_file wasn't set correctly. (#377)
235
+ * Fix problem deleting cache from Toolbar because of realpath() (#381)
236
+ * Use trigger_error() instead of echoing to the screen if a config file isn't writeable. (#394)
237
+ * Added the "wpsc_enable_wp_config_edit" filter to disable editing the wp-config.php (#392)
238
+ * Fix some PHP notices when comments are edited/published/maintained. (#386)
239
+ * Minor changes to description on plugins page. (#393)
240
+
241
+ ## 1.5.5 - 2017-08-29
242
+
243
+ * Catch fatal errors so they're not cached, improve code that catches unknown page types. (#367)
244
+ * Fix caching on older WP installs, and if the plugin is inactive on a blog, but still caching, give feeds a short TTL to ensure they're fresh. (#366)
245
+ * When preloading don't delete sub-directories, or child pages, when caching pages. (#363)
246
+ * Avoid PHP warnings from the REST API for settings that are not yet defined. (#361)
247
+ * Added missing settings to the config file. (#360)
248
+
249
+ ## 1.5.4 - 2017-08-23
250
+
251
+ * Fix messages related to creating advanced-cache.php (#355, #354)
252
+ * Deleting the plugin doesn't need to delete the cache directory as it's already done on deactivation. (#323)
253
+ * Disable Jetpack mobile detection if Jetpack Beta is detected. (#298)
254
+ * Add more checks on directories to make sure they exist before deleting them. (#324)
255
+ * Add siteurl setting to CDN page for users who have WordPress in it's own directory. (#332)
256
+ * Don't enable and then not save debug comments when toggling logging. (#334)
257
+ * Show plugin activity html comments to users who disable caching for logged in users. (#335)
258
+ * Better notifications on Preload page, and redo sql to fetch posts. Added "wpsc_preload_post_types_args" filter on post visibility, and wpsc_preload_post_types filter on post types used. (#336)
259
+ * Use a cached feed if it is newer than the last time a post was updated. (#337)
260
+ * Better define a sitemap (#340) but when the content type is unknown add more checks to find out what it is. (#346)
261
+ * Save cache location correctly on the advanced settings page. (#345)
262
+ * Make sure the debug log exists before toggling it on/off to ensure the http auth code is added to it.
263
+ * Return the correct cache type to the REST API. Ignore supercache enabled status. (#352)
264
+ * Fix cache contents in REST API showing double count of supercache files. (#353)
265
+ * Move the nonce in the CDN page back into a function. (#346)
266
+ * Use realpath to compare directories when loading the sample config file to account for symlinked directories. (#342)
267
+ * Other minor changes to html or typos
268
+ (Numbers are [pull requests](https://github.com/Automattic/wp-super-cache/pulls) on Github.)
269
+
270
+ ## 1.5.3 - 2017-07-26
271
+
272
+ * Fix a critical bug that caused unlink to be run on null while deleting the plugin.
273
+
274
+ ## 1.5.2 - 2017-07-26
275
+
276
+ * Add a trailing slash to home path. Fixes problems with finding the .htaccess file.
277
+ * Delete WPCACHEHOME and WP_CACHE from wp-config.php when plugin deactivated.
278
+ * Check that WPCACHEHOME is the right path on each load of the settings page.
279
+ * Load the REST API code without using WPCACHEHOME.
280
+ * Fixed mobile browser caching when using WP-Cache caching.
281
+ * Fixed directory checks on Windows machines.
282
+ * Reverted CDN changes in 1.5.0 as they caused problems in older "WordPress in a separate directory" installs.
283
+ * Added note to CDN page when site url != home url. Site owners can use a filter to adjust the URL used.
284
+ * Stop preload quicker when requested while preloading taxonomies.
285
+ * Added more information for when updating the .htaccess file fails.
286
+ * "Served by" header is now optional. Enable it by setting $wpsc_served_header to true in the config file.
287
+
288
+ ## 1.5.1 - 2017-07-20
289
+
290
+ * Don't use anonymous functions in REST API
291
+ * Check that REST API Controller is available before loading the REST API.
292
+ * Don't use multibyte string functions because some sites don't have it enabled.
293
+
294
+ ## 1.5.0 - 2017-07-19
295
+
296
+ * REST API settings endpoints.
297
+ * Simplified settings page.
298
+ * WP-Cache files reorganised.
299
+ * Caching of more http headers.
300
+ * Lots of bug fixes.
301
+
302
+ ## 1.4.9 - 2017-06-01
303
+
304
+ * Fixed bug when not running sem_remove after sem_release. See https://github.com/Automattic/wp-super-cache/issues/85
305
+ * Fixed a PHP error impacting PHP 7.1.
306
+ * Fixed a bug where we cached PUT and DELETE requests. We're treating them like POST requests now.
307
+ * Delete supercache cache files, even when supercache is disabled, because mod_rewrite rules might still be active.
308
+ * Updated the settings page, moving things around. [#173](https://github.com/Automattic/wp-super-cache/pull/173)
309
+ * Make file locking less attractive on the settings page and fixed the WPSC_DISABLE_LOCKING constant so it really disables file locking even if the user has enabled it already.
310
+ * Added a WPSC_REMOVE_SEMAPHORE constant that must be defined if sem_remove() is to be used as it may cause problems. [#174](https://github.com/Automattic/wp-super-cache/pull/174)
311
+ * Added a "wpsc_delete_related_pages_on_edit" filter that on returning 0 will disable deletion of pages outside of page being edited. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
312
+ * Fixed plugin deleting all cached pages when a site had a static homepage. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
313
+ * Make sure $cache_path has a trailing slash [#177](https://github.com/Automattic/wp-super-cache/pull/77)
314
+ * Remove flush() [#127](https://github.com/Automattic/wp-super-cache/pull/127) but also check if headers are empty and flush and get headers again. [#179](https://github.com/Automattic/wp-super-cache/pull/179)
315
+ * Add fix for customizer [#161](https://github.com/Automattic/wp-super-cache/pull/161) and don't cache PUT AND DELETE requests [#178](https://github.com/Automattic/wp-super-cache/pull/178)
316
+ * Check for superglobals before using them. [#131](https://github.com/Automattic/wp-super-cache/pull/131)
317
+
318
+ ## 1.4.8 - 2017-01-11
319
+
320
+ * Removed malware URL in a code comment. (harmless to operation of plugin but gets flagged by A/V software)
321
+ * Updated translation file.
322
+
323
+ ## 1.4.7 - 2016-12-09
324
+
325
+ * Update the settings page for WordPress 4.4. layout changes.
326
+
327
+ ## 1.4.6 - 2015-10-09
328
+
329
+ * Generate the file cache/.htaccess even when one exists so gzip rules are created and gzipped pages are served correctly. Props Tigertech. https://wordpress.org/support/topic/all-website-pages-downloading-gz-file-after-latest-update?replies=36#post-7494087
330
+
331
+ ## 1.4.5 - 2015-09-25
332
+
333
+ * Enhancement: Only preload public post types. Props webaware.
334
+ * Added an uninstall function that deletes the config file. Deactivate function doesn't delete it any more.
335
+ * Possible to deactivate the plugin without visiting the settings page now.
336
+ * Fixed the cache rebuild system. Rebuild files now survive longer than the request that generate them.
337
+ * Minor optimisations: prune_super_cache() exits immediately if the file doesn't exist. The output of wp_cache_get_cookies_values() is now cached.
338
+ * Added PHP pid to the debug log to aid debugging.
339
+ * Various small bug fixes.
340
+ * Fixed reset of expiry time and GC settings when updating advanced settings.
341
+ * Removed CacheMeta class to avoid APC errors. It's not used any more.
342
+ * Fixed reset of advanced settings when using "easy" settings page.
343
+ * Fixed XSS in settings page.
344
+ * Hide cache files when servers display directory indexes.
345
+ * Prevent PHP object injection through use of serialize().
346
+
347
+ ## 1.4.4 - 2015-05-15
348
+
349
+ * Fixed fatal error in output handler if GET parameters present in query. Props webaware.
350
+ * Fixed debug log. It wasn't logging the right message.
351
+
352
+ ## 1.4.3 - 2015-04-03
353
+
354
+ * Security release fixing an XSS bug in the settings page. Props Marc Montpas from Sucuri.
355
+ * Added wp_debug_log(). Props Jen Heilemann.
356
+ * Minor fixes.
357
+
358
+ ## 1.4.2 - 2014-12-18
359
+
360
+ * Fixed "acceptable file list".
361
+ * Fixed "Don't cache GET requests" feature.
362
+ * Maybe fixed "304 not modified" problem for some users.
363
+ * Fixed some PHP warnings.
364
+
365
+ ## 1.4.1 - 2014-08-07
366
+
367
+ * Fixed XSS in settings page. Props Simon Waters, Surevine Limited.
368
+ * Fix to object cache so entries may now be deleted when posts updated. (object cache still experimental)
369
+ * Documentation updates and cleanup of settings page.
370
+
371
+ ## 1.4 - 2014-04-17
372
+
373
+ * Replace legacy mfunc/mnclude/dynamic-cached-content functionality with a "wpsc_cachedata" cacheaction filter.
374
+ * Added dynamic-cache-test.php plugin example wpsc_cachedata filter plugin.
375
+ * Delete post, tag and category cache when a post changes from draft to publish or vice versa. Props @Biranit.
376
+ * Update advanced-cache.php and wp-config.php if wp-cache-phase1.php doesn't load, usually happening after migrating to a new hosting service.
377
+ * Misc bugfixes.
378
+
379
+ ## 1.3.2 - 2013-08-19
380
+
381
+ * Any mfunc/mclude/dynamic-cached-content tags in comments are now removed.
382
+ * Dynamic cached content feature disabled by default and must be enabled on the Advanced Settings page.
383
+ * Support for the mobile theme in Jetpack via helper plugin on script's Plugins tab.
384
+
385
+ ## 1.3.1 - 2013-04-12
386
+
387
+ * Minor updates to documentation
388
+ * Fixed XSS in settings page.
389
+
390
+ ## 1.3 - 2013-04-11
391
+
392
+ * mfunc tags could be executed in comments. Fixed.
393
+ * More support for sites that use the LOGGED_IN_COOKIE constant and custom cookies.
394
+
395
+ ## 1.2 - 2012-12-13
396
+
397
+ * Garbage collection of old cache files is significantly improved. I added a scheduled job that keeps an eye on things and restarts the job if necessary. Also, if you enable caching from the Easy page garbage collection will be enabled too.
398
+ * Editors can delete single cached files from the Toolbar now.
399
+ * Fixed the cached page counter on the settings page.
400
+ * Some sites that updated to 1.0 experienced too much garbage collection. There are still stragglers out there who haven't upgraded but that's fixed now!
401
+ * Supercached mobile files are now used as there was a tiny little typo that needed fixing.
402
+ * If your site is in a directory and you saw problems updating a page then that should be fixed now.
403
+ * The deactivate hook has been changed so your configuration isn.t hosed when you upgrade. Unfortunately this will only happen after you do this upgrade.
404
+ * Some sites use custom cookies with the LOGGED_IN_COOKIE constant. Added support for that.
405
+ * Added support for WPTouch Pro, but it appears to be flaky still. Anyone have time to work on that? I don.t.
406
+ * Some sites had problems with scheduled posts. For some reason the plugin thought the post was in draft mode and then because it only checked the same post once, when the post magically became published the cache wasn.t cleared. That.s fixed, thanks to the debug logging of several patient users.
407
+ * And more bug fixes and translation updates.
408
+
409
+ ## 1.1 - 2012-06-13
410
+
411
+ * Use $_SERVER[ 'SERVER_NAME' ] to create cache directories.
412
+ * Only create blogs cached directories if valid requests and blogs exist.
413
+ * Only clear current blog's cache files if navigation menu is modified
414
+ * Added clean_post_cache action to clear cache on post actions
415
+ * Removed garbage collection details on Contents tab
416
+ * Added wp_cache_check_mobile cacheaction filter to shortcircuit mobile device check.
417
+ * Don't delete cache files for draft posts
418
+ * Added action on wp_trash_post to clear the cache when trashed posts are deleted
419
+ * Show a warning when 304 browser caching is disabled (because mod_rewrite caching is on)
420
+ * New check for safe mode if using less that PHP 5.3.0
421
+ * Added wp_supercache_remove_cookies filter to disable anonymous browsing mode.
422
+ * Fixed garbage collection schedule dropdown
423
+ * Fixed preload problem clearing site's cache on "page on front" sites.
424
+ * Fix for PHP variable not defined warnings
425
+ * Fixed problem refreshing cache when comments made as siteurl() sometimes didn't work
426
+ * Preloading of taxonomies is now optional
427
+ * Domain mapping fixes.
428
+ * Better support for https sites. Remove https:// to get cache paths.
429
+ * Added AddDefaultCharset .htaccess rule back in and added an option to remove it if required.
430
+ * Added multisite plugin that adds a "Cached" column to Network->Sites to disable caching on a per site basis.
431
+ * Added WPTouch plugin to modify browser and prefix list in mobile detection code. Added support for that plugin's exclude list.
432
+ * Fixed cache tester
433
+ * Filter the tags that are used to detect end-of-page using the wp_cache_eof_tags filter.
434
+ * Removed debug level from logging as it wasn't helpful.
435
+ * Removed mention of wp-minify.
436
+
437
+ ## 1.0 - 2012-01-30
438
+
439
+ * Removed AddDefaultCharset .htaccess rule
440
+ * Fixed problem with blogs in a folder and don't have a trailing slash
441
+ * New scheduling of garbage collection
442
+ * Added a "Delete cache" link to Toolbar to delete cache of current page.
443
+ * Updated documentation
444
+ * Sorry Digg, Stephen Fry power now!
445
+ * Updated translations
446
+ * Preload taxonomies and all post types except revisionsand nav menu items
447
+ * Fixed previews by logged in users.
448
+ * Added option to make logged in users anonymous
449
+ * Use WP 3.0 variables to detect multisite installs
450
+ * Hash filenames so files are served from the same CDNs
451
+
452
+ ## 0.9.9.9 - 2011-07-12
453
+
454
+ * Fixed typo, is_front_page.
455
+ * Serve repeated static files from the same CDN hostname.
456
+ * Updated translations.
457
+ * Make supercache dir lowercase to avoid problems with unicode URLs.
458
+ * Add option to skip https loaded static content.
459
+ * Remove 5 second check on age of existing cache files. Should help with posts that get lots of comments and traffic.
460
+ * Lots of bugs fixed.
461
+
462
+ ## 0.9.9.8 - 2011-01-07
463
+
464
+ * CDN updates: can be switched off, multiple CNAMEs.
465
+ * Uninstall process improved. It removes generated files and fixes edited files.
466
+ * Cached dynamic pages can now be stored in Supercache files and compressed.
467
+ * 1and1 Webhosting fix (/kunden/)
468
+ * Remove log by email functionality as it caused problems for users who were inundated by email
469
+ * Many more minor fixes and changes.
470
+
471
+ ## 0.9.9.6 - 2010-09-29
472
+
473
+ * Fixed problem serving cached files with PHP
474
+ * Added support for 304 "file not modified" header to help browser caching. (PHP caching only)
475
+ * Added French & German translations, updated Italian translation and fixed translation strings.
476
+ * Sleep 4 seconds between preload urls to reduce load on the server
477
+ * Updated docs and FAQs.
478
+
479
+ ## 0.9.9.5 - 2010-09-24
480
+
481
+ * Disable compression on on easy setup page. Still causes problems on some hosts.
482
+ * Remove footerlink on easy setup page.
483
+ * Don't delete mod_rewrite rules when caching is disabled.
484
+ * Don't stop users using settings page when in safe mode.
485
+
486
+ ## 0.9.9.4 - 2010-09-22
487
+
488
+ * Settings page split into tabbed pages.
489
+ * Added new "Easy" settings page for new users.
490
+ * New PHP caching mode to serve supercached files.
491
+ * Mobile support fixes.
492
+ * Added Domain mapping support plugin.
493
+ * Added "awaiting moderation" plugin that removes that text from posts.
494
+ * Terminology change. Changed "half on" to "legacy caching".
495
+ * Fixed cache tester on some installs of WordPress.
496
+ * Updated documentation
497
+ * Added $wp_super_cache_lock_down config variable to hide lockdown and directly cached pages admin items.
498
+ * Preloaded checks if it has stalled and reschedules the job to continue.
499
+ * Serve the gzipped page when first cached if the client supports compression.
500
+ * Lots more bug fixes..
501
+
502
+ ## 0.9.9.3 - 2010-06-16
503
+
504
+ * Fixed division by zero error in half on mode.
505
+ * Always show "delete cache" button.
506
+ * Fixed "Update mod_rewrite rules" button.
507
+ * Minor text changes to admin page.
508
+
509
+ ## 0.9.9.2 - 2010-06-15
510
+
511
+ * Forgot to change version number in wp-cache.php
512
+
513
+ ## 0.9.9.1 - 2010-06-15
514
+
515
+ * Added preloading of static cache.
516
+ * Better mobile plugin support
517
+ * .htaccess rules can be updated now. Added wpsc_update_htaccess().
518
+ * Fixed "page on front" cache clearing bug.
519
+ * Check for wordpress_logged_in cookie so test cookie isn't detected.
520
+ * Added clear_post_supercache() to clear supercache for a single post.
521
+ * Put quotes around rewrite rules in case paths have spaces.
522
+
523
+ ## 0.9.9 - 2010-02-08
524
+
525
+ * Added experimental object cache support.
526
+ * Added Chinese(Traditional) translation by Pseric.
527
+ * Added FAQ on WP-Cache vs Supercache files.
528
+ * Use Supercache file if WP-Cache file not found. Useful if mod_rewrite rules are broken or not working.
529
+ * Get mobile browser list from WP Mobile Edition if found. Warn user if .htaccess out of date.
530
+ * Make sure writer lock is unlocked after writing cache files.
531
+ * Added link to developer docs in readme.
532
+ * Added Ukranian translation by Vitaly Mylo.
533
+ * Added Upgrade Notice section to readme.
534
+ * Warn if zlib compression in PHP is enabled.
535
+ * Added compression troubleshooting answer. Props Vladimir (http://blog.sjinks.pro/)
536
+ * Added Japanese translation by Tai (http://tekapo.com/)
537
+ * Updated Italian translation.
538
+ * Link to WP Mobile Edition from admin page for mobile support.
539
+
540
+ ## 0.9.8 - 2009-11-18
541
+
542
+ * Added Spanish translation by Omi.
543
+ * Added Italian translation by Gianni Diurno.
544
+ * Addded advanced debug code to check front page for category problem. Enable by setting $wp_super_cache_advanced_debug to 1 in the config file.
545
+ * Fixed wordpress vs wordpress_logged_in cookie mismatch in cookie checking function.
546
+ * Correctly check if WP_CACHE is set or not. PHP is weird.
547
+ * Added wp_cache_clear_cache() to clear out cache directory.
548
+ * Only show logged in message when debugging enabled.
549
+ * Added troubleshooting point 20. PHP vs Apache user.
550
+ * Fixed problem deleting cache file.
551
+ * Don't delete cache files when moderated comments are deleted.
552
+
553
+ ## 0.9.7 - 2009-10-02
554
+
555
+ * Fixed problem with blogs in folders.
556
+ * Added cache file listing and delete links to admin page.
557
+ * Added "Newest Cached Pages" listing in sidebox.
558
+ * Made admin page translatable.
559
+ * Added "How do I make certain parts of the page stay dynamic?" to FAQ.
560
+ * Advanced: added "late init" feature so that plugin activates on "init". Set $wp_super_cache_late_init to true in config file to use.
561
+ * Disable supercaching when GET parameters present instead of disabling all caching. Disable on POST (as normal) and preview.
562
+ * Fixed problem with cron job and mutex filename.
563
+ * Warn users they must enable mobile device support if rewrite rules detected. Better detection of when to warn that .htaccess rules must be updated (no need when rewrite rules not present)
564
+ * Advanced: Added "wpsupercache_404" filter. Return true to cache 404 error pages.
565
+ * Use the wordpress_test_cookie in the cache key.
566
+ * Show correct number of cache files when compression off.
567
+ * Fixed problem with PHP safe_mode detection.
568
+ * Various bugfixes and documentation updates. See Changelog.txt
569
+
570
+ ## 0.9.6.1 - 2009-07-29
571
+
572
+ * Move "not logged in" message init below check for POST.
573
+ * Add is_admin() check so plugin definitely can't cache the backend.
574
+ * Add "do not cache" page type to admin page.
575
+
576
+ ## 0.9.6 - 2009-07-27
577
+
578
+ * Add uninstall.php uninstall script.
579
+ * Updated cache/.htaccess rules (option to upgrade that)
580
+ * Added FAQ about category and static homepage problem.
581
+ * Add wp_cache_user_agent_is_rejected() back to wp-cache-phase2.php
582
+ * Show message for logged in users when caching disable for them.
583
+ * Check filemtime on correct supercache file
584
+
585
+ ## 0.9.5 - 2009-07-17
586
+
587
+ * Show next and last GC times in minutes, not local time.
588
+ * Don't serve wp_cache cache files to rejected user agents. Supercache files are still served to them.
589
+ * If enabled, mobile support now serves php cached files to mobile clients and static cached files to everyone else.
590
+ * Added checks for "WPSC_DISABLE_COMPRESSION" and "WPSC_DISABLE_LOCKING" constants to disable compression and file locking. For hosting companies primarily.
591
+ * Added check for DONOTCACHEPAGE constant to avoid caching a page.
592
+ * Use PHP_DOCUMENT_ROOT when creating .htaccess if necessary.
593
+
594
+ ## 0.9.4.3 - 2009-04-25
595
+
596
+ 1. Added "Don't cache for logged in users" option.
597
+ 2. Display file size stats on admin page.
598
+ 3. Clear the cache when profile page is updated.
599
+ 4. Don't cache post previews.
600
+ 5. Added backslashes to rejected URI regex list.
601
+ 6. Fixed problems with posts and comments not refreshing.
602
+
603
+ Misc fixes
604
+
605
+ [1.8]: https://github.com/Automattic/wp-super-cache/compare/v1.7.9...v1.8
LICENSE.txt ADDED
@@ -0,0 +1,357 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This program is free software; you can redistribute it and/or modify
2
+ it under the terms of the GNU General Public License as published by
3
+ the Free Software Foundation; either version 2 of the License, or
4
+ (at your option) any later version.
5
+
6
+ This program is distributed in the hope that it will be useful,
7
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
8
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
+ GNU General Public License for more details.
10
+
11
+ You should have received a copy of the GNU General Public License
12
+ along with this program; if not, write to the Free Software
13
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
14
+
15
+
16
+ ===================================
17
+
18
+
19
+ GNU GENERAL PUBLIC LICENSE
20
+ Version 2, June 1991
21
+
22
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
23
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
+ Everyone is permitted to copy and distribute verbatim copies
25
+ of this license document, but changing it is not allowed.
26
+
27
+ Preamble
28
+
29
+ The licenses for most software are designed to take away your
30
+ freedom to share and change it. By contrast, the GNU General Public
31
+ License is intended to guarantee your freedom to share and change free
32
+ software--to make sure the software is free for all its users. This
33
+ General Public License applies to most of the Free Software
34
+ Foundation's software and to any other program whose authors commit to
35
+ using it. (Some other Free Software Foundation software is covered by
36
+ the GNU Lesser General Public License instead.) You can apply it to
37
+ your programs, too.
38
+
39
+ When we speak of free software, we are referring to freedom, not
40
+ price. Our General Public Licenses are designed to make sure that you
41
+ have the freedom to distribute copies of free software (and charge for
42
+ this service if you wish), that you receive source code or can get it
43
+ if you want it, that you can change the software or use pieces of it
44
+ in new free programs; and that you know you can do these things.
45
+
46
+ To protect your rights, we need to make restrictions that forbid
47
+ anyone to deny you these rights or to ask you to surrender the rights.
48
+ These restrictions translate to certain responsibilities for you if you
49
+ distribute copies of the software, or if you modify it.
50
+
51
+ For example, if you distribute copies of such a program, whether
52
+ gratis or for a fee, you must give the recipients all the rights that
53
+ you have. You must make sure that they, too, receive or can get the
54
+ source code. And you must show them these terms so they know their
55
+ rights.
56
+
57
+ We protect your rights with two steps: (1) copyright the software, and
58
+ (2) offer you this license which gives you legal permission to copy,
59
+ distribute and/or modify the software.
60
+
61
+ Also, for each author's protection and ours, we want to make certain
62
+ that everyone understands that there is no warranty for this free
63
+ software. If the software is modified by someone else and passed on, we
64
+ want its recipients to know that what they have is not the original, so
65
+ that any problems introduced by others will not reflect on the original
66
+ authors' reputations.
67
+
68
+ Finally, any free program is threatened constantly by software
69
+ patents. We wish to avoid the danger that redistributors of a free
70
+ program will individually obtain patent licenses, in effect making the
71
+ program proprietary. To prevent this, we have made it clear that any
72
+ patent must be licensed for everyone's free use or not licensed at all.
73
+
74
+ The precise terms and conditions for copying, distribution and
75
+ modification follow.
76
+
77
+ GNU GENERAL PUBLIC LICENSE
78
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
79
+
80
+ 0. This License applies to any program or other work which contains
81
+ a notice placed by the copyright holder saying it may be distributed
82
+ under the terms of this General Public License. The "Program", below,
83
+ refers to any such program or work, and a "work based on the Program"
84
+ means either the Program or any derivative work under copyright law:
85
+ that is to say, a work containing the Program or a portion of it,
86
+ either verbatim or with modifications and/or translated into another
87
+ language. (Hereinafter, translation is included without limitation in
88
+ the term "modification".) Each licensee is addressed as "you".
89
+
90
+ Activities other than copying, distribution and modification are not
91
+ covered by this License; they are outside its scope. The act of
92
+ running the Program is not restricted, and the output from the Program
93
+ is covered only if its contents constitute a work based on the
94
+ Program (independent of having been made by running the Program).
95
+ Whether that is true depends on what the Program does.
96
+
97
+ 1. You may copy and distribute verbatim copies of the Program's
98
+ source code as you receive it, in any medium, provided that you
99
+ conspicuously and appropriately publish on each copy an appropriate
100
+ copyright notice and disclaimer of warranty; keep intact all the
101
+ notices that refer to this License and to the absence of any warranty;
102
+ and give any other recipients of the Program a copy of this License
103
+ along with the Program.
104
+
105
+ You may charge a fee for the physical act of transferring a copy, and
106
+ you may at your option offer warranty protection in exchange for a fee.
107
+
108
+ 2. You may modify your copy or copies of the Program or any portion
109
+ of it, thus forming a work based on the Program, and copy and
110
+ distribute such modifications or work under the terms of Section 1
111
+ above, provided that you also meet all of these conditions:
112
+
113
+ a) You must cause the modified files to carry prominent notices
114
+ stating that you changed the files and the date of any change.
115
+
116
+ b) You must cause any work that you distribute or publish, that in
117
+ whole or in part contains or is derived from the Program or any
118
+ part thereof, to be licensed as a whole at no charge to all third
119
+ parties under the terms of this License.
120
+
121
+ c) If the modified program normally reads commands interactively
122
+ when run, you must cause it, when started running for such
123
+ interactive use in the most ordinary way, to print or display an
124
+ announcement including an appropriate copyright notice and a
125
+ notice that there is no warranty (or else, saying that you provide
126
+ a warranty) and that users may redistribute the program under
127
+ these conditions, and telling the user how to view a copy of this
128
+ License. (Exception: if the Program itself is interactive but
129
+ does not normally print such an announcement, your work based on
130
+ the Program is not required to print an announcement.)
131
+
132
+ These requirements apply to the modified work as a whole. If
133
+ identifiable sections of that work are not derived from the Program,
134
+ and can be reasonably considered independent and separate works in
135
+ themselves, then this License, and its terms, do not apply to those
136
+ sections when you distribute them as separate works. But when you
137
+ distribute the same sections as part of a whole which is a work based
138
+ on the Program, the distribution of the whole must be on the terms of
139
+ this License, whose permissions for other licensees extend to the
140
+ entire whole, and thus to each and every part regardless of who wrote it.
141
+
142
+ Thus, it is not the intent of this section to claim rights or contest
143
+ your rights to work written entirely by you; rather, the intent is to
144
+ exercise the right to control the distribution of derivative or
145
+ collective works based on the Program.
146
+
147
+ In addition, mere aggregation of another work not based on the Program
148
+ with the Program (or with a work based on the Program) on a volume of
149
+ a storage or distribution medium does not bring the other work under
150
+ the scope of this License.
151
+
152
+ 3. You may copy and distribute the Program (or a work based on it,
153
+ under Section 2) in object code or executable form under the terms of
154
+ Sections 1 and 2 above provided that you also do one of the following:
155
+
156
+ a) Accompany it with the complete corresponding machine-readable
157
+ source code, which must be distributed under the terms of Sections
158
+ 1 and 2 above on a medium customarily used for software interchange; or,
159
+
160
+ b) Accompany it with a written offer, valid for at least three
161
+ years, to give any third party, for a charge no more than your
162
+ cost of physically performing source distribution, a complete
163
+ machine-readable copy of the corresponding source code, to be
164
+ distributed under the terms of Sections 1 and 2 above on a medium
165
+ customarily used for software interchange; or,
166
+
167
+ c) Accompany it with the information you received as to the offer
168
+ to distribute corresponding source code. (This alternative is
169
+ allowed only for noncommercial distribution and only if you
170
+ received the program in object code or executable form with such
171
+ an offer, in accord with Subsection b above.)
172
+
173
+ The source code for a work means the preferred form of the work for
174
+ making modifications to it. For an executable work, complete source
175
+ code means all the source code for all modules it contains, plus any
176
+ associated interface definition files, plus the scripts used to
177
+ control compilation and installation of the executable. However, as a
178
+ special exception, the source code distributed need not include
179
+ anything that is normally distributed (in either source or binary
180
+ form) with the major components (compiler, kernel, and so on) of the
181
+ operating system on which the executable runs, unless that component
182
+ itself accompanies the executable.
183
+
184
+ If distribution of executable or object code is made by offering
185
+ access to copy from a designated place, then offering equivalent
186
+ access to copy the source code from the same place counts as
187
+ distribution of the source code, even though third parties are not
188
+ compelled to copy the source along with the object code.
189
+
190
+ 4. You may not copy, modify, sublicense, or distribute the Program
191
+ except as expressly provided under this License. Any attempt
192
+ otherwise to copy, modify, sublicense or distribute the Program is
193
+ void, and will automatically terminate your rights under this License.
194
+ However, parties who have received copies, or rights, from you under
195
+ this License will not have their licenses terminated so long as such
196
+ parties remain in full compliance.
197
+
198
+ 5. You are not required to accept this License, since you have not
199
+ signed it. However, nothing else grants you permission to modify or
200
+ distribute the Program or its derivative works. These actions are
201
+ prohibited by law if you do not accept this License. Therefore, by
202
+ modifying or distributing the Program (or any work based on the
203
+ Program), you indicate your acceptance of this License to do so, and
204
+ all its terms and conditions for copying, distributing or modifying
205
+ the Program or works based on it.
206
+
207
+ 6. Each time you redistribute the Program (or any work based on the
208
+ Program), the recipient automatically receives a license from the
209
+ original licensor to copy, distribute or modify the Program subject to
210
+ these terms and conditions. You may not impose any further
211
+ restrictions on the recipients' exercise of the rights granted herein.
212
+ You are not responsible for enforcing compliance by third parties to
213
+ this License.
214
+
215
+ 7. If, as a consequence of a court judgment or allegation of patent
216
+ infringement or for any other reason (not limited to patent issues),
217
+ conditions are imposed on you (whether by court order, agreement or
218
+ otherwise) that contradict the conditions of this License, they do not
219
+ excuse you from the conditions of this License. If you cannot
220
+ distribute so as to satisfy simultaneously your obligations under this
221
+ License and any other pertinent obligations, then as a consequence you
222
+ may not distribute the Program at all. For example, if a patent
223
+ license would not permit royalty-free redistribution of the Program by
224
+ all those who receive copies directly or indirectly through you, then
225
+ the only way you could satisfy both it and this License would be to
226
+ refrain entirely from distribution of the Program.
227
+
228
+ If any portion of this section is held invalid or unenforceable under
229
+ any particular circumstance, the balance of the section is intended to
230
+ apply and the section as a whole is intended to apply in other
231
+ circumstances.
232
+
233
+ It is not the purpose of this section to induce you to infringe any
234
+ patents or other property right claims or to contest validity of any
235
+ such claims; this section has the sole purpose of protecting the
236
+ integrity of the free software distribution system, which is
237
+ implemented by public license practices. Many people have made
238
+ generous contributions to the wide range of software distributed
239
+ through that system in reliance on consistent application of that
240
+ system; it is up to the author/donor to decide if he or she is willing
241
+ to distribute software through any other system and a licensee cannot
242
+ impose that choice.
243
+
244
+ This section is intended to make thoroughly clear what is believed to
245
+ be a consequence of the rest of this License.
246
+
247
+ 8. If the distribution and/or use of the Program is restricted in
248
+ certain countries either by patents or by copyrighted interfaces, the
249
+ original copyright holder who places the Program under this License
250
+ may add an explicit geographical distribution limitation excluding
251
+ those countries, so that distribution is permitted only in or among
252
+ countries not thus excluded. In such case, this License incorporates
253
+ the limitation as if written in the body of this License.
254
+
255
+ 9. The Free Software Foundation may publish revised and/or new versions
256
+ of the General Public License from time to time. Such new versions will
257
+ be similar in spirit to the present version, but may differ in detail to
258
+ address new problems or concerns.
259
+
260
+ Each version is given a distinguishing version number. If the Program
261
+ specifies a version number of this License which applies to it and "any
262
+ later version", you have the option of following the terms and conditions
263
+ either of that version or of any later version published by the Free
264
+ Software Foundation. If the Program does not specify a version number of
265
+ this License, you may choose any version ever published by the Free Software
266
+ Foundation.
267
+
268
+ 10. If you wish to incorporate parts of the Program into other free
269
+ programs whose distribution conditions are different, write to the author
270
+ to ask for permission. For software which is copyrighted by the Free
271
+ Software Foundation, write to the Free Software Foundation; we sometimes
272
+ make exceptions for this. Our decision will be guided by the two goals
273
+ of preserving the free status of all derivatives of our free software and
274
+ of promoting the sharing and reuse of software generally.
275
+
276
+ NO WARRANTY
277
+
278
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
279
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
280
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
281
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
282
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
283
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
284
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
285
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
286
+ REPAIR OR CORRECTION.
287
+
288
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
289
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
290
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
291
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
292
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
293
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
294
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
295
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
296
+ POSSIBILITY OF SUCH DAMAGES.
297
+
298
+ END OF TERMS AND CONDITIONS
299
+
300
+ How to Apply These Terms to Your New Programs
301
+
302
+ If you develop a new program, and you want it to be of the greatest
303
+ possible use to the public, the best way to achieve this is to make it
304
+ free software which everyone can redistribute and change under these terms.
305
+
306
+ To do so, attach the following notices to the program. It is safest
307
+ to attach them to the start of each source file to most effectively
308
+ convey the exclusion of warranty; and each file should have at least
309
+ the "copyright" line and a pointer to where the full notice is found.
310
+
311
+ <one line to give the program's name and a brief idea of what it does.>
312
+ Copyright (C) <year> <name of author>
313
+
314
+ This program is free software; you can redistribute it and/or modify
315
+ it under the terms of the GNU General Public License as published by
316
+ the Free Software Foundation; either version 2 of the License, or
317
+ (at your option) any later version.
318
+
319
+ This program is distributed in the hope that it will be useful,
320
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
321
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
322
+ GNU General Public License for more details.
323
+
324
+ You should have received a copy of the GNU General Public License along
325
+ with this program; if not, write to the Free Software Foundation, Inc.,
326
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
327
+
328
+ Also add information on how to contact you by electronic and paper mail.
329
+
330
+ If the program is interactive, make it output a short notice like this
331
+ when it starts in an interactive mode:
332
+
333
+ Gnomovision version 69, Copyright (C) year name of author
334
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
335
+ This is free software, and you are welcome to redistribute it
336
+ under certain conditions; type `show c' for details.
337
+
338
+ The hypothetical commands `show w' and `show c' should show the appropriate
339
+ parts of the General Public License. Of course, the commands you use may
340
+ be called something other than `show w' and `show c'; they could even be
341
+ mouse-clicks or menu items--whatever suits your program.
342
+
343
+ You should also get your employer (if you work as a programmer) or your
344
+ school, if any, to sign a "copyright disclaimer" for the program, if
345
+ necessary. Here is a sample; alter the names:
346
+
347
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
348
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
349
+
350
+ <signature of Ty Coon>, 1 April 1989
351
+ Ty Coon, President of Vice
352
+
353
+ This General Public License does not permit incorporating your program into
354
+ proprietary programs. If your program is a subroutine library, you may
355
+ consider it more useful to permit linking proprietary applications with the
356
+ library. If this is what you want to do, use the GNU Lesser General
357
+ Public License instead of this License.
README.md ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # super-cache
2
+
3
+ A very fast caching engine for WordPress that produces static html files.
4
+
5
+ ## How to install super-cache
6
+
7
+ ### Installation From Git Repo
8
+
9
+ ## Contribute
10
+
11
+ ## Get Help
12
+ More will be added here soon.
13
+ ## Security
14
+
15
+ Need to report a security vulnerability? Go to [https://automattic.com/security/](https://automattic.com/security/) or directly to our security bug bounty site [https://hackerone.com/automattic](https://hackerone.com/automattic).
16
+
17
+ ## License
18
+
19
+ super-cache is licensed under [GNU General Public License v2 (or later)](./LICENSE.txt)
20
+
SECURITY.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Security Policy
2
+
3
+ Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/).
4
+
5
+ ## Supported Versions
6
+
7
+ Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions.
8
+
9
+ ## Reporting a Vulnerability
10
+
11
+ [Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure.
12
+
13
+ **For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.**
14
+
15
+ Our most critical targets are:
16
+
17
+ * Jetpack and the Jetpack composer packages (all within this repo)
18
+ * Jetpack.com -- the primary marketing site.
19
+ * cloud.jetpack.com -- a management site.
20
+ * wordpress.com -- the shared management site for both Jetpack and WordPress.com sites.
21
+
22
+ For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic).
23
+
24
+ _Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._
25
+
26
+ ## Guidelines
27
+
28
+ We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines:
29
+
30
+ * Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines).
31
+ * Pen-testing Production:
32
+ * Please **setup a local environment** instead whenever possible. Most of our code is open source (see above).
33
+ * If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC.
34
+ * **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels.
35
+ * To be eligible for a bounty, all of these guidelines must be followed.
36
+ * Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability.
37
+
38
+ We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties.
composer.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "automattic/wp-super-cache",
3
+ "description": "A very fast caching engine for WordPress that produces static html files.",
4
+ "type": "wordpress-plugin",
5
+ "license": "GPL-2.0-or-later",
6
+ "require": {},
7
+ "require-dev": {
8
+ "yoast/phpunit-polyfills": "1.0.3",
9
+ "automattic/jetpack-changelogger": "^3.2"
10
+ },
11
+ "autoload": {
12
+ "classmap": [
13
+ "src/"
14
+ ]
15
+ },
16
+ "scripts": {
17
+ "phpunit": [
18
+ "./vendor/phpunit/phpunit/phpunit --colors=always"
19
+ ],
20
+ "test-coverage": [
21
+ "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
22
+ ],
23
+ "test-php": [
24
+ "@composer phpunit"
25
+ ],
26
+ "build-production": "echo 'Add your build step to composer.json, please!'",
27
+ "build-development": "echo 'Add your build step to composer.json, please!'"
28
+ },
29
+ "repositories": [],
30
+ "minimum-stability": "dev",
31
+ "prefer-stable": true,
32
+ "extra": {
33
+ "mirror-repo": "Automattic/wp-super-cache",
34
+ "changelogger": {
35
+ "link-template": "https://github.com/Automattic/wp-super-cache/compare/v${old}...v${new}",
36
+ "versioning": "wordpress"
37
+ },
38
+ "release-branch-prefix": "super-cache",
39
+ "wp-plugin-slug": "wp-super-cache"
40
+ }
41
+ }
composer.lock ADDED
@@ -0,0 +1,2913 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_readme": [
3
+ "This file locks the dependencies of your project to a known state",
4
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
+ "This file is @generated automatically"
6
+ ],
7
+ "content-hash": "b2c692cc6ab38f6d0b21ff9104cc0c16",
8
+ "packages": [],
9
+ "packages-dev": [
10
+ {
11
+ "name": "automattic/jetpack-changelogger",
12
+ "version": "v3.2.0",
13
+ "source": {
14
+ "type": "git",
15
+ "url": "https://github.com/Automattic/jetpack-changelogger.git",
16
+ "reference": "56cb628fc9ddfca6785f24c2ec598a038da4d9de"
17
+ },
18
+ "dist": {
19
+ "type": "zip",
20
+ "url": "https://api.github.com/repos/Automattic/jetpack-changelogger/zipball/56cb628fc9ddfca6785f24c2ec598a038da4d9de",
21
+ "reference": "56cb628fc9ddfca6785f24c2ec598a038da4d9de",
22
+ "shasum": ""
23
+ },
24
+ "require": {
25
+ "php": ">=5.6",
26
+ "symfony/console": "^3.4 || ^5.2 || ^6.0",
27
+ "symfony/process": "^3.4 || ^5.2 || ^6.0",
28
+ "wikimedia/at-ease": "^1.2 || ^2.0"
29
+ },
30
+ "require-dev": {
31
+ "wikimedia/testing-access-wrapper": "^1.0 || ^2.0",
32
+ "yoast/phpunit-polyfills": "1.0.3"
33
+ },
34
+ "bin": [
35
+ "bin/changelogger"
36
+ ],
37
+ "type": "project",
38
+ "extra": {
39
+ "autotagger": true,
40
+ "branch-alias": {
41
+ "dev-trunk": "3.2.x-dev"
42
+ },
43
+ "mirror-repo": "Automattic/jetpack-changelogger",
44
+ "version-constants": {
45
+ "::VERSION": "src/Application.php"
46
+ },
47
+ "changelogger": {
48
+ "link-template": "https://github.com/Automattic/jetpack-changelogger/compare/${old}...${new}"
49
+ }
50
+ },
51
+ "autoload": {
52
+ "psr-4": {
53
+ "Automattic\\Jetpack\\Changelog\\": "lib",
54
+ "Automattic\\Jetpack\\Changelogger\\": "src"
55
+ }
56
+ },
57
+ "notification-url": "https://packagist.org/downloads/",
58
+ "license": [
59
+ "GPL-2.0-or-later"
60
+ ],
61
+ "description": "Jetpack Changelogger tool. Allows for managing changelogs by dropping change files into a changelog directory with each PR.",
62
+ "support": {
63
+ "source": "https://github.com/Automattic/jetpack-changelogger/tree/v3.2.0"
64
+ },
65
+ "time": "2022-07-26T13:40:47+00:00"
66
+ },
67
+ {
68
+ "name": "doctrine/instantiator",
69
+ "version": "1.4.1",
70
+ "source": {
71
+ "type": "git",
72
+ "url": "https://github.com/doctrine/instantiator.git",
73
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
74
+ },
75
+ "dist": {
76
+ "type": "zip",
77
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
78
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
79
+ "shasum": ""
80
+ },
81
+ "require": {
82
+ "php": "^7.1 || ^8.0"
83
+ },
84
+ "require-dev": {
85
+ "doctrine/coding-standard": "^9",
86
+ "ext-pdo": "*",
87
+ "ext-phar": "*",
88
+ "phpbench/phpbench": "^0.16 || ^1",
89
+ "phpstan/phpstan": "^1.4",
90
+ "phpstan/phpstan-phpunit": "^1",
91
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
92
+ "vimeo/psalm": "^4.22"
93
+ },
94
+ "type": "library",
95
+ "autoload": {
96
+ "psr-4": {
97
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
98
+ }
99
+ },
100
+ "notification-url": "https://packagist.org/downloads/",
101
+ "license": [
102
+ "MIT"
103
+ ],
104
+ "authors": [
105
+ {
106
+ "name": "Marco Pivetta",
107
+ "email": "ocramius@gmail.com",
108
+ "homepage": "https://ocramius.github.io/"
109
+ }
110
+ ],
111
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
112
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
113
+ "keywords": [
114
+ "constructor",
115
+ "instantiate"
116
+ ],
117
+ "support": {
118
+ "issues": "https://github.com/doctrine/instantiator/issues",
119
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
120
+ },
121
+ "funding": [
122
+ {
123
+ "url": "https://www.doctrine-project.org/sponsorship.html",
124
+ "type": "custom"
125
+ },
126
+ {
127
+ "url": "https://www.patreon.com/phpdoctrine",
128
+ "type": "patreon"
129
+ },
130
+ {
131
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
132
+ "type": "tidelift"
133
+ }
134
+ ],
135
+ "time": "2022-03-03T08:28:38+00:00"
136
+ },
137
+ {
138
+ "name": "myclabs/deep-copy",
139
+ "version": "1.11.0",
140
+ "source": {
141
+ "type": "git",
142
+ "url": "https://github.com/myclabs/DeepCopy.git",
143
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
144
+ },
145
+ "dist": {
146
+ "type": "zip",
147
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
148
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
149
+ "shasum": ""
150
+ },
151
+ "require": {
152
+ "php": "^7.1 || ^8.0"
153
+ },
154
+ "conflict": {
155
+ "doctrine/collections": "<1.6.8",
156
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
157
+ },
158
+ "require-dev": {
159
+ "doctrine/collections": "^1.6.8",
160
+ "doctrine/common": "^2.13.3 || ^3.2.2",
161
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
162
+ },
163
+ "type": "library",
164
+ "autoload": {
165
+ "files": [
166
+ "src/DeepCopy/deep_copy.php"
167
+ ],
168
+ "psr-4": {
169
+ "DeepCopy\\": "src/DeepCopy/"
170
+ }
171
+ },
172
+ "notification-url": "https://packagist.org/downloads/",
173
+ "license": [
174
+ "MIT"
175
+ ],
176
+ "description": "Create deep copies (clones) of your objects",
177
+ "keywords": [
178
+ "clone",
179
+ "copy",
180
+ "duplicate",
181
+ "object",
182
+ "object graph"
183
+ ],
184
+ "support": {
185
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
186
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
187
+ },
188
+ "funding": [
189
+ {
190
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
191
+ "type": "tidelift"
192
+ }
193
+ ],
194
+ "time": "2022-03-03T13:19:32+00:00"
195
+ },
196
+ {
197
+ "name": "nikic/php-parser",
198
+ "version": "v4.14.0",
199
+ "source": {
200
+ "type": "git",
201
+ "url": "https://github.com/nikic/PHP-Parser.git",
202
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
203
+ },
204
+ "dist": {
205
+ "type": "zip",
206
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
207
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
208
+ "shasum": ""
209
+ },
210
+ "require": {
211
+ "ext-tokenizer": "*",
212
+ "php": ">=7.0"
213
+ },
214
+ "require-dev": {
215
+ "ircmaxell/php-yacc": "^0.0.7",
216
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
217
+ },
218
+ "bin": [
219
+ "bin/php-parse"
220
+ ],
221
+ "type": "library",
222
+ "extra": {
223
+ "branch-alias": {
224
+ "dev-master": "4.9-dev"
225
+ }
226
+ },
227
+ "autoload": {
228
+ "psr-4": {
229
+ "PhpParser\\": "lib/PhpParser"
230
+ }
231
+ },
232
+ "notification-url": "https://packagist.org/downloads/",
233
+ "license": [
234
+ "BSD-3-Clause"
235
+ ],
236
+ "authors": [
237
+ {
238
+ "name": "Nikita Popov"
239
+ }
240
+ ],
241
+ "description": "A PHP parser written in PHP",
242
+ "keywords": [
243
+ "parser",
244
+ "php"
245
+ ],
246
+ "support": {
247
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
248
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
249
+ },
250
+ "time": "2022-05-31T20:59:12+00:00"
251
+ },
252
+ {
253
+ "name": "phar-io/manifest",
254
+ "version": "2.0.3",
255
+ "source": {
256
+ "type": "git",
257
+ "url": "https://github.com/phar-io/manifest.git",
258
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
259
+ },
260
+ "dist": {
261
+ "type": "zip",
262
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
263
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
264
+ "shasum": ""
265
+ },
266
+ "require": {
267
+ "ext-dom": "*",
268
+ "ext-phar": "*",
269
+ "ext-xmlwriter": "*",
270
+ "phar-io/version": "^3.0.1",
271
+ "php": "^7.2 || ^8.0"
272
+ },
273
+ "type": "library",
274
+ "extra": {
275
+ "branch-alias": {
276
+ "dev-master": "2.0.x-dev"
277
+ }
278
+ },
279
+ "autoload": {
280
+ "classmap": [
281
+ "src/"
282
+ ]
283
+ },
284
+ "notification-url": "https://packagist.org/downloads/",
285
+ "license": [
286
+ "BSD-3-Clause"
287
+ ],
288
+ "authors": [
289
+ {
290
+ "name": "Arne Blankerts",
291
+ "email": "arne@blankerts.de",
292
+ "role": "Developer"
293
+ },
294
+ {
295
+ "name": "Sebastian Heuer",
296
+ "email": "sebastian@phpeople.de",
297
+ "role": "Developer"
298
+ },
299
+ {
300
+ "name": "Sebastian Bergmann",
301
+ "email": "sebastian@phpunit.de",
302
+ "role": "Developer"
303
+ }
304
+ ],
305
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
306
+ "support": {
307
+ "issues": "https://github.com/phar-io/manifest/issues",
308
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
309
+ },
310
+ "time": "2021-07-20T11:28:43+00:00"
311
+ },
312
+ {
313
+ "name": "phar-io/version",
314
+ "version": "3.2.1",
315
+ "source": {
316
+ "type": "git",
317
+ "url": "https://github.com/phar-io/version.git",
318
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
319
+ },
320
+ "dist": {
321
+ "type": "zip",
322
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
323
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
324
+ "shasum": ""
325
+ },
326
+ "require": {
327
+ "php": "^7.2 || ^8.0"
328
+ },
329
+ "type": "library",
330
+ "autoload": {
331
+ "classmap": [
332
+ "src/"
333
+ ]
334
+ },
335
+ "notification-url": "https://packagist.org/downloads/",
336
+ "license": [
337
+ "BSD-3-Clause"
338
+ ],
339
+ "authors": [
340
+ {
341
+ "name": "Arne Blankerts",
342
+ "email": "arne@blankerts.de",
343
+ "role": "Developer"
344
+ },
345
+ {
346
+ "name": "Sebastian Heuer",
347
+ "email": "sebastian@phpeople.de",
348
+ "role": "Developer"
349
+ },
350
+ {
351
+ "name": "Sebastian Bergmann",
352
+ "email": "sebastian@phpunit.de",
353
+ "role": "Developer"
354
+ }
355
+ ],
356
+ "description": "Library for handling version information and constraints",
357
+ "support": {
358
+ "issues": "https://github.com/phar-io/version/issues",
359
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
360
+ },
361
+ "time": "2022-02-21T01:04:05+00:00"
362
+ },
363
+ {
364
+ "name": "phpdocumentor/reflection-common",
365
+ "version": "2.2.0",
366
+ "source": {
367
+ "type": "git",
368
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
369
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
370
+ },
371
+ "dist": {
372
+ "type": "zip",
373
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
374
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
375
+ "shasum": ""
376
+ },
377
+ "require": {
378
+ "php": "^7.2 || ^8.0"
379
+ },
380
+ "type": "library",
381
+ "extra": {
382
+ "branch-alias": {
383
+ "dev-2.x": "2.x-dev"
384
+ }
385
+ },
386
+ "autoload": {
387
+ "psr-4": {
388
+ "phpDocumentor\\Reflection\\": "src/"
389
+ }
390
+ },
391
+ "notification-url": "https://packagist.org/downloads/",
392
+ "license": [
393
+ "MIT"
394
+ ],
395
+ "authors": [
396
+ {
397
+ "name": "Jaap van Otterdijk",
398
+ "email": "opensource@ijaap.nl"
399
+ }
400
+ ],
401
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
402
+ "homepage": "http://www.phpdoc.org",
403
+ "keywords": [
404
+ "FQSEN",
405
+ "phpDocumentor",
406
+ "phpdoc",
407
+ "reflection",
408
+ "static analysis"
409
+ ],
410
+ "support": {
411
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
412
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
413
+ },
414
+ "time": "2020-06-27T09:03:43+00:00"
415
+ },
416
+ {
417
+ "name": "phpdocumentor/reflection-docblock",
418
+ "version": "5.3.0",
419
+ "source": {
420
+ "type": "git",
421
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
422
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
423
+ },
424
+ "dist": {
425
+ "type": "zip",
426
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
427
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
428
+ "shasum": ""
429
+ },
430
+ "require": {
431
+ "ext-filter": "*",
432
+ "php": "^7.2 || ^8.0",
433
+ "phpdocumentor/reflection-common": "^2.2",
434
+ "phpdocumentor/type-resolver": "^1.3",
435
+ "webmozart/assert": "^1.9.1"
436
+ },
437
+ "require-dev": {
438
+ "mockery/mockery": "~1.3.2",
439
+ "psalm/phar": "^4.8"
440
+ },
441
+ "type": "library",
442
+ "extra": {
443
+ "branch-alias": {
444
+ "dev-master": "5.x-dev"
445
+ }
446
+ },
447
+ "autoload": {
448
+ "psr-4": {
449
+ "phpDocumentor\\Reflection\\": "src"
450
+ }
451
+ },
452
+ "notification-url": "https://packagist.org/downloads/",
453
+ "license": [
454
+ "MIT"
455
+ ],
456
+ "authors": [
457
+ {
458
+ "name": "Mike van Riel",
459
+ "email": "me@mikevanriel.com"
460
+ },
461
+ {
462
+ "name": "Jaap van Otterdijk",
463
+ "email": "account@ijaap.nl"
464
+ }
465
+ ],
466
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
467
+ "support": {
468
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
469
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
470
+ },
471
+ "time": "2021-10-19T17:43:47+00:00"
472
+ },
473
+ {
474
+ "name": "phpdocumentor/type-resolver",
475
+ "version": "1.6.1",
476
+ "source": {
477
+ "type": "git",
478
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
479
+ "reference": "77a32518733312af16a44300404e945338981de3"
480
+ },
481
+ "dist": {
482
+ "type": "zip",
483
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
484
+ "reference": "77a32518733312af16a44300404e945338981de3",
485
+ "shasum": ""
486
+ },
487
+ "require": {
488
+ "php": "^7.2 || ^8.0",
489
+ "phpdocumentor/reflection-common": "^2.0"
490
+ },
491
+ "require-dev": {
492
+ "ext-tokenizer": "*",
493
+ "psalm/phar": "^4.8"
494
+ },
495
+ "type": "library",
496
+ "extra": {
497
+ "branch-alias": {
498
+ "dev-1.x": "1.x-dev"
499
+ }
500
+ },
501
+ "autoload": {
502
+ "psr-4": {
503
+ "phpDocumentor\\Reflection\\": "src"
504
+ }
505
+ },
506
+ "notification-url": "https://packagist.org/downloads/",
507
+ "license": [
508
+ "MIT"
509
+ ],
510
+ "authors": [
511
+ {
512
+ "name": "Mike van Riel",
513
+ "email": "me@mikevanriel.com"
514
+ }
515
+ ],
516
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
517
+ "support": {
518
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
519
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
520
+ },
521
+ "time": "2022-03-15T21:29:03+00:00"
522
+ },
523
+ {
524
+ "name": "phpspec/prophecy",
525
+ "version": "v1.15.0",
526
+ "source": {
527
+ "type": "git",
528
+ "url": "https://github.com/phpspec/prophecy.git",
529
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
530
+ },
531
+ "dist": {
532
+ "type": "zip",
533
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
534
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
535
+ "shasum": ""
536
+ },
537
+ "require": {
538
+ "doctrine/instantiator": "^1.2",
539
+ "php": "^7.2 || ~8.0, <8.2",
540
+ "phpdocumentor/reflection-docblock": "^5.2",
541
+ "sebastian/comparator": "^3.0 || ^4.0",
542
+ "sebastian/recursion-context": "^3.0 || ^4.0"
543
+ },
544
+ "require-dev": {
545
+ "phpspec/phpspec": "^6.0 || ^7.0",
546
+ "phpunit/phpunit": "^8.0 || ^9.0"
547
+ },
548
+ "type": "library",
549
+ "extra": {
550
+ "branch-alias": {
551
+ "dev-master": "1.x-dev"
552
+ }
553
+ },
554
+ "autoload": {
555
+ "psr-4": {
556
+ "Prophecy\\": "src/Prophecy"
557
+ }
558
+ },
559
+ "notification-url": "https://packagist.org/downloads/",
560
+ "license": [
561
+ "MIT"
562
+ ],
563
+ "authors": [
564
+ {
565
+ "name": "Konstantin Kudryashov",
566
+ "email": "ever.zet@gmail.com",
567
+ "homepage": "http://everzet.com"
568
+ },
569
+ {
570
+ "name": "Marcello Duarte",
571
+ "email": "marcello.duarte@gmail.com"
572
+ }
573
+ ],
574
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
575
+ "homepage": "https://github.com/phpspec/prophecy",
576
+ "keywords": [
577
+ "Double",
578
+ "Dummy",
579
+ "fake",
580
+ "mock",
581
+ "spy",
582
+ "stub"
583
+ ],
584
+ "support": {
585
+ "issues": "https://github.com/phpspec/prophecy/issues",
586
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
587
+ },
588
+ "time": "2021-12-08T12:19:24+00:00"
589
+ },
590
+ {
591
+ "name": "phpunit/php-code-coverage",
592
+ "version": "9.2.15",
593
+ "source": {
594
+ "type": "git",
595
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
596
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
597
+ },
598
+ "dist": {
599
+ "type": "zip",
600
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
601
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
602
+ "shasum": ""
603
+ },
604
+ "require": {
605
+ "ext-dom": "*",
606
+ "ext-libxml": "*",
607
+ "ext-xmlwriter": "*",
608
+ "nikic/php-parser": "^4.13.0",
609
+ "php": ">=7.3",
610
+ "phpunit/php-file-iterator": "^3.0.3",
611
+ "phpunit/php-text-template": "^2.0.2",
612
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
613
+ "sebastian/complexity": "^2.0",
614
+ "sebastian/environment": "^5.1.2",
615
+ "sebastian/lines-of-code": "^1.0.3",
616
+ "sebastian/version": "^3.0.1",
617
+ "theseer/tokenizer": "^1.2.0"
618
+ },
619
+ "require-dev": {
620
+ "phpunit/phpunit": "^9.3"
621
+ },
622
+ "suggest": {
623
+ "ext-pcov": "*",
624
+ "ext-xdebug": "*"
625
+ },
626
+ "type": "library",
627
+ "extra": {
628
+ "branch-alias": {
629
+ "dev-master": "9.2-dev"
630
+ }
631
+ },
632
+ "autoload": {
633
+ "classmap": [
634
+ "src/"
635
+ ]
636
+ },
637
+ "notification-url": "https://packagist.org/downloads/",
638
+ "license": [
639
+ "BSD-3-Clause"
640
+ ],
641
+ "authors": [
642
+ {
643
+ "name": "Sebastian Bergmann",
644
+ "email": "sebastian@phpunit.de",
645
+ "role": "lead"
646
+ }
647
+ ],
648
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
649
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
650
+ "keywords": [
651
+ "coverage",
652
+ "testing",
653
+ "xunit"
654
+ ],
655
+ "support": {
656
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
657
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
658
+ },
659
+ "funding": [
660
+ {
661
+ "url": "https://github.com/sebastianbergmann",
662
+ "type": "github"
663
+ }
664
+ ],
665
+ "time": "2022-03-07T09:28:20+00:00"
666
+ },
667
+ {
668
+ "name": "phpunit/php-file-iterator",
669
+ "version": "3.0.6",
670
+ "source": {
671
+ "type": "git",
672
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
673
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
674
+ },
675
+ "dist": {
676
+ "type": "zip",
677
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
678
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
679
+ "shasum": ""
680
+ },
681
+ "require": {
682
+ "php": ">=7.3"
683
+ },
684
+ "require-dev": {
685
+ "phpunit/phpunit": "^9.3"
686
+ },
687
+ "type": "library",
688
+ "extra": {
689
+ "branch-alias": {
690
+ "dev-master": "3.0-dev"
691
+ }
692
+ },
693
+ "autoload": {
694
+ "classmap": [
695
+ "src/"
696
+ ]
697
+ },
698
+ "notification-url": "https://packagist.org/downloads/",
699
+ "license": [
700
+ "BSD-3-Clause"
701
+ ],
702
+ "authors": [
703
+ {
704
+ "name": "Sebastian Bergmann",
705
+ "email": "sebastian@phpunit.de",
706
+ "role": "lead"
707
+ }
708
+ ],
709
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
710
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
711
+ "keywords": [
712
+ "filesystem",
713
+ "iterator"
714
+ ],
715
+ "support": {
716
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
717
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
718
+ },
719
+ "funding": [
720
+ {
721
+ "url": "https://github.com/sebastianbergmann",
722
+ "type": "github"
723
+ }
724
+ ],
725
+ "time": "2021-12-02T12:48:52+00:00"
726
+ },
727
+ {
728
+ "name": "phpunit/php-invoker",
729
+ "version": "3.1.1",
730
+ "source": {
731
+ "type": "git",
732
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
733
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
734
+ },
735
+ "dist": {
736
+ "type": "zip",
737
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
738
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
739
+ "shasum": ""
740
+ },
741
+ "require": {
742
+ "php": ">=7.3"
743
+ },
744
+ "require-dev": {
745
+ "ext-pcntl": "*",
746
+ "phpunit/phpunit": "^9.3"
747
+ },
748
+ "suggest": {
749
+ "ext-pcntl": "*"
750
+ },
751
+ "type": "library",
752
+ "extra": {
753
+ "branch-alias": {
754
+ "dev-master": "3.1-dev"
755
+ }
756
+ },
757
+ "autoload": {
758
+ "classmap": [
759
+ "src/"
760
+ ]
761
+ },
762
+ "notification-url": "https://packagist.org/downloads/",
763
+ "license": [
764
+ "BSD-3-Clause"
765
+ ],
766
+ "authors": [
767
+ {
768
+ "name": "Sebastian Bergmann",
769
+ "email": "sebastian@phpunit.de",
770
+ "role": "lead"
771
+ }
772
+ ],
773
+ "description": "Invoke callables with a timeout",
774
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
775
+ "keywords": [
776
+ "process"
777
+ ],
778
+ "support": {
779
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
780
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
781
+ },
782
+ "funding": [
783
+ {
784
+ "url": "https://github.com/sebastianbergmann",
785
+ "type": "github"
786
+ }
787
+ ],
788
+ "time": "2020-09-28T05:58:55+00:00"
789
+ },
790
+ {
791
+ "name": "phpunit/php-text-template",
792
+ "version": "2.0.4",
793
+ "source": {
794
+ "type": "git",
795
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
796
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
797
+ },
798
+ "dist": {
799
+ "type": "zip",
800
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
801
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
802
+ "shasum": ""
803
+ },
804
+ "require": {
805
+ "php": ">=7.3"
806
+ },
807
+ "require-dev": {
808
+ "phpunit/phpunit": "^9.3"
809
+ },
810
+ "type": "library",
811
+ "extra": {
812
+ "branch-alias": {
813
+ "dev-master": "2.0-dev"
814
+ }
815
+ },
816
+ "autoload": {
817
+ "classmap": [
818
+ "src/"
819
+ ]
820
+ },
821
+ "notification-url": "https://packagist.org/downloads/",
822
+ "license": [
823
+ "BSD-3-Clause"
824
+ ],
825
+ "authors": [
826
+ {
827
+ "name": "Sebastian Bergmann",
828
+ "email": "sebastian@phpunit.de",
829
+ "role": "lead"
830
+ }
831
+ ],
832
+ "description": "Simple template engine.",
833
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
834
+ "keywords": [
835
+ "template"
836
+ ],
837
+ "support": {
838
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
839
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
840
+ },
841
+ "funding": [
842
+ {
843
+ "url": "https://github.com/sebastianbergmann",
844
+ "type": "github"
845
+ }
846
+ ],
847
+ "time": "2020-10-26T05:33:50+00:00"
848
+ },
849
+ {
850
+ "name": "phpunit/php-timer",
851
+ "version": "5.0.3",
852
+ "source": {
853
+ "type": "git",
854
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
855
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
856
+ },
857
+ "dist": {
858
+ "type": "zip",
859
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
860
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
861
+ "shasum": ""
862
+ },
863
+ "require": {
864
+ "php": ">=7.3"
865
+ },
866
+ "require-dev": {
867
+ "phpunit/phpunit": "^9.3"
868
+ },
869
+ "type": "library",
870
+ "extra": {
871
+ "branch-alias": {
872
+ "dev-master": "5.0-dev"
873
+ }
874
+ },
875
+ "autoload": {
876
+ "classmap": [
877
+ "src/"
878
+ ]
879
+ },
880
+ "notification-url": "https://packagist.org/downloads/",
881
+ "license": [
882
+ "BSD-3-Clause"
883
+ ],
884
+ "authors": [
885
+ {
886
+ "name": "Sebastian Bergmann",
887
+ "email": "sebastian@phpunit.de",
888
+ "role": "lead"
889
+ }
890
+ ],
891
+ "description": "Utility class for timing",
892
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
893
+ "keywords": [
894
+ "timer"
895
+ ],
896
+ "support": {
897
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
898
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
899
+ },
900
+ "funding": [
901
+ {
902
+ "url": "https://github.com/sebastianbergmann",
903
+ "type": "github"
904
+ }
905
+ ],
906
+ "time": "2020-10-26T13:16:10+00:00"
907
+ },
908
+ {
909
+ "name": "phpunit/phpunit",
910
+ "version": "9.5.21",
911
+ "source": {
912
+ "type": "git",
913
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
914
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
915
+ },
916
+ "dist": {
917
+ "type": "zip",
918
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
919
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
920
+ "shasum": ""
921
+ },
922
+ "require": {
923
+ "doctrine/instantiator": "^1.3.1",
924
+ "ext-dom": "*",
925
+ "ext-json": "*",
926
+ "ext-libxml": "*",
927
+ "ext-mbstring": "*",
928
+ "ext-xml": "*",
929
+ "ext-xmlwriter": "*",
930
+ "myclabs/deep-copy": "^1.10.1",
931
+ "phar-io/manifest": "^2.0.3",
932
+ "phar-io/version": "^3.0.2",
933
+ "php": ">=7.3",
934
+ "phpspec/prophecy": "^1.12.1",
935
+ "phpunit/php-code-coverage": "^9.2.13",
936
+ "phpunit/php-file-iterator": "^3.0.5",
937
+ "phpunit/php-invoker": "^3.1.1",
938
+ "phpunit/php-text-template": "^2.0.3",
939
+ "phpunit/php-timer": "^5.0.2",
940
+ "sebastian/cli-parser": "^1.0.1",
941
+ "sebastian/code-unit": "^1.0.6",
942
+ "sebastian/comparator": "^4.0.5",
943
+ "sebastian/diff": "^4.0.3",
944
+ "sebastian/environment": "^5.1.3",
945
+ "sebastian/exporter": "^4.0.3",
946
+ "sebastian/global-state": "^5.0.1",
947
+ "sebastian/object-enumerator": "^4.0.3",
948
+ "sebastian/resource-operations": "^3.0.3",
949
+ "sebastian/type": "^3.0",
950
+ "sebastian/version": "^3.0.2"
951
+ },
952
+ "require-dev": {
953
+ "phpspec/prophecy-phpunit": "^2.0.1"
954
+ },
955
+ "suggest": {
956
+ "ext-soap": "*",
957
+ "ext-xdebug": "*"
958
+ },
959
+ "bin": [
960
+ "phpunit"
961
+ ],
962
+ "type": "library",
963
+ "extra": {
964
+ "branch-alias": {
965
+ "dev-master": "9.5-dev"
966
+ }
967
+ },
968
+ "autoload": {
969
+ "files": [
970
+ "src/Framework/Assert/Functions.php"
971
+ ],
972
+ "classmap": [
973
+ "src/"
974
+ ]
975
+ },
976
+ "notification-url": "https://packagist.org/downloads/",
977
+ "license": [
978
+ "BSD-3-Clause"
979
+ ],
980
+ "authors": [
981
+ {
982
+ "name": "Sebastian Bergmann",
983
+ "email": "sebastian@phpunit.de",
984
+ "role": "lead"
985
+ }
986
+ ],
987
+ "description": "The PHP Unit Testing framework.",
988
+ "homepage": "https://phpunit.de/",
989
+ "keywords": [
990
+ "phpunit",
991
+ "testing",
992
+ "xunit"
993
+ ],
994
+ "support": {
995
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
996
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
997
+ },
998
+ "funding": [
999
+ {
1000
+ "url": "https://phpunit.de/sponsors.html",
1001
+ "type": "custom"
1002
+ },
1003
+ {
1004
+ "url": "https://github.com/sebastianbergmann",
1005
+ "type": "github"
1006
+ }
1007
+ ],
1008
+ "time": "2022-06-19T12:14:25+00:00"
1009
+ },
1010
+ {
1011
+ "name": "psr/container",
1012
+ "version": "2.0.2",
1013
+ "source": {
1014
+ "type": "git",
1015
+ "url": "https://github.com/php-fig/container.git",
1016
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
1017
+ },
1018
+ "dist": {
1019
+ "type": "zip",
1020
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1021
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1022
+ "shasum": ""
1023
+ },
1024
+ "require": {
1025
+ "php": ">=7.4.0"
1026
+ },
1027
+ "type": "library",
1028
+ "extra": {
1029
+ "branch-alias": {
1030
+ "dev-master": "2.0.x-dev"
1031
+ }
1032
+ },
1033
+ "autoload": {
1034
+ "psr-4": {
1035
+ "Psr\\Container\\": "src/"
1036
+ }
1037
+ },
1038
+ "notification-url": "https://packagist.org/downloads/",
1039
+ "license": [
1040
+ "MIT"
1041
+ ],
1042
+ "authors": [
1043
+ {
1044
+ "name": "PHP-FIG",
1045
+ "homepage": "https://www.php-fig.org/"
1046
+ }
1047
+ ],
1048
+ "description": "Common Container Interface (PHP FIG PSR-11)",
1049
+ "homepage": "https://github.com/php-fig/container",
1050
+ "keywords": [
1051
+ "PSR-11",
1052
+ "container",
1053
+ "container-interface",
1054
+ "container-interop",
1055
+ "psr"
1056
+ ],
1057
+ "support": {
1058
+ "issues": "https://github.com/php-fig/container/issues",
1059
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
1060
+ },
1061
+ "time": "2021-11-05T16:47:00+00:00"
1062
+ },
1063
+ {
1064
+ "name": "sebastian/cli-parser",
1065
+ "version": "1.0.1",
1066
+ "source": {
1067
+ "type": "git",
1068
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
1069
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
1070
+ },
1071
+ "dist": {
1072
+ "type": "zip",
1073
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1074
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1075
+ "shasum": ""
1076
+ },
1077
+ "require": {
1078
+ "php": ">=7.3"
1079
+ },
1080
+ "require-dev": {
1081
+ "phpunit/phpunit": "^9.3"
1082
+ },
1083
+ "type": "library",
1084
+ "extra": {
1085
+ "branch-alias": {
1086
+ "dev-master": "1.0-dev"
1087
+ }
1088
+ },
1089
+ "autoload": {
1090
+ "classmap": [
1091
+ "src/"
1092
+ ]
1093
+ },
1094
+ "notification-url": "https://packagist.org/downloads/",
1095
+ "license": [
1096
+ "BSD-3-Clause"
1097
+ ],
1098
+ "authors": [
1099
+ {
1100
+ "name": "Sebastian Bergmann",
1101
+ "email": "sebastian@phpunit.de",
1102
+ "role": "lead"
1103
+ }
1104
+ ],
1105
+ "description": "Library for parsing CLI options",
1106
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
1107
+ "support": {
1108
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
1109
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
1110
+ },
1111
+ "funding": [
1112
+ {
1113
+ "url": "https://github.com/sebastianbergmann",
1114
+ "type": "github"
1115
+ }
1116
+ ],
1117
+ "time": "2020-09-28T06:08:49+00:00"
1118
+ },
1119
+ {
1120
+ "name": "sebastian/code-unit",
1121
+ "version": "1.0.8",
1122
+ "source": {
1123
+ "type": "git",
1124
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
1125
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
1126
+ },
1127
+ "dist": {
1128
+ "type": "zip",
1129
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
1130
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
1131
+ "shasum": ""
1132
+ },
1133
+ "require": {
1134
+ "php": ">=7.3"
1135
+ },
1136
+ "require-dev": {
1137
+ "phpunit/phpunit": "^9.3"
1138
+ },
1139
+ "type": "library",
1140
+ "extra": {
1141
+ "branch-alias": {
1142
+ "dev-master": "1.0-dev"
1143
+ }
1144
+ },
1145
+ "autoload": {
1146
+ "classmap": [
1147
+ "src/"
1148
+ ]
1149
+ },
1150
+ "notification-url": "https://packagist.org/downloads/",
1151
+ "license": [
1152
+ "BSD-3-Clause"
1153
+ ],
1154
+ "authors": [
1155
+ {
1156
+ "name": "Sebastian Bergmann",
1157
+ "email": "sebastian@phpunit.de",
1158
+ "role": "lead"
1159
+ }
1160
+ ],
1161
+ "description": "Collection of value objects that represent the PHP code units",
1162
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
1163
+ "support": {
1164
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
1165
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
1166
+ },
1167
+ "funding": [
1168
+ {
1169
+ "url": "https://github.com/sebastianbergmann",
1170
+ "type": "github"
1171
+ }
1172
+ ],
1173
+ "time": "2020-10-26T13:08:54+00:00"
1174
+ },
1175
+ {
1176
+ "name": "sebastian/code-unit-reverse-lookup",
1177
+ "version": "2.0.3",
1178
+ "source": {
1179
+ "type": "git",
1180
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1181
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
1182
+ },
1183
+ "dist": {
1184
+ "type": "zip",
1185
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1186
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1187
+ "shasum": ""
1188
+ },
1189
+ "require": {
1190
+ "php": ">=7.3"
1191
+ },
1192
+ "require-dev": {
1193
+ "phpunit/phpunit": "^9.3"
1194
+ },
1195
+ "type": "library",
1196
+ "extra": {
1197
+ "branch-alias": {
1198
+ "dev-master": "2.0-dev"
1199
+ }
1200
+ },
1201
+ "autoload": {
1202
+ "classmap": [
1203
+ "src/"
1204
+ ]
1205
+ },
1206
+ "notification-url": "https://packagist.org/downloads/",
1207
+ "license": [
1208
+ "BSD-3-Clause"
1209
+ ],
1210
+ "authors": [
1211
+ {
1212
+ "name": "Sebastian Bergmann",
1213
+ "email": "sebastian@phpunit.de"
1214
+ }
1215
+ ],
1216
+ "description": "Looks up which function or method a line of code belongs to",
1217
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1218
+ "support": {
1219
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
1220
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
1221
+ },
1222
+ "funding": [
1223
+ {
1224
+ "url": "https://github.com/sebastianbergmann",
1225
+ "type": "github"
1226
+ }
1227
+ ],
1228
+ "time": "2020-09-28T05:30:19+00:00"
1229
+ },
1230
+ {
1231
+ "name": "sebastian/comparator",
1232
+ "version": "4.0.6",
1233
+ "source": {
1234
+ "type": "git",
1235
+ "url": "https://github.com/sebastianbergmann/comparator.git",
1236
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
1237
+ },
1238
+ "dist": {
1239
+ "type": "zip",
1240
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
1241
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
1242
+ "shasum": ""
1243
+ },
1244
+ "require": {
1245
+ "php": ">=7.3",
1246
+ "sebastian/diff": "^4.0",
1247
+ "sebastian/exporter": "^4.0"
1248
+ },
1249
+ "require-dev": {
1250
+ "phpunit/phpunit": "^9.3"
1251
+ },
1252
+ "type": "library",
1253
+ "extra": {
1254
+ "branch-alias": {
1255
+ "dev-master": "4.0-dev"
1256
+ }
1257
+ },
1258
+ "autoload": {
1259
+ "classmap": [
1260
+ "src/"
1261
+ ]
1262
+ },
1263
+ "notification-url": "https://packagist.org/downloads/",
1264
+ "license": [
1265
+ "BSD-3-Clause"
1266
+ ],
1267
+ "authors": [
1268
+ {
1269
+ "name": "Sebastian Bergmann",
1270
+ "email": "sebastian@phpunit.de"
1271
+ },
1272
+ {
1273
+ "name": "Jeff Welch",
1274
+ "email": "whatthejeff@gmail.com"
1275
+ },
1276
+ {
1277
+ "name": "Volker Dusch",
1278
+ "email": "github@wallbash.com"
1279
+ },
1280
+ {
1281
+ "name": "Bernhard Schussek",
1282
+ "email": "bschussek@2bepublished.at"
1283
+ }
1284
+ ],
1285
+ "description": "Provides the functionality to compare PHP values for equality",
1286
+ "homepage": "https://github.com/sebastianbergmann/comparator",
1287
+ "keywords": [
1288
+ "comparator",
1289
+ "compare",
1290
+ "equality"
1291
+ ],
1292
+ "support": {
1293
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
1294
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
1295
+ },
1296
+ "funding": [
1297
+ {
1298
+ "url": "https://github.com/sebastianbergmann",
1299
+ "type": "github"
1300
+ }
1301
+ ],
1302
+ "time": "2020-10-26T15:49:45+00:00"
1303
+ },
1304
+ {
1305
+ "name": "sebastian/complexity",
1306
+ "version": "2.0.2",
1307
+ "source": {
1308
+ "type": "git",
1309
+ "url": "https://github.com/sebastianbergmann/complexity.git",
1310
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
1311
+ },
1312
+ "dist": {
1313
+ "type": "zip",
1314
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
1315
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
1316
+ "shasum": ""
1317
+ },
1318
+ "require": {
1319
+ "nikic/php-parser": "^4.7",
1320
+ "php": ">=7.3"
1321
+ },
1322
+ "require-dev": {
1323
+ "phpunit/phpunit": "^9.3"
1324
+ },
1325
+ "type": "library",
1326
+ "extra": {
1327
+ "branch-alias": {
1328
+ "dev-master": "2.0-dev"
1329
+ }
1330
+ },
1331
+ "autoload": {
1332
+ "classmap": [
1333
+ "src/"
1334
+ ]
1335
+ },
1336
+ "notification-url": "https://packagist.org/downloads/",
1337
+ "license": [
1338
+ "BSD-3-Clause"
1339
+ ],
1340
+ "authors": [
1341
+ {
1342
+ "name": "Sebastian Bergmann",
1343
+ "email": "sebastian@phpunit.de",
1344
+ "role": "lead"
1345
+ }
1346
+ ],
1347
+ "description": "Library for calculating the complexity of PHP code units",
1348
+ "homepage": "https://github.com/sebastianbergmann/complexity",
1349
+ "support": {
1350
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
1351
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
1352
+ },
1353
+ "funding": [
1354
+ {
1355
+ "url": "https://github.com/sebastianbergmann",
1356
+ "type": "github"
1357
+ }
1358
+ ],
1359
+ "time": "2020-10-26T15:52:27+00:00"
1360
+ },
1361
+ {
1362
+ "name": "sebastian/diff",
1363
+ "version": "4.0.4",
1364
+ "source": {
1365
+ "type": "git",
1366
+ "url": "https://github.com/sebastianbergmann/diff.git",
1367
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
1368
+ },
1369
+ "dist": {
1370
+ "type": "zip",
1371
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
1372
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
1373
+ "shasum": ""
1374
+ },
1375
+ "require": {
1376
+ "php": ">=7.3"
1377
+ },
1378
+ "require-dev": {
1379
+ "phpunit/phpunit": "^9.3",
1380
+ "symfony/process": "^4.2 || ^5"
1381
+ },
1382
+ "type": "library",
1383
+ "extra": {
1384
+ "branch-alias": {
1385
+ "dev-master": "4.0-dev"
1386
+ }
1387
+ },
1388
+ "autoload": {
1389
+ "classmap": [
1390
+ "src/"
1391
+ ]
1392
+ },
1393
+ "notification-url": "https://packagist.org/downloads/",
1394
+ "license": [
1395
+ "BSD-3-Clause"
1396
+ ],
1397
+ "authors": [
1398
+ {
1399
+ "name": "Sebastian Bergmann",
1400
+ "email": "sebastian@phpunit.de"
1401
+ },
1402
+ {
1403
+ "name": "Kore Nordmann",
1404
+ "email": "mail@kore-nordmann.de"
1405
+ }
1406
+ ],
1407
+ "description": "Diff implementation",
1408
+ "homepage": "https://github.com/sebastianbergmann/diff",
1409
+ "keywords": [
1410
+ "diff",
1411
+ "udiff",
1412
+ "unidiff",
1413
+ "unified diff"
1414
+ ],
1415
+ "support": {
1416
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
1417
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
1418
+ },
1419
+ "funding": [
1420
+ {
1421
+ "url": "https://github.com/sebastianbergmann",
1422
+ "type": "github"
1423
+ }
1424
+ ],
1425
+ "time": "2020-10-26T13:10:38+00:00"
1426
+ },
1427
+ {
1428
+ "name": "sebastian/environment",
1429
+ "version": "5.1.4",
1430
+ "source": {
1431
+ "type": "git",
1432
+ "url": "https://github.com/sebastianbergmann/environment.git",
1433
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
1434
+ },
1435
+ "dist": {
1436
+ "type": "zip",
1437
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
1438
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
1439
+ "shasum": ""
1440
+ },
1441
+ "require": {
1442
+ "php": ">=7.3"
1443
+ },
1444
+ "require-dev": {
1445
+ "phpunit/phpunit": "^9.3"
1446
+ },
1447
+ "suggest": {
1448
+ "ext-posix": "*"
1449
+ },
1450
+ "type": "library",
1451
+ "extra": {
1452
+ "branch-alias": {
1453
+ "dev-master": "5.1-dev"
1454
+ }
1455
+ },
1456
+ "autoload": {
1457
+ "classmap": [
1458
+ "src/"
1459
+ ]
1460
+ },
1461
+ "notification-url": "https://packagist.org/downloads/",
1462
+ "license": [
1463
+ "BSD-3-Clause"
1464
+ ],
1465
+ "authors": [
1466
+ {
1467
+ "name": "Sebastian Bergmann",
1468
+ "email": "sebastian@phpunit.de"
1469
+ }
1470
+ ],
1471
+ "description": "Provides functionality to handle HHVM/PHP environments",
1472
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
1473
+ "keywords": [
1474
+ "Xdebug",
1475
+ "environment",
1476
+ "hhvm"
1477
+ ],
1478
+ "support": {
1479
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
1480
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
1481
+ },
1482
+ "funding": [
1483
+ {
1484
+ "url": "https://github.com/sebastianbergmann",
1485
+ "type": "github"
1486
+ }
1487
+ ],
1488
+ "time": "2022-04-03T09:37:03+00:00"
1489
+ },
1490
+ {
1491
+ "name": "sebastian/exporter",
1492
+ "version": "4.0.4",
1493
+ "source": {
1494
+ "type": "git",
1495
+ "url": "https://github.com/sebastianbergmann/exporter.git",
1496
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
1497
+ },
1498
+ "dist": {
1499
+ "type": "zip",
1500
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
1501
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
1502
+ "shasum": ""
1503
+ },
1504
+ "require": {
1505
+ "php": ">=7.3",
1506
+ "sebastian/recursion-context": "^4.0"
1507
+ },
1508
+ "require-dev": {
1509
+ "ext-mbstring": "*",
1510
+ "phpunit/phpunit": "^9.3"
1511
+ },
1512
+ "type": "library",
1513
+ "extra": {
1514
+ "branch-alias": {
1515
+ "dev-master": "4.0-dev"
1516
+ }
1517
+ },
1518
+ "autoload": {
1519
+ "classmap": [
1520
+ "src/"
1521
+ ]
1522
+ },
1523
+ "notification-url": "https://packagist.org/downloads/",
1524
+ "license": [
1525
+ "BSD-3-Clause"
1526
+ ],
1527
+ "authors": [
1528
+ {
1529
+ "name": "Sebastian Bergmann",
1530
+ "email": "sebastian@phpunit.de"
1531
+ },
1532
+ {
1533
+ "name": "Jeff Welch",
1534
+ "email": "whatthejeff@gmail.com"
1535
+ },
1536
+ {
1537
+ "name": "Volker Dusch",
1538
+ "email": "github@wallbash.com"
1539
+ },
1540
+ {
1541
+ "name": "Adam Harvey",
1542
+ "email": "aharvey@php.net"
1543
+ },
1544
+ {
1545
+ "name": "Bernhard Schussek",
1546
+ "email": "bschussek@gmail.com"
1547
+ }
1548
+ ],
1549
+ "description": "Provides the functionality to export PHP variables for visualization",
1550
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
1551
+ "keywords": [
1552
+ "export",
1553
+ "exporter"
1554
+ ],
1555
+ "support": {
1556
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
1557
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
1558
+ },
1559
+ "funding": [
1560
+ {
1561
+ "url": "https://github.com/sebastianbergmann",
1562
+ "type": "github"
1563
+ }
1564
+ ],
1565
+ "time": "2021-11-11T14:18:36+00:00"
1566
+ },
1567
+ {
1568
+ "name": "sebastian/global-state",
1569
+ "version": "5.0.5",
1570
+ "source": {
1571
+ "type": "git",
1572
+ "url": "https://github.com/sebastianbergmann/global-state.git",
1573
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
1574
+ },
1575
+ "dist": {
1576
+ "type": "zip",
1577
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
1578
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
1579
+ "shasum": ""
1580
+ },
1581
+ "require": {
1582
+ "php": ">=7.3",
1583
+ "sebastian/object-reflector": "^2.0",
1584
+ "sebastian/recursion-context": "^4.0"
1585
+ },
1586
+ "require-dev": {
1587
+ "ext-dom": "*",
1588
+ "phpunit/phpunit": "^9.3"
1589
+ },
1590
+ "suggest": {
1591
+ "ext-uopz": "*"
1592
+ },
1593
+ "type": "library",
1594
+ "extra": {
1595
+ "branch-alias": {
1596
+ "dev-master": "5.0-dev"
1597
+ }
1598
+ },
1599
+ "autoload": {
1600
+ "classmap": [
1601
+ "src/"
1602
+ ]
1603
+ },
1604
+ "notification-url": "https://packagist.org/downloads/",
1605
+ "license": [
1606
+ "BSD-3-Clause"
1607
+ ],
1608
+ "authors": [
1609
+ {
1610
+ "name": "Sebastian Bergmann",
1611
+ "email": "sebastian@phpunit.de"
1612
+ }
1613
+ ],
1614
+ "description": "Snapshotting of global state",
1615
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
1616
+ "keywords": [
1617
+ "global state"
1618
+ ],
1619
+ "support": {
1620
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
1621
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
1622
+ },
1623
+ "funding": [
1624
+ {
1625
+ "url": "https://github.com/sebastianbergmann",
1626
+ "type": "github"
1627
+ }
1628
+ ],
1629
+ "time": "2022-02-14T08:28:10+00:00"
1630
+ },
1631
+ {
1632
+ "name": "sebastian/lines-of-code",
1633
+ "version": "1.0.3",
1634
+ "source": {
1635
+ "type": "git",
1636
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
1637
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
1638
+ },
1639
+ "dist": {
1640
+ "type": "zip",
1641
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
1642
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
1643
+ "shasum": ""
1644
+ },
1645
+ "require": {
1646
+ "nikic/php-parser": "^4.6",
1647
+ "php": ">=7.3"
1648
+ },
1649
+ "require-dev": {
1650
+ "phpunit/phpunit": "^9.3"
1651
+ },
1652
+ "type": "library",
1653
+ "extra": {
1654
+ "branch-alias": {
1655
+ "dev-master": "1.0-dev"
1656
+ }
1657
+ },
1658
+ "autoload": {
1659
+ "classmap": [
1660
+ "src/"
1661
+ ]
1662
+ },
1663
+ "notification-url": "https://packagist.org/downloads/",
1664
+ "license": [
1665
+ "BSD-3-Clause"
1666
+ ],
1667
+ "authors": [
1668
+ {
1669
+ "name": "Sebastian Bergmann",
1670
+ "email": "sebastian@phpunit.de",
1671
+ "role": "lead"
1672
+ }
1673
+ ],
1674
+ "description": "Library for counting the lines of code in PHP source code",
1675
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
1676
+ "support": {
1677
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
1678
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
1679
+ },
1680
+ "funding": [
1681
+ {
1682
+ "url": "https://github.com/sebastianbergmann",
1683
+ "type": "github"
1684
+ }
1685
+ ],
1686
+ "time": "2020-11-28T06:42:11+00:00"
1687
+ },
1688
+ {
1689
+ "name": "sebastian/object-enumerator",
1690
+ "version": "4.0.4",
1691
+ "source": {
1692
+ "type": "git",
1693
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
1694
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
1695
+ },
1696
+ "dist": {
1697
+ "type": "zip",
1698
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
1699
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
1700
+ "shasum": ""
1701
+ },
1702
+ "require": {
1703
+ "php": ">=7.3",
1704
+ "sebastian/object-reflector": "^2.0",
1705
+ "sebastian/recursion-context": "^4.0"
1706
+ },
1707
+ "require-dev": {
1708
+ "phpunit/phpunit": "^9.3"
1709
+ },
1710
+ "type": "library",
1711
+ "extra": {
1712
+ "branch-alias": {
1713
+ "dev-master": "4.0-dev"
1714
+ }
1715
+ },
1716
+ "autoload": {
1717
+ "classmap": [
1718
+ "src/"
1719
+ ]
1720
+ },
1721
+ "notification-url": "https://packagist.org/downloads/",
1722
+ "license": [
1723
+ "BSD-3-Clause"
1724
+ ],
1725
+ "authors": [
1726
+ {
1727
+ "name": "Sebastian Bergmann",
1728
+ "email": "sebastian@phpunit.de"
1729
+ }
1730
+ ],
1731
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1732
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1733
+ "support": {
1734
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
1735
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
1736
+ },
1737
+ "funding": [
1738
+ {
1739
+ "url": "https://github.com/sebastianbergmann",
1740
+ "type": "github"
1741
+ }
1742
+ ],
1743
+ "time": "2020-10-26T13:12:34+00:00"
1744
+ },
1745
+ {
1746
+ "name": "sebastian/object-reflector",
1747
+ "version": "2.0.4",
1748
+ "source": {
1749
+ "type": "git",
1750
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
1751
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
1752
+ },
1753
+ "dist": {
1754
+ "type": "zip",
1755
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
1756
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
1757
+ "shasum": ""
1758
+ },
1759
+ "require": {
1760
+ "php": ">=7.3"
1761
+ },
1762
+ "require-dev": {
1763
+ "phpunit/phpunit": "^9.3"
1764
+ },
1765
+ "type": "library",
1766
+ "extra": {
1767
+ "branch-alias": {
1768
+ "dev-master": "2.0-dev"
1769
+ }
1770
+ },
1771
+ "autoload": {
1772
+ "classmap": [
1773
+ "src/"
1774
+ ]
1775
+ },
1776
+ "notification-url": "https://packagist.org/downloads/",
1777
+ "license": [
1778
+ "BSD-3-Clause"
1779
+ ],
1780
+ "authors": [
1781
+ {
1782
+ "name": "Sebastian Bergmann",
1783
+ "email": "sebastian@phpunit.de"
1784
+ }
1785
+ ],
1786
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
1787
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
1788
+ "support": {
1789
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
1790
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
1791
+ },
1792
+ "funding": [
1793
+ {
1794
+ "url": "https://github.com/sebastianbergmann",
1795
+ "type": "github"
1796
+ }
1797
+ ],
1798
+ "time": "2020-10-26T13:14:26+00:00"
1799
+ },
1800
+ {
1801
+ "name": "sebastian/recursion-context",
1802
+ "version": "4.0.4",
1803
+ "source": {
1804
+ "type": "git",
1805
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
1806
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
1807
+ },
1808
+ "dist": {
1809
+ "type": "zip",
1810
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
1811
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
1812
+ "shasum": ""
1813
+ },
1814
+ "require": {
1815
+ "php": ">=7.3"
1816
+ },
1817
+ "require-dev": {
1818
+ "phpunit/phpunit": "^9.3"
1819
+ },
1820
+ "type": "library",
1821
+ "extra": {
1822
+ "branch-alias": {
1823
+ "dev-master": "4.0-dev"
1824
+ }
1825
+ },
1826
+ "autoload": {
1827
+ "classmap": [
1828
+ "src/"
1829
+ ]
1830
+ },
1831
+ "notification-url": "https://packagist.org/downloads/",
1832
+ "license": [
1833
+ "BSD-3-Clause"
1834
+ ],
1835
+ "authors": [
1836
+ {
1837
+ "name": "Sebastian Bergmann",
1838
+ "email": "sebastian@phpunit.de"
1839
+ },
1840
+ {
1841
+ "name": "Jeff Welch",
1842
+ "email": "whatthejeff@gmail.com"
1843
+ },
1844
+ {
1845
+ "name": "Adam Harvey",
1846
+ "email": "aharvey@php.net"
1847
+ }
1848
+ ],
1849
+ "description": "Provides functionality to recursively process PHP variables",
1850
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1851
+ "support": {
1852
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
1853
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
1854
+ },
1855
+ "funding": [
1856
+ {
1857
+ "url": "https://github.com/sebastianbergmann",
1858
+ "type": "github"
1859
+ }
1860
+ ],
1861
+ "time": "2020-10-26T13:17:30+00:00"
1862
+ },
1863
+ {
1864
+ "name": "sebastian/resource-operations",
1865
+ "version": "3.0.3",
1866
+ "source": {
1867
+ "type": "git",
1868
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
1869
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
1870
+ },
1871
+ "dist": {
1872
+ "type": "zip",
1873
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
1874
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
1875
+ "shasum": ""
1876
+ },
1877
+ "require": {
1878
+ "php": ">=7.3"
1879
+ },
1880
+ "require-dev": {
1881
+ "phpunit/phpunit": "^9.0"
1882
+ },
1883
+ "type": "library",
1884
+ "extra": {
1885
+ "branch-alias": {
1886
+ "dev-master": "3.0-dev"
1887
+ }
1888
+ },
1889
+ "autoload": {
1890
+ "classmap": [
1891
+ "src/"
1892
+ ]
1893
+ },
1894
+ "notification-url": "https://packagist.org/downloads/",
1895
+ "license": [
1896
+ "BSD-3-Clause"
1897
+ ],
1898
+ "authors": [
1899
+ {
1900
+ "name": "Sebastian Bergmann",
1901
+ "email": "sebastian@phpunit.de"
1902
+ }
1903
+ ],
1904
+ "description": "Provides a list of PHP built-in functions that operate on resources",
1905
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1906
+ "support": {
1907
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
1908
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
1909
+ },
1910
+ "funding": [
1911
+ {
1912
+ "url": "https://github.com/sebastianbergmann",
1913
+ "type": "github"
1914
+ }
1915
+ ],
1916
+ "time": "2020-09-28T06:45:17+00:00"
1917
+ },
1918
+ {
1919
+ "name": "sebastian/type",
1920
+ "version": "3.0.0",
1921
+ "source": {
1922
+ "type": "git",
1923
+ "url": "https://github.com/sebastianbergmann/type.git",
1924
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
1925
+ },
1926
+ "dist": {
1927
+ "type": "zip",
1928
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
1929
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
1930
+ "shasum": ""
1931
+ },
1932
+ "require": {
1933
+ "php": ">=7.3"
1934
+ },
1935
+ "require-dev": {
1936
+ "phpunit/phpunit": "^9.5"
1937
+ },
1938
+ "type": "library",
1939
+ "extra": {
1940
+ "branch-alias": {
1941
+ "dev-master": "3.0-dev"
1942
+ }
1943
+ },
1944
+ "autoload": {
1945
+ "classmap": [
1946
+ "src/"
1947
+ ]
1948
+ },
1949
+ "notification-url": "https://packagist.org/downloads/",
1950
+ "license": [
1951
+ "BSD-3-Clause"
1952
+ ],
1953
+ "authors": [
1954
+ {
1955
+ "name": "Sebastian Bergmann",
1956
+ "email": "sebastian@phpunit.de",
1957
+ "role": "lead"
1958
+ }
1959
+ ],
1960
+ "description": "Collection of value objects that represent the types of the PHP type system",
1961
+ "homepage": "https://github.com/sebastianbergmann/type",
1962
+ "support": {
1963
+ "issues": "https://github.com/sebastianbergmann/type/issues",
1964
+ "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
1965
+ },
1966
+ "funding": [
1967
+ {
1968
+ "url": "https://github.com/sebastianbergmann",
1969
+ "type": "github"
1970
+ }
1971
+ ],
1972
+ "time": "2022-03-15T09:54:48+00:00"
1973
+ },
1974
+ {
1975
+ "name": "sebastian/version",
1976
+ "version": "3.0.2",
1977
+ "source": {
1978
+ "type": "git",
1979
+ "url": "https://github.com/sebastianbergmann/version.git",
1980
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
1981
+ },
1982
+ "dist": {
1983
+ "type": "zip",
1984
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
1985
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
1986
+ "shasum": ""
1987
+ },
1988
+ "require": {
1989
+ "php": ">=7.3"
1990
+ },
1991
+ "type": "library",
1992
+ "extra": {
1993
+ "branch-alias": {
1994
+ "dev-master": "3.0-dev"
1995
+ }
1996
+ },
1997
+ "autoload": {
1998
+ "classmap": [
1999
+ "src/"
2000
+ ]
2001
+ },
2002
+ "notification-url": "https://packagist.org/downloads/",
2003
+ "license": [
2004
+ "BSD-3-Clause"
2005
+ ],
2006
+ "authors": [
2007
+ {
2008
+ "name": "Sebastian Bergmann",
2009
+ "email": "sebastian@phpunit.de",
2010
+ "role": "lead"
2011
+ }
2012
+ ],
2013
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2014
+ "homepage": "https://github.com/sebastianbergmann/version",
2015
+ "support": {
2016
+ "issues": "https://github.com/sebastianbergmann/version/issues",
2017
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
2018
+ },
2019
+ "funding": [
2020
+ {
2021
+ "url": "https://github.com/sebastianbergmann",
2022
+ "type": "github"
2023
+ }
2024
+ ],
2025
+ "time": "2020-09-28T06:39:44+00:00"
2026
+ },
2027
+ {
2028
+ "name": "symfony/console",
2029
+ "version": "v6.0.11",
2030
+ "source": {
2031
+ "type": "git",
2032
+ "url": "https://github.com/symfony/console.git",
2033
+ "reference": "09b8e50f09bf0e5bbde9b61b19d7f53751114725"
2034
+ },
2035
+ "dist": {
2036
+ "type": "zip",
2037
+ "url": "https://api.github.com/repos/symfony/console/zipball/09b8e50f09bf0e5bbde9b61b19d7f53751114725",
2038
+ "reference": "09b8e50f09bf0e5bbde9b61b19d7f53751114725",
2039
+ "shasum": ""
2040
+ },
2041
+ "require": {
2042
+ "php": ">=8.0.2",
2043
+ "symfony/polyfill-mbstring": "~1.0",
2044
+ "symfony/service-contracts": "^1.1|^2|^3",
2045
+ "symfony/string": "^5.4|^6.0"
2046
+ },
2047
+ "conflict": {
2048
+ "symfony/dependency-injection": "<5.4",
2049
+ "symfony/dotenv": "<5.4",
2050
+ "symfony/event-dispatcher": "<5.4",
2051
+ "symfony/lock": "<5.4",
2052
+ "symfony/process": "<5.4"
2053
+ },
2054
+ "provide": {
2055
+ "psr/log-implementation": "1.0|2.0|3.0"
2056
+ },
2057
+ "require-dev": {
2058
+ "psr/log": "^1|^2|^3",
2059
+ "symfony/config": "^5.4|^6.0",
2060
+ "symfony/dependency-injection": "^5.4|^6.0",
2061
+ "symfony/event-dispatcher": "^5.4|^6.0",
2062
+ "symfony/lock": "^5.4|^6.0",
2063
+ "symfony/process": "^5.4|^6.0",
2064
+ "symfony/var-dumper": "^5.4|^6.0"
2065
+ },
2066
+ "suggest": {
2067
+ "psr/log": "For using the console logger",
2068
+ "symfony/event-dispatcher": "",
2069
+ "symfony/lock": "",
2070
+ "symfony/process": ""
2071
+ },
2072
+ "type": "library",
2073
+ "autoload": {
2074
+ "psr-4": {
2075
+ "Symfony\\Component\\Console\\": ""
2076
+ },
2077
+ "exclude-from-classmap": [
2078
+ "/Tests/"
2079
+ ]
2080
+ },
2081
+ "notification-url": "https://packagist.org/downloads/",
2082
+ "license": [
2083
+ "MIT"
2084
+ ],
2085
+ "authors": [
2086
+ {
2087
+ "name": "Fabien Potencier",
2088
+ "email": "fabien@symfony.com"
2089
+ },
2090
+ {
2091
+ "name": "Symfony Community",
2092
+ "homepage": "https://symfony.com/contributors"
2093
+ }
2094
+ ],
2095
+ "description": "Eases the creation of beautiful and testable command line interfaces",
2096
+ "homepage": "https://symfony.com",
2097
+ "keywords": [
2098
+ "cli",
2099
+ "command line",
2100
+ "console",
2101
+ "terminal"
2102
+ ],
2103
+ "support": {
2104
+ "source": "https://github.com/symfony/console/tree/v6.0.11"
2105
+ },
2106
+ "funding": [
2107
+ {
2108
+ "url": "https://symfony.com/sponsor",
2109
+ "type": "custom"
2110
+ },
2111
+ {
2112
+ "url": "https://github.com/fabpot",
2113
+ "type": "github"
2114
+ },
2115
+ {
2116
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2117
+ "type": "tidelift"
2118
+ }
2119
+ ],
2120
+ "time": "2022-07-22T14:17:38+00:00"
2121
+ },
2122
+ {
2123
+ "name": "symfony/polyfill-ctype",
2124
+ "version": "v1.26.0",
2125
+ "source": {
2126
+ "type": "git",
2127
+ "url": "https://github.com/symfony/polyfill-ctype.git",
2128
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
2129
+ },
2130
+ "dist": {
2131
+ "type": "zip",
2132
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
2133
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
2134
+ "shasum": ""
2135
+ },
2136
+ "require": {
2137
+ "php": ">=7.1"
2138
+ },
2139
+ "provide": {
2140
+ "ext-ctype": "*"
2141
+ },
2142
+ "suggest": {
2143
+ "ext-ctype": "For best performance"
2144
+ },
2145
+ "type": "library",
2146
+ "extra": {
2147
+ "branch-alias": {
2148
+ "dev-main": "1.26-dev"
2149
+ },
2150
+ "thanks": {
2151
+ "name": "symfony/polyfill",
2152
+ "url": "https://github.com/symfony/polyfill"
2153
+ }
2154
+ },
2155
+ "autoload": {
2156
+ "files": [
2157
+ "bootstrap.php"
2158
+ ],
2159
+ "psr-4": {
2160
+ "Symfony\\Polyfill\\Ctype\\": ""
2161
+ }
2162
+ },
2163
+ "notification-url": "https://packagist.org/downloads/",
2164
+ "license": [
2165
+ "MIT"
2166
+ ],
2167
+ "authors": [
2168
+ {
2169
+ "name": "Gert de Pagter",
2170
+ "email": "BackEndTea@gmail.com"
2171
+ },
2172
+ {
2173
+ "name": "Symfony Community",
2174
+ "homepage": "https://symfony.com/contributors"
2175
+ }
2176
+ ],
2177
+ "description": "Symfony polyfill for ctype functions",
2178
+ "homepage": "https://symfony.com",
2179
+ "keywords": [
2180
+ "compatibility",
2181
+ "ctype",
2182
+ "polyfill",
2183
+ "portable"
2184
+ ],
2185
+ "support": {
2186
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
2187
+ },
2188
+ "funding": [
2189
+ {
2190
+ "url": "https://symfony.com/sponsor",
2191
+ "type": "custom"
2192
+ },
2193
+ {
2194
+ "url": "https://github.com/fabpot",
2195
+ "type": "github"
2196
+ },
2197
+ {
2198
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2199
+ "type": "tidelift"
2200
+ }
2201
+ ],
2202
+ "time": "2022-05-24T11:49:31+00:00"
2203
+ },
2204
+ {
2205
+ "name": "symfony/polyfill-intl-grapheme",
2206
+ "version": "v1.26.0",
2207
+ "source": {
2208
+ "type": "git",
2209
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
2210
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2"
2211
+ },
2212
+ "dist": {
2213
+ "type": "zip",
2214
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
2215
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2",
2216
+ "shasum": ""
2217
+ },
2218
+ "require": {
2219
+ "php": ">=7.1"
2220
+ },
2221
+ "suggest": {
2222
+ "ext-intl": "For best performance"
2223
+ },
2224
+ "type": "library",
2225
+ "extra": {
2226
+ "branch-alias": {
2227
+ "dev-main": "1.26-dev"
2228
+ },
2229
+ "thanks": {
2230
+ "name": "symfony/polyfill",
2231
+ "url": "https://github.com/symfony/polyfill"
2232
+ }
2233
+ },
2234
+ "autoload": {
2235
+ "files": [
2236
+ "bootstrap.php"
2237
+ ],
2238
+ "psr-4": {
2239
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
2240
+ }
2241
+ },
2242
+ "notification-url": "https://packagist.org/downloads/",
2243
+ "license": [
2244
+ "MIT"
2245
+ ],
2246
+ "authors": [
2247
+ {
2248
+ "name": "Nicolas Grekas",
2249
+ "email": "p@tchwork.com"
2250
+ },
2251
+ {
2252
+ "name": "Symfony Community",
2253
+ "homepage": "https://symfony.com/contributors"
2254
+ }
2255
+ ],
2256
+ "description": "Symfony polyfill for intl's grapheme_* functions",
2257
+ "homepage": "https://symfony.com",
2258
+ "keywords": [
2259
+ "compatibility",
2260
+ "grapheme",
2261
+ "intl",
2262
+ "polyfill",
2263
+ "portable",
2264
+ "shim"
2265
+ ],
2266
+ "support": {
2267
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
2268
+ },
2269
+ "funding": [
2270
+ {
2271
+ "url": "https://symfony.com/sponsor",
2272
+ "type": "custom"
2273
+ },
2274
+ {
2275
+ "url": "https://github.com/fabpot",
2276
+ "type": "github"
2277
+ },
2278
+ {
2279
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2280
+ "type": "tidelift"
2281
+ }
2282
+ ],
2283
+ "time": "2022-05-24T11:49:31+00:00"
2284
+ },
2285
+ {
2286
+ "name": "symfony/polyfill-intl-normalizer",
2287
+ "version": "v1.26.0",
2288
+ "source": {
2289
+ "type": "git",
2290
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
2291
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd"
2292
+ },
2293
+ "dist": {
2294
+ "type": "zip",
2295
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
2296
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd",
2297
+ "shasum": ""
2298
+ },
2299
+ "require": {
2300
+ "php": ">=7.1"
2301
+ },
2302
+ "suggest": {
2303
+ "ext-intl": "For best performance"
2304
+ },
2305
+ "type": "library",
2306
+ "extra": {
2307
+ "branch-alias": {
2308
+ "dev-main": "1.26-dev"
2309
+ },
2310
+ "thanks": {
2311
+ "name": "symfony/polyfill",
2312
+ "url": "https://github.com/symfony/polyfill"
2313
+ }
2314
+ },
2315
+ "autoload": {
2316
+ "files": [
2317
+ "bootstrap.php"
2318
+ ],
2319
+ "psr-4": {
2320
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
2321
+ },
2322
+ "classmap": [
2323
+ "Resources/stubs"
2324
+ ]
2325
+ },
2326
+ "notification-url": "https://packagist.org/downloads/",
2327
+ "license": [
2328
+ "MIT"
2329
+ ],
2330
+ "authors": [
2331
+ {
2332
+ "name": "Nicolas Grekas",
2333
+ "email": "p@tchwork.com"
2334
+ },
2335
+ {
2336
+ "name": "Symfony Community",
2337
+ "homepage": "https://symfony.com/contributors"
2338
+ }
2339
+ ],
2340
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
2341
+ "homepage": "https://symfony.com",
2342
+ "keywords": [
2343
+ "compatibility",
2344
+ "intl",
2345
+ "normalizer",
2346
+ "polyfill",
2347
+ "portable",
2348
+ "shim"
2349
+ ],
2350
+ "support": {
2351
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
2352
+ },
2353
+ "funding": [
2354
+ {
2355
+ "url": "https://symfony.com/sponsor",
2356
+ "type": "custom"
2357
+ },
2358
+ {
2359
+ "url": "https://github.com/fabpot",
2360
+ "type": "github"
2361
+ },
2362
+ {
2363
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2364
+ "type": "tidelift"
2365
+ }
2366
+ ],
2367
+ "time": "2022-05-24T11:49:31+00:00"
2368
+ },
2369
+ {
2370
+ "name": "symfony/polyfill-mbstring",
2371
+ "version": "v1.26.0",
2372
+ "source": {
2373
+ "type": "git",
2374
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
2375
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
2376
+ },
2377
+ "dist": {
2378
+ "type": "zip",
2379
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
2380
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
2381
+ "shasum": ""
2382
+ },
2383
+ "require": {
2384
+ "php": ">=7.1"
2385
+ },
2386
+ "provide": {
2387
+ "ext-mbstring": "*"
2388
+ },
2389
+ "suggest": {
2390
+ "ext-mbstring": "For best performance"
2391
+ },
2392
+ "type": "library",
2393
+ "extra": {
2394
+ "branch-alias": {
2395
+ "dev-main": "1.26-dev"
2396
+ },
2397
+ "thanks": {
2398
+ "name": "symfony/polyfill",
2399
+ "url": "https://github.com/symfony/polyfill"
2400
+ }
2401
+ },
2402
+ "autoload": {
2403
+ "files": [
2404
+ "bootstrap.php"
2405
+ ],
2406
+ "psr-4": {
2407
+ "Symfony\\Polyfill\\Mbstring\\": ""
2408
+ }
2409
+ },
2410
+ "notification-url": "https://packagist.org/downloads/",
2411
+ "license": [
2412
+ "MIT"
2413
+ ],
2414
+ "authors": [
2415
+ {
2416
+ "name": "Nicolas Grekas",
2417
+ "email": "p@tchwork.com"
2418
+ },
2419
+ {
2420
+ "name": "Symfony Community",
2421
+ "homepage": "https://symfony.com/contributors"
2422
+ }
2423
+ ],
2424
+ "description": "Symfony polyfill for the Mbstring extension",
2425
+ "homepage": "https://symfony.com",
2426
+ "keywords": [
2427
+ "compatibility",
2428
+ "mbstring",
2429
+ "polyfill",
2430
+ "portable",
2431
+ "shim"
2432
+ ],
2433
+ "support": {
2434
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
2435
+ },
2436
+ "funding": [
2437
+ {
2438
+ "url": "https://symfony.com/sponsor",
2439
+ "type": "custom"
2440
+ },
2441
+ {
2442
+ "url": "https://github.com/fabpot",
2443
+ "type": "github"
2444
+ },
2445
+ {
2446
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2447
+ "type": "tidelift"
2448
+ }
2449
+ ],
2450
+ "time": "2022-05-24T11:49:31+00:00"
2451
+ },
2452
+ {
2453
+ "name": "symfony/process",
2454
+ "version": "v6.0.11",
2455
+ "source": {
2456
+ "type": "git",
2457
+ "url": "https://github.com/symfony/process.git",
2458
+ "reference": "44270a08ccb664143dede554ff1c00aaa2247a43"
2459
+ },
2460
+ "dist": {
2461
+ "type": "zip",
2462
+ "url": "https://api.github.com/repos/symfony/process/zipball/44270a08ccb664143dede554ff1c00aaa2247a43",
2463
+ "reference": "44270a08ccb664143dede554ff1c00aaa2247a43",
2464
+ "shasum": ""
2465
+ },
2466
+ "require": {
2467
+ "php": ">=8.0.2"
2468
+ },
2469
+ "type": "library",
2470
+ "autoload": {
2471
+ "psr-4": {
2472
+ "Symfony\\Component\\Process\\": ""
2473
+ },
2474
+ "exclude-from-classmap": [
2475
+ "/Tests/"
2476
+ ]
2477
+ },
2478
+ "notification-url": "https://packagist.org/downloads/",
2479
+ "license": [
2480
+ "MIT"
2481
+ ],
2482
+ "authors": [
2483
+ {
2484
+ "name": "Fabien Potencier",
2485
+ "email": "fabien@symfony.com"
2486
+ },
2487
+ {
2488
+ "name": "Symfony Community",
2489
+ "homepage": "https://symfony.com/contributors"
2490
+ }
2491
+ ],
2492
+ "description": "Executes commands in sub-processes",
2493
+ "homepage": "https://symfony.com",
2494
+ "support": {
2495
+ "source": "https://github.com/symfony/process/tree/v6.0.11"
2496
+ },
2497
+ "funding": [
2498
+ {
2499
+ "url": "https://symfony.com/sponsor",
2500
+ "type": "custom"
2501
+ },
2502
+ {
2503
+ "url": "https://github.com/fabpot",
2504
+ "type": "github"
2505
+ },
2506
+ {
2507
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2508
+ "type": "tidelift"
2509
+ }
2510
+ ],
2511
+ "time": "2022-06-27T17:10:44+00:00"
2512
+ },
2513
+ {
2514
+ "name": "symfony/service-contracts",
2515
+ "version": "v3.0.2",
2516
+ "source": {
2517
+ "type": "git",
2518
+ "url": "https://github.com/symfony/service-contracts.git",
2519
+ "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
2520
+ },
2521
+ "dist": {
2522
+ "type": "zip",
2523
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
2524
+ "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
2525
+ "shasum": ""
2526
+ },
2527
+ "require": {
2528
+ "php": ">=8.0.2",
2529
+ "psr/container": "^2.0"
2530
+ },
2531
+ "conflict": {
2532
+ "ext-psr": "<1.1|>=2"
2533
+ },
2534
+ "suggest": {
2535
+ "symfony/service-implementation": ""
2536
+ },
2537
+ "type": "library",
2538
+ "extra": {
2539
+ "branch-alias": {
2540
+ "dev-main": "3.0-dev"
2541
+ },
2542
+ "thanks": {
2543
+ "name": "symfony/contracts",
2544
+ "url": "https://github.com/symfony/contracts"
2545
+ }
2546
+ },
2547
+ "autoload": {
2548
+ "psr-4": {
2549
+ "Symfony\\Contracts\\Service\\": ""
2550
+ }
2551
+ },
2552
+ "notification-url": "https://packagist.org/downloads/",
2553
+ "license": [
2554
+ "MIT"
2555
+ ],
2556
+ "authors": [
2557
+ {
2558
+ "name": "Nicolas Grekas",
2559
+ "email": "p@tchwork.com"
2560
+ },
2561
+ {
2562
+ "name": "Symfony Community",
2563
+ "homepage": "https://symfony.com/contributors"
2564
+ }
2565
+ ],
2566
+ "description": "Generic abstractions related to writing services",
2567
+ "homepage": "https://symfony.com",
2568
+ "keywords": [
2569
+ "abstractions",
2570
+ "contracts",
2571
+ "decoupling",
2572
+ "interfaces",
2573
+ "interoperability",
2574
+ "standards"
2575
+ ],
2576
+ "support": {
2577
+ "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
2578
+ },
2579
+ "funding": [
2580
+ {
2581
+ "url": "https://symfony.com/sponsor",
2582
+ "type": "custom"
2583
+ },
2584
+ {
2585
+ "url": "https://github.com/fabpot",
2586
+ "type": "github"
2587
+ },
2588
+ {
2589
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2590
+ "type": "tidelift"
2591
+ }
2592
+ ],
2593
+ "time": "2022-05-30T19:17:58+00:00"
2594
+ },
2595
+ {
2596
+ "name": "symfony/string",
2597
+ "version": "v6.0.11",
2598
+ "source": {
2599
+ "type": "git",
2600
+ "url": "https://github.com/symfony/string.git",
2601
+ "reference": "042b6bf0f6ccca6d456a0572eb788cfb8b1ff809"
2602
+ },
2603
+ "dist": {
2604
+ "type": "zip",
2605
+ "url": "https://api.github.com/repos/symfony/string/zipball/042b6bf0f6ccca6d456a0572eb788cfb8b1ff809",
2606
+ "reference": "042b6bf0f6ccca6d456a0572eb788cfb8b1ff809",
2607
+ "shasum": ""
2608
+ },
2609
+ "require": {
2610
+ "php": ">=8.0.2",
2611
+ "symfony/polyfill-ctype": "~1.8",
2612
+ "symfony/polyfill-intl-grapheme": "~1.0",
2613
+ "symfony/polyfill-intl-normalizer": "~1.0",
2614
+ "symfony/polyfill-mbstring": "~1.0"
2615
+ },
2616
+ "conflict": {
2617
+ "symfony/translation-contracts": "<2.0"
2618
+ },
2619
+ "require-dev": {
2620
+ "symfony/error-handler": "^5.4|^6.0",
2621
+ "symfony/http-client": "^5.4|^6.0",
2622
+ "symfony/translation-contracts": "^2.0|^3.0",
2623
+ "symfony/var-exporter": "^5.4|^6.0"
2624
+ },
2625
+ "type": "library",
2626
+ "autoload": {
2627
+ "files": [
2628
+ "Resources/functions.php"
2629
+ ],
2630
+ "psr-4": {
2631
+ "Symfony\\Component\\String\\": ""
2632
+ },
2633
+ "exclude-from-classmap": [
2634
+ "/Tests/"
2635
+ ]
2636
+ },
2637
+ "notification-url": "https://packagist.org/downloads/",
2638
+ "license": [
2639
+ "MIT"
2640
+ ],
2641
+ "authors": [
2642
+ {
2643
+ "name": "Nicolas Grekas",
2644
+ "email": "p@tchwork.com"
2645
+ },
2646
+ {
2647
+ "name": "Symfony Community",
2648
+ "homepage": "https://symfony.com/contributors"
2649
+ }
2650
+ ],
2651
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
2652
+ "homepage": "https://symfony.com",
2653
+ "keywords": [
2654
+ "grapheme",
2655
+ "i18n",
2656
+ "string",
2657
+ "unicode",
2658
+ "utf-8",
2659
+ "utf8"
2660
+ ],
2661
+ "support": {
2662
+ "source": "https://github.com/symfony/string/tree/v6.0.11"
2663
+ },
2664
+ "funding": [
2665
+ {
2666
+ "url": "https://symfony.com/sponsor",
2667
+ "type": "custom"
2668
+ },
2669
+ {
2670
+ "url": "https://github.com/fabpot",
2671
+ "type": "github"
2672
+ },
2673
+ {
2674
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2675
+ "type": "tidelift"
2676
+ }
2677
+ ],
2678
+ "time": "2022-07-27T15:50:26+00:00"
2679
+ },
2680
+ {
2681
+ "name": "theseer/tokenizer",
2682
+ "version": "1.2.1",
2683
+ "source": {
2684
+ "type": "git",
2685
+ "url": "https://github.com/theseer/tokenizer.git",
2686
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
2687
+ },
2688
+ "dist": {
2689
+ "type": "zip",
2690
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
2691
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
2692
+ "shasum": ""
2693
+ },
2694
+ "require": {
2695
+ "ext-dom": "*",
2696
+ "ext-tokenizer": "*",
2697
+ "ext-xmlwriter": "*",
2698
+ "php": "^7.2 || ^8.0"
2699
+ },
2700
+ "type": "library",
2701
+ "autoload": {
2702
+ "classmap": [
2703
+ "src/"
2704
+ ]
2705
+ },
2706
+ "notification-url": "https://packagist.org/downloads/",
2707
+ "license": [
2708
+ "BSD-3-Clause"
2709
+ ],
2710
+ "authors": [
2711
+ {
2712
+ "name": "Arne Blankerts",
2713
+ "email": "arne@blankerts.de",
2714
+ "role": "Developer"
2715
+ }
2716
+ ],
2717
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2718
+ "support": {
2719
+ "issues": "https://github.com/theseer/tokenizer/issues",
2720
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
2721
+ },
2722
+ "funding": [
2723
+ {
2724
+ "url": "https://github.com/theseer",
2725
+ "type": "github"
2726
+ }
2727
+ ],
2728
+ "time": "2021-07-28T10:34:58+00:00"
2729
+ },
2730
+ {
2731
+ "name": "webmozart/assert",
2732
+ "version": "1.11.0",
2733
+ "source": {
2734
+ "type": "git",
2735
+ "url": "https://github.com/webmozarts/assert.git",
2736
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
2737
+ },
2738
+ "dist": {
2739
+ "type": "zip",
2740
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
2741
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
2742
+ "shasum": ""
2743
+ },
2744
+ "require": {
2745
+ "ext-ctype": "*",
2746
+ "php": "^7.2 || ^8.0"
2747
+ },
2748
+ "conflict": {
2749
+ "phpstan/phpstan": "<0.12.20",
2750
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
2751
+ },
2752
+ "require-dev": {
2753
+ "phpunit/phpunit": "^8.5.13"
2754
+ },
2755
+ "type": "library",
2756
+ "extra": {
2757
+ "branch-alias": {
2758
+ "dev-master": "1.10-dev"
2759
+ }
2760
+ },
2761
+ "autoload": {
2762
+ "psr-4": {
2763
+ "Webmozart\\Assert\\": "src/"
2764
+ }
2765
+ },
2766
+ "notification-url": "https://packagist.org/downloads/",
2767
+ "license": [
2768
+ "MIT"
2769
+ ],
2770
+ "authors": [
2771
+ {
2772
+ "name": "Bernhard Schussek",
2773
+ "email": "bschussek@gmail.com"
2774
+ }
2775
+ ],
2776
+ "description": "Assertions to validate method input/output with nice error messages.",
2777
+ "keywords": [
2778
+ "assert",
2779
+ "check",
2780
+ "validate"
2781
+ ],
2782
+ "support": {
2783
+ "issues": "https://github.com/webmozarts/assert/issues",
2784
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
2785
+ },
2786
+ "time": "2022-06-03T18:03:27+00:00"
2787
+ },
2788
+ {
2789
+ "name": "wikimedia/at-ease",
2790
+ "version": "v2.1.0",
2791
+ "source": {
2792
+ "type": "git",
2793
+ "url": "https://github.com/wikimedia/at-ease.git",
2794
+ "reference": "e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33"
2795
+ },
2796
+ "dist": {
2797
+ "type": "zip",
2798
+ "url": "https://api.github.com/repos/wikimedia/at-ease/zipball/e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33",
2799
+ "reference": "e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33",
2800
+ "shasum": ""
2801
+ },
2802
+ "require": {
2803
+ "php": ">=7.2.9"
2804
+ },
2805
+ "require-dev": {
2806
+ "mediawiki/mediawiki-codesniffer": "35.0.0",
2807
+ "mediawiki/minus-x": "1.1.1",
2808
+ "ockcyp/covers-validator": "1.3.3",
2809
+ "php-parallel-lint/php-console-highlighter": "0.5.0",
2810
+ "php-parallel-lint/php-parallel-lint": "1.2.0",
2811
+ "phpunit/phpunit": "^8.5"
2812
+ },
2813
+ "type": "library",
2814
+ "autoload": {
2815
+ "files": [
2816
+ "src/Wikimedia/Functions.php"
2817
+ ],
2818
+ "psr-4": {
2819
+ "Wikimedia\\AtEase\\": "src/Wikimedia/AtEase/"
2820
+ }
2821
+ },
2822
+ "notification-url": "https://packagist.org/downloads/",
2823
+ "license": [
2824
+ "GPL-2.0-or-later"
2825
+ ],
2826
+ "authors": [
2827
+ {
2828
+ "name": "Tim Starling",
2829
+ "email": "tstarling@wikimedia.org"
2830
+ },
2831
+ {
2832
+ "name": "MediaWiki developers",
2833
+ "email": "wikitech-l@lists.wikimedia.org"
2834
+ }
2835
+ ],
2836
+ "description": "Safe replacement to @ for suppressing warnings.",
2837
+ "homepage": "https://www.mediawiki.org/wiki/at-ease",
2838
+ "support": {
2839
+ "source": "https://github.com/wikimedia/at-ease/tree/v2.1.0"
2840
+ },
2841
+ "time": "2021-02-27T15:53:37+00:00"
2842
+ },
2843
+ {
2844
+ "name": "yoast/phpunit-polyfills",
2845
+ "version": "1.0.3",
2846
+ "source": {
2847
+ "type": "git",
2848
+ "url": "https://github.com/Yoast/PHPUnit-Polyfills.git",
2849
+ "reference": "5ea3536428944955f969bc764bbe09738e151ada"
2850
+ },
2851
+ "dist": {
2852
+ "type": "zip",
2853
+ "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada",
2854
+ "reference": "5ea3536428944955f969bc764bbe09738e151ada",
2855
+ "shasum": ""
2856
+ },
2857
+ "require": {
2858
+ "php": ">=5.4",
2859
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
2860
+ },
2861
+ "require-dev": {
2862
+ "yoast/yoastcs": "^2.2.0"
2863
+ },
2864
+ "type": "library",
2865
+ "extra": {
2866
+ "branch-alias": {
2867
+ "dev-main": "1.x-dev",
2868
+ "dev-develop": "1.x-dev"
2869
+ }
2870
+ },
2871
+ "autoload": {
2872
+ "files": [
2873
+ "phpunitpolyfills-autoload.php"
2874
+ ]
2875
+ },
2876
+ "notification-url": "https://packagist.org/downloads/",
2877
+ "license": [
2878
+ "BSD-3-Clause"
2879
+ ],
2880
+ "authors": [
2881
+ {
2882
+ "name": "Team Yoast",
2883
+ "email": "support@yoast.com",
2884
+ "homepage": "https://yoast.com"
2885
+ },
2886
+ {
2887
+ "name": "Contributors",
2888
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors"
2889
+ }
2890
+ ],
2891
+ "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests",
2892
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills",
2893
+ "keywords": [
2894
+ "phpunit",
2895
+ "polyfill",
2896
+ "testing"
2897
+ ],
2898
+ "support": {
2899
+ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues",
2900
+ "source": "https://github.com/Yoast/PHPUnit-Polyfills"
2901
+ },
2902
+ "time": "2021-11-23T01:37:03+00:00"
2903
+ }
2904
+ ],
2905
+ "aliases": [],
2906
+ "minimum-stability": "dev",
2907
+ "stability-flags": [],
2908
+ "prefer-stable": true,
2909
+ "prefer-lowest": false,
2910
+ "platform": [],
2911
+ "platform-dev": [],
2912
+ "plugin-api-version": "2.3.0"
2913
+ }
inc/delete-cache-button.js CHANGED
@@ -1,31 +1,31 @@
1
- (function ($) {
2
- $(document).ready(function () {
3
- $('#wp-admin-bar-delete-cache').click(function () {
4
- $('#wp-admin-bar-delete-cache').fadeOut('slow');
5
- $.ajax({
6
- type: "post",
7
- dataType: "json",
8
  url: wpsc_ajax.ajax_url,
9
  data: {
10
  // wp ajax action
11
  action: 'ajax-delete-cache',
12
 
13
- path: wpsc_ajax.path,
14
  admin: wpsc_ajax.admin,
15
 
16
  // send the nonce along with the request
17
- nonce: wpsc_ajax.nonce
18
  },
19
- success: function(msg) {
20
  wpsc_ajax.admin == 1 && console.log( 'Deleted entire cache' );
21
- wpsc_ajax.admin == 0 && console.log( 'Deleted cache for this page and reloading' ); window.location.reload();
 
22
  },
23
- complete: function(msg) {
24
- $('#wp-admin-bar-delete-cache').fadeIn('slow');
25
  },
26
- });
27
  return false;
28
- });
29
-
30
- });
31
- })(jQuery);
1
+ ( function ( $ ) {
2
+ $( document ).ready( function () {
3
+ $( '#wp-admin-bar-delete-cache' ).on( 'click', function () {
4
+ $( '#wp-admin-bar-delete-cache' ).fadeOut( 'slow' );
5
+ $.ajax( {
6
+ type: 'post',
7
+ dataType: 'json',
8
  url: wpsc_ajax.ajax_url,
9
  data: {
10
  // wp ajax action
11
  action: 'ajax-delete-cache',
12
 
13
+ path: wpsc_ajax.path,
14
  admin: wpsc_ajax.admin,
15
 
16
  // send the nonce along with the request
17
+ nonce: wpsc_ajax.nonce,
18
  },
19
+ success: function ( msg ) {
20
  wpsc_ajax.admin == 1 && console.log( 'Deleted entire cache' );
21
+ wpsc_ajax.admin == 0 && console.log( 'Deleted cache for this page and reloading' );
22
+ window.location.reload();
23
  },
24
+ complete: function ( msg ) {
25
+ $( '#wp-admin-bar-delete-cache' ).fadeIn( 'slow' );
26
  },
27
+ } );
28
  return false;
29
+ } );
30
+ } );
31
+ } )( jQuery );
 
inc/preload-notification.js CHANGED
@@ -1,18 +1,18 @@
1
- jQuery(document).ready(function () {
2
  load_preload_status();
3
- setInterval(
4
- function(){
5
- load_preload_status();
6
- },
7
- 1000
8
- );
9
- })
10
 
 
 
 
11
  function load_preload_status() {
12
- jQuery.get({
13
  url: wpsc_preload_ajax.preload_permalink_url + '?' + Math.random(),
14
- success: function( response ) {
15
  jQuery( '#preload_status' ).text( response );
16
- }
17
- })
18
  }
1
+ jQuery( document ).ready( function () {
2
  load_preload_status();
3
+ setInterval( function () {
4
+ load_preload_status();
5
+ }, 1000 );
6
+ } );
 
 
 
7
 
8
+ /**
9
+ *
10
+ */
11
  function load_preload_status() {
12
+ jQuery.get( {
13
  url: wpsc_preload_ajax.preload_permalink_url + '?' + Math.random(),
14
+ success: function ( response ) {
15
  jQuery( '#preload_status' ).text( response );
16
+ },
17
+ } );
18
  }
languages/wp-super-cache-de_DE.po CHANGED
@@ -177,7 +177,7 @@ msgid "Additional CNAMES"
177
  msgstr "Weitere CNAMES"
178
 
179
  #: ossdl-cdn.php:184
180
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
181
  msgstr "Diese <a href=\"http://de.wikipedia.org/wiki/CNAME\">CNAMES</a> werden anstatt der %1$s für Rewriting genutzt (als Ergänzung zu dem Off-Site URL weiter oben). Benutze ein Komma als Trennzeichen. Für Seiten mit einer großen Anzahl statischer Dateien kann sich dadurch die Leistung des Browsers verbessern. Es kann sein, das CNAMEs auch in deinem CDN konfiguriert werden müssen.<br />Als Beispiel: %2$s"
182
 
183
  #: ossdl-cdn.php:188
177
  msgstr "Weitere CNAMES"
178
 
179
  #: ossdl-cdn.php:184
180
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
181
  msgstr "Diese <a href=\"http://de.wikipedia.org/wiki/CNAME\">CNAMES</a> werden anstatt der %1$s für Rewriting genutzt (als Ergänzung zu dem Off-Site URL weiter oben). Benutze ein Komma als Trennzeichen. Für Seiten mit einer großen Anzahl statischer Dateien kann sich dadurch die Leistung des Browsers verbessern. Es kann sein, das CNAMEs auch in deinem CDN konfiguriert werden müssen.<br />Als Beispiel: %2$s"
182
 
183
  #: ossdl-cdn.php:188
languages/wp-super-cache-ja.po CHANGED
@@ -172,8 +172,8 @@ msgid "Additional CNAMES"
172
  msgstr "追加 CNAME"
173
 
174
  #: ossdl-cdn.php:184
175
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
176
- msgstr "上記 <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAME</a> は %1$s の代わりに (さらに上のオフサイト URL に加えて) rewriteで使用されます。複数の場合はコンマで区切ってください。静的ファイルが多数あるページの場合にブラウザーのパフォーマンスを改善できます。CNAME は CDN で設定する必要があるかもしれません。<br />例: %2$s"
177
 
178
  #: ossdl-cdn.php:188
179
  msgid "Skip https URLs to avoid \"mixed content\" errors"
172
  msgstr "追加 CNAME"
173
 
174
  #: ossdl-cdn.php:184
175
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
176
+ msgstr "上記 <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAME</a> は %1$s の代わりに (さらに上のオフサイト URL に加えて) rewriteで使用されます。複数の場合はコンマで区切ってください。静的ファイルが多数あるページの場合にブラウザーのパフォーマンスを改善できます。CNAME は CDN で設定する必要があるかもしれません。<br />例: %2$s"
177
 
178
  #: ossdl-cdn.php:188
179
  msgid "Skip https URLs to avoid \"mixed content\" errors"
languages/wp-super-cache-ru_RU.po CHANGED
@@ -67,8 +67,8 @@ msgid "Additional CNAMES"
67
  msgstr "Дополнительные CNAME (канонические имена)"
68
 
69
  #: ossdl-cdn.php:184
70
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
71
- msgstr "Эти записи <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAME</a> будут использованы вместо %1$s (в дополнении к основному URL). Используйте запятую (,) для разделения записей. Для страниц с большим количеством статичных файлов данная опция может уменьшить время загрузки. Записи CNAME также могут быть использованы для конфигурации CDN.<br />Пример: %2$s"
72
 
73
  #: ossdl-cdn.php:188
74
  msgid "Skip https URLs to avoid \"mixed content\" errors"
67
  msgstr "Дополнительные CNAME (канонические имена)"
68
 
69
  #: ossdl-cdn.php:184
70
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
71
+ msgstr "Эти записи <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAME</a> будут использованы вместо %1$s (в дополнении к основному URL). Используйте запятую (,) для разделения записей. Для страниц с большим количеством статичных файлов данная опция может уменьшить время загрузки. Записи CNAME также могут быть использованы для конфигурации CDN.<br />Пример: %2$s"
72
 
73
  #: ossdl-cdn.php:188
74
  msgid "Skip https URLs to avoid \"mixed content\" errors"
languages/wp-super-cache-sr_RS.po CHANGED
@@ -116,13 +116,13 @@ msgstr "Dodatni CNAME zapisi"
116
 
117
  #: ossdl-cdn.php:189
118
  msgid ""
119
- "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will "
120
  "be used in place of %1$s for rewriting (in addition to the off-site URL "
121
  "above). Use a comma as the delimiter. For pages with a large number of "
122
  "static files, this can improve browser performance. CNAMEs may also need to "
123
  "be configured on your CDN.<br />Example: %2$s"
124
  msgstr ""
125
- "Ovi <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAME zapisi</a> "
126
  "će se koristiti umesto %1$s, za ponovno upisivanje (uz gornji spoljašnji "
127
  "URL). Koristite zapetu kao razdvajač. Za strane sa velikim brojem statičkih "
128
  "fajlova, ovo može poboljšati performanse pregledača. Takođe, možda treba "
116
 
117
  #: ossdl-cdn.php:189
118
  msgid ""
119
+ "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will "
120
  "be used in place of %1$s for rewriting (in addition to the off-site URL "
121
  "above). Use a comma as the delimiter. For pages with a large number of "
122
  "static files, this can improve browser performance. CNAMEs may also need to "
123
  "be configured on your CDN.<br />Example: %2$s"
124
  msgstr ""
125
+ "Ovi <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAME zapisi</a> "
126
  "će se koristiti umesto %1$s, za ponovno upisivanje (uz gornji spoljašnji "
127
  "URL). Koristite zapetu kao razdvajač. Za strane sa velikim brojem statičkih "
128
  "fajlova, ovo može poboljšati performanse pregledača. Takođe, možda treba "
languages/wp-super-cache-tr_TR.po CHANGED
@@ -63,8 +63,8 @@ msgid "Additional CNAMES"
63
  msgstr "Ek CNAME'ler"
64
 
65
  #: ossdl-cdn.php:171
66
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
67
- msgstr "Bu <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAME'ler</a>, yeniden yazım için %1$s yerine kullanılacaktır (yukarıda belirlediğiniz site dışı adrese ek olarak). Virgülle ayırın. Fazlaca statik dosyaya sahip sayfalar için bu seçenek tarayıcı performansını artırabilir. CNAME'lerin bazen CDN hizmetiniz için de ayarlanması gerekebilir.<br />Example: %2$s"
68
 
69
  #: ossdl-cdn.php:176
70
  msgid "Save Changes"
63
  msgstr "Ek CNAME'ler"
64
 
65
  #: ossdl-cdn.php:171
66
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
67
+ msgstr "Bu <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAME'ler</a>, yeniden yazım için %1$s yerine kullanılacaktır (yukarıda belirlediğiniz site dışı adrese ek olarak). Virgülle ayırın. Fazlaca statik dosyaya sahip sayfalar için bu seçenek tarayıcı performansını artırabilir. CNAME'lerin bazen CDN hizmetiniz için de ayarlanması gerekebilir.<br />Example: %2$s"
68
 
69
  #: ossdl-cdn.php:176
70
  msgid "Save Changes"
languages/wp-super-cache-zh_CN.po CHANGED
@@ -64,7 +64,7 @@ msgid "Additional CNAMES"
64
  msgstr "附加 CNAME 记录"
65
 
66
  #: ossdl-cdn.php:189
67
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
68
  msgstr ""
69
 
70
  #: ossdl-cdn.php:193
64
  msgstr "附加 CNAME 记录"
65
 
66
  #: ossdl-cdn.php:189
67
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
68
  msgstr ""
69
 
70
  #: ossdl-cdn.php:193
languages/wp-super-cache-zh_TW.po CHANGED
@@ -63,8 +63,8 @@ msgid "Additional CNAMES"
63
  msgstr "額外的正規名稱(CNAMES)"
64
 
65
  #: ossdl-cdn.php:189
66
- msgid "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
67
- msgstr "這些 <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">正規名稱記錄(CNAMES)</a> 會在重寫時用來取代 %1$s (和上面的站外URL一起)。 使用逗號作為分隔符號。 在有大量靜態檔案的網頁中,這可以增進瀏覽器效能。 這些正規名稱可能也需要在你的 CDN 被設定。<br />例: %2$s"
68
 
69
  #: ossdl-cdn.php:193
70
  msgid "Skip https URLs to avoid \"mixed content\" errors"
63
  msgstr "額外的正規名稱(CNAMES)"
64
 
65
  #: ossdl-cdn.php:189
66
+ msgid "These <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will be used in place of %1$s for rewriting (in addition to the off-site URL above). Use a comma as the delimiter. For pages with a large number of static files, this can improve browser performance. CNAMEs may also need to be configured on your CDN.<br />Example: %2$s"
67
+ msgstr "這些 <a href=\"https://www.wikipedia.org/wiki/CNAME_record\">正規名稱記錄(CNAMES)</a> 會在重寫時用來取代 %1$s (和上面的站外URL一起)。 使用逗號作為分隔符號。 在有大量靜態檔案的網頁中,這可以增進瀏覽器效能。 這些正規名稱可能也需要在你的 CDN 被設定。<br />例: %2$s"
68
 
69
  #: ossdl-cdn.php:193
70
  msgid "Skip https URLs to avoid \"mixed content\" errors"
package.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "private": true,
3
+ "name": "@automattic/jetpack-super-cache",
4
+ "version": "1.8.0",
5
+ "description": "A very fast caching engine for WordPress that produces static html files.",
6
+ "homepage": "https://jetpack.com",
7
+ "bugs": {
8
+ "url": "https://github.com/Automattic/jetpack/labels/[Plugin] Super Cache"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/Automattic/jetpack.git",
13
+ "directory": "projects/plugins/super-cache"
14
+ },
15
+ "license": "GPL-2.0-or-later",
16
+ "author": "Automattic",
17
+ "scripts": {
18
+ "build": "echo 'Not implemented.'",
19
+ "build-js": "echo 'Not implemented.'",
20
+ "build-production": "echo 'Not implemented.'",
21
+ "build-production-js": "echo 'Not implemented.'",
22
+ "clean": "true"
23
+ },
24
+ "devDependencies": {}
25
+ }
partials/advanced.php CHANGED
@@ -206,13 +206,13 @@ if ( $wp_cache_preload_on )
206
 
207
  echo "<script type='text/javascript'>";
208
  echo "jQuery(function () {
209
- jQuery('#cache_interval_time').click(function () {
210
  jQuery('#schedule_interval').attr('checked', true);
211
  });
212
- jQuery('#cache_scheduled_time').click(function () {
213
  jQuery('#schedule_time').attr('checked', true);
214
  });
215
- jQuery('#cache_scheduled_select').click(function () {
216
  jQuery('#schedule_time').attr('checked', true);
217
  });
218
  });";
206
 
207
  echo "<script type='text/javascript'>";
208
  echo "jQuery(function () {
209
+ jQuery('#cache_interval_time').on('click',function () {
210
  jQuery('#schedule_interval').attr('checked', true);
211
  });
212
+ jQuery('#cache_scheduled_time').on('click',function () {
213
  jQuery('#schedule_time').attr('checked', true);
214
  });
215
+ jQuery('#cache_scheduled_select').on('click',function () {
216
  jQuery('#schedule_time').attr('checked', true);
217
  });
218
  });";
partials/easy.php CHANGED
@@ -125,6 +125,7 @@ if ( is_multisite() && wpsupercache_site_admin() ) {
125
  <h4 class="clear"><?php esc_html_e( 'Recommended Links and Plugins', 'wp-super-cache' ); ?></h4>
126
  <p><?php esc_html_e( 'Caching is only one part of making a website faster. Here are some other plugins that will help:', 'wp-super-cache' ); ?></p>
127
  <ul style="list-style: square; margin-left: 2em;">
 
128
  <li><?php printf( __( '<a href="%s">Jetpack</a> provides everything you need to build a successful WordPress website including an image/photo CDN (free) and a video hosting service (paid).', 'wp-super-cache' ), 'https://jetpack.com/redirect/?source=jitm-wpsc-recommended' ); ?></li>
129
  <li><?php printf( __( '<a href="%s">Yahoo! Yslow</a> analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages. Also try the performance tools online at <a href="%s">GTMetrix</a>.', 'wp-super-cache' ), 'http://yslow.org/', 'https://gtmetrix.com/' ); ?></li>
130
  <li><?php printf( __( '<a href="%s">Use Google Libraries</a> allows you to load some commonly used Javascript libraries from Google webservers. Ironically, it may reduce your Yslow score.', 'wp-super-cache' ), 'https://wordpress.org/plugins/use-google-libraries/' ); ?></li>
125
  <h4 class="clear"><?php esc_html_e( 'Recommended Links and Plugins', 'wp-super-cache' ); ?></h4>
126
  <p><?php esc_html_e( 'Caching is only one part of making a website faster. Here are some other plugins that will help:', 'wp-super-cache' ); ?></p>
127
  <ul style="list-style: square; margin-left: 2em;">
128
+ <li><?php printf( __( '<a href="%s">Jetpack Boost</a> helps speed up your website by generating critical CSS, defering Javascript and much more.', 'wp-super-cache' ), 'https://jetpack.com/redirect/?source=wp-super-cache-boost-rec' ); ?></li>
129
  <li><?php printf( __( '<a href="%s">Jetpack</a> provides everything you need to build a successful WordPress website including an image/photo CDN (free) and a video hosting service (paid).', 'wp-super-cache' ), 'https://jetpack.com/redirect/?source=jitm-wpsc-recommended' ); ?></li>
130
  <li><?php printf( __( '<a href="%s">Yahoo! Yslow</a> analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages. Also try the performance tools online at <a href="%s">GTMetrix</a>.', 'wp-super-cache' ), 'http://yslow.org/', 'https://gtmetrix.com/' ); ?></li>
131
  <li><?php printf( __( '<a href="%s">Use Google Libraries</a> allows you to load some commonly used Javascript libraries from Google webservers. Ironically, it may reduce your Yslow score.', 'wp-super-cache' ), 'https://wordpress.org/plugins/use-google-libraries/' ); ?></li>
readme.txt CHANGED
@@ -1,12 +1,12 @@
1
- # WP Super Cache #
2
- * Contributors: donncha, automattic
3
- * Tags: performance, caching, wp-cache, wp-super-cache, cache
4
- * Tested up to: 6.0
5
- * Stable tag: 1.7.9
6
- * Requires at least: 3.1
7
- * Requires PHP: 5.2.4
8
- * License: GPLv2 or later
9
- * License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  A very fast caching engine for WordPress that produces static html files.
12
 
@@ -267,533 +267,14 @@ Your theme is probably responsive which means it resizes the page to suit whatev
267
  * [WordPress Mobile Pack](https://wordpress.org/plugins/wordpress-mobile-pack/) (can't have "Don't cache pages for known users." enabled)
268
 
269
 
270
- ## Changelog ##
271
-
272
- ### 1.7.9 ###
273
- * Fix nonces used by "Delete Cache" button and remove JS from it on the frontend admin bar.
274
- * Define the constant WPSCDISABLEDELETEBUTTON to disable the "Delete Cache" button in the admin bar.
275
-
276
- ### 1.7.8 ###
277
- * Change the admin bar "Delete Cache" button into an AJAX link #808 #810
278
- * Fix link to log file in custom WordPress structure #807
279
- * Add an auto updating preload message. #811 #816
280
- * Use REQUEST_URI instead of GET to check GET status. #813
281
- * Add commonWP and disclaimer to "recommended links" #812
282
- * Hide warnings in case files deleted #814
283
- * Remove the GET param when removing tracking params #818
284
- * Check that post is private to unpublish it and clear cache 2249e58e6f585d936c0993e9d18e6382fa976a66
285
- * Check $gc_flag was opened before closing it. #819
286
-
287
- ### 1.7.7 ###
288
- * Fixes to settings page
289
-
290
- ### 1.7.6 ###
291
- * Fix for PHP < 7.3
292
-
293
- ### 1.7.5 ###
294
- * Move the text of the settings pages into separate files. #791
295
- * Allow editors to delete all the cache files. #793
296
- * Only clear the cache from the current site, not the whole network (admin bar link). #794
297
- * Check $cache_path is somewhat sane. #797
298
- * realpath returns false if directory not found. #798
299
- * Don't reject bots for new installs. They "preload pages" too. #800
300
-
301
- ### 1.7.4 ###
302
- * Make config file path configurable, props @sebastianpopp #755
303
- * Stop a very rare/difficult attack when updating wp-config.php, props @guyasyou for reporting. #780
304
- * Add textbox to add tracking parameters to ignore when caching. props @markfinst, @radex02 #777
305
- * Add "Rejected Cookies" setting to the advanced settings page. #774
306
-
307
- ### 1.7.3 ###
308
- * Sanitize the settings that are written to the config file #763
309
- * Fix the display of "direct cached" example urls in some circumstance. #766
310
-
311
- ### 1.7.2 ###
312
- * Fixed authenticated RCE in the settings page. Props @m0ze
313
- * Small bug fixes.
314
-
315
- ### 1.7.1 ###
316
- * Minor fixes to docs. #709 #645
317
- * Fixed typo on cache contents page. #719
318
- * Fixed array index warning. #724
319
- * Updated yellow box links. #725
320
-
321
- ### 1.7.0 ###
322
- * Added "wpsc_cdn_urls" filter to modify the URLs used to rewrite URLs. #697
323
- * Fixed CDN functionality for logged in users. #698
324
- * Disable settings that don't work in Expert mode. #699
325
- * Don't enable mobile support by default, but it can still be enabled manually. #700
326
- * Change "admin bar" to "Toolbar". Props @garrett-eclipse. #701
327
- * Show settings enabled by "easy" settings page. #703
328
-
329
- ### 1.6.9 ###
330
- * Improve the variables and messaging used by advanced-cache.php code. #687
331
- * Add a warning message to the debug log viewer. #688
332
- * Disable raw viewing of the debug log. #691
333
- * Clean up the debug log. #692 #694
334
- * Added wpsc_update_check() in 9659af156344a77ae247dc582d52053d95c79b93.
335
-
336
- ### 1.6.8 ###
337
- * Added new constants, WPSC_SERVE_DISABLED (disable serving of cached files) and WPSC_SUPERCACHE_ONLY (only serve supercache cache files). #682 and #672
338
- * Hide get_post() warning on some sites. #684
339
- * Check if WPCACHEHOME is set correctly before maybe updating it. #683
340
- * Remove object cache support as it never worked properly. #681
341
- * Add "logged in users" to the "do not cache for users" setting and rename that setting to "Cache Restrictions" #657
342
-
343
- ### 1.6.7 ###
344
- * wp_cache_setting() can now save boolean values since many of the settings are bools. #676
345
- * Check if $super_cache_enabled is true in a less strict way because it might be '1' rather than true. #677
346
-
347
- ### 1.6.6 ###
348
- * Fix problems with saving settings. Returns false ONLY when there's an issue with the config file, not when the setting isn't changed. Change other code to cope with that, including updating WPCACHEHOME (#670)
349
- * When saving settings rename the temporary config file correctly, and delete wp-admin/.php if it exists. (#673)
350
- * Fix adding WPCACHEHOME to wp-config.php when advanced-cache.php is not found and wp-config.php is RO. (#674)
351
-
352
- ### 1.6.5 ###
353
- * Check advanced-cache.php was created by the plugin before modifying/deleting it. (#666)
354
- * When saving settings, save blank lines. Fixes problems with WP_CACHE and WPCACHEHOME in wp-config.php. Related to #652. (#667)
355
- * Update outdated code and use is_multisite() (#600)
356
- * Fix the delete cache button in the Toolbar. (#603)
357
- * Code cleanup in #602
358
- * Use get_post_status instead of post_status (#623)
359
- * Fixes button - Update Direct Pages (#622)
360
- * Removes apache_response_headers and uses only headers_list (#618)
361
- * Function is_site_admin has been deprecated (#611)
362
- * Fixes action urls in wp_cache_manager (#610)
363
- * Remove the link to the HibbsLupusTrust tweet. (#635)
364
- * Don't load wp-cache-config.php if it's already loaded (#605)
365
- * PHPCS fixes and optimization for plugins/domain-mapping.php (#615)
366
- * Introduces PHP_VERSION_ID for faster checking (#604)
367
- * Fixes regex and optimizes ossdl-cdn.php (#596)
368
- * Only update new settings and use a temporary file to avoid corruption. (#652)
369
- * Serve cached files to rejected user agents, don't cache them. (#658)
370
- * Combine multiple headers with the same name (#641)
371
- * Open ‘Delete Cache’ link in same window (#656)
372
- * Promote the Jetpack Site Accelerator on the CDN page. (#636)
373
-
374
- ### 1.6.4 ###
375
- * Changes between [1.6.3 and 1.6.4](https://github.com/Automattic/wp-super-cache/compare/1.6.3...1.6.4)
376
- * Fixes for WP-CLI (#587) (#592)
377
- * Bumped the minimum WordPress version to 3.1 to use functions introduced then. (#591)
378
- * Fixes to wpsc_post_transition to avoid a fatal error using get_sample_permalink. (#595)
379
- * Fixed the Toolbar "Delete Cache" link. (#589)
380
- * Fixed the headings used in the settings page. (#597)
381
-
382
- ### 1.6.3 ###
383
- * Changes between [1.6.2 and 1.6.3](https://github.com/Automattic/wp-super-cache/compare/1.6.2...1.6.3)
384
- * Added cookie helper functions (#580)
385
- * Added plugin helper functions (#574)
386
- * Added actions to modify cookie and plugin lists. (#582)
387
- * Really disable garbage collection when timeout = 0 (#571)
388
- * Added warnings about DISABLE_WP_CRON (#575)
389
- * Don't clean expired cache files after preload if garbage collection is disabled (#572)
390
- * On preload, if deleting a post don't delete the sub directories if it's the homepage. (#573)
391
- * Fix generation of semaphores when using WP CLI (#576)
392
- * Fix deleting from the Toolbar (#578)
393
- * Avoid a strpos() warning. (#579)
394
- * Improve deleting of cache in edit/delete/publish actions (#577)
395
- * Fixes to headers code (#496)
396
-
397
- ### 1.6.2 ###
398
- * Fixed serving expired supercache files (#562)
399
- * Write directly to the config file to avoid permission problems with wp-content. (#563)
400
- * Correctly set the .htaccess rules on the main site of a multisite. (#557)
401
- * Check if set_transient() exists before using it. (#565)
402
- * Removed searchengine.php example plugin as it sets a cookie to track users. Still available [here](https://github.com/Automattic/wp-super-cache/blob/4cda5c0f2218e40e118232b5bf22d227fb3206b7/plugins/searchengine.php). (#567)
403
- * For advanced users only. Change the vary and cache control headers. See https://github.com/Automattic/wp-super-cache/pull/555 (#555)
404
-
405
- ### 1.6.1 ###
406
- * Fix the name of the WP Crontrol plugin. (#549)
407
- * Handle errors during deactivation/uninstall by email rather than exiting. (#551)
408
- * Add a notice when settings can't be updated. (#552 and #553)
409
-
410
- ### 1.6.0 ###
411
- * Fix issues in multisite plugin (#501)
412
- * Fixes wp-cli plugin deactivate/activate (#499)
413
- * Cleanup - change quotes. (#495)
414
- * $htaccess_path defines the path to the global .htacess file. (#507)
415
- * Fix 'cannot redeclare gzip_accepted()' (#511)
416
- * Correct the renaming of tmp_wpcache_filename (removed unnecessary slash in path) which caused renaming to fail. (#516)
417
- * Add check for Jetpack mobile theme cookie (#515)
418
- * Optimize wp_cache_phase2 and create wpsc_register_post_hooks (#508)
419
- * WPCACHEHOME has a trailing slash (#513)
420
- * Cleanup cache enable/disable and update_mod_rewrite_rules (#500)
421
- * Post Update now clears category cache (#519)
422
- * Various fixes for saving the debug page form (#542)
423
- * Expert-caching and empty parameters, like ?amp, should not serve cached page (#533)
424
- * Tiny Yslow description fix (#527)
425
- * Add ipad to mobile list (#525)
426
- * Hide opcache_invalidate() warnings since it's disabled some places. (#543)
427
- * Check that HTTP_REFERER exists before checking it. (#544)
428
- * Replace Cron View" with WP Crontrol because it's still updated. (#546)
429
- * adding hook (wp_cache_cleared) for full cache purges (#537)
430
-
431
-
432
- ### 1.5.9 ###
433
- * Fixed fatal error if the debug log was deleted while debugging was enabled and a visitor came to the site.
434
- * Fixed the dynamic caching test plugin because of PHP7 changes. Dynamic cache mode must be enabled now.
435
- * Lots of WordPress coding style formatting fixes to the code.
436
- * All changes: https://github.com/Automattic/wp-super-cache/compare/1.5.8...1.5.9
437
-
438
- ### 1.5.8 ###
439
- * PHP 7 fixes. (#429)
440
- * Fix debug comments checkbox. (#433)
441
- * Only register uninstall function in admin pages to save queries. (#430)
442
- * Check that wp-cache-phase1.php is loaded before saving settings page. (#428)
443
- * If a url has a "?" in it then don't delete the associated cache. It'll delete the whole cache after stripping out ?... part. (#427 & #420)
444
- * Allow static functions in classes to be used in cacheactions. (#425)
445
- * Don't make AJAX requests anonymous. (#423)
446
- * Fixed link to chmod explanation. (#421)
447
- * Add more escaping to the CDN settings page. (#416)
448
- * Use SERVER_PROTOCOL to determine http protocol. (#412 & #413)
449
- * If preload stalls only send one email per day, but do display an admin notice. (#432)
450
- * Fixed more PHP warnings in #438 and #437
451
- * Hide mod_rewrite warnings for Nginx users. #434
452
-
453
- ### 1.5.7.1 ###
454
- * If the HTTP HOST is empty then don't use it in strpos to avoid a PHP warning. (#408)
455
- * Don't preload posts with permalinks that contain rejected strings. (#407)
456
- * Generate a list of archive feeds that can be deleted when the site is updated. Also fixes corrupted config file issue and fatal error with older versions of WordPress. (#403)
457
-
458
- ### 1.5.7 ###
459
- * Fix fatal error in plugins/searchengine.php (#398)
460
-
461
- ### 1.5.6 ###
462
- * REST API: Added /plugins endpoint to handle the plugins settings page. (#382)
463
- * Minor changes to indentaion and spaces to tabs conversion (#371) (#395)
464
- * Don't set $wp_super_cache_comments here as it's not saved. (#379)
465
- * realpath() only works on directories. The cache_file wasn't set correctly. (#377)
466
- * Fix problem deleting cache from Toolbar because of realpath() (#381)
467
- * Use trigger_error() instead of echoing to the screen if a config file isn't writeable. (#394)
468
- * Added the "wpsc_enable_wp_config_edit" filter to disable editing the wp-config.php (#392)
469
- * Fix some PHP notices when comments are edited/published/maintained. (#386)
470
- * Minor changes to description on plugins page. (#393)
471
-
472
- ### 1.5.5 ###
473
- * Catch fatal errors so they're not cached, improve code that catches unknown page types. (#367)
474
- * Fix caching on older WP installs, and if the plugin is inactive on a blog, but still caching, give feeds a short TTL to ensure they're fresh. (#366)
475
- * When preloading don't delete sub-directories, or child pages, when caching pages. (#363)
476
- * Avoid PHP warnings from the REST API for settings that are not yet defined. (#361)
477
- * Added missing settings to the config file. (#360)
478
-
479
- ### 1.5.4 ###
480
- * Fix messages related to creating advanced-cache.php (#355, #354)
481
- * Deleting the plugin doesn't need to delete the cache directory as it's already done on deactivation. (#323)
482
- * Disable Jetpack mobile detection if Jetpack Beta is detected. (#298)
483
- * Add more checks on directories to make sure they exist before deleting them. (#324)
484
- * Add siteurl setting to CDN page for users who have WordPress in it's own directory. (#332)
485
- * Don't enable and then not save debug comments when toggling logging. (#334)
486
- * Show plugin activity html comments to users who disable caching for logged in users. (#335)
487
- * Better notifications on Preload page, and redo sql to fetch posts. Added "wpsc_preload_post_types_args" filter on post visibility, and wpsc_preload_post_types filter on post types used. (#336)
488
- * Use a cached feed if it is newer than the last time a post was updated. (#337)
489
- * Better define a sitemap (#340) but when the content type is unknown add more checks to find out what it is. (#346)
490
- * Save cache location correctly on the advanced settings page. (#345)
491
- * Make sure the debug log exists before toggling it on/off to ensure the http auth code is added to it.
492
- * Return the correct cache type to the REST API. Ignore supercache enabled status. (#352)
493
- * Fix cache contents in REST API showing double count of supercache files. (#353)
494
- * Move the nonce in the CDN page back into a function. (#346)
495
- * Use realpath to compare directories when loading the sample config file to account for symlinked directories. (#342)
496
- * Other minor changes to html or typos
497
- (Numbers are [pull requests](https://github.com/Automattic/wp-super-cache/pulls) on Github.)
498
-
499
- ### 1.5.3 ###
500
- * Fix a critical bug that caused unlink to be run on null while deleting the plugin.
501
-
502
- ### 1.5.2 ###
503
- * Add a trailing slash to home path. Fixes problems with finding the .htaccess file.
504
- * Delete WPCACHEHOME and WP_CACHE from wp-config.php when plugin deactivated.
505
- * Check that WPCACHEHOME is the right path on each load of the settings page.
506
- * Load the REST API code without using WPCACHEHOME.
507
- * Fixed mobile browser caching when using WP-Cache caching.
508
- * Fixed directory checks on Windows machines.
509
- * Reverted CDN changes in 1.5.0 as they caused problems in older "WordPress in a separate directory" installs.
510
- * Added note to CDN page when site url != home url. Site owners can use a filter to adjust the URL used.
511
- * Stop preload quicker when requested while preloading taxonomies.
512
- * Added more information for when updating the .htaccess file fails.
513
- * "Served by" header is now optional. Enable it by setting $wpsc_served_header to true in the config file.
514
-
515
- ### 1.5.1 ###
516
- * Don't use anonymous functions in REST API
517
- * Check that REST API Controller is available before loading the REST API.
518
- * Don't use multibyte string functions because some sites don't have it enabled.
519
-
520
- ### 1.5.0 ###
521
- * REST API settings endpoints.
522
- * Simplified settings page.
523
- * WP-Cache files reorganised.
524
- * Caching of more http headers.
525
- * Lots of bug fixes.
526
-
527
- ### 1.4.9 ###
528
- * Fixed bug when not running sem_remove after sem_release. See https://github.com/Automattic/wp-super-cache/issues/85
529
- * Fixed a PHP error impacting PHP 7.1.
530
- * Fixed a bug where we cached PUT and DELETE requests. We're treating them like POST requests now.
531
- * Delete supercache cache files, even when supercache is disabled, because mod_rewrite rules might still be active.
532
- * Updated the settings page, moving things around. [#173](https://github.com/Automattic/wp-super-cache/pull/173)
533
- * Make file locking less attractive on the settings page and fixed the WPSC_DISABLE_LOCKING constant so it really disables file locking even if the user has enabled it already.
534
- * Added a WPSC_REMOVE_SEMAPHORE constant that must be defined if sem_remove() is to be used as it may cause problems. [#174](https://github.com/Automattic/wp-super-cache/pull/174)
535
- * Added a "wpsc_delete_related_pages_on_edit" filter that on returning 0 will disable deletion of pages outside of page being edited. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
536
- * Fixed plugin deleting all cached pages when a site had a static homepage. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
537
- * Make sure $cache_path has a trailing slash [#177](https://github.com/Automattic/wp-super-cache/pull/77)
538
- * Remove flush() [#127](https://github.com/Automattic/wp-super-cache/pull/127) but also check if headers are empty and flush and get headers again. [#179](https://github.com/Automattic/wp-super-cache/pull/179)
539
- * Add fix for customizer [#161](https://github.com/Automattic/wp-super-cache/pull/161) and don't cache PUT AND DELETE requests [#178](https://github.com/Automattic/wp-super-cache/pull/178)
540
- * Check for superglobals before using them. [#131](https://github.com/Automattic/wp-super-cache/pull/131)
541
-
542
- ### 1.4.8 ###
543
- * Removed malware URL in a code comment. (harmless to operation of plugin but gets flagged by A/V software)
544
- * Updated translation file.
545
-
546
- ### 1.4.7 ###
547
- * Update the settings page for WordPress 4.4. layout changes.
548
-
549
- ### 1.4.6 ###
550
- * Generate the file cache/.htaccess even when one exists so gzip rules are created and gzipped pages are served correctly. Props Tigertech. https://wordpress.org/support/topic/all-website-pages-downloading-gz-file-after-latest-update?replies=36#post-7494087
551
-
552
- ### 1.4.5 ###
553
- * Enhancement: Only preload public post types. Props webaware.
554
- * Added an uninstall function that deletes the config file. Deactivate function doesn't delete it any more.
555
- * Possible to deactivate the plugin without visiting the settings page now.
556
- * Fixed the cache rebuild system. Rebuild files now survive longer than the request that generate them.
557
- * Minor optimisations: prune_super_cache() exits immediately if the file doesn't exist. The output of wp_cache_get_cookies_values() is now cached.
558
- * Added PHP pid to the debug log to aid debugging.
559
- * Various small bug fixes.
560
- * Fixed reset of expiry time and GC settings when updating advanced settings.
561
- * Removed CacheMeta class to avoid APC errors. It's not used any more.
562
- * Fixed reset of advanced settings when using "easy" settings page.
563
- * Fixed XSS in settings page.
564
- * Hide cache files when servers display directory indexes.
565
- * Prevent PHP object injection through use of serialize().
566
-
567
- ### 1.4.4 ###
568
- * Fixed fatal error in output handler if GET parameters present in query. Props webaware.
569
- * Fixed debug log. It wasn't logging the right message.
570
-
571
- ### 1.4.3 ###
572
- * Security release fixing an XSS bug in the settings page. Props Marc Montpas from Sucuri.
573
- * Added wp_debug_log(). Props Jen Heilemann.
574
- * Minor fixes.
575
-
576
- ### 1.4.2 ###
577
- * Fixed "acceptable file list".
578
- * Fixed "Don't cache GET requests" feature.
579
- * Maybe fixed "304 not modified" problem for some users.
580
- * Fixed some PHP warnings.
581
-
582
- ### 1.4.1 ###
583
- * Fixed XSS in settings page. Props Simon Waters, Surevine Limited.
584
- * Fix to object cache so entries may now be deleted when posts updated. (object cache still experimental)
585
- * Documentation updates and cleanup of settings page.
586
-
587
- ### 1.4 ###
588
- * Replace legacy mfunc/mnclude/dynamic-cached-content functionality with a "wpsc_cachedata" cacheaction filter.
589
- * Added dynamic-cache-test.php plugin example wpsc_cachedata filter plugin.
590
- * Delete post, tag and category cache when a post changes from draft to publish or vice versa. Props @Biranit.
591
- * Update advanced-cache.php and wp-config.php if wp-cache-phase1.php doesn't load, usually happening after migrating to a new hosting service.
592
- * Misc bugfixes.
593
-
594
- ### 1.3.2 ###
595
- * Any mfunc/mclude/dynamic-cached-content tags in comments are now removed.
596
- * Dynamic cached content feature disabled by default and must be enabled on the Advanced Settings page.
597
- * Support for the mobile theme in Jetpack via helper plugin on script's Plugins tab.
598
-
599
- ### 1.3.1 ###
600
- * Minor updates to documentation
601
- * Fixed XSS in settings page.
602
-
603
- ### 1.3 ###
604
- * mfunc tags could be executed in comments. Fixed.
605
- * More support for sites that use the LOGGED_IN_COOKIE constant and custom cookies.
606
-
607
- ### 1.2 ###
608
- * Garbage collection of old cache files is significantly improved. I added a scheduled job that keeps an eye on things and restarts the job if necessary. Also, if you enable caching from the Easy page garbage collection will be enabled too.
609
- * Editors can delete single cached files from the Toolbar now.
610
- * Fixed the cached page counter on the settings page.
611
- * Some sites that updated to 1.0 experienced too much garbage collection. There are still stragglers out there who haven't upgraded but that's fixed now!
612
- * Supercached mobile files are now used as there was a tiny little typo that needed fixing.
613
- * If your site is in a directory and you saw problems updating a page then that should be fixed now.
614
- * The deactivate hook has been changed so your configuration isn.t hosed when you upgrade. Unfortunately this will only happen after you do this upgrade.
615
- * Some sites use custom cookies with the LOGGED_IN_COOKIE constant. Added support for that.
616
- * Added support for WPTouch Pro, but it appears to be flaky still. Anyone have time to work on that? I don.t.
617
- * Some sites had problems with scheduled posts. For some reason the plugin thought the post was in draft mode and then because it only checked the same post once, when the post magically became published the cache wasn.t cleared. That.s fixed, thanks to the debug logging of several patient users.
618
- * And more bug fixes and translation updates.
619
-
620
- ### 1.1 ###
621
- * Use $_SERVER[ 'SERVER_NAME' ] to create cache directories.
622
- * Only create blogs cached directories if valid requests and blogs exist.
623
- * Only clear current blog's cache files if navigation menu is modified
624
- * Added clean_post_cache action to clear cache on post actions
625
- * Removed garbage collection details on Contents tab
626
- * Added wp_cache_check_mobile cacheaction filter to shortcircuit mobile device check.
627
- * Don't delete cache files for draft posts
628
- * Added action on wp_trash_post to clear the cache when trashed posts are deleted
629
- * Show a warning when 304 browser caching is disabled (because mod_rewrite caching is on)
630
- * New check for safe mode if using less that PHP 5.3.0
631
- * Added wp_supercache_remove_cookies filter to disable anonymous browsing mode.
632
- * Fixed garbage collection schedule dropdown
633
- * Fixed preload problem clearing site's cache on "page on front" sites.
634
- * Fix for PHP variable not defined warnings
635
- * Fixed problem refreshing cache when comments made as siteurl() sometimes didn't work
636
- * Preloading of taxonomies is now optional
637
- * Domain mapping fixes.
638
- * Better support for https sites. Remove https:// to get cache paths.
639
- * Added AddDefaultCharset .htaccess rule back in and added an option to remove it if required.
640
- * Added multisite plugin that adds a "Cached" column to Network->Sites to disable caching on a per site basis.
641
- * Added WPTouch plugin to modify browser and prefix list in mobile detection code. Added support for that plugin's exclude list.
642
- * Fixed cache tester
643
- * Filter the tags that are used to detect end-of-page using the wp_cache_eof_tags filter.
644
- * Removed debug level from logging as it wasn't helpful.
645
- * Removed mention of wp-minify.
646
-
647
- ### 1.0 ###
648
- * Removed AddDefaultCharset .htaccess rule
649
- * Fixed problem with blogs in a folder and don't have a trailing slash
650
- * New scheduling of garbage collection
651
- * Added a "Delete cache" link to Toolbar to delete cache of current page.
652
- * Updated documentation
653
- * Sorry Digg, Stephen Fry power now!
654
- * Updated translations
655
- * Preload taxonomies and all post types except revisionsand nav menu items
656
- * Fixed previews by logged in users.
657
- * Added option to make logged in users anonymous
658
- * Use WP 3.0 variables to detect multisite installs
659
- * Hash filenames so files are served from the same CDNs
660
-
661
- ### 0.9.9.9 ###
662
- * Fixed typo, is_front_page.
663
- * Serve repeated static files from the same CDN hostname.
664
- * Updated translations.
665
- * Make supercache dir lowercase to avoid problems with unicode URLs.
666
- * Add option to skip https loaded static content.
667
- * Remove 5 second check on age of existing cache files. Should help with posts that get lots of comments and traffic.
668
- * Lots of bugs fixed.
669
-
670
- ### 0.9.9.8 ###
671
- * CDN updates: can be switched off, multiple CNAMEs.
672
- * Uninstall process improved. It removes generated files and fixes edited files.
673
- * Cached dynamic pages can now be stored in Supercache files and compressed.
674
- * 1and1 Webhosting fix (/kunden/)
675
- * Remove log by email functionality as it caused problems for users who were inundated by email
676
- * Many more minor fixes and changes.
677
-
678
- ### 0.9.9.6 ###
679
- * Fixed problem serving cached files with PHP
680
- * Added support for 304 "file not modified" header to help browser caching. (PHP caching only)
681
- * Added French & German translations, updated Italian translation and fixed translation strings.
682
- * Sleep 4 seconds between preload urls to reduce load on the server
683
- * Updated docs and FAQs.
684
-
685
- ### 0.9.9.5 ###
686
- * Disable compression on on easy setup page. Still causes problems on some hosts.
687
- * Remove footerlink on easy setup page.
688
- * Don't delete mod_rewrite rules when caching is disabled.
689
- * Don't stop users using settings page when in safe mode.
690
-
691
- ### 0.9.9.4 ###
692
- * Settings page split into tabbed pages.
693
- * Added new "Easy" settings page for new users.
694
- * New PHP caching mode to serve supercached files.
695
- * Mobile support fixes.
696
- * Added Domain mapping support plugin.
697
- * Added "awaiting moderation" plugin that removes that text from posts.
698
- * Terminology change. Changed "half on" to "legacy caching".
699
- * Fixed cache tester on some installs of WordPress.
700
- * Updated documentation
701
- * Added $wp_super_cache_lock_down config variable to hide lockdown and directly cached pages admin items.
702
- * Preloaded checks if it has stalled and reschedules the job to continue.
703
- * Serve the gzipped page when first cached if the client supports compression.
704
- * Lots more bug fixes..
705
-
706
- ### 0.9.9.3 ###
707
- * Fixed division by zero error in half on mode.
708
- * Always show "delete cache" button.
709
- * Fixed "Update mod_rewrite rules" button.
710
- * Minor text changes to admin page.
711
-
712
- ### 0.9.9.2 ###
713
- * Forgot to change version number in wp-cache.php
714
-
715
- ### 0.9.9.1 ###
716
- * Added preloading of static cache.
717
- * Better mobile plugin support
718
- * .htaccess rules can be updated now. Added wpsc_update_htaccess().
719
- * Fixed "page on front" cache clearing bug.
720
- * Check for wordpress_logged_in cookie so test cookie isn't detected.
721
- * Added clear_post_supercache() to clear supercache for a single post.
722
- * Put quotes around rewrite rules in case paths have spaces.
723
-
724
- ### 0.9.9 ###
725
- * Added experimental object cache support.
726
- * Added Chinese(Traditional) translation by Pseric.
727
- * Added FAQ on WP-Cache vs Supercache files.
728
- * Use Supercache file if WP-Cache file not found. Useful if mod_rewrite rules are broken or not working.
729
- * Get mobile browser list from WP Mobile Edition if found. Warn user if .htaccess out of date.
730
- * Make sure writer lock is unlocked after writing cache files.
731
- * Added link to developer docs in readme.
732
- * Added Ukranian translation by Vitaly Mylo.
733
- * Added Upgrade Notice section to readme.
734
- * Warn if zlib compression in PHP is enabled.
735
- * Added compression troubleshooting answer. Props Vladimir (http://blog.sjinks.pro/)
736
- * Added Japanese translation by Tai (http://tekapo.com/)
737
- * Updated Italian translation.
738
- * Link to WP Mobile Edition from admin page for mobile support.
739
-
740
- ### 0.9.8 ###
741
- * Added Spanish translation by Omi.
742
- * Added Italian translation by Gianni Diurno.
743
- * Addded advanced debug code to check front page for category problem. Enable by setting $wp_super_cache_advanced_debug to 1 in the config file.
744
- * Fixed wordpress vs wordpress_logged_in cookie mismatch in cookie checking function.
745
- * Correctly check if WP_CACHE is set or not. PHP is weird.
746
- * Added wp_cache_clear_cache() to clear out cache directory.
747
- * Only show logged in message when debugging enabled.
748
- * Added troubleshooting point 20. PHP vs Apache user.
749
- * Fixed problem deleting cache file.
750
- * Don't delete cache files when moderated comments are deleted.
751
-
752
- ### 0.9.7 ###
753
- * Fixed problem with blogs in folders.
754
- * Added cache file listing and delete links to admin page.
755
- * Added "Newest Cached Pages" listing in sidebox.
756
- * Made admin page translatable.
757
- * Added "How do I make certain parts of the page stay dynamic?" to FAQ.
758
- * Advanced: added "late init" feature so that plugin activates on "init". Set $wp_super_cache_late_init to true in config file to use.
759
- * Disable supercaching when GET parameters present instead of disabling all caching. Disable on POST (as normal) and preview.
760
- * Fixed problem with cron job and mutex filename.
761
- * Warn users they must enable mobile device support if rewrite rules detected. Better detection of when to warn that .htaccess rules must be updated (no need when rewrite rules not present)
762
- * Advanced: Added "wpsupercache_404" filter. Return true to cache 404 error pages.
763
- * Use the wordpress_test_cookie in the cache key.
764
- * Show correct number of cache files when compression off.
765
- * Fixed problem with PHP safe_mode detection.
766
- * Various bugfixes and documentation updates. See Changelog.txt
767
-
768
- ### 0.9.6.1 ###
769
- * Move "not logged in" message init below check for POST.
770
- * Add is_admin() check so plugin definitely can't cache the backend.
771
- * Add "do not cache" page type to admin page.
772
-
773
- ### 0.9.6 ###
774
- * Add uninstall.php uninstall script.
775
- * Updated cache/.htaccess rules (option to upgrade that)
776
- * Added FAQ about category and static homepage problem.
777
- * Add wp_cache_user_agent_is_rejected() back to wp-cache-phase2.php
778
- * Show message for logged in users when caching disable for them.
779
- * Check filemtime on correct supercache file
780
-
781
- ### 0.9.5 ###
782
- * Show next and last GC times in minutes, not local time.
783
- * Don't serve wp_cache cache files to rejected user agents. Supercache files are still served to them.
784
- * If enabled, mobile support now serves php cached files to mobile clients and static cached files to everyone else.
785
- * Added checks for "WPSC_DISABLE_COMPRESSION" and "WPSC_DISABLE_LOCKING" constants to disable compression and file locking. For hosting companies primarily.
786
- * Added check for DONOTCACHEPAGE constant to avoid caching a page.
787
- * Use PHP_DOCUMENT_ROOT when creating .htaccess if necessary.
788
-
789
- ### 0.9.4.3 ###
790
- 1. Added "Don't cache for logged in users" option.
791
- 2. Display file size stats on admin page.
792
- 3. Clear the cache when profile page is updated.
793
- 4. Don't cache post previews.
794
- 5. Added backslashes to rejected URI regex list.
795
- 6. Fixed problems with posts and comments not refreshing.
796
-
797
-
798
- ## Upgrade Notice ##
799
- Misc fixes
1
+ === WP Super Cache ===
2
+ Contributors: donncha, automattic
3
+ Tags: performance, caching, wp-cache, wp-super-cache, cache
4
+ Requires at least: 5.9
5
+ Requires PHP: 5.6
6
+ Tested up to: 6.0
7
+ Stable tag: 1.8
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  A very fast caching engine for WordPress that produces static html files.
12
 
267
  * [WordPress Mobile Pack](https://wordpress.org/plugins/wordpress-mobile-pack/) (can't have "Don't cache pages for known users." enabled)
268
 
269
 
270
+ == Changelog ==
271
+ ### 1.8 - 2022-08-16
272
+ - Added PHP 8 Support
273
+ - Added a link to give feedback on WP Super Cache
274
+ - Added information on Jetpack Boost
275
+ - Fixed jQuery deprecated notice
276
+ - Fixed replacing dirname(__FILE__) with __DIR__
277
+
278
+ --------
279
+
280
+ [See the previous changelogs here](https://github.com/Automattic/jetpack/blob/trunk/projects/plugins/super-cache/CHANGELOG.md#changelog)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rest/load.php CHANGED
@@ -1,15 +1,15 @@
1
  <?php
2
 
3
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-get-settings.php' );
4
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-update-settings.php' );
5
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-get-stats.php' );
6
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-get-cache.php' );
7
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-get-status.php' );
8
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-test-cache.php' );
9
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-delete-cache.php' );
10
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-preload.php' );
11
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-get-plugins.php' );
12
- require_once( dirname( __FILE__ ) . '/class.wp-super-cache-rest-update-plugins.php' );
13
 
14
  class WP_Super_Cache_Router {
15
 
1
  <?php
2
 
3
+ require_once( __DIR__ . '/class.wp-super-cache-rest-get-settings.php' );
4
+ require_once( __DIR__ . '/class.wp-super-cache-rest-update-settings.php' );
5
+ require_once( __DIR__ . '/class.wp-super-cache-rest-get-stats.php' );
6
+ require_once( __DIR__ . '/class.wp-super-cache-rest-get-cache.php' );
7
+ require_once( __DIR__ . '/class.wp-super-cache-rest-get-status.php' );
8
+ require_once( __DIR__ . '/class.wp-super-cache-rest-test-cache.php' );
9
+ require_once( __DIR__ . '/class.wp-super-cache-rest-delete-cache.php' );
10
+ require_once( __DIR__ . '/class.wp-super-cache-rest-preload.php' );
11
+ require_once( __DIR__ . '/class.wp-super-cache-rest-get-plugins.php' );
12
+ require_once( __DIR__. '/class.wp-super-cache-rest-update-plugins.php' );
13
 
14
  class WP_Super_Cache_Router {
15
 
src/example.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Put your classes in this `src` folder!
4
+ *
5
+ * @package automattic/PACKAGE-NAME
6
+ */
7
+
8
+ // Start your code here!
wp-cache-base.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  global $WPSC_HTTP_HOST, $cache_enabled, $cache_path, $blogcacheid, $blog_cache_dir;
3
 
 
4
  if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
5
  $WPSC_HTTP_HOST = function_exists( 'mb_strtolower' ) ? mb_strtolower( $_SERVER['HTTP_HOST'] ) : strtolower( $_SERVER['HTTP_HOST'] );
6
  $WPSC_HTTP_HOST = htmlentities( $WPSC_HTTP_HOST );
@@ -15,6 +16,8 @@ if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
15
  $blogcacheid = '';
16
  $blog_cache_dir = $cache_path;
17
 
 
 
18
  if ( is_multisite() ) {
19
  global $current_blog;
20
 
1
  <?php
2
  global $WPSC_HTTP_HOST, $cache_enabled, $cache_path, $blogcacheid, $blog_cache_dir;
3
 
4
+ // we need to backup HTTP_HOST early in the PHP process, and if running in command line set it to something useful.
5
  if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
6
  $WPSC_HTTP_HOST = function_exists( 'mb_strtolower' ) ? mb_strtolower( $_SERVER['HTTP_HOST'] ) : strtolower( $_SERVER['HTTP_HOST'] );
7
  $WPSC_HTTP_HOST = htmlentities( $WPSC_HTTP_HOST );
16
  $blogcacheid = '';
17
  $blog_cache_dir = $cache_path;
18
 
19
+ // we might be able to simplify this. I run a multisite and the blogs directory isn't used any more.
20
+ // $blogcacheid is set to the domain or prefix path of your site, and all files are put in $cache_path/supercache/$blogcacheid/[REQUEST_URI path]/
21
  if ( is_multisite() ) {
22
  global $current_blog;
23
 
wp-cache-phase1.php CHANGED
@@ -1,10 +1,11 @@
1
  <?php
2
 
3
  if ( ! function_exists( 'wp_cache_phase2' ) ) {
4
- require_once dirname( __FILE__ ) . '/wp-cache-phase2.php';
5
  }
6
 
7
  // error_reporting(E_ERROR | E_PARSE); // uncomment to debug this file!
 
8
  if ( !defined( 'WPCACHECONFIGPATH' ) ) {
9
  define( 'WPCACHECONFIGPATH', WP_CONTENT_DIR );
10
  }
@@ -13,8 +14,9 @@ if ( ! @include WPCACHECONFIGPATH . '/wp-cache-config.php' ) {
13
  return false;
14
  }
15
 
 
16
  if ( ! defined( 'WPCACHEHOME' ) ) {
17
- define( 'WPCACHEHOME', dirname( __FILE__ ) . '/' );
18
  }
19
 
20
  if ( defined( 'DISABLE_SUPERCACHE' ) ) {
@@ -31,6 +33,8 @@ if ( '/' === $cache_path || empty( $cache_path ) ) {
31
  return;
32
  }
33
 
 
 
34
  if ( $blogcacheid != '' ) {
35
  $blog_cache_dir = str_replace( '//', '/', $cache_path . 'blogs/' . $blogcacheid . '/' );
36
  } else {
@@ -39,18 +43,22 @@ if ( $blogcacheid != '' ) {
39
 
40
  $wp_cache_phase1_loaded = true;
41
 
 
42
  $mutex_filename = 'wp_cache_mutex.lock';
43
  $new_cache = false;
44
 
 
45
  if ( ! isset( $wp_cache_plugins_dir ) ) {
46
  $wp_cache_plugins_dir = WPCACHEHOME . 'plugins';
47
  }
48
 
 
49
  if ( isset( $_GET['donotcachepage'] ) && isset( $cache_page_secret ) && $_GET['donotcachepage'] == $cache_page_secret ) {
50
  $cache_enabled = false;
51
  define( 'DONOTCACHEPAGE', 1 );
52
  }
53
 
 
54
  $plugins = glob( $wp_cache_plugins_dir . '/*.php' );
55
  if ( is_array( $plugins ) ) {
56
  foreach ( $plugins as $plugin ) {
@@ -60,6 +68,7 @@ if ( is_array( $plugins ) ) {
60
  }
61
  }
62
 
 
63
  if ( isset( $wpsc_plugins ) && is_array( $wpsc_plugins ) ) {
64
  foreach( $wpsc_plugins as $plugin_file ) {
65
  if ( file_exists( ABSPATH . $plugin_file ) ) {
@@ -68,6 +77,7 @@ if ( isset( $wpsc_plugins ) && is_array( $wpsc_plugins ) ) {
68
  }
69
  }
70
 
 
71
  if (
72
  file_exists( WPCACHEHOME . '../wp-super-cache-plugins/' ) &&
73
  is_dir( WPCACHEHOME . '../wp-super-cache-plugins/' )
@@ -82,12 +92,15 @@ if (
82
  }
83
  }
84
 
 
85
  $wp_start_time = microtime();
86
 
 
87
  if ( wpsc_is_backend() ) {
88
  return true;
89
  }
90
 
 
91
  if ( wpsc_is_rejected_cookie() ) {
92
  define( 'DONOTCACHEPAGE', 1 );
93
  $cache_enabled = false;
@@ -100,12 +113,15 @@ if ( wpsc_is_caching_user_disabled() ) {
100
  return true;
101
  }
102
 
 
103
  if ( isset( $wp_cache_make_known_anon ) && $wp_cache_make_known_anon ) {
104
  wp_supercache_cache_for_admins();
105
  }
106
 
 
107
  do_cacheaction( 'cache_init' );
108
 
 
109
  if ( ! $cache_enabled || ( isset( $_SERVER['REQUEST_METHOD'] ) && in_array( $_SERVER['REQUEST_METHOD'], array( 'POST', 'PUT', 'DELETE' ) ) ) || isset( $_GET['customize_changeset_uuid'] ) ) {
110
  return true;
111
  }
@@ -119,9 +135,10 @@ $gzipped = 0;
119
  $gzsize = 0;
120
 
121
  if ( $cache_compression ) {
122
- $wp_cache_gzip_encoding = gzip_accepted();
123
  }
124
 
 
125
  add_cacheaction( 'supercache_filename_str', 'wp_cache_check_mobile' );
126
  if ( function_exists( 'add_filter' ) ) { // loaded since WordPress 4.6
127
  add_filter( 'supercache_filename_str', 'wp_cache_check_mobile' );
@@ -130,10 +147,13 @@ if ( function_exists( 'add_filter' ) ) { // loaded since WordPress 4.6
130
  $wp_cache_request_uri = wpsc_remove_tracking_params_from_uri( $_SERVER['REQUEST_URI'] ); // Cache this in case any plugin modifies it and filter out tracking parameters.
131
 
132
  if ( defined( 'DOING_CRON' ) ) {
 
133
  extract( wp_super_cache_init() ); // $key, $cache_filename, $meta_file, $cache_file, $meta_pathname
134
  return true;
135
  }
136
 
 
 
137
  if ( ! isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && false == $wp_super_cache_late_init ) ) {
138
  wp_cache_serve_cache_file();
139
  }
1
  <?php
2
 
3
  if ( ! function_exists( 'wp_cache_phase2' ) ) {
4
+ require_once __DIR__. '/wp-cache-phase2.php';
5
  }
6
 
7
  // error_reporting(E_ERROR | E_PARSE); // uncomment to debug this file!
8
+ // directory where the configuration file lives.
9
  if ( !defined( 'WPCACHECONFIGPATH' ) ) {
10
  define( 'WPCACHECONFIGPATH', WP_CONTENT_DIR );
11
  }
14
  return false;
15
  }
16
 
17
+ // points at the wp-super-cache plugin directory because sometimes file paths are weird. Edge cases,
18
  if ( ! defined( 'WPCACHEHOME' ) ) {
19
+ define( 'WPCACHEHOME', __DIR__ . '/' );
20
  }
21
 
22
  if ( defined( 'DISABLE_SUPERCACHE' ) ) {
33
  return;
34
  }
35
 
36
+ // $blog_cache_dir is used all over the code alongside the supercache directory but at least with multisite installs it appears to do nothing.
37
+ // I started putting everything in cache/supercache/blogname/path/ a long time ago but never got around to removing the code that used the blogs directory.
38
  if ( $blogcacheid != '' ) {
39
  $blog_cache_dir = str_replace( '//', '/', $cache_path . 'blogs/' . $blogcacheid . '/' );
40
  } else {
43
 
44
  $wp_cache_phase1_loaded = true;
45
 
46
+ // part of the coarse file locking which should really be removed, but there are edge cases where semaphores didn't work in the past.
47
  $mutex_filename = 'wp_cache_mutex.lock';
48
  $new_cache = false;
49
 
50
+ // write a plugin to extend wp-super-cache!
51
  if ( ! isset( $wp_cache_plugins_dir ) ) {
52
  $wp_cache_plugins_dir = WPCACHEHOME . 'plugins';
53
  }
54
 
55
+ // from the secret shown on the Advanced settings page.
56
  if ( isset( $_GET['donotcachepage'] ) && isset( $cache_page_secret ) && $_GET['donotcachepage'] == $cache_page_secret ) {
57
  $cache_enabled = false;
58
  define( 'DONOTCACHEPAGE', 1 );
59
  }
60
 
61
+ // Load wp-super-cache plugins
62
  $plugins = glob( $wp_cache_plugins_dir . '/*.php' );
63
  if ( is_array( $plugins ) ) {
64
  foreach ( $plugins as $plugin ) {
68
  }
69
  }
70
 
71
+ // Load plugins from an array of php scripts. This needs to be documented.
72
  if ( isset( $wpsc_plugins ) && is_array( $wpsc_plugins ) ) {
73
  foreach( $wpsc_plugins as $plugin_file ) {
74
  if ( file_exists( ABSPATH . $plugin_file ) ) {
77
  }
78
  }
79
 
80
+ // also look for plugins in wp-content/wp-super-cache-plugins/
81
  if (
82
  file_exists( WPCACHEHOME . '../wp-super-cache-plugins/' ) &&
83
  is_dir( WPCACHEHOME . '../wp-super-cache-plugins/' )
92
  }
93
  }
94
 
95
+ // for timing purposes for the html comments
96
  $wp_start_time = microtime();
97
 
98
+ // don't cache in wp-admin
99
  if ( wpsc_is_backend() ) {
100
  return true;
101
  }
102
 
103
+ // if a cookie is found that we don't like then don't serve/cache the page
104
  if ( wpsc_is_rejected_cookie() ) {
105
  define( 'DONOTCACHEPAGE', 1 );
106
  $cache_enabled = false;
113
  return true;
114
  }
115
 
116
+ // make logged in users anonymous so they are shown logged out pages.
117
  if ( isset( $wp_cache_make_known_anon ) && $wp_cache_make_known_anon ) {
118
  wp_supercache_cache_for_admins();
119
  }
120
 
121
+ // an init action wpsc plugins can hook on to.
122
  do_cacheaction( 'cache_init' );
123
 
124
+ // don't cache or serve cached files for various URLs, including the Customizer.
125
  if ( ! $cache_enabled || ( isset( $_SERVER['REQUEST_METHOD'] ) && in_array( $_SERVER['REQUEST_METHOD'], array( 'POST', 'PUT', 'DELETE' ) ) ) || isset( $_GET['customize_changeset_uuid'] ) ) {
126
  return true;
127
  }
135
  $gzsize = 0;
136
 
137
  if ( $cache_compression ) {
138
+ $wp_cache_gzip_encoding = gzip_accepted(); // false or 'gzip'
139
  }
140
 
141
+ // The wp_cache_check_mobile function appends "-mobile" to the cache filename if it detects a mobile visitor.
142
  add_cacheaction( 'supercache_filename_str', 'wp_cache_check_mobile' );
143
  if ( function_exists( 'add_filter' ) ) { // loaded since WordPress 4.6
144
  add_filter( 'supercache_filename_str', 'wp_cache_check_mobile' );
147
  $wp_cache_request_uri = wpsc_remove_tracking_params_from_uri( $_SERVER['REQUEST_URI'] ); // Cache this in case any plugin modifies it and filter out tracking parameters.
148
 
149
  if ( defined( 'DOING_CRON' ) ) {
150
+ // this is required for scheduled CRON jobs.
151
  extract( wp_super_cache_init() ); // $key, $cache_filename, $meta_file, $cache_file, $meta_pathname
152
  return true;
153
  }
154
 
155
+ // late init delays serving a cache file until after the WordPress init actin has fired and (most of?) WordPress has loaded.
156
+ // If it's not enabled then serve a cache file now if possible.
157
  if ( ! isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && false == $wp_super_cache_late_init ) ) {
158
  wp_cache_serve_cache_file();
159
  }
wp-cache-phase2.php CHANGED
@@ -1,22 +1,26 @@
1
  <?php
2
 
3
- function gzip_accepted(){
4
- if ( 1 == ini_get( 'zlib.output_compression' ) || "on" == strtolower( ini_get( 'zlib.output_compression' ) ) ) // don't compress WP-Cache data files when PHP is already doing it
5
  return false;
 
6
 
7
- if ( !isset( $_SERVER[ 'HTTP_ACCEPT_ENCODING' ] ) || ( isset( $_SERVER[ 'HTTP_ACCEPT_ENCODING' ] ) && strpos( $_SERVER[ 'HTTP_ACCEPT_ENCODING' ], 'gzip' ) === false ) ) return false;
 
 
8
  return 'gzip';
9
  }
10
 
11
  function setup_blog_cache_dir() {
12
  global $blog_cache_dir, $cache_path;
13
- if( false == @is_dir( $blog_cache_dir ) ) {
14
- @mkdir( $cache_path . "blogs" );
15
  @mkdir( $blog_cache_dir );
16
  }
17
 
18
- if( false == @is_dir( $blog_cache_dir . 'meta' ) )
19
  @mkdir( $blog_cache_dir . 'meta' );
 
20
  }
21
 
22
  function get_wp_cache_key( $url = false ) {
@@ -24,8 +28,8 @@ function get_wp_cache_key( $url = false ) {
24
  if ( ! $url ) {
25
  $url = $wp_cache_request_uri;
26
  }
27
- $server_port = isset( $_SERVER[ 'SERVER_PORT' ] ) ? intval( $_SERVER[ 'SERVER_PORT' ] ) : 0;
28
- return do_cacheaction( 'wp_cache_key', wp_cache_check_mobile( $WPSC_HTTP_HOST . $server_port . preg_replace('/#.*$/', '', str_replace( '/index.php', '/', $url ) ) . $wp_cache_gzip_encoding . wp_cache_get_cookies_values() ) );
29
  }
30
 
31
  function wpsc_remove_tracking_params_from_uri( $uri ) {
@@ -44,12 +48,12 @@ function wpsc_remove_tracking_params_from_uri( $uri ) {
44
 
45
  if ( isset( $parsed_url['query'] ) ) {
46
  parse_str( $parsed_url['query'], $query );
47
- foreach( $wpsc_tracking_parameters as $param_name ) {
48
- unset( $query[$param_name] );
49
  unset( $_GET[ $param_name ] );
50
  }
51
  }
52
- $path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : '';
53
  $query = ! empty( $query ) ? '?' . http_build_query( $query ) : '';
54
 
55
  if ( empty( $_GET ) ) {
@@ -67,11 +71,11 @@ function wp_super_cache_init() {
67
  global $wp_cache_key, $key, $blogcacheid, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $meta_pathname;
68
 
69
  $wp_cache_key = get_wp_cache_key();
70
- $key = $blogcacheid . md5( $wp_cache_key );
71
  $wp_cache_key = $blogcacheid . $wp_cache_key;
72
 
73
  $cache_filename = $file_prefix . $key . '.php';
74
- $meta_file = $file_prefix . $key . '.php';
75
 
76
  $cache_file = wpsc_get_realpath( $blog_cache_dir );
77
 
@@ -118,9 +122,9 @@ function wp_cache_serve_cache_file() {
118
  )
119
  ) {
120
  if ( file_exists( get_current_url_supercache_dir() . 'meta-' . $cache_filename ) ) {
121
- $cache_file = get_current_url_supercache_dir() . $cache_filename;
122
  $meta_pathname = get_current_url_supercache_dir() . 'meta-' . $cache_filename;
123
- } elseif ( !file_exists( $cache_file ) ) {
124
  wp_cache_debug( 'wp_cache_serve_cache_file: found cache file but then it disappeared!' );
125
  return false;
126
  }
@@ -131,7 +135,7 @@ function wp_cache_serve_cache_file() {
131
  }
132
 
133
  wp_cache_debug( "wp-cache file exists: $cache_file", 5 );
134
- if ( !( $meta = json_decode( wp_cache_get_legacy_cache( $meta_pathname ), true ) ) ) {
135
  wp_cache_debug( "couldn't load wp-cache meta file", 5 );
136
  return true;
137
  }
@@ -146,7 +150,7 @@ function wp_cache_serve_cache_file() {
146
  global $cache_max_time;
147
  // last chance, check if a supercache file exists. Just in case .htaccess rules don't work on this host
148
  $filename = supercache_filename();
149
- $file = get_current_url_supercache_dir() . $filename;
150
  if ( false == file_exists( $file ) ) {
151
  wp_cache_debug( "No Super Cache file found for current URL: $file" );
152
  return false;
@@ -160,15 +164,17 @@ function wp_cache_serve_cache_file() {
160
  wp_cache_debug( 'Saving headers. Cannot serve a supercache file.' );
161
  return false;
162
  } elseif ( $cache_max_time > 0 && ( filemtime( $file ) + $cache_max_time ) < time() ) {
163
- wp_cache_debug( sprintf( "Cache has expired and is older than %d seconds old.", $cache_max_time ) );
164
  return false;
165
  }
166
 
167
- if ( isset( $wp_cache_mfunc_enabled ) == false )
168
  $wp_cache_mfunc_enabled = 0;
 
169
 
170
- if ( false == isset( $wp_cache_home_path ) )
171
  $wp_cache_home_path = '/';
 
172
 
173
  // make sure ending slashes are ok
174
  if ( $wp_cache_request_uri == $wp_cache_home_path || ( $wp_cache_slash_check && substr( $wp_cache_request_uri, -1 ) == '/' ) || ( $wp_cache_slash_check == 0 && substr( $wp_cache_request_uri, -1 ) != '/' ) ) {
@@ -198,38 +204,39 @@ function wp_cache_serve_cache_file() {
198
  }
199
  }
200
 
201
- if ( isset( $wp_cache_disable_utf8 ) == false || $wp_cache_disable_utf8 == 0 )
202
- header( "Content-type: text/html; charset=UTF-8" );
 
203
 
204
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
205
  if ( WPSC_VARY_HEADER != '' ) {
206
- header( "Vary: " . WPSC_VARY_HEADER );
207
  }
208
  } else {
209
- header( "Vary: Accept-Encoding, Cookie" );
210
  }
211
  if ( defined( 'WPSC_CACHE_CONTROL_HEADER' ) ) {
212
  if ( WPSC_CACHE_CONTROL_HEADER != '' ) {
213
- header( "Cache-Control: " . WPSC_CACHE_CONTROL_HEADER );
214
  }
215
  } else {
216
- header( "Cache-Control: max-age=3, must-revalidate" );
217
  }
218
  $size = function_exists( 'mb_strlen' ) ? mb_strlen( $cachefiledata, '8bit' ) : strlen( $cachefiledata );
219
  if ( $wp_cache_gzip_encoding ) {
220
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
221
- header( "X-WP-Super-Cache: Served supercache gzip file from PHP" );
222
  }
223
  header( 'Content-Encoding: ' . $wp_cache_gzip_encoding );
224
  header( 'Content-Length: ' . $size );
225
  } elseif ( $wp_supercache_304 ) {
226
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
227
- header( "X-WP-Super-Cache: Served supercache 304 file from PHP" );
228
  }
229
  header( 'Content-Length: ' . $size );
230
  } else {
231
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
232
- header( "X-WP-Super-Cache: Served supercache file from PHP" );
233
  }
234
  }
235
 
@@ -237,16 +244,16 @@ function wp_cache_serve_cache_file() {
237
  if ( $wp_cache_mfunc_enabled == 0 && $wp_supercache_304 ) {
238
  wp_cache_debug( 'wp_cache_serve_cache_file: checking age of cached vs served files.' );
239
  $headers = apache_request_headers();
240
- $remote_mod_time = isset ( $headers['If-Modified-Since'] ) ? $headers['If-Modified-Since'] : null;
241
 
242
- if ( is_null( $remote_mod_time ) && isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
243
  $remote_mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
244
  }
245
 
246
- $local_mod_time = gmdate("D, d M Y H:i:s",filemtime( $file )).' GMT';
247
- if ( ! is_null( $remote_mod_time ) && $remote_mod_time == $local_mod_time ) {
248
  wp_cache_debug( 'wp_cache_serve_cache_file: Send 304 Not Modified header.' );
249
- header( $_SERVER[ 'SERVER_PROTOCOL' ] . " 304 Not Modified" );
250
  exit();
251
  } else {
252
  wp_cache_debug( 'wp_cache_serve_cache_file: 304 browser caching not possible as timestamps differ.' );
@@ -263,13 +270,13 @@ function wp_cache_serve_cache_file() {
263
 
264
  $cache_file = do_cacheaction( 'wp_cache_served_cache_file', $cache_file );
265
  // Sometimes the gzip headers are lost. Make sure html returned isn't compressed!
266
- if ( $cache_compression && $wp_cache_gzip_encoding && !in_array( 'Content-Encoding: ' . $wp_cache_gzip_encoding, $meta[ 'headers' ] ) ) {
267
  $ungzip = true;
268
  wp_cache_debug( 'GZIP headers not found. Force uncompressed output.', 1 );
269
  } else {
270
  $ungzip = false;
271
  }
272
- foreach ( $meta[ 'headers' ] as $t => $header) {
273
  // godaddy fix, via http://blog.gneu.org/2008/05/wp-supercache-on-godaddy/ and http://www.littleredrails.com/blog/2007/09/08/using-wp-cache-on-godaddy-500-error/
274
  if ( strpos( $header, 'Last-Modified:' ) === false ) {
275
  header( $header );
@@ -278,11 +285,11 @@ function wp_cache_serve_cache_file() {
278
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
279
  header( 'X-WP-Super-Cache: Served WPCache cache file' );
280
  }
281
- if ( isset( $meta[ 'dynamic' ] ) ) {
282
  wp_cache_debug( 'Serving wp-cache dynamic file', 5 );
283
  if ( $ungzip ) {
284
  // attempt to uncompress the cached file just in case it's gzipped
285
- $cache = wp_cache_get_legacy_cache( $cache_file );
286
  $uncompressed = @gzuncompress( $cache );
287
  if ( $uncompressed ) {
288
  wp_cache_debug( 'Uncompressed gzipped cache file from wp-cache', 1 );
@@ -297,7 +304,7 @@ function wp_cache_serve_cache_file() {
297
  } else {
298
  wp_cache_debug( 'Serving wp-cache static file', 5 );
299
  if ( $ungzip ) {
300
- $cache = wp_cache_get_legacy_cache( $cache_file );
301
  $uncompressed = gzuncompress( $cache );
302
  if ( $uncompressed ) {
303
  wp_cache_debug( 'Uncompressed gzipped cache file from wp-cache', 1 );
@@ -322,8 +329,9 @@ function wp_cache_get_legacy_cache( $cache_file ) {
322
  function wp_cache_postload() {
323
  global $cache_enabled, $wp_super_cache_late_init;
324
 
325
- if ( !$cache_enabled )
326
  return true;
 
327
 
328
  if ( isset( $wp_super_cache_late_init ) && true == $wp_super_cache_late_init ) {
329
  wp_cache_debug( 'Supercache Late Init: add wp_cache_serve_cache_file to init', 3 );
@@ -434,24 +442,26 @@ function wp_cache_get_cookies_values() {
434
  return $string;
435
  }
436
 
437
- if ( defined( 'COOKIEHASH' ) )
438
  $cookiehash = preg_quote( constant( 'COOKIEHASH' ) );
439
- else
440
  $cookiehash = '';
 
441
  $regex = "/^wp-postpass_$cookiehash|^comment_author_$cookiehash";
442
- if ( defined( 'LOGGED_IN_COOKIE' ) )
443
- $regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
444
- else
445
  $regex .= "|^wordpress_logged_in_$cookiehash";
446
- $regex .= "/";
447
- while ($key = key($_COOKIE)) {
 
448
  if ( preg_match( $regex, $key ) ) {
449
- wp_cache_debug( "wp_cache_get_cookies_values: Login/postpass cookie detected" );
450
- $string .= $_COOKIE[ $key ] . ",";
451
  }
452
- next($_COOKIE);
453
  }
454
- reset($_COOKIE);
455
 
456
  // If you use this hook, make sure you update your .htaccess rules with the same conditions
457
  $string = do_cacheaction( 'wp_cache_get_cookies_values', $string );
@@ -461,16 +471,17 @@ function wp_cache_get_cookies_values() {
461
  is_array( $wpsc_cookies ) &&
462
  ! empty( $wpsc_cookies )
463
  ) {
464
- foreach( $wpsc_cookies as $name ) {
465
  if ( isset( $_COOKIE[ $name ] ) ) {
466
  wp_cache_debug( "wp_cache_get_cookies_values - found extra cookie: $name" );
467
- $string .= $name . "=" . $_COOKIE[ $name ] . ",";
468
  }
469
  }
470
  }
471
 
472
- if ( $string != '' )
473
  $string = md5( $string );
 
474
 
475
  wp_cache_debug( "wp_cache_get_cookies_values: return: $string", 5 );
476
  return $string;
@@ -484,12 +495,13 @@ function add_cacheaction( $action, $func ) {
484
  function do_cacheaction( $action, $value = '' ) {
485
  global $wp_supercache_actions;
486
 
487
- if ( !isset( $wp_supercache_actions ) || !is_array( $wp_supercache_actions ) )
488
  return $value;
 
489
 
490
- if( array_key_exists($action, $wp_supercache_actions) && is_array( $wp_supercache_actions[ $action ] ) ) {
491
  $actions = $wp_supercache_actions[ $action ];
492
- foreach( $actions as $func ) {
493
  $value = call_user_func_array( $func, array( $value ) );
494
  }
495
  }
@@ -499,38 +511,42 @@ function do_cacheaction( $action, $value = '' ) {
499
 
500
  function wp_cache_mobile_group( $user_agent ) {
501
  global $wp_cache_mobile_groups;
502
- foreach( (array)$wp_cache_mobile_groups as $name => $group ) {
503
- foreach( (array)$group as $browser ) {
504
  $browser = trim( strtolower( $browser ) );
505
  if ( $browser != '' && strstr( $user_agent, $browser ) ) {
506
  return $browser;
507
  }
508
  }
509
  }
510
- return "mobile";
511
  }
512
 
513
  // From https://wordpress.org/plugins/wordpress-mobile-edition/ by Alex King
514
  function wp_cache_check_mobile( $cache_key ) {
515
  global $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_mobile_prefixes;
516
- if ( !isset( $wp_cache_mobile_enabled ) || false == $wp_cache_mobile_enabled )
517
  return $cache_key;
 
 
 
 
518
 
519
  wp_cache_debug( "wp_cache_check_mobile: $cache_key" );
520
 
521
  // allow plugins to short circuit mobile check. Cookie, extra UA checks?
522
- switch( do_cacheaction( 'wp_cache_check_mobile', $cache_key ) ) {
523
- case "normal":
524
- wp_cache_debug( 'wp_cache_check_mobile: desktop user agent detected by wp_cache_check_mobile action' );
525
- return $cache_key;
526
  break;
527
- case "mobile":
528
- wp_cache_debug( 'wp_cache_check_mobile: mobile user agent detected by wp_cache_check_mobile action' );
529
- return $cache_key . "-mobile";
530
  break;
531
  }
532
 
533
- if ( !isset( $_SERVER[ "HTTP_USER_AGENT" ] ) ) {
534
  return $cache_key;
535
  }
536
 
@@ -539,34 +555,36 @@ function wp_cache_check_mobile( $cache_key ) {
539
  return $cache_key;
540
  }
541
 
542
- $browsers = explode( ',', $wp_cache_mobile_browsers );
543
  $user_agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
544
- foreach ($browsers as $browser) {
545
  if ( strstr( $user_agent, trim( strtolower( $browser ) ) ) ) {
546
  wp_cache_debug( 'mobile browser detected: ' . $browser );
547
  return $cache_key . '-' . wp_cache_mobile_group( $user_agent );
548
  }
549
  }
550
- if (isset($_SERVER['HTTP_X_WAP_PROFILE']) )
551
  return $cache_key . '-' . $_SERVER['HTTP_X_WAP_PROFILE'];
552
- if (isset($_SERVER['HTTP_PROFILE']) )
 
553
  return $cache_key . '-' . $_SERVER['HTTP_PROFILE'];
 
554
 
555
  if ( isset( $wp_cache_mobile_prefixes ) ) {
556
  $browsers = explode( ',', $wp_cache_mobile_prefixes );
557
- foreach ($browsers as $browser_prefix) {
558
- if ( substr($user_agent, 0, 4) == $browser_prefix ) {
559
  wp_cache_debug( 'mobile browser (prefix) detected: ' . $browser_prefix );
560
  return $cache_key . '-' . $browser_prefix;
561
  }
562
  }
563
  }
564
- $accept = isset( $_SERVER[ 'HTTP_ACCEPT' ] ) ? strtolower( $_SERVER[ 'HTTP_ACCEPT' ] ) : '';
565
- if (strpos($accept, 'wap') !== false) {
566
  return $cache_key . '-' . 'wap';
567
  }
568
 
569
- if (isset($_SERVER['ALL_HTTP']) && strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false) {
570
  return $cache_key . '-' . 'operamini';
571
  }
572
 
@@ -589,26 +607,29 @@ function wp_cache_debug( $message, $level = 1 ) {
589
  $last_message = $message;
590
 
591
  // If either of the debug or log globals aren't set, then we can stop
592
- if ( !isset($wp_super_cache_debug)
593
- || !isset($wp_cache_debug_log) )
594
  return false;
 
595
 
596
  // If either the debug or log globals are false or empty, we can stop
597
  if ( $wp_super_cache_debug == false
598
- || $wp_cache_debug_log == '' )
599
  return false;
 
600
 
601
  // If the debug_ip has been set, but it doesn't match the ip of the requester
602
  // then we can stop.
603
- if ( isset($wp_cache_debug_ip)
604
  && $wp_cache_debug_ip != ''
605
- && $wp_cache_debug_ip != $_SERVER[ 'REMOTE_ADDR' ] )
606
  return false;
 
607
 
608
  // Log message: Date URI Message
609
- $log_message = date('H:i:s') . " " . getmypid() . " {$_SERVER['REQUEST_URI']} {$message}" . PHP_EOL;
610
  // path to the log file in the cache folder
611
- $log_file = $cache_path . str_replace('/', '', str_replace('..', '', $wp_cache_debug_log));
612
 
613
  if ( ! file_exists( $log_file ) && function_exists( 'wpsc_create_debug_log' ) ) {
614
  global $wp_cache_debug_username;
@@ -625,7 +646,7 @@ function wp_cache_debug( $message, $level = 1 ) {
625
  function wpsc_dump_get_request() {
626
  static $string;
627
 
628
- if ( isset( $string) ) {
629
  return $string;
630
  }
631
 
@@ -683,7 +704,7 @@ function get_current_url_supercache_dir( $post_id = 0 ) {
683
 
684
  $DONOTREMEMBER = 0;
685
  if ( $post_id != 0 ) {
686
- $site_url = site_url();
687
  $permalink = get_permalink( $post_id );
688
  if ( false === strpos( $permalink, $site_url ) ) {
689
  /*
@@ -706,39 +727,41 @@ function get_current_url_supercache_dir( $post_id = 0 ) {
706
  }
707
  } else {
708
  $uri = str_replace( $site_url, '', $permalink );
709
- if ( strpos( $uri, $wp_cache_home_path ) !== 0 )
710
  $uri = rtrim( $wp_cache_home_path, '/' ) . $uri;
 
711
  }
712
  } else {
713
  $uri = strtolower( $wp_cache_request_uri );
714
  $uri = preg_replace_callback(
715
- "/%[a-f0-9]{2}/",
716
  function ( $matches ) {
717
  return strtoupper( $matches[0] );
718
  },
719
  $uri
720
  );
721
  }
722
- $uri = wpsc_deep_replace( array( '..', '\\', 'index.php', ), preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', preg_replace( "/(\?.*)?(#.*)?$/", '', $uri ) ) );
723
  $hostname = $WPSC_HTTP_HOST;
724
  // Get hostname from wp options for wp-cron, wp-cli and similar requests.
725
  if ( empty( $hostname ) && function_exists( 'get_option' ) ) {
726
  $hostname = (string) parse_url( get_option( 'home' ), PHP_URL_HOST );
727
  }
728
  $dir = preg_replace( '/:.*$/', '', $hostname ) . $uri; // To avoid XSS attacks
729
- if ( function_exists( "apply_filters" ) ) {
730
  $dir = apply_filters( 'supercache_dir', $dir );
731
  } else {
732
  $dir = do_cacheaction( 'supercache_dir', $dir );
733
  }
734
  $dir = $cache_path . 'supercache/' . $dir . '/';
735
- if( is_array( $cached_direct_pages ) && in_array( $_SERVER[ 'REQUEST_URI' ], $cached_direct_pages ) ) {
736
  $dir = ABSPATH . $uri . '/';
737
  }
738
  $dir = str_replace( '..', '', str_replace( '//', '/', $dir ) );
739
  wp_cache_debug( "supercache dir: $dir", 5 );
740
- if ( $DONOTREMEMBER == 0 )
741
  $saved_supercache_dir[ $post_id ] = $dir;
 
742
  return $dir;
743
  }
744
 
@@ -762,7 +785,7 @@ function wpsc_get_realpath( $directory ) {
762
  }
763
 
764
  $original_dir = $directory;
765
- $directory = realpath( $directory );
766
 
767
  if ( ! $directory ) {
768
  wp_cache_debug( "wpsc_get_realpath: directory does not exist - $original_dir" );
@@ -826,14 +849,14 @@ function wpsc_delete_files( $dir, $delete = true ) {
826
 
827
  // only do this once, this function will be called many times
828
  if ( $protected == '' ) {
829
- $protected = array( $cache_path, $cache_path . "blogs/", $cache_path . 'supercache' );
830
- foreach( $protected as $id => $directory ) {
831
  $protected[ $id ] = trailingslashit( wpsc_get_realpath( $directory ) );
832
  }
833
  }
834
 
835
  $orig_dir = $dir;
836
- $dir = wpsc_get_realpath( $dir );
837
  if ( ! $dir ) {
838
  wp_cache_debug( 'wpsc_delete_files: directory does not exist: ' . $orig_dir );
839
  return false;
@@ -854,7 +877,7 @@ function wpsc_delete_files( $dir, $delete = true ) {
854
  if ( is_dir( $dir ) && $dh = @opendir( $dir ) ) {
855
  while ( ( $file = readdir( $dh ) ) !== false ) {
856
  wp_cache_debug( 'wpsc_delete_files: reading files: ' . $file );
857
- if ( $file != '.' && $file != '..' && $file != '.htaccess' && is_file( $dir . $file ) )
858
  if ( $delete ) {
859
  wp_cache_debug( 'wpsc_delete_files: deleting ' . $dir . $file );
860
  @unlink( $dir . $file );
@@ -862,6 +885,7 @@ function wpsc_delete_files( $dir, $delete = true ) {
862
  wp_cache_debug( 'wpsc_delete_files: rebuild or delete ' . $dir . $file );
863
  @wp_cache_rebuild_or_delete( $dir . $file );
864
  }
 
865
  }
866
  closedir( $dh );
867
 
@@ -894,20 +918,21 @@ function get_all_supercache_filenames( $dir = '' ) {
894
  // open directory and look for index-*.html files
895
  if ( is_dir( $dir ) && $dh = @opendir( $dir ) ) {
896
  while ( ( $file = readdir( $dh ) ) !== false ) {
897
- if ( substr( $file, 0, 6 ) == 'index-' && strpos( $file, '.html' ) )
898
  $filenames[] = $file;
 
899
  }
900
  closedir( $dh );
901
  }
902
  }
903
 
904
- if ( function_exists( "apply_filters" ) ) {
905
  $filenames = apply_filters( 'all_supercache_filenames', $filenames );
906
  } else {
907
  $filenames = do_cacheaction( 'all_supercache_filenames', $filenames );
908
  }
909
 
910
- foreach( $filenames as $file ) {
911
  $out[] = $file;
912
  $out[] = $file . '.gz';
913
  }
@@ -918,17 +943,17 @@ function get_all_supercache_filenames( $dir = '' ) {
918
  function supercache_filename() {
919
  global $cached_direct_pages;
920
 
921
- //Add support for https and http caching
922
- $is_https = ( ( isset( $_SERVER[ 'HTTPS' ] ) && 'on' == strtolower( $_SERVER[ 'HTTPS' ] ) ) || ( isset( $_SERVER[ 'HTTP_X_FORWARDED_PROTO' ] ) && 'https' == strtolower( $_SERVER[ 'HTTP_X_FORWARDED_PROTO' ] ) ) ); //Also supports https requests coming from an nginx reverse proxy
923
  $extra_str = $is_https ? '-https' : '';
924
 
925
- if ( function_exists( "apply_filters" ) ) {
926
  $extra_str = apply_filters( 'supercache_filename_str', $extra_str );
927
  } else {
928
  $extra_str = do_cacheaction( 'supercache_filename_str', $extra_str );
929
  }
930
 
931
- if ( is_array( $cached_direct_pages ) && in_array( $_SERVER[ 'REQUEST_URI' ], $cached_direct_pages ) ) {
932
  $extra_str = '';
933
  }
934
  $filename = 'index' . $extra_str . '.html';
@@ -937,18 +962,32 @@ function supercache_filename() {
937
  }
938
 
939
  function get_oc_version() {
940
- $wp_cache_oc_key = wp_cache_get( "wp_cache_oc_key" );
941
  if ( ! $wp_cache_oc_key ) {
942
- $wp_cache_oc_key[ 'key' ] = reset_oc_version();
943
- } elseif ( $wp_cache_oc_key[ 'ts' ] < time() - 600 )
944
- wp_cache_set( "wp_cache_oc_key", array( 'ts' => time(), 'key' => $wp_cache_oc_key[ 'key' ] ) );
945
- return $wp_cache_oc_key[ 'key' ];
 
 
 
 
 
 
 
946
  }
947
 
948
  function reset_oc_version( $version = 1 ) {
949
- if ( $version == 1 )
950
  $version = mt_rand();
951
- wp_cache_set( "wp_cache_oc_key", array( 'ts' => time(), 'key' => $version ) );
 
 
 
 
 
 
 
952
 
953
  return $version;
954
  }
@@ -957,7 +996,7 @@ function get_oc_key( $url = false ) {
957
  global $wp_cache_gzip_encoding, $WPSC_HTTP_HOST;
958
 
959
  if ( $url ) {
960
- $key = intval( $_SERVER[ 'SERVER_PORT' ] ) . preg_replace( '/:.*$/', '', $WPSC_HTTP_HOST ) . $url;
961
  } else {
962
  $key = get_current_url_supercache_dir();
963
  }
@@ -1039,8 +1078,8 @@ function wp_cache_confirm_delete( $dir ) {
1039
  $dir == '' ||
1040
  $dir == $rp_cache_path ||
1041
  $dir == wpsc_get_realpath( $blog_cache_dir ) ||
1042
- $dir == wpsc_get_realpath( $blog_cache_dir . "meta/" ) ||
1043
- $dir == wpsc_get_realpath( $cache_path . "supercache" )
1044
  ) {
1045
  return false;
1046
  } else {
@@ -1062,16 +1101,19 @@ function wpsc_deep_replace( $search, $subject ) {
1062
 
1063
  function wpsc_get_protected_directories() {
1064
  global $cache_path, $blog_cache_dir;
1065
- return apply_filters( 'wpsc_protected_directories', array(
1066
- $cache_path . '.htaccess',
1067
- $cache_path . "index.html",
1068
- $blog_cache_dir,
1069
- $blog_cache_dir . "index.html",
1070
- $blog_cache_dir . 'meta',
1071
- $blog_cache_dir . 'meta/index.html',
1072
- $cache_path . 'supercache/index.html',
1073
- $cache_path . 'supercache' )
1074
- );
 
 
 
1075
  }
1076
 
1077
  function wpsc_debug_username() {
@@ -1087,7 +1129,7 @@ function wpsc_create_debug_log( $filename = '', $username = '' ) {
1087
  if ( $filename != '' ) {
1088
  $wp_cache_debug_log = $filename;
1089
  } else {
1090
- $wp_cache_debug_log = md5( time() + mt_rand() ) . ".php";
1091
  }
1092
  if ( $username != '' ) {
1093
  $wp_cache_debug_username = $username;
@@ -1096,11 +1138,11 @@ function wpsc_create_debug_log( $filename = '', $username = '' ) {
1096
  }
1097
 
1098
  $msg = 'die( "Please use the viewer" );' . PHP_EOL;
1099
- $fp = fopen( $cache_path . $wp_cache_debug_log, 'w' );
1100
  if ( $fp ) {
1101
  fwrite( $fp, '<' . "?php\n" );
1102
  fwrite( $fp, $msg );
1103
- fwrite( $fp, '?' . "><pre>" . PHP_EOL );
1104
  fwrite( $fp, '<' . '?php // END HEADER ?' . '>' . PHP_EOL );
1105
  fclose( $fp );
1106
  wp_cache_setting( 'wp_cache_debug_log', $wp_cache_debug_log );
@@ -1117,7 +1159,7 @@ if ( !isset( $_SERVER[ "PHP_AUTH_USER" ] ) || ( $_SERVER[ "PHP_AUTH_USER" ] != "
1117
 
1118
  $fp = fopen( $cache_path . 'view_' . $wp_cache_debug_log, 'w' );
1119
  if ( $fp ) {
1120
- fwrite( $fp, '<' . "?php" . PHP_EOL );
1121
  $msg .= '$debug_log = file( "./' . $wp_cache_debug_log . '" );
1122
  $start_log = 1 + array_search( "<" . "?php // END HEADER ?" . ">" . PHP_EOL, $debug_log );
1123
  if ( $start_log > 1 ) {
@@ -1182,7 +1224,10 @@ foreach( $debug_log as $line ) {
1182
  fclose( $fp );
1183
  }
1184
 
1185
- return array( 'wp_cache_debug_log' => $wp_cache_debug_log, 'wp_cache_debug_username' => $wp_cache_debug_username );
 
 
 
1186
  }
1187
 
1188
  function wpsc_delete_url_cache( $url ) {
@@ -1222,9 +1267,10 @@ function is_writeable_ACLSafe( $path ) {
1222
 
1223
  // check tmp file for read/write capabilities
1224
  $rm = file_exists( $path );
1225
- $f = @fopen( $path, 'a' );
1226
- if ( $f === false )
1227
  return false;
 
1228
  fclose( $f );
1229
  if ( ! $rm ) {
1230
  unlink( $path );
@@ -1258,7 +1304,7 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1258
  }
1259
  return false;
1260
  }
1261
- if (!is_writeable_ACLSafe($my_file)) {
1262
  if ( function_exists( 'set_transient' ) ) {
1263
  set_transient( 'wpsc_config_error', 'config_file_ro', 10 );
1264
  }
@@ -1266,11 +1312,11 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1266
  return false;
1267
  }
1268
 
1269
- $found = false;
1270
  $loaded = false;
1271
- $c = 0;
1272
- $lines = array();
1273
- while( ! $loaded ) {
1274
  $lines = file( $my_file );
1275
  if ( ! empty( $lines ) && is_array( $lines ) ) {
1276
  $loaded = true;
@@ -1285,7 +1331,7 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1285
  }
1286
  }
1287
  }
1288
- foreach( (array) $lines as $line ) {
1289
  if (
1290
  trim( $new ) != '' &&
1291
  trim( $new ) == trim( $line )
@@ -1293,7 +1339,7 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1293
  wp_cache_debug( "wp_cache_replace_line: setting not changed - $new" );
1294
  return true;
1295
  } elseif ( preg_match( "/$old/", $line ) ) {
1296
- wp_cache_debug( "wp_cache_replace_line: changing line " . trim( $line ) . " to *$new*" );
1297
  $found = true;
1298
  }
1299
  }
@@ -1305,8 +1351,8 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1305
  die( __( 'WARNING: attempt to intercept updating of config file.', 'wp-super-cache' ) );
1306
  }
1307
  }
1308
- rename( $tmp_config_filename, $tmp_config_filename . ".php" );
1309
- $tmp_config_filename .= ".php";
1310
  wp_cache_debug( 'wp_cache_replace_line: writing to ' . $tmp_config_filename );
1311
  $fd = fopen( $tmp_config_filename, 'w' );
1312
  if ( ! $fd ) {
@@ -1317,7 +1363,7 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1317
  return false;
1318
  }
1319
  if ( $found ) {
1320
- foreach( (array) $lines as $line ) {
1321
  if ( ! preg_match( "/$old/", $line ) ) {
1322
  fputs( $fd, $line );
1323
  } elseif ( $new != '' ) {
@@ -1326,12 +1372,12 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1326
  }
1327
  } else {
1328
  $done = false;
1329
- foreach( (array) $lines as $line ) {
1330
  if ( $done || ! preg_match( '/^(if\ \(\ \!\ )?define|\$|\?>/', $line ) ) {
1331
- fputs($fd, $line);
1332
  } else {
1333
- fputs($fd, "$new\n");
1334
- fputs($fd, $line);
1335
  $done = true;
1336
  }
1337
  }
@@ -1340,7 +1386,7 @@ function wp_cache_replace_line( $old, $new, $my_file ) {
1340
  rename( $tmp_config_filename, $my_file );
1341
  wp_cache_debug( 'wp_cache_replace_line: moved ' . $tmp_config_filename . ' to ' . $my_file );
1342
 
1343
- if ( function_exists( "opcache_invalidate" ) ) {
1344
  @opcache_invalidate( $my_file );
1345
  }
1346
 
@@ -1351,7 +1397,7 @@ function wpsc_shutdown_message() {
1351
  static $did_wp_footer = false;
1352
  global $wp_super_cache_comments;
1353
 
1354
- if ( ! defined( 'WPSCSHUTDOWNMESSAGE' ) || ( isset( $wp_super_cache_comments) && ! $wp_super_cache_comments ) ) {
1355
  return;
1356
  }
1357
 
@@ -1380,7 +1426,7 @@ function wp_cache_phase2() {
1380
 
1381
  wp_cache_debug( 'In WP Cache Phase 2', 5 );
1382
 
1383
- $wp_cache_gmt_offset = get_option( 'gmt_offset' ); // caching for later use when wpdb is gone. https://wordpress.org/support/topic/224349
1384
  $wp_cache_blog_charset = get_option( 'blog_charset' );
1385
 
1386
  wp_cache_mutex_init();
@@ -1422,7 +1468,7 @@ function wp_cache_phase2() {
1422
  if ( ( $_SERVER['REQUEST_METHOD'] !== 'POST' && empty( $_POST ) ) && $super_cache_enabled && $cache_rebuild_files ) {
1423
  $user_info = wp_cache_get_cookies_values();
1424
 
1425
- if( empty( $user_info )
1426
  || true === apply_filters( 'do_createsupercache', $user_info )
1427
  ) {
1428
  wpcache_do_rebuild( get_current_url_supercache_dir() );
@@ -1468,7 +1514,7 @@ function wpsc_register_post_hooks() {
1468
  add_action( 'transition_post_status', 'wpsc_post_transition', 10, 3 );
1469
 
1470
  // Cron hooks
1471
- add_action( 'wp_cache_gc','wp_cache_gc_cron' );
1472
  add_action( 'wp_cache_gc_watcher', 'wp_cache_gc_watcher' );
1473
 
1474
  $done = true;
@@ -1478,7 +1524,7 @@ function wpcache_do_rebuild( $dir ) {
1478
  global $do_rebuild_list, $cache_path, $wpsc_file_mtimes;
1479
  wp_cache_debug( "wpcache_do_rebuild: doing rebuild for $dir" );
1480
 
1481
- if ( !is_dir( $dir ) ) {
1482
  wp_cache_debug( "wpcache_do_rebuild: exiting as directory is not a directory: $dir" );
1483
  return false;
1484
  }
@@ -1495,7 +1541,7 @@ function wpcache_do_rebuild( $dir ) {
1495
  }
1496
 
1497
  $protected = wpsc_get_protected_directories();
1498
- foreach( $protected as $id => $directory ) {
1499
  $protected[ $id ] = wpsc_get_realpath( $directory );
1500
  }
1501
 
@@ -1509,7 +1555,7 @@ function wpcache_do_rebuild( $dir ) {
1509
  return false;
1510
  }
1511
 
1512
- if ( !is_dir( $dir ) ) {
1513
  wp_cache_debug( "wpcache_do_rebuild: exiting as directory is not a directory: $dir" );
1514
  return false;
1515
  }
@@ -1520,7 +1566,7 @@ function wpcache_do_rebuild( $dir ) {
1520
  return false;
1521
  }
1522
 
1523
- $dir = trailingslashit( $dir );
1524
  $wpsc_file_mtimes = array();
1525
  while ( ( $file = readdir( $dh ) ) !== false ) {
1526
  if ( $file == '.' || $file == '..' || false == is_file( $dir . $file ) ) {
@@ -1554,7 +1600,7 @@ function wpcache_do_rebuild( $dir ) {
1554
  @unlink( $cache_file );
1555
  wp_cache_debug( "wpcache_do_rebuild: rebuild file rename failed. Deleted rebuild file: $cache_file" );
1556
  } else {
1557
- $do_rebuild_list[ $dir ] = 1;
1558
  $wpsc_file_mtimes[ $base_file ] = $mtime;
1559
  wp_cache_debug( "wpcache_do_rebuild: rebuild file renamed: $base_file" );
1560
  }
@@ -1690,19 +1736,22 @@ function wpsc_is_rejected_cookie() {
1690
  return false;
1691
  }
1692
 
1693
- function wp_cache_is_rejected($uri) {
1694
  global $cache_rejected_uri;
1695
 
1696
  $auto_rejected = array( '/wp-admin/', 'xmlrpc.php', 'wp-app.php' );
1697
- foreach( $auto_rejected as $u ) {
1698
- if( strstr( $uri, $u ) )
1699
  return true; // we don't allow caching of wp-admin for security reasons
 
1700
  }
1701
- if ( false == is_array( $cache_rejected_uri ) )
1702
  return false;
 
1703
  foreach ( $cache_rejected_uri as $expr ) {
1704
- if( $expr != '' && @preg_match( "~$expr~", $uri ) )
1705
  return true;
 
1706
  }
1707
  return false;
1708
  }
@@ -1710,44 +1759,49 @@ function wp_cache_is_rejected($uri) {
1710
  function wp_cache_mutex_init() {
1711
  global $mutex, $wp_cache_mutex_disabled, $use_flock, $blog_cache_dir, $mutex_filename, $sem_id;
1712
 
1713
- if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) )
1714
  return true;
 
1715
 
1716
- if( !is_bool( $use_flock ) ) {
1717
- if(function_exists('sem_get'))
1718
  $use_flock = false;
1719
- else
1720
  $use_flock = true;
 
1721
  }
1722
 
1723
  $mutex = false;
1724
- if ($use_flock ) {
1725
  setup_blog_cache_dir();
1726
  wp_cache_debug( "Created mutex lock on filename: {$blog_cache_dir}{$mutex_filename}", 5 );
1727
  $mutex = @fopen( $blog_cache_dir . $mutex_filename, 'w' );
1728
  } else {
1729
  wp_cache_debug( "Created mutex lock on semaphore: {$sem_id}", 5 );
1730
- $mutex = @sem_get( $sem_id, 1, 0666, 1 );
 
 
1731
  }
1732
  }
1733
 
1734
  function wp_cache_writers_entry() {
1735
  global $mutex, $wp_cache_mutex_disabled, $use_flock;
1736
 
1737
- if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) )
1738
  return true;
 
1739
 
1740
- if( !$mutex ) {
1741
  wp_cache_debug( '(writers entry) mutex lock not created. not caching.', 2 );
1742
  return false;
1743
  }
1744
 
1745
  if ( $use_flock ) {
1746
  wp_cache_debug( 'grabbing lock using flock()', 5 );
1747
- flock($mutex, LOCK_EX);
1748
  } else {
1749
  wp_cache_debug( 'grabbing lock using sem_acquire()', 5 );
1750
- @sem_acquire($mutex);
1751
  }
1752
 
1753
  return true;
@@ -1756,79 +1810,92 @@ function wp_cache_writers_entry() {
1756
  function wp_cache_writers_exit() {
1757
  global $mutex, $wp_cache_mutex_disabled, $use_flock;
1758
 
1759
- if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) )
1760
  return true;
 
1761
 
1762
- if( !$mutex ) {
1763
  wp_cache_debug( '(writers exit) mutex lock not created. not caching.', 2 );
1764
  return false;
1765
  }
1766
 
1767
  if ( $use_flock ) {
1768
  wp_cache_debug( 'releasing lock using flock()', 5 );
1769
- flock( $mutex, LOCK_UN );
1770
  } else {
1771
  wp_cache_debug( 'releasing lock using sem_release() and sem_remove()', 5 );
1772
  @sem_release( $mutex );
1773
- if ( defined( "WPSC_REMOVE_SEMAPHORE" ) )
1774
  @sem_remove( $mutex );
 
1775
  }
1776
  }
1777
 
1778
  function wp_super_cache_query_vars() {
1779
  global $wp_super_cache_query;
1780
 
1781
- if ( is_search() )
1782
- $wp_super_cache_query[ 'is_search' ] = 1;
1783
- if ( is_page() )
1784
- $wp_super_cache_query[ 'is_page' ] = 1;
1785
- if ( is_archive() )
1786
- $wp_super_cache_query[ 'is_archive' ] = 1;
1787
- if ( is_tag() )
1788
- $wp_super_cache_query[ 'is_tag' ] = 1;
1789
- if ( is_single() )
1790
- $wp_super_cache_query[ 'is_single' ] = 1;
1791
- if ( is_category() )
1792
- $wp_super_cache_query[ 'is_category' ] = 1;
1793
- if ( is_front_page() )
1794
- $wp_super_cache_query[ 'is_front_page' ] = 1;
1795
- if ( is_home() )
1796
- $wp_super_cache_query[ 'is_home' ] = 1;
1797
- if ( is_author() )
1798
- $wp_super_cache_query[ 'is_author' ] = 1;
 
 
 
 
 
 
 
 
 
1799
 
1800
  // REST API
1801
- if ( ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ||
1802
- ( defined( 'JSON_REQUEST' ) && JSON_REQUEST ) ||
1803
- ( defined( 'WC_API_REQUEST' ) && WC_API_REQUEST )
1804
  ) {
1805
- $wp_super_cache_query[ 'is_rest' ] = 1;
1806
  }
1807
 
1808
  // Feeds, sitemaps and robots.txt
1809
  if ( is_feed() ) {
1810
- $wp_super_cache_query[ 'is_feed' ] = 1;
1811
  if ( get_query_var( 'feed' ) == 'sitemap' ) {
1812
- $wp_super_cache_query[ 'is_sitemap' ] = 1;
1813
  }
1814
  } elseif ( get_query_var( 'sitemap' ) || get_query_var( 'xsl' ) || get_query_var( 'xml_sitemap' ) ) {
1815
- $wp_super_cache_query[ 'is_feed' ] = 1;
1816
- $wp_super_cache_query[ 'is_sitemap' ] = 1;
1817
  } elseif ( is_robots() ) {
1818
- $wp_super_cache_query[ 'is_robots' ] = 1;
1819
  }
1820
 
1821
  // Reset everything if it's 404
1822
- if ( is_404() )
1823
  $wp_super_cache_query = array( 'is_404' => 1 );
 
1824
 
1825
  return $wp_super_cache_query;
1826
  }
1827
 
1828
  function wpsc_catch_status_header( $status_header, $code ) {
1829
 
1830
- if ( $code != 200 )
1831
  wpsc_catch_http_status_code( $code );
 
1832
 
1833
  return $status_header;
1834
  }
@@ -1837,11 +1904,11 @@ function wpsc_catch_http_status_code( $status ) {
1837
  global $wp_super_cache_query;
1838
 
1839
  if ( in_array( intval( $status ), array( 301, 302, 303, 307 ) ) ) {
1840
- $wp_super_cache_query[ 'is_redirect' ] = 1;
1841
  } elseif ( $status == 304 ) {
1842
- $wp_super_cache_query[ 'is_304' ] = 1;
1843
  } elseif ( $status == 404 ) {
1844
- $wp_super_cache_query[ 'is_404' ] = 1;
1845
  }
1846
 
1847
  return $status;
@@ -1855,7 +1922,7 @@ function wpsc_is_fatal_error() {
1855
  }
1856
 
1857
  if ( $error['type'] & ( E_ERROR | E_CORE_ERROR | E_PARSE | E_COMPILE_ERROR | E_USER_ERROR ) ) {
1858
- $wp_super_cache_query[ 'is_fatal_error' ] = 1;
1859
  return true;
1860
  }
1861
 
@@ -1864,7 +1931,7 @@ function wpsc_is_fatal_error() {
1864
 
1865
  function wp_cache_ob_callback( $buffer ) {
1866
  global $wp_cache_pages, $wp_query, $wp_super_cache_query, $cache_acceptable_files, $wp_cache_no_cache_for_get, $wp_cache_request_uri, $do_rebuild_list, $wpsc_file_mtimes, $wpsc_save_headers, $super_cache_enabled;
1867
- $script = basename( $_SERVER[ 'PHP_SELF' ] );
1868
 
1869
  // All the things that can stop a page being cached
1870
  $cache_this_page = true;
@@ -1872,7 +1939,7 @@ function wp_cache_ob_callback( $buffer ) {
1872
  if ( wpsc_is_fatal_error() ) {
1873
  wp_cache_debug( 'wp_cache_ob_callback: PHP Fatal error occurred. Not caching incomplete page.' );
1874
  $cache_this_page = false;
1875
- } elseif ( empty( $wp_super_cache_query ) && !empty( $buffer ) && is_object( $wp_query ) && method_exists( $wp_query, 'get' ) ) {
1876
  $wp_super_cache_query = wp_super_cache_query_vars();
1877
  } elseif ( empty( $wp_super_cache_query ) && function_exists( 'http_response_code' ) ) {
1878
  wpsc_catch_http_status_code( http_response_code() );
@@ -1886,67 +1953,67 @@ function wp_cache_ob_callback( $buffer ) {
1886
  } elseif ( $wp_cache_no_cache_for_get && wpsc_is_get_query() ) {
1887
  wp_cache_debug( 'Non empty GET request. Caching disabled on settings page. ' . wpsc_dump_get_request(), 1 );
1888
  $cache_this_page = false;
1889
- } elseif ( $_SERVER["REQUEST_METHOD"] == 'POST' || !empty( $_POST ) || get_option( 'gzipcompression' ) ) {
1890
  wp_cache_debug( 'Not caching POST request.', 5 );
1891
  $cache_this_page = false;
1892
- } elseif ( $_SERVER["REQUEST_METHOD"] == 'PUT' ) {
1893
  wp_cache_debug( 'Not caching PUT request.', 5 );
1894
  $cache_this_page = false;
1895
- } elseif ( $_SERVER["REQUEST_METHOD"] == 'DELETE' ) {
1896
  wp_cache_debug( 'Not caching DELETE request.', 5 );
1897
  $cache_this_page = false;
1898
- } elseif ( isset( $_GET[ 'preview' ] ) ) {
1899
  wp_cache_debug( 'Not caching preview post.', 2 );
1900
  $cache_this_page = false;
1901
- } elseif ( !in_array( $script, (array) $cache_acceptable_files ) && wp_cache_is_rejected( $wp_cache_request_uri ) ) {
1902
  wp_cache_debug( 'URI rejected. Not Caching', 2 );
1903
  $cache_this_page = false;
1904
  } elseif ( wp_cache_user_agent_is_rejected() ) {
1905
  wp_cache_debug( "USER AGENT ({$_SERVER[ 'HTTP_USER_AGENT' ]}) rejected. Not Caching", 4 );
1906
  $cache_this_page = false;
1907
- } elseif ( isset( $wp_cache_pages[ 'single' ] ) && $wp_cache_pages[ 'single' ] == 1 && isset( $wp_super_cache_query[ 'is_single' ] ) ) {
1908
  wp_cache_debug( 'Not caching single post.', 2 );
1909
  $cache_this_page = false;
1910
- } elseif ( isset( $wp_cache_pages[ 'pages' ] ) && $wp_cache_pages[ 'pages' ] == 1 && isset( $wp_super_cache_query[ 'is_page' ] ) ) {
1911
  wp_cache_debug( 'Not caching single page.', 2 );
1912
  $cache_this_page = false;
1913
- } elseif ( isset( $wp_cache_pages[ 'archives' ] ) && $wp_cache_pages[ 'archives' ] == 1 && isset( $wp_super_cache_query[ 'is_archive' ] ) ) {
1914
  wp_cache_debug( 'Not caching archive page.', 2 );
1915
  $cache_this_page = false;
1916
- } elseif ( isset( $wp_cache_pages[ 'tag' ] ) && $wp_cache_pages[ 'tag' ] == 1 && isset( $wp_super_cache_query[ 'is_tag' ] ) ) {
1917
  wp_cache_debug( 'Not caching tag page.', 2 );
1918
  $cache_this_page = false;
1919
- } elseif ( isset( $wp_cache_pages[ 'category' ] ) && $wp_cache_pages[ 'category' ] == 1 && isset( $wp_super_cache_query[ 'is_category' ] ) ) {
1920
  wp_cache_debug( 'Not caching category page.', 2 );
1921
  $cache_this_page = false;
1922
- } elseif ( isset( $wp_cache_pages[ 'frontpage' ] ) && $wp_cache_pages[ 'frontpage' ] == 1 && isset( $wp_super_cache_query[ 'is_front_page' ] ) ) {
1923
  wp_cache_debug( 'Not caching front page.', 2 );
1924
  $cache_this_page = false;
1925
- } elseif ( isset( $wp_cache_pages[ 'home' ] ) && $wp_cache_pages[ 'home' ] == 1 && isset( $wp_super_cache_query[ 'is_home' ] ) ) {
1926
  wp_cache_debug( 'Not caching home page.', 2 );
1927
  $cache_this_page = false;
1928
- } elseif ( isset( $wp_cache_pages[ 'search' ] ) && $wp_cache_pages[ 'search' ] == 1 && isset( $wp_super_cache_query[ 'is_search' ] ) ) {
1929
  wp_cache_debug( 'Not caching search page.', 2 );
1930
  $cache_this_page = false;
1931
- } elseif ( isset( $wp_cache_pages[ 'author' ] ) && $wp_cache_pages[ 'author' ] == 1 && isset( $wp_super_cache_query[ 'is_author' ] ) ) {
1932
  wp_cache_debug( 'Not caching author page.', 2 );
1933
  $cache_this_page = false;
1934
- } elseif ( isset( $wp_cache_pages[ 'feed' ] ) && $wp_cache_pages[ 'feed' ] == 1 && isset( $wp_super_cache_query[ 'is_feed' ] ) ) {
1935
  wp_cache_debug( 'Not caching feed.', 2 );
1936
  $cache_this_page = false;
1937
- } elseif ( isset( $wp_super_cache_query[ 'is_rest' ] ) ) {
1938
  wp_cache_debug( 'REST API detected. Caching disabled.' );
1939
  $cache_this_page = false;
1940
- } elseif ( isset( $wp_super_cache_query[ 'is_robots' ] ) ) {
1941
  wp_cache_debug( 'robots.txt detected. Caching disabled.' );
1942
  $cache_this_page = false;
1943
- } elseif ( isset( $wp_super_cache_query[ 'is_redirect' ] ) ) {
1944
  wp_cache_debug( 'Redirect detected. Caching disabled.' );
1945
  $cache_this_page = false;
1946
- } elseif ( isset( $wp_super_cache_query[ 'is_304' ] ) ) {
1947
  wp_cache_debug( 'HTTP 304 (Not Modified) sent. Caching disabled.' );
1948
  $cache_this_page = false;
1949
- } elseif ( empty( $wp_super_cache_query ) && !empty( $buffer ) && apply_filters( 'wpsc_only_cache_known_pages', 1 ) ) {
1950
  wp_cache_debug( 'wp_cache_ob_callback: wp_super_cache_query is empty. Not caching unknown page type. Return 0 to the wpsc_only_cache_known_pages filter to cache this page.' );
1951
  $cache_this_page = false;
1952
  } elseif ( wpsc_is_caching_user_disabled() ) {
@@ -1957,8 +2024,9 @@ function wp_cache_ob_callback( $buffer ) {
1957
  $cache_this_page = false;
1958
  }
1959
 
1960
- if ( isset( $wpsc_save_headers ) && $wpsc_save_headers )
1961
  $super_cache_enabled = false; // use standard caching to record headers
 
1962
 
1963
  if ( $cache_this_page ) {
1964
 
@@ -1967,8 +2035,8 @@ function wp_cache_ob_callback( $buffer ) {
1967
  $buffer = wp_cache_get_ob( $buffer );
1968
  wp_cache_shutdown_callback();
1969
 
1970
- if ( !empty( $wpsc_file_mtimes ) && is_array( $wpsc_file_mtimes ) ) {
1971
- foreach( $wpsc_file_mtimes as $cache_file => $old_mtime ) {
1972
  if ( $old_mtime == @filemtime( $cache_file ) ) {
1973
  wp_cache_debug( "wp_cache_ob_callback deleting unmodified rebuilt cache file: $cache_file" );
1974
  if ( wp_cache_confirm_delete( $cache_file ) ) {
@@ -1979,8 +2047,8 @@ function wp_cache_ob_callback( $buffer ) {
1979
  }
1980
  return $buffer;
1981
  } else {
1982
- if ( !empty( $do_rebuild_list ) && is_array( $do_rebuild_list ) ) {
1983
- foreach( $do_rebuild_list as $dir => $n ) {
1984
  if ( wp_cache_confirm_delete( $dir ) ) {
1985
  wp_cache_debug( 'wp_cache_ob_callback clearing rebuilt files in ' . $dir );
1986
  wpsc_delete_files( $dir );
@@ -1995,13 +2063,15 @@ function wp_cache_append_tag( &$buffer ) {
1995
  global $wp_cache_gmt_offset, $wp_super_cache_comments;
1996
  global $cache_enabled, $super_cache_enabled;
1997
 
1998
- if ( false == isset( $wp_super_cache_comments ) )
1999
  $wp_super_cache_comments = 1;
 
2000
 
2001
- if ( $wp_super_cache_comments == 0 )
2002
  return false;
 
2003
 
2004
- $timestamp = gmdate('Y-m-d H:i:s', (time() + ( $wp_cache_gmt_offset * 3600)));
2005
  if ( $cache_enabled || $super_cache_enabled ) {
2006
  $msg = "Cached page generated by WP-Super-Cache on $timestamp";
2007
  } else {
@@ -2009,7 +2079,7 @@ function wp_cache_append_tag( &$buffer ) {
2009
  }
2010
 
2011
  if ( strpos( $buffer, '<html' ) === false ) {
2012
- wp_cache_debug( site_url( $_SERVER[ 'REQUEST_URI' ] ) . " - " . $msg );
2013
  return false;
2014
  }
2015
 
@@ -2019,21 +2089,22 @@ function wp_cache_append_tag( &$buffer ) {
2019
  function wp_cache_add_to_buffer( &$buffer, $text ) {
2020
  global $wp_super_cache_comments;
2021
 
2022
- if ( false == isset( $wp_super_cache_comments ) )
2023
  $wp_super_cache_comments = 1;
 
2024
 
2025
- if ( $wp_super_cache_comments == 0 )
2026
  return false;
 
2027
 
2028
  if ( strpos( $buffer, '<html' ) === false ) {
2029
- wp_cache_debug( site_url( $_SERVER[ 'REQUEST_URI' ] ) . " - " . $text );
2030
  return false;
2031
  }
2032
 
2033
  $buffer .= "\n<!-- $text -->";
2034
  }
2035
 
2036
-
2037
  /*
2038
  * If dynamic caching is enabled then run buffer through wpsc_cachedata filter before returning it.
2039
  * or we'll return template tags to visitors.
@@ -2049,7 +2120,7 @@ function wp_cache_maybe_dynamic( &$buffer ) {
2049
  }
2050
  }
2051
 
2052
- function wp_cache_get_ob(&$buffer) {
2053
  global $cache_enabled, $cache_path, $cache_filename, $wp_start_time, $supercachedir;
2054
  global $new_cache, $wp_cache_meta, $cache_compression, $wp_super_cache_query;
2055
  global $wp_cache_gzip_encoding, $super_cache_enabled;
@@ -2058,61 +2129,64 @@ function wp_cache_get_ob(&$buffer) {
2058
  global $wp_cache_not_logged_in, $cache_max_time;
2059
  global $wp_cache_is_home, $wp_cache_front_page_checks, $wp_cache_mfunc_enabled;
2060
 
2061
- if ( isset( $wp_cache_mfunc_enabled ) == false )
2062
  $wp_cache_mfunc_enabled = 0;
 
2063
 
2064
- $new_cache = true;
2065
  $wp_cache_meta = array();
2066
 
2067
- /* Mode paranoic, check for closing tags
 
2068
  * we avoid caching incomplete files */
2069
  if ( $buffer == '' ) {
2070
  $new_cache = false;
2071
- if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
2072
  wp_cache_debug( "Buffer is blank. Output buffer may have been corrupted by another plugin or this is a redirected URL. Look for text 'ob_start' in the files of your plugins directory.", 2 );
2073
- wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Blank Page. Check output buffer usage by plugins." );
2074
  }
2075
  }
2076
 
2077
- if ( isset( $wp_super_cache_query[ 'is_404' ] ) && false == apply_filters( 'wpsupercache_404', false ) ) {
2078
  $new_cache = false;
2079
- if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
2080
  wp_cache_debug( '404 file not found not cached', 2 );
2081
- wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. 404." );
2082
  }
2083
  }
2084
 
2085
- if ( !preg_match( apply_filters( 'wp_cache_eof_tags', '/(<\/html>|<\/rss>|<\/feed>|<\/urlset|<\?xml)/i' ), $buffer ) ) {
2086
  $new_cache = false;
2087
- if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
2088
  wp_cache_debug( 'No closing html tag. Not caching.', 2 );
2089
- wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. No closing HTML tag. Check your theme." );
2090
  }
2091
  }
2092
 
2093
- if( !$new_cache )
2094
  return wp_cache_maybe_dynamic( $buffer );
 
2095
 
2096
- $duration = wp_cache_microtime_diff($wp_start_time, microtime());
2097
- $duration = sprintf("%0.3f", $duration);
2098
  wp_cache_add_to_buffer( $buffer, "Dynamic page generated in $duration seconds." );
2099
 
2100
- if( !wp_cache_writers_entry() ) {
2101
- wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Could not get mutex lock." );
2102
  wp_cache_debug( 'Could not get mutex lock. Not caching.', 1 );
2103
  return wp_cache_maybe_dynamic( $buffer );
2104
  }
2105
 
2106
- if ( $wp_cache_not_logged_in && isset( $wp_super_cache_query[ 'is_feed' ] ) ) {
2107
  wp_cache_debug( 'Feed detected. Writing wpcache cache files.', 5 );
2108
  $wp_cache_not_logged_in = false;
2109
  }
2110
 
2111
  $home_url = parse_url( trailingslashit( get_bloginfo( 'url' ) ) );
2112
 
2113
- $dir = get_current_url_supercache_dir();
2114
- $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $home_url[ 'host' ]);
2115
- if ( wpsc_is_get_query() || isset( $wp_super_cache_query[ 'is_feed' ] ) || ( $super_cache_enabled == true && is_dir( substr( $supercachedir, 0, -1 ) . '.disabled' ) ) ) {
2116
  wp_cache_debug( 'Supercache disabled: GET or feed detected or disabled by config.', 2 );
2117
  $super_cache_enabled = false;
2118
  }
@@ -2126,7 +2200,7 @@ function wp_cache_get_ob(&$buffer) {
2126
  $supercacheonly = false;
2127
  }
2128
 
2129
- if( $super_cache_enabled ) {
2130
  if ( wp_cache_get_cookies_values() == '' && ! wpsc_is_get_query() ) {
2131
  wp_cache_debug( 'Anonymous user detected. Only creating Supercache file.', 3 );
2132
  $supercacheonly = true;
@@ -2136,26 +2210,28 @@ function wp_cache_get_ob(&$buffer) {
2136
  $cache_error = '';
2137
  if ( wpsc_is_caching_user_disabled() ) {
2138
  $super_cache_enabled = false;
2139
- $cache_enabled = false;
2140
- $cache_error = 'Not caching requests by known users. (See Advanced Settings page)';
2141
  wp_cache_debug( 'Not caching for known user.', 5 );
2142
  }
2143
 
2144
- if ( !$cache_enabled ) {
2145
  wp_cache_debug( 'Cache is not enabled. Sending buffer to browser.', 5 );
2146
  wp_cache_writers_exit();
2147
  wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Check your settings page. $cache_error" );
2148
  if ( $wp_cache_mfunc_enabled == 1 ) {
2149
  global $wp_super_cache_late_init;
2150
- if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) )
2151
  wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but $wp_super_cache_late_init not set. See the readme.txt for further details.' );
 
2152
  }
2153
 
2154
  return wp_cache_maybe_dynamic( $buffer );
2155
  }
2156
 
2157
- if( @is_dir( $dir ) == false )
2158
  @wp_mkdir_p( $dir );
 
2159
  $dir = wpsc_get_realpath( $dir );
2160
 
2161
  if ( ! $dir ) {
@@ -2182,7 +2258,7 @@ function wp_cache_get_ob(&$buffer) {
2182
  }
2183
  } else {
2184
  $user_info = wp_cache_get_cookies_values();
2185
- $do_cache = apply_filters( 'do_createsupercache', $user_info );
2186
  if (
2187
  $super_cache_enabled &&
2188
  (
@@ -2190,10 +2266,10 @@ function wp_cache_get_ob(&$buffer) {
2190
  $do_cache === true
2191
  )
2192
  ) {
2193
- $cache_fname = $dir . supercache_filename();
2194
  $tmp_cache_filename = $dir . uniqid( mt_rand(), true ) . '.tmp';
2195
- $fr2 = @fopen( $tmp_cache_filename, 'w' );
2196
- if ( !$fr2 ) {
2197
  wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ), 1 );
2198
  wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) );
2199
  @fclose( $fr );
@@ -2207,10 +2283,10 @@ function wp_cache_get_ob(&$buffer) {
2207
  $wp_cache_mfunc_enabled == 0
2208
  )
2209
  ) { // don't want to store compressed files if using dynamic content
2210
- $gz = @fopen( $tmp_cache_filename . ".gz", 'w');
2211
- if ( !$gz ) {
2212
- wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ) . ".gz", 1 );
2213
- wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) . ".gz" );
2214
  @fclose( $fr );
2215
  @unlink( $tmp_wpcache_filename );
2216
  @fclose( $fr2 );
@@ -2223,8 +2299,8 @@ function wp_cache_get_ob(&$buffer) {
2223
  }
2224
 
2225
  $added_cache = 0;
2226
- $oc_key = get_oc_key();
2227
- $buffer = apply_filters( 'wpsupercache_buffer', $buffer );
2228
  wp_cache_append_tag( $buffer );
2229
 
2230
  /*
@@ -2232,32 +2308,33 @@ function wp_cache_get_ob(&$buffer) {
2232
  * the wpsc_cachedata filter. Buffer is then returned to the visitor.
2233
  */
2234
  if ( $wp_cache_mfunc_enabled == 1 ) {
2235
- if ( preg_match( '/<!--mclude|<!--mfunc|<!--dynamic-cached-content-->/', $buffer ) ) { //Dynamic content
2236
  wp_cache_debug( 'mfunc/mclude/dynamic-cached-content tags have been retired. Please update your theme. See docs for updates.' );
2237
- wp_cache_add_to_buffer( $buffer, "Warning! Obsolete mfunc/mclude/dynamic-cached-content tags found. Please update your theme. See http://ocaoimh.ie/y/5b for more information." );
2238
  }
2239
 
2240
  global $wp_super_cache_late_init;
2241
- if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) )
2242
  wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but late init not set. See the readme.txt for further details.' );
 
2243
 
2244
  if ( $fr ) { // wpcache caching
2245
  wp_cache_debug( 'Writing dynamic buffer to wpcache file.' );
2246
- wp_cache_add_to_buffer( $buffer, "Dynamic WPCache Super Cache" );
2247
  fputs( $fr, '<?php die(); ?>' . $buffer );
2248
  } elseif ( isset( $fr2 ) ) { // supercache active
2249
  wp_cache_debug( 'Writing dynamic buffer to supercache file.' );
2250
- wp_cache_add_to_buffer( $buffer, "Dynamic Super Cache" );
2251
  fputs( $fr2, $buffer );
2252
  }
2253
- $wp_cache_meta[ 'dynamic' ] = true;
2254
  if ( $wp_cache_mfunc_enabled == 1 && do_cacheaction( 'wpsc_cachedata_safety', 0 ) === 1 ) {
2255
  $buffer = do_cacheaction( 'wpsc_cachedata', $buffer ); // dynamic content for display
2256
  }
2257
 
2258
  if ( $cache_compression && $wp_cache_gzip_encoding ) {
2259
  wp_cache_debug( 'Gzipping dynamic buffer for display.', 5 );
2260
- wp_cache_add_to_buffer( $buffer, "Compression = gzip" );
2261
  $gzdata = gzencode( $buffer, 6, FORCE_GZIP );
2262
  $gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
2263
  }
@@ -2272,34 +2349,34 @@ function wp_cache_get_ob(&$buffer) {
2272
  $vary_header = 'Accept-Encoding, Cookie';
2273
  }
2274
  if ( $vary_header ) {
2275
- $wp_cache_meta[ 'headers' ][ 'Vary' ] = 'Vary: ' . $vary_header;
2276
  }
2277
  if ( $gz || $wp_cache_gzip_encoding ) {
2278
  wp_cache_debug( 'Gzipping buffer.', 5 );
2279
- wp_cache_add_to_buffer( $buffer, "Compression = gzip" );
2280
  $gzdata = gzencode( $buffer, 6, FORCE_GZIP );
2281
  $gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
2282
 
2283
- $wp_cache_meta[ 'headers' ][ 'Content-Encoding' ] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
2284
  // Return uncompressed data & store compressed for later use
2285
  if ( $fr ) {
2286
  wp_cache_debug( 'Writing gzipped buffer to wp-cache cache file.', 5 );
2287
- fputs($fr, '<?php die(); ?>' . $gzdata);
2288
  }
2289
  } else { // no compression
2290
  if ( $fr ) {
2291
  wp_cache_debug( 'Writing non-gzipped buffer to wp-cache cache file.' );
2292
- fputs($fr, '<?php die(); ?>' . $buffer);
2293
  }
2294
  }
2295
  if ( $fr2 ) {
2296
  wp_cache_debug( 'Writing non-gzipped buffer to supercache file.' );
2297
- wp_cache_add_to_buffer( $buffer, "super cache" );
2298
- fputs($fr2, $buffer );
2299
  }
2300
  if ( isset( $gzdata ) && $gz ) {
2301
  wp_cache_debug( 'Writing gzipped buffer to supercache file.' );
2302
- fwrite($gz, $gzdata );
2303
  }
2304
  }
2305
 
@@ -2329,7 +2406,7 @@ function wp_cache_get_ob(&$buffer) {
2329
 
2330
  if ( $fr2 ) {
2331
  fclose( $fr2 );
2332
- if ( $wp_cache_front_page_checks && $cache_fname == $supercachedir . $home_url[ 'path' ] . supercache_filename() && !( $wp_cache_is_home ) ) {
2333
  wp_cache_writers_exit();
2334
  wp_cache_debug( 'Warning! Not writing another page to front page cache.', 1 );
2335
  return $buffer;
@@ -2362,14 +2439,18 @@ function wp_cache_get_ob(&$buffer) {
2362
 
2363
  if ( $added_cache && isset( $wp_supercache_cache_list ) && $wp_supercache_cache_list ) {
2364
  update_option( 'wpsupercache_count', ( get_option( 'wpsupercache_count' ) + 1 ) );
2365
- $last_urls = (array)get_option( 'supercache_last_cached' );
2366
- if ( count( $last_urls ) >= 10 )
2367
  $last_urls = array_slice( $last_urls, 1, 9 );
2368
- $last_urls[] = array( 'url' => preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER[ 'REQUEST_URI' ] ), 'date' => date( 'Y-m-d H:i:s' ) );
 
 
 
 
2369
  update_option( 'supercache_last_cached', $last_urls );
2370
  }
2371
  wp_cache_writers_exit();
2372
- if ( !headers_sent() && $wp_cache_gzip_encoding && $gzdata) {
2373
  wp_cache_debug( 'Writing gzip content headers. Sending buffer to browser', 5 );
2374
  header( 'Content-Encoding: ' . $wp_cache_gzip_encoding );
2375
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
@@ -2392,30 +2473,31 @@ function wp_cache_get_ob(&$buffer) {
2392
  }
2393
  }
2394
 
2395
- function wp_cache_phase2_clean_cache($file_prefix) {
2396
  global $wpdb, $blog_cache_dir;
2397
 
2398
- if( !wp_cache_writers_entry() )
2399
  return false;
 
2400
  wp_cache_debug( "wp_cache_phase2_clean_cache: Cleaning cache in $blog_cache_dir" );
2401
  if ( $handle = @opendir( $blog_cache_dir ) ) {
2402
- while ( false !== ($file = @readdir($handle))) {
2403
  if ( strpos( $file, $file_prefix ) !== false ) {
2404
  if ( strpos( $file, '.html' ) ) {
2405
  // delete old wpcache files immediately
2406
  wp_cache_debug( "wp_cache_phase2_clean_cache: Deleting obsolete wpcache cache+meta files: $file" );
2407
- @unlink( $blog_cache_dir . $file);
2408
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
2409
  } else {
2410
  $meta = json_decode( wp_cache_get_legacy_cache( $blog_cache_dir . 'meta/' . $file ), true );
2411
- if ( $meta[ 'blog_id' ] == $wpdb->blogid ) {
2412
  @unlink( $blog_cache_dir . $file );
2413
  @unlink( $blog_cache_dir . 'meta/' . $file );
2414
  }
2415
  }
2416
  }
2417
  }
2418
- closedir($handle);
2419
  do_action( 'wp_cache_cleared' );
2420
  }
2421
  wp_cache_writers_exit();
@@ -2430,10 +2512,10 @@ function prune_super_cache( $directory, $force = false, $rename = false ) {
2430
  }
2431
 
2432
  global $cache_max_time, $cache_path, $blog_cache_dir;
2433
- static $log = 0;
2434
  static $protected_directories = '';
2435
 
2436
- $dir = $directory;
2437
  $directory = wpsc_get_realpath( $directory );
2438
  if ( $directory == '' ) {
2439
  wp_cache_debug( "prune_super_cache: exiting as file/directory does not exist : $dir" );
@@ -2448,8 +2530,9 @@ function prune_super_cache( $directory, $force = false, $rename = false ) {
2448
  wp_cache_debug( "prune_super_cache: exiting as file/dir does not exist: $directory" );
2449
  return $log;
2450
  }
2451
- if( !isset( $cache_max_time ) )
2452
  $cache_max_time = 3600;
 
2453
 
2454
  $now = time();
2455
 
@@ -2457,30 +2540,33 @@ function prune_super_cache( $directory, $force = false, $rename = false ) {
2457
  $protected_directories = wpsc_get_protected_directories();
2458
  }
2459
 
2460
- if (is_dir($directory)) {
2461
- if( $dh = @opendir( $directory ) ) {
2462
  $directory = trailingslashit( $directory );
2463
- while( ( $entry = @readdir( $dh ) ) !== false ) {
2464
- if ($entry == '.' || $entry == '..')
2465
  continue;
 
2466
  $entry = $directory . $entry;
2467
  prune_super_cache( $entry, $force, $rename );
2468
  // If entry is a directory, AND it's not a protected one, AND we're either forcing the delete, OR the file is out of date,
2469
- if( is_dir( $entry ) && !in_array( $entry, $protected_directories ) && ( $force || @filemtime( $entry ) + $cache_max_time <= $now ) ) {
2470
  // if the directory isn't empty can't delete it
2471
- if( $handle = @opendir( $entry ) ) {
2472
  $donotdelete = false;
2473
- while( !$donotdelete && ( $file = @readdir( $handle ) ) !== false ) {
2474
- if ($file == '.' || $file == '..')
2475
  continue;
 
2476
  $donotdelete = true;
2477
  wp_cache_debug( "gc: could not delete $entry as it's not empty: $file", 2 );
2478
  }
2479
- closedir($handle);
2480
  }
2481
- if( $donotdelete )
2482
  continue;
2483
- if( !$rename ) {
 
2484
  @rmdir( $entry );
2485
  $log++;
2486
  if ( $force ) {
@@ -2493,19 +2579,19 @@ function prune_super_cache( $directory, $force = false, $rename = false ) {
2493
  wp_cache_debug( "gc: could not delete $entry as it's protected.", 2 );
2494
  }
2495
  }
2496
- closedir($dh);
2497
  }
2498
- } elseif( is_file($directory) && ($force || @filemtime( $directory ) + $cache_max_time <= $now ) ) {
2499
  $oktodelete = true;
2500
  if ( in_array( $directory, $protected_directories ) ) {
2501
  wp_cache_debug( "gc: could not delete $directory as it's protected.", 2 );
2502
  $oktodelete = false;
2503
  }
2504
- if( $oktodelete && !$rename ) {
2505
  wp_cache_debug( "prune_super_cache: deleted $directory", 5 );
2506
  @unlink( $directory );
2507
  $log++;
2508
- } elseif( $oktodelete && $rename ) {
2509
  wp_cache_debug( "prune_super_cache: wp_cache_rebuild_or_delete( $directory )", 5 );
2510
  wp_cache_rebuild_or_delete( $directory );
2511
  $log++;
@@ -2521,9 +2607,9 @@ function prune_super_cache( $directory, $force = false, $rename = false ) {
2521
  function wp_cache_rebuild_or_delete( $file ) {
2522
  global $cache_rebuild_files, $cache_path, $file_prefix;
2523
 
2524
-
2525
- if ( strpos( $file, '?' ) !== false )
2526
  $file = substr( $file, 0, strpos( $file, '?' ) );
 
2527
 
2528
  $file = wpsc_get_realpath( $file );
2529
 
@@ -2538,7 +2624,7 @@ function wp_cache_rebuild_or_delete( $file ) {
2538
  }
2539
 
2540
  $protected = wpsc_get_protected_directories();
2541
- foreach( $protected as $id => $directory ) {
2542
  $protected[ $id ] = wpsc_get_realpath( $directory );
2543
  }
2544
 
@@ -2563,8 +2649,8 @@ function wp_cache_rebuild_or_delete( $file ) {
2563
  wp_cache_debug( "rebuild_or_gc: file has disappeared: $file" );
2564
  return false;
2565
  }
2566
- if( $cache_rebuild_files && substr( $file, -14 ) != '.needs-rebuild' ) {
2567
- if( @rename($file, $file . '.needs-rebuild') ) {
2568
  @touch( $file . '.needs-rebuild' );
2569
  wp_cache_debug( "rebuild_or_gc: rename file to {$file}.needs-rebuild", 2 );
2570
  } else {
@@ -2584,35 +2670,36 @@ function wp_cache_phase2_clean_expired( $file_prefix, $force = false ) {
2584
  global $cache_path, $cache_max_time, $blog_cache_dir, $wp_cache_preload_on;
2585
 
2586
  if ( $cache_max_time == 0 ) {
2587
- wp_cache_debug( "wp_cache_phase2_clean_expired: disabled because GC disabled.", 2 );
2588
  return false;
2589
  }
2590
 
2591
  clearstatcache();
2592
- if( !wp_cache_writers_entry() )
2593
  return false;
 
2594
  $now = time();
2595
  wp_cache_debug( "Cleaning expired cache files in $blog_cache_dir", 2 );
2596
  $deleted = 0;
2597
  if ( ( $handle = @opendir( $blog_cache_dir ) ) ) {
2598
- while ( false !== ($file = readdir($handle))) {
2599
- if ( preg_match("/^$file_prefix/", $file) &&
2600
- (@filemtime( $blog_cache_dir . $file) + $cache_max_time) <= $now ) {
2601
  @unlink( $blog_cache_dir . $file );
2602
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
2603
  wp_cache_debug( "wp_cache_phase2_clean_expired: Deleting obsolete wpcache cache+meta files: $file" );
2604
  continue;
2605
  }
2606
- if($file != '.' && $file != '..') {
2607
- if( is_dir( $blog_cache_dir . $file ) == false && (@filemtime($blog_cache_dir . $file) + $cache_max_time) <= $now ) {
2608
  if ( substr( $file, -9 ) != '.htaccess' && $file != 'index.html' ) {
2609
- @unlink($blog_cache_dir . $file);
2610
  wp_cache_debug( "Deleting $blog_cache_dir{$file}, older than $cache_max_time seconds", 5 );
2611
  }
2612
  }
2613
  }
2614
  }
2615
- closedir($handle);
2616
  if ( false == $wp_cache_preload_on || true == $force ) {
2617
  wp_cache_debug( "Doing GC on supercache dir: {$cache_path}supercache", 2 );
2618
  $deleted = prune_super_cache( $cache_path . 'supercache', false, false );
@@ -2638,45 +2725,45 @@ function wp_cache_shutdown_callback() {
2638
  wp_cache_debug( 'wp_cache_shutdown_callback: Plugin not loaded. Setting feed ttl to 60 seconds.' );
2639
  }
2640
 
2641
-
2642
  if ( false == $new_cache ) {
2643
  wp_cache_debug( 'wp_cache_shutdown_callback: No cache file created. Returning.' );
2644
  return false;
2645
  }
2646
 
2647
- $wp_cache_meta[ 'uri' ] = $WPSC_HTTP_HOST . preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', $wp_cache_request_uri); // To avoid XSS attacks
2648
- $wp_cache_meta[ 'blog_id' ] = $blog_id;
2649
- $wp_cache_meta[ 'post' ] = wp_cache_post_id();
2650
- $wp_cache_meta[ 'key' ] = $wp_cache_key;
2651
- $wp_cache_meta = apply_filters( 'wp_cache_meta', $wp_cache_meta );
2652
 
2653
  $response = wp_cache_get_response_headers();
2654
- foreach( $response as $key => $value ) {
2655
- $wp_cache_meta[ 'headers' ][ $key ] = "$key: $value";
2656
  }
2657
 
2658
  wp_cache_debug( 'wp_cache_shutdown_callback: collecting meta data.', 2 );
2659
 
2660
- if (!isset( $response['Last-Modified'] )) {
2661
- $value = gmdate('D, d M Y H:i:s') . ' GMT';
2662
- /* Dont send this the first time */
 
2663
  /* @header('Last-Modified: ' . $value); */
2664
- $wp_cache_meta[ 'headers' ][ 'Last-Modified' ] = "Last-Modified: $value";
2665
  }
2666
  $is_feed = false;
2667
- if ( !isset( $response[ 'Content-Type' ] ) && !isset( $response[ 'Content-type' ] ) ) {
2668
  // On some systems, headers set by PHP can't be fetched from
2669
  // the output buffer. This is a last ditch effort to set the
2670
  // correct Content-Type header for feeds, if we didn't see
2671
  // it in the response headers already. -- dougal
2672
- if ( isset( $wp_super_cache_query[ 'is_feed' ] ) ) {
2673
- if ( isset( $wp_super_cache_query[ 'is_sitemap' ] ) ) {
2674
  $type = 'sitemap';
2675
  $value = 'text/xml';
2676
  } else {
2677
  $type = get_query_var( 'feed' );
2678
- $type = str_replace('/','',$type);
2679
- switch ($type) {
2680
  case 'atom':
2681
  $value = 'application/atom+xml';
2682
  break;
@@ -2692,29 +2779,30 @@ function wp_cache_shutdown_callback() {
2692
  $is_feed = true;
2693
 
2694
  if ( isset( $wpsc_feed_ttl ) && $wpsc_feed_ttl == 1 ) {
2695
- $wp_cache_meta[ 'ttl' ] = 60;
2696
  }
2697
  $is_feed = true;
2698
 
2699
  wp_cache_debug( "wp_cache_shutdown_callback: feed is type: $type - $value" );
2700
- } elseif ( isset( $wp_super_cache_query[ 'is_rest' ] ) ) { // json
2701
  $value = 'application/json';
2702
  } else { // not a feed
2703
  $value = get_option( 'html_type' );
2704
- if( $value == '' )
2705
  $value = 'text/html';
 
2706
  }
2707
- $value .= "; charset=\"" . $wp_cache_blog_charset . "\"";
2708
 
2709
  wp_cache_debug( "Sending 'Content-Type: $value' header.", 2 );
2710
- @header("Content-Type: $value");
2711
- $wp_cache_meta[ 'headers' ][ 'Content-Type' ] = "Content-Type: $value";
2712
  }
2713
 
2714
- if ( $cache_enabled && !$supercacheonly && $new_cache ) {
2715
- if( !isset( $wp_cache_meta[ 'dynamic' ] ) && $wp_cache_gzip_encoding && !in_array( 'Content-Encoding: ' . $wp_cache_gzip_encoding, $wp_cache_meta[ 'headers' ] ) ) {
2716
  wp_cache_debug( 'Sending gzip headers.', 2 );
2717
- $wp_cache_meta[ 'headers' ][ 'Content-Encoding' ] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
2718
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
2719
  if ( WPSC_VARY_HEADER != '' ) {
2720
  $vary_header = WPSC_VARY_HEADER;
@@ -2725,26 +2813,27 @@ function wp_cache_shutdown_callback() {
2725
  $vary_header = 'Accept-Encoding, Cookie';
2726
  }
2727
  if ( $vary_header ) {
2728
- $wp_cache_meta[ 'headers' ][ 'Vary' ] = 'Vary: ' . $vary_header;
2729
  }
2730
  }
2731
 
2732
  $serial = '<?php die(); ?>' . json_encode( $wp_cache_meta );
2733
- $dir = get_current_url_supercache_dir();
2734
- if( @is_dir( $dir ) == false )
2735
  @wp_mkdir_p( $dir );
 
2736
 
2737
- if( wp_cache_writers_entry() ) {
2738
  wp_cache_debug( "Writing meta file: {$dir}meta-{$meta_file}", 2 );
2739
 
2740
- $tmp_meta_filename = $dir . uniqid( mt_rand(), true ) . '.tmp';
2741
- $final_meta_filename = $dir . "meta-" . $meta_file;
2742
- $fr = @fopen( $tmp_meta_filename, 'w');
2743
  if ( $fr ) {
2744
- fputs($fr, $serial);
2745
- fclose($fr);
2746
- @chmod( $tmp_meta_filename, 0666 & ~umask());
2747
- if( !@rename( $tmp_meta_filename, $final_meta_filename ) ) {
2748
  @unlink( $dir . $final_meta_filename );
2749
  @rename( $tmp_meta_filename, $final_meta_filename );
2750
  }
@@ -2755,7 +2844,7 @@ function wp_cache_shutdown_callback() {
2755
 
2756
  // record locations of archive feeds to be updated when the site is updated.
2757
  // Only record a maximum of 50 feeds to avoid bloating database.
2758
- if ( ( isset( $wp_super_cache_query[ 'is_feed' ] ) || $is_feed ) && ! isset( $wp_super_cache_query[ 'is_single' ] ) ) {
2759
  $wpsc_feed_list = (array) get_option( 'wpsc_feed_list' );
2760
  if ( count( $wpsc_feed_list ) <= 50 ) {
2761
  $wpsc_feed_list[] = $dir . $meta_file;
@@ -2767,14 +2856,14 @@ function wp_cache_shutdown_callback() {
2767
  wp_cache_debug( "Did not write meta file: meta-{$meta_file}\nsupercacheonly: $supercacheonly\nwp_cache_not_logged_in: $wp_cache_not_logged_in\nnew_cache:$new_cache" );
2768
  }
2769
  global $time_to_gc_cache;
2770
- if( isset( $time_to_gc_cache ) && $time_to_gc_cache == 1 ) {
2771
  wp_cache_debug( 'Executing wp_cache_gc action.', 3 );
2772
  do_action( 'wp_cache_gc' );
2773
  }
2774
  }
2775
 
2776
- function wp_cache_no_postid($id) {
2777
- return wp_cache_post_change(wp_cache_post_id());
2778
  }
2779
 
2780
  function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
@@ -2785,7 +2874,7 @@ function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
2785
  }
2786
 
2787
  // Check is it "Empty Spam" or "Empty Trash"
2788
- if ( isset( $GLOBALS[ 'pagenow' ] ) && $GLOBALS[ 'pagenow' ] === 'edit-comments.php' &&
2789
  ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
2790
  ) {
2791
  wp_cache_debug( "Delete all SPAM or Trash comments. Don't delete any cache files.", 4 );
@@ -2793,23 +2882,23 @@ function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
2793
  return;
2794
  }
2795
 
2796
- $comment = get_comment($comment_id, ARRAY_A);
2797
  if ( $status != 'NA' ) {
2798
- $comment[ 'old_comment_approved' ] = $comment[ 'comment_approved' ];
2799
- $comment[ 'comment_approved' ] = $status;
2800
  }
2801
 
2802
- if ( ( $status == 'trash' || $status == 'spam' ) && $comment[ 'old_comment_approved' ] != 1 ) {
2803
  // don't modify cache if moderated comments are trashed or spammed
2804
  wp_cache_debug( "Moderated comment deleted or spammed. Don't delete any cache files.", 4 );
2805
  define( 'DONOTDELETECACHE', 1 );
2806
  return wp_cache_post_id();
2807
  }
2808
- $postid = isset( $comment[ 'comment_post_ID' ] ) ? (int) $comment[ 'comment_post_ID' ] : 0;
2809
  // Do nothing if comment is not moderated
2810
  // http://ocaoimh.ie/2006/12/05/caching-wordpress-with-wp-cache-in-a-spam-filled-world
2811
- if ( !preg_match('/wp-admin\//', $wp_cache_request_uri) ) {
2812
- if ( $comment['comment_approved'] == 'delete' && ( isset( $comment[ 'old_comment_approved' ] ) && $comment[ 'old_comment_approved' ] == 0 ) ) { // do nothing if moderated comments are deleted
2813
  wp_cache_debug( "Moderated comment deleted. Don't delete any cache files.", 4 );
2814
  define( 'DONOTDELETECACHE', 1 );
2815
  return $postid;
@@ -2817,8 +2906,8 @@ function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
2817
  wp_cache_debug( "Spam comment. Don't delete any cache files.", 4 );
2818
  define( 'DONOTDELETECACHE', 1 );
2819
  return $postid;
2820
- } elseif( $comment['comment_approved'] == '0' ) {
2821
- if ( $comment[ 'comment_type' ] == '' ) {
2822
  wp_cache_debug( "Moderated comment. Don't delete supercache file until comment approved.", 4 );
2823
  $super_cache_enabled = 0; // don't remove the super cache static file until comment is approved
2824
  define( 'DONOTDELETECACHE', 1 );
@@ -2832,7 +2921,7 @@ function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
2832
  // We must check it up again due to WP bugs calling two different actions
2833
  // for delete, for example both wp_set_comment_status and delete_comment
2834
  // are called when deleting a comment
2835
- if ($postid > 0) {
2836
  wp_cache_debug( "Post $postid changed. Update cache.", 4 );
2837
  return wp_cache_post_change( $postid );
2838
  } else {
@@ -2871,7 +2960,7 @@ function wpsc_delete_post_archives( $post ) {
2871
  }
2872
 
2873
  // Taxonomies - categories, tags, custom taxonomies
2874
- foreach( get_object_taxonomies( $post, 'objects' ) as $taxonomy ) {
2875
 
2876
  if ( ! $taxonomy->public || ! $taxonomy->rewrite ) {
2877
  continue;
@@ -2882,7 +2971,7 @@ function wpsc_delete_post_archives( $post ) {
2882
  continue;
2883
  }
2884
 
2885
- foreach( $terms as $term ) {
2886
 
2887
  $term_url = get_term_link( $term, $taxonomy->name );
2888
  if ( is_wp_error( $term_url ) ) {
@@ -2921,25 +3010,27 @@ function wpsc_delete_cats_tags( $post ) {
2921
  _deprecated_function( __FUNCTION__, 'WP Super Cache 1.6.3', 'wpsc_delete_post_archives' );
2922
  }
2923
 
2924
- $post = get_post($post);
2925
- $categories = get_the_category($post->ID);
2926
  if ( $categories ) {
2927
- $category_base = get_option( 'category_base');
2928
- if ( $category_base == '' )
2929
  $category_base = '/category/';
 
2930
  $category_base = trailingslashit( $category_base ); // paranoid much?
2931
- foreach ($categories as $cat) {
2932
- prune_super_cache ( get_supercache_dir() . $category_base . $cat->slug . '/', true );
2933
  wp_cache_debug( 'wpsc_post_transition: deleting category: ' . get_supercache_dir() . $category_base . $cat->slug . '/' );
2934
  }
2935
  }
2936
- $posttags = get_the_tags($post->ID);
2937
  if ( $posttags ) {
2938
  $tag_base = get_option( 'tag_base' );
2939
- if ( $tag_base == '' )
2940
  $tag_base = '/tag/';
 
2941
  $tag_base = trailingslashit( str_replace( '..', '', $tag_base ) ); // maybe!
2942
- foreach ($posttags as $tag) {
2943
  prune_super_cache( get_supercache_dir() . $tag_base . $tag->slug . '/', true );
2944
  wp_cache_debug( 'wpsc_post_transition: deleting tag: ' . get_supercache_dir() . $tag_base . $tag->slug . '/' );
2945
  }
@@ -2953,12 +3044,12 @@ function wpsc_post_transition( $new_status, $old_status, $post ) {
2953
  return;
2954
  }
2955
 
2956
- if ( ( $old_status === 'private' || $old_status === 'publish') && $new_status !== 'publish' ) { // post unpublished
2957
  if ( ! function_exists( 'get_sample_permalink' ) ) {
2958
- require_once( ABSPATH . 'wp-admin/includes/post.php' );
2959
  }
2960
  list( $permalink, $post_name ) = get_sample_permalink( $post );
2961
- $post_url = str_replace( array( "%postname%", "%pagename%" ), $post->post_name, $permalink );
2962
  } elseif ( $old_status !== 'publish' && $new_status === 'publish' ) { // post published
2963
  wp_cache_post_edit( $post->ID );
2964
  return;
@@ -2996,7 +3087,7 @@ function wp_cache_post_edit( $post_id ) {
2996
 
2997
  // we want to process the post again just in case it becomes published before the second time this function is called.
2998
  $last_post_edited = $post_id;
2999
- if( $wp_cache_clear_on_post_edit ) {
3000
  wp_cache_debug( "wp_cache_post_edit: Clearing cache $blog_cache_dir and {$cache_path}supercache/ on post edit per config.", 2 );
3001
  prune_super_cache( $blog_cache_dir, true );
3002
  prune_super_cache( get_supercache_dir(), true );
@@ -3011,8 +3102,9 @@ function wp_cache_post_edit( $post_id ) {
3011
  function wp_cache_post_id_gc( $post_id, $all = 'all' ) {
3012
 
3013
  $post_id = intval( $post_id );
3014
- if( $post_id == 0 )
3015
  return true;
 
3016
 
3017
  $permalink = trailingslashit( str_replace( get_option( 'home' ), '', get_permalink( $post_id ) ) );
3018
  if ( false !== strpos( $permalink, '?' ) ) {
@@ -3086,9 +3178,10 @@ function wp_cache_post_change( $post_id ) {
3086
  }
3087
 
3088
  $all_backup = $all;
3089
- $all = apply_filters( 'wpsc_delete_related_pages_on_edit', $all ); // return 0 to disable deleting homepage and other pages.
3090
- if ( $all != $all_backup )
3091
  wp_cache_debug( 'wp_cache_post_change: $all changed by wpsc_delete_related_pages_on_edit filter: ' . intval( $all ) );
 
3092
 
3093
  // Delete supercache files whenever a post change event occurs, even if supercache is currently disabled.
3094
  $dir = get_supercache_dir();
@@ -3124,17 +3217,17 @@ function wp_cache_post_change( $post_id ) {
3124
  wp_cache_debug( "wp_cache_post_change: checking {$blog_cache_dir}meta/", 4 );
3125
  $supercache_files_deleted = false;
3126
  if ( $handle = @opendir( $blog_cache_dir ) ) {
3127
- while ( false !== ($file = readdir($handle))) {
3128
  if ( strpos( $file, $file_prefix ) !== false ) {
3129
  if ( strpos( $file, '.html' ) ) {
3130
  // delete old wpcache files immediately
3131
  wp_cache_debug( "wp_cache_post_change: Deleting obsolete wpcache cache+meta files: $file" );
3132
- @unlink( $blog_cache_dir . $file);
3133
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
3134
  continue;
3135
  } else {
3136
  $meta = json_decode( wp_cache_get_legacy_cache( $blog_cache_dir . 'meta/' . $file ), true );
3137
- if( false == is_array( $meta ) ) {
3138
  wp_cache_debug( "Post change cleaning up stray file: $file", 4 );
3139
  @unlink( $blog_cache_dir . 'meta/' . $file );
3140
  @unlink( $blog_cache_dir . $file );
@@ -3142,7 +3235,7 @@ function wp_cache_post_change( $post_id ) {
3142
  }
3143
  if ( $post_id > 0 && $meta ) {
3144
  $permalink = trailingslashit( str_replace( get_option( 'home' ), '', get_permalink( $post_id ) ) );
3145
- if ( $meta[ 'blog_id' ] == $blog_id && ( ( $all == true && !$meta[ 'post' ] ) || $meta[ 'post' ] == $post_id) ) {
3146
  wp_cache_debug( "Post change: deleting post wp-cache files for {$meta[ 'uri' ]}: $file", 4 );
3147
  @unlink( $blog_cache_dir . 'meta/' . $file );
3148
  @unlink( $blog_cache_dir . $file );
@@ -3153,39 +3246,49 @@ function wp_cache_post_change( $post_id ) {
3153
  do_action( 'gc_cache', 'rebuild', $permalink );
3154
  }
3155
  }
3156
- } elseif ( $meta[ 'blog_id' ] == $blog_id ) {
3157
  wp_cache_debug( "Post change: deleting wp-cache files for {$meta[ 'uri' ]}: $file", 4 );
3158
  @unlink( $blog_cache_dir . 'meta/' . $file );
3159
  @unlink( $blog_cache_dir . $file );
3160
  if ( $super_cache_enabled == true ) {
3161
  wp_cache_debug( "Post change: deleting supercache files for {$meta[ 'uri' ]}" );
3162
- wpsc_rebuild_files( $dir . $meta[ 'uri' ] );
3163
- do_action( 'gc_cache', 'rebuild', trailingslashit( $meta[ 'uri' ] ) );
3164
  }
3165
  }
3166
  }
3167
  }
3168
  }
3169
- closedir($handle);
3170
  }
3171
  wp_cache_writers_exit();
3172
  return $post_id;
3173
  }
3174
 
3175
- function wp_cache_microtime_diff($a, $b) {
3176
- list($a_dec, $a_sec) = explode(' ', $a);
3177
- list($b_dec, $b_sec) = explode(' ', $b);
3178
- return (float)$b_sec - (float)$a_sec + (float)$b_dec - (float)$a_dec;
3179
  }
3180
 
3181
  function wp_cache_post_id() {
3182
  global $posts, $comment_post_ID, $post_ID;
3183
  // We try hard all options. More frequent first.
3184
- if ($post_ID > 0 ) return $post_ID;
3185
- if ($comment_post_ID > 0 ) return $comment_post_ID;
3186
- if (is_singular() && !empty($posts)) return $posts[0]->ID;
3187
- if (isset( $_GET[ 'p' ] ) && $_GET['p'] > 0) return $_GET['p'];
3188
- if (isset( $_POST[ 'p' ] ) && $_POST['p'] > 0) return $_POST['p'];
 
 
 
 
 
 
 
 
 
 
3189
  return 0;
3190
  }
3191
 
@@ -3207,7 +3310,7 @@ function maybe_stop_gc( $flag ) {
3207
  }
3208
  function get_gc_flag() {
3209
  global $cache_path;
3210
- return $cache_path . strtolower( preg_replace( '!/:.*$!', '', str_replace( 'http://', '', str_replace( 'https://', '', get_option( 'home' ) ) ) ) ) . "_wp_cache_gc.txt";
3211
  }
3212
 
3213
  function wp_cache_gc_cron() {
@@ -3234,26 +3337,28 @@ function wp_cache_gc_cron() {
3234
 
3235
  wp_cache_debug( 'Cache garbage collection.', 5 );
3236
 
3237
- if( !isset( $cache_max_time ) )
3238
  $cache_max_time = 600;
 
3239
 
3240
  $start = time();
3241
- $num = 0;
3242
- if( false === ( $num = wp_cache_phase2_clean_expired( $file_prefix ) ) ) {
3243
  wp_cache_debug( 'Cache Expiry cron job failed. Probably mutex locked.', 1 );
3244
  update_option( 'wpsupercache_gc_time', time() - ( $cache_time_interval - 10 ) ); // if GC failed then run it again in one minute
3245
  $msg .= __( 'Cache expiry cron job failed. Job will run again in 10 seconds.', 'wp-super-cache' ) . "\n";
3246
  }
3247
- if( time() - $start > 30 ) {
3248
  wp_cache_debug( "Cache Expiry cron job took more than 30 seconds to execute.\nYou should reduce the Expiry Time in the WP Super Cache admin page\nas you probably have more cache files than your server can handle efficiently.", 1 );
3249
  $msg .= __( 'Cache expiry cron job took more than 30 seconds. You should probably run the garbage collector more often.', 'wp-super-cache' ) . "\n";
3250
  }
3251
 
3252
  if ( $cache_gc_email_me ) {
3253
- if ( $msg != '' )
3254
  $msg = "The following warnings were generated by the WP Super Cache Garbage Collector:\n" . $msg;
 
3255
 
3256
- $msg = "Hi,\n\nThe WP Super Cache Garbage Collector has now run, deleting " . (int)$num . " files and directories.\nIf you want to switch off these emails please see the WP Super Cache Advanced Settings\npage on your blog.\n\n{$msg}\nRegards,\nThe Garbage Collector.";
3257
 
3258
  wp_mail( get_option( 'admin_email' ), sprintf( __( '[%1$s] WP Super Cache GC Report', 'wp-super-cache' ), home_url() ), $msg );
3259
  }
@@ -3265,28 +3370,31 @@ function wp_cache_gc_cron() {
3265
  function schedule_wp_gc( $forced = 0 ) {
3266
  global $cache_schedule_type, $cache_max_time, $cache_time_interval, $cache_scheduled_time, $cache_schedule_interval;
3267
 
3268
- if ( false == isset( $cache_time_interval ) )
3269
  $cache_time_interval = 3600;
 
3270
 
3271
  if ( false == isset( $cache_schedule_type ) ) {
3272
- $cache_schedule_type = 'interval';
3273
  $cache_schedule_interval = $cache_max_time;
3274
  }
3275
  if ( $cache_schedule_type == 'interval' ) {
3276
- if ( !isset( $cache_max_time ) )
3277
  $cache_max_time = 600;
3278
- if ( $cache_max_time == 0 )
 
3279
  return false;
3280
- $last_gc = get_option( "wpsupercache_gc_time" );
 
3281
 
3282
- if ( !$last_gc ) {
3283
  update_option( 'wpsupercache_gc_time', time() );
3284
- $last_gc = get_option( "wpsupercache_gc_time" );
3285
  }
3286
  if ( $forced || ( $last_gc < ( time() - 60 ) ) ) { // Allow up to 60 seconds for the previous job to run
3287
  global $wp_cache_shutdown_gc;
3288
- if ( !isset( $wp_cache_shutdown_gc ) || $wp_cache_shutdown_gc == 0 ) {
3289
- if ( !($t = wp_next_scheduled( 'wp_cache_gc' ) ) ) {
3290
  wp_clear_scheduled_hook( 'wp_cache_gc' );
3291
  wp_schedule_single_event( time() + $cache_time_interval, 'wp_cache_gc' );
3292
  wp_cache_debug( 'scheduled wp_cache_gc for 10 seconds time.', 5 );
@@ -3296,7 +3404,7 @@ function schedule_wp_gc( $forced = 0 ) {
3296
  $time_to_gc_cache = 1; // tell the "shutdown gc" to run!
3297
  }
3298
  }
3299
- } elseif ( $cache_schedule_type == 'time' && !wp_next_scheduled( 'wp_cache_gc' ) ) {
3300
  wp_schedule_event( strtotime( $cache_scheduled_time ), $cache_schedule_interval, 'wp_cache_gc' );
3301
  }
3302
  return true;
@@ -3313,7 +3421,7 @@ function wpsc_is_get_query() {
3313
  static $is_get_query = null;
3314
 
3315
  if ( null === $is_get_query ) {
3316
- $request_uri = parse_url( $_SERVER['REQUEST_URI'] );
3317
  $is_get_query = $request_uri && ! empty( $request_uri['query'] );
3318
  }
3319
 
@@ -3332,7 +3440,7 @@ if ( ! function_exists( 'apache_request_headers' ) ) {
3332
 
3333
  foreach ( array_keys( $_SERVER ) as $skey ) {
3334
  if ( 0 === strpos( $skey, 'HTTP_' ) ) {
3335
- $header = implode( '-', array_map( 'ucfirst', array_slice( explode( '_', strtolower( $skey ) ) , 1 ) ) );
3336
  $headers[ $header ] = $_SERVER[ $skey ];
3337
  }
3338
  }
1
  <?php
2
 
3
+ function gzip_accepted() {
4
+ if ( 1 == ini_get( 'zlib.output_compression' ) || 'on' == strtolower( ini_get( 'zlib.output_compression' ) ) ) { // don't compress WP-Cache data files when PHP is already doing it
5
  return false;
6
+ }
7
 
8
+ if ( ! isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) || ( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) && strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) === false ) ) {
9
+ return false;
10
+ }
11
  return 'gzip';
12
  }
13
 
14
  function setup_blog_cache_dir() {
15
  global $blog_cache_dir, $cache_path;
16
+ if ( false == @is_dir( $blog_cache_dir ) ) {
17
+ @mkdir( $cache_path . 'blogs' );
18
  @mkdir( $blog_cache_dir );
19
  }
20
 
21
+ if ( false == @is_dir( $blog_cache_dir . 'meta' ) ) {
22
  @mkdir( $blog_cache_dir . 'meta' );
23
+ }
24
  }
25
 
26
  function get_wp_cache_key( $url = false ) {
28
  if ( ! $url ) {
29
  $url = $wp_cache_request_uri;
30
  }
31
+ $server_port = isset( $_SERVER['SERVER_PORT'] ) ? intval( $_SERVER['SERVER_PORT'] ) : 0;
32
+ return do_cacheaction( 'wp_cache_key', wp_cache_check_mobile( $WPSC_HTTP_HOST . $server_port . preg_replace( '/#.*$/', '', str_replace( '/index.php', '/', $url ) ) . $wp_cache_gzip_encoding . wp_cache_get_cookies_values() ) );
33
  }
34
 
35
  function wpsc_remove_tracking_params_from_uri( $uri ) {
48
 
49
  if ( isset( $parsed_url['query'] ) ) {
50
  parse_str( $parsed_url['query'], $query );
51
+ foreach ( $wpsc_tracking_parameters as $param_name ) {
52
+ unset( $query[ $param_name ] );
53
  unset( $_GET[ $param_name ] );
54
  }
55
  }
56
+ $path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : '';
57
  $query = ! empty( $query ) ? '?' . http_build_query( $query ) : '';
58
 
59
  if ( empty( $_GET ) ) {
71
  global $wp_cache_key, $key, $blogcacheid, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $meta_pathname;
72
 
73
  $wp_cache_key = get_wp_cache_key();
74
+ $key = $blogcacheid . md5( $wp_cache_key );
75
  $wp_cache_key = $blogcacheid . $wp_cache_key;
76
 
77
  $cache_filename = $file_prefix . $key . '.php';
78
+ $meta_file = $file_prefix . $key . '.php';
79
 
80
  $cache_file = wpsc_get_realpath( $blog_cache_dir );
81
 
122
  )
123
  ) {
124
  if ( file_exists( get_current_url_supercache_dir() . 'meta-' . $cache_filename ) ) {
125
+ $cache_file = get_current_url_supercache_dir() . $cache_filename;
126
  $meta_pathname = get_current_url_supercache_dir() . 'meta-' . $cache_filename;
127
+ } elseif ( ! file_exists( $cache_file ) ) {
128
  wp_cache_debug( 'wp_cache_serve_cache_file: found cache file but then it disappeared!' );
129
  return false;
130
  }
135
  }
136
 
137
  wp_cache_debug( "wp-cache file exists: $cache_file", 5 );
138
+ if ( ! ( $meta = json_decode( wp_cache_get_legacy_cache( $meta_pathname ), true ) ) ) {
139
  wp_cache_debug( "couldn't load wp-cache meta file", 5 );
140
  return true;
141
  }
150
  global $cache_max_time;
151
  // last chance, check if a supercache file exists. Just in case .htaccess rules don't work on this host
152
  $filename = supercache_filename();
153
+ $file = get_current_url_supercache_dir() . $filename;
154
  if ( false == file_exists( $file ) ) {
155
  wp_cache_debug( "No Super Cache file found for current URL: $file" );
156
  return false;
164
  wp_cache_debug( 'Saving headers. Cannot serve a supercache file.' );
165
  return false;
166
  } elseif ( $cache_max_time > 0 && ( filemtime( $file ) + $cache_max_time ) < time() ) {
167
+ wp_cache_debug( sprintf( 'Cache has expired and is older than %d seconds old.', $cache_max_time ) );
168
  return false;
169
  }
170
 
171
+ if ( isset( $wp_cache_mfunc_enabled ) == false ) {
172
  $wp_cache_mfunc_enabled = 0;
173
+ }
174
 
175
+ if ( false == isset( $wp_cache_home_path ) ) {
176
  $wp_cache_home_path = '/';
177
+ }
178
 
179
  // make sure ending slashes are ok
180
  if ( $wp_cache_request_uri == $wp_cache_home_path || ( $wp_cache_slash_check && substr( $wp_cache_request_uri, -1 ) == '/' ) || ( $wp_cache_slash_check == 0 && substr( $wp_cache_request_uri, -1 ) != '/' ) ) {
204
  }
205
  }
206
 
207
+ if ( isset( $wp_cache_disable_utf8 ) == false || $wp_cache_disable_utf8 == 0 ) {
208
+ header( 'Content-type: text/html; charset=UTF-8' );
209
+ }
210
 
211
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
212
  if ( WPSC_VARY_HEADER != '' ) {
213
+ header( 'Vary: ' . WPSC_VARY_HEADER );
214
  }
215
  } else {
216
+ header( 'Vary: Accept-Encoding, Cookie' );
217
  }
218
  if ( defined( 'WPSC_CACHE_CONTROL_HEADER' ) ) {
219
  if ( WPSC_CACHE_CONTROL_HEADER != '' ) {
220
+ header( 'Cache-Control: ' . WPSC_CACHE_CONTROL_HEADER );
221
  }
222
  } else {
223
+ header( 'Cache-Control: max-age=3, must-revalidate' );
224
  }
225
  $size = function_exists( 'mb_strlen' ) ? mb_strlen( $cachefiledata, '8bit' ) : strlen( $cachefiledata );
226
  if ( $wp_cache_gzip_encoding ) {
227
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
228
+ header( 'X-WP-Super-Cache: Served supercache gzip file from PHP' );
229
  }
230
  header( 'Content-Encoding: ' . $wp_cache_gzip_encoding );
231
  header( 'Content-Length: ' . $size );
232
  } elseif ( $wp_supercache_304 ) {
233
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
234
+ header( 'X-WP-Super-Cache: Served supercache 304 file from PHP' );
235
  }
236
  header( 'Content-Length: ' . $size );
237
  } else {
238
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
239
+ header( 'X-WP-Super-Cache: Served supercache file from PHP' );
240
  }
241
  }
242
 
244
  if ( $wp_cache_mfunc_enabled == 0 && $wp_supercache_304 ) {
245
  wp_cache_debug( 'wp_cache_serve_cache_file: checking age of cached vs served files.' );
246
  $headers = apache_request_headers();
247
+ $remote_mod_time = isset( $headers['If-Modified-Since'] ) ? $headers['If-Modified-Since'] : null;
248
 
249
+ if ( $remote_mod_time === null && isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
250
  $remote_mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
251
  }
252
 
253
+ $local_mod_time = gmdate( 'D, d M Y H:i:s', filemtime( $file ) ) . ' GMT';
254
+ if ( $remote_mod_time !== null && $remote_mod_time == $local_mod_time ) {
255
  wp_cache_debug( 'wp_cache_serve_cache_file: Send 304 Not Modified header.' );
256
+ header( $_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified' );
257
  exit();
258
  } else {
259
  wp_cache_debug( 'wp_cache_serve_cache_file: 304 browser caching not possible as timestamps differ.' );
270
 
271
  $cache_file = do_cacheaction( 'wp_cache_served_cache_file', $cache_file );
272
  // Sometimes the gzip headers are lost. Make sure html returned isn't compressed!
273
+ if ( $cache_compression && $wp_cache_gzip_encoding && ! in_array( 'Content-Encoding: ' . $wp_cache_gzip_encoding, $meta['headers'] ) ) {
274
  $ungzip = true;
275
  wp_cache_debug( 'GZIP headers not found. Force uncompressed output.', 1 );
276
  } else {
277
  $ungzip = false;
278
  }
279
+ foreach ( $meta['headers'] as $t => $header ) {
280
  // godaddy fix, via http://blog.gneu.org/2008/05/wp-supercache-on-godaddy/ and http://www.littleredrails.com/blog/2007/09/08/using-wp-cache-on-godaddy-500-error/
281
  if ( strpos( $header, 'Last-Modified:' ) === false ) {
282
  header( $header );
285
  if ( isset( $wpsc_served_header ) && $wpsc_served_header ) {
286
  header( 'X-WP-Super-Cache: Served WPCache cache file' );
287
  }
288
+ if ( isset( $meta['dynamic'] ) ) {
289
  wp_cache_debug( 'Serving wp-cache dynamic file', 5 );
290
  if ( $ungzip ) {
291
  // attempt to uncompress the cached file just in case it's gzipped
292
+ $cache = wp_cache_get_legacy_cache( $cache_file );
293
  $uncompressed = @gzuncompress( $cache );
294
  if ( $uncompressed ) {
295
  wp_cache_debug( 'Uncompressed gzipped cache file from wp-cache', 1 );
304
  } else {
305
  wp_cache_debug( 'Serving wp-cache static file', 5 );
306
  if ( $ungzip ) {
307
+ $cache = wp_cache_get_legacy_cache( $cache_file );
308
  $uncompressed = gzuncompress( $cache );
309
  if ( $uncompressed ) {
310
  wp_cache_debug( 'Uncompressed gzipped cache file from wp-cache', 1 );
329
  function wp_cache_postload() {
330
  global $cache_enabled, $wp_super_cache_late_init;
331
 
332
+ if ( ! $cache_enabled ) {
333
  return true;
334
+ }
335
 
336
  if ( isset( $wp_super_cache_late_init ) && true == $wp_super_cache_late_init ) {
337
  wp_cache_debug( 'Supercache Late Init: add wp_cache_serve_cache_file to init', 3 );
442
  return $string;
443
  }
444
 
445
+ if ( defined( 'COOKIEHASH' ) ) {
446
  $cookiehash = preg_quote( constant( 'COOKIEHASH' ) );
447
+ } else {
448
  $cookiehash = '';
449
+ }
450
  $regex = "/^wp-postpass_$cookiehash|^comment_author_$cookiehash";
451
+ if ( defined( 'LOGGED_IN_COOKIE' ) ) {
452
+ $regex .= '|^' . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
453
+ } else {
454
  $regex .= "|^wordpress_logged_in_$cookiehash";
455
+ }
456
+ $regex .= '/';
457
+ while ( $key = key( $_COOKIE ) ) {
458
  if ( preg_match( $regex, $key ) ) {
459
+ wp_cache_debug( 'wp_cache_get_cookies_values: Login/postpass cookie detected' );
460
+ $string .= $_COOKIE[ $key ] . ',';
461
  }
462
+ next( $_COOKIE );
463
  }
464
+ reset( $_COOKIE );
465
 
466
  // If you use this hook, make sure you update your .htaccess rules with the same conditions
467
  $string = do_cacheaction( 'wp_cache_get_cookies_values', $string );
471
  is_array( $wpsc_cookies ) &&
472
  ! empty( $wpsc_cookies )
473
  ) {
474
+ foreach ( $wpsc_cookies as $name ) {
475
  if ( isset( $_COOKIE[ $name ] ) ) {
476
  wp_cache_debug( "wp_cache_get_cookies_values - found extra cookie: $name" );
477
+ $string .= $name . '=' . $_COOKIE[ $name ] . ',';
478
  }
479
  }
480
  }
481
 
482
+ if ( $string != '' ) {
483
  $string = md5( $string );
484
+ }
485
 
486
  wp_cache_debug( "wp_cache_get_cookies_values: return: $string", 5 );
487
  return $string;
495
  function do_cacheaction( $action, $value = '' ) {
496
  global $wp_supercache_actions;
497
 
498
+ if ( ! isset( $wp_supercache_actions ) || ! is_array( $wp_supercache_actions ) ) {
499
  return $value;
500
+ }
501
 
502
+ if ( array_key_exists( $action, $wp_supercache_actions ) && is_array( $wp_supercache_actions[ $action ] ) ) {
503
  $actions = $wp_supercache_actions[ $action ];
504
+ foreach ( $actions as $func ) {
505
  $value = call_user_func_array( $func, array( $value ) );
506
  }
507
  }
511
 
512
  function wp_cache_mobile_group( $user_agent ) {
513
  global $wp_cache_mobile_groups;
514
+ foreach ( (array) $wp_cache_mobile_groups as $name => $group ) {
515
+ foreach ( (array) $group as $browser ) {
516
  $browser = trim( strtolower( $browser ) );
517
  if ( $browser != '' && strstr( $user_agent, $browser ) ) {
518
  return $browser;
519
  }
520
  }
521
  }
522
+ return 'mobile';
523
  }
524
 
525
  // From https://wordpress.org/plugins/wordpress-mobile-edition/ by Alex King
526
  function wp_cache_check_mobile( $cache_key ) {
527
  global $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_mobile_prefixes;
528
+ if ( ! isset( $wp_cache_mobile_enabled ) || false == $wp_cache_mobile_enabled ) {
529
  return $cache_key;
530
+ }
531
+
532
+ // a check of wp_is_mobile() should be added here, but if the Jetpack WPSC plugin
533
+ // is enabled, jetpack_is_mobile() is used through the wp_cache_check_mobile action.
534
 
535
  wp_cache_debug( "wp_cache_check_mobile: $cache_key" );
536
 
537
  // allow plugins to short circuit mobile check. Cookie, extra UA checks?
538
+ switch ( do_cacheaction( 'wp_cache_check_mobile', $cache_key ) ) {
539
+ case 'normal':
540
+ wp_cache_debug( 'wp_cache_check_mobile: desktop user agent detected by wp_cache_check_mobile action' );
541
+ return $cache_key;
542
  break;
543
+ case 'mobile':
544
+ wp_cache_debug( 'wp_cache_check_mobile: mobile user agent detected by wp_cache_check_mobile action' );
545
+ return $cache_key . '-mobile';
546
  break;
547
  }
548
 
549
+ if ( ! isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
550
  return $cache_key;
551
  }
552
 
555
  return $cache_key;
556
  }
557
 
558
+ $browsers = explode( ',', $wp_cache_mobile_browsers );
559
  $user_agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
560
+ foreach ( $browsers as $browser ) {
561
  if ( strstr( $user_agent, trim( strtolower( $browser ) ) ) ) {
562
  wp_cache_debug( 'mobile browser detected: ' . $browser );
563
  return $cache_key . '-' . wp_cache_mobile_group( $user_agent );
564
  }
565
  }
566
+ if ( isset( $_SERVER['HTTP_X_WAP_PROFILE'] ) ) {
567
  return $cache_key . '-' . $_SERVER['HTTP_X_WAP_PROFILE'];
568
+ }
569
+ if ( isset( $_SERVER['HTTP_PROFILE'] ) ) {
570
  return $cache_key . '-' . $_SERVER['HTTP_PROFILE'];
571
+ }
572
 
573
  if ( isset( $wp_cache_mobile_prefixes ) ) {
574
  $browsers = explode( ',', $wp_cache_mobile_prefixes );
575
+ foreach ( $browsers as $browser_prefix ) {
576
+ if ( substr( $user_agent, 0, 4 ) == $browser_prefix ) {
577
  wp_cache_debug( 'mobile browser (prefix) detected: ' . $browser_prefix );
578
  return $cache_key . '-' . $browser_prefix;
579
  }
580
  }
581
  }
582
+ $accept = isset( $_SERVER['HTTP_ACCEPT'] ) ? strtolower( $_SERVER['HTTP_ACCEPT'] ) : '';
583
+ if ( strpos( $accept, 'wap' ) !== false ) {
584
  return $cache_key . '-' . 'wap';
585
  }
586
 
587
+ if ( isset( $_SERVER['ALL_HTTP'] ) && strpos( strtolower( $_SERVER['ALL_HTTP'] ), 'operamini' ) !== false ) {
588
  return $cache_key . '-' . 'operamini';
589
  }
590
 
607
  $last_message = $message;
608
 
609
  // If either of the debug or log globals aren't set, then we can stop
610
+ if ( ! isset( $wp_super_cache_debug )
611
+ || ! isset( $wp_cache_debug_log ) ) {
612
  return false;
613
+ }
614
 
615
  // If either the debug or log globals are false or empty, we can stop
616
  if ( $wp_super_cache_debug == false
617
+ || $wp_cache_debug_log == '' ) {
618
  return false;
619
+ }
620
 
621
  // If the debug_ip has been set, but it doesn't match the ip of the requester
622
  // then we can stop.
623
+ if ( isset( $wp_cache_debug_ip )
624
  && $wp_cache_debug_ip != ''
625
+ && $wp_cache_debug_ip != $_SERVER['REMOTE_ADDR'] ) {
626
  return false;
627
+ }
628
 
629
  // Log message: Date URI Message
630
+ $log_message = date( 'H:i:s' ) . ' ' . getmypid() . " {$_SERVER['REQUEST_URI']} {$message}" . PHP_EOL;
631
  // path to the log file in the cache folder
632
+ $log_file = $cache_path . str_replace( '/', '', str_replace( '..', '', $wp_cache_debug_log ) );
633
 
634
  if ( ! file_exists( $log_file ) && function_exists( 'wpsc_create_debug_log' ) ) {
635
  global $wp_cache_debug_username;
646
  function wpsc_dump_get_request() {
647
  static $string;
648
 
649
+ if ( isset( $string ) ) {
650
  return $string;
651
  }
652
 
704
 
705
  $DONOTREMEMBER = 0;
706
  if ( $post_id != 0 ) {
707
+ $site_url = site_url();
708
  $permalink = get_permalink( $post_id );
709
  if ( false === strpos( $permalink, $site_url ) ) {
710
  /*
727
  }
728
  } else {
729
  $uri = str_replace( $site_url, '', $permalink );
730
+ if ( strpos( $uri, $wp_cache_home_path ) !== 0 ) {
731
  $uri = rtrim( $wp_cache_home_path, '/' ) . $uri;
732
+ }
733
  }
734
  } else {
735
  $uri = strtolower( $wp_cache_request_uri );
736
  $uri = preg_replace_callback(
737
+ '/%[a-f0-9]{2}/',
738
  function ( $matches ) {
739
  return strtoupper( $matches[0] );
740
  },
741
  $uri
742
  );
743
  }
744
+ $uri = wpsc_deep_replace( array( '..', '\\', 'index.php' ), preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', preg_replace( '/(\?.*)?(#.*)?$/', '', $uri ) ) );
745
  $hostname = $WPSC_HTTP_HOST;
746
  // Get hostname from wp options for wp-cron, wp-cli and similar requests.
747
  if ( empty( $hostname ) && function_exists( 'get_option' ) ) {
748
  $hostname = (string) parse_url( get_option( 'home' ), PHP_URL_HOST );
749
  }
750
  $dir = preg_replace( '/:.*$/', '', $hostname ) . $uri; // To avoid XSS attacks
751
+ if ( function_exists( 'apply_filters' ) ) {
752
  $dir = apply_filters( 'supercache_dir', $dir );
753
  } else {
754
  $dir = do_cacheaction( 'supercache_dir', $dir );
755
  }
756
  $dir = $cache_path . 'supercache/' . $dir . '/';
757
+ if ( is_array( $cached_direct_pages ) && in_array( $_SERVER['REQUEST_URI'], $cached_direct_pages ) ) {
758
  $dir = ABSPATH . $uri . '/';
759
  }
760
  $dir = str_replace( '..', '', str_replace( '//', '/', $dir ) );
761
  wp_cache_debug( "supercache dir: $dir", 5 );
762
+ if ( $DONOTREMEMBER == 0 ) {
763
  $saved_supercache_dir[ $post_id ] = $dir;
764
+ }
765
  return $dir;
766
  }
767
 
785
  }
786
 
787
  $original_dir = $directory;
788
+ $directory = realpath( $directory );
789
 
790
  if ( ! $directory ) {
791
  wp_cache_debug( "wpsc_get_realpath: directory does not exist - $original_dir" );
849
 
850
  // only do this once, this function will be called many times
851
  if ( $protected == '' ) {
852
+ $protected = array( $cache_path, $cache_path . 'blogs/', $cache_path . 'supercache' );
853
+ foreach ( $protected as $id => $directory ) {
854
  $protected[ $id ] = trailingslashit( wpsc_get_realpath( $directory ) );
855
  }
856
  }
857
 
858
  $orig_dir = $dir;
859
+ $dir = wpsc_get_realpath( $dir );
860
  if ( ! $dir ) {
861
  wp_cache_debug( 'wpsc_delete_files: directory does not exist: ' . $orig_dir );
862
  return false;
877
  if ( is_dir( $dir ) && $dh = @opendir( $dir ) ) {
878
  while ( ( $file = readdir( $dh ) ) !== false ) {
879
  wp_cache_debug( 'wpsc_delete_files: reading files: ' . $file );
880
+ if ( $file != '.' && $file != '..' && $file != '.htaccess' && is_file( $dir . $file ) ) {
881
  if ( $delete ) {
882
  wp_cache_debug( 'wpsc_delete_files: deleting ' . $dir . $file );
883
  @unlink( $dir . $file );
885
  wp_cache_debug( 'wpsc_delete_files: rebuild or delete ' . $dir . $file );
886
  @wp_cache_rebuild_or_delete( $dir . $file );
887
  }
888
+ }
889
  }
890
  closedir( $dh );
891
 
918
  // open directory and look for index-*.html files
919
  if ( is_dir( $dir ) && $dh = @opendir( $dir ) ) {
920
  while ( ( $file = readdir( $dh ) ) !== false ) {
921
+ if ( substr( $file, 0, 6 ) == 'index-' && strpos( $file, '.html' ) ) {
922
  $filenames[] = $file;
923
+ }
924
  }
925
  closedir( $dh );
926
  }
927
  }
928
 
929
+ if ( function_exists( 'apply_filters' ) ) {
930
  $filenames = apply_filters( 'all_supercache_filenames', $filenames );
931
  } else {
932
  $filenames = do_cacheaction( 'all_supercache_filenames', $filenames );
933
  }
934
 
935
+ foreach ( $filenames as $file ) {
936
  $out[] = $file;
937
  $out[] = $file . '.gz';
938
  }
943
  function supercache_filename() {
944
  global $cached_direct_pages;
945
 
946
+ // Add support for https and http caching
947
+ $is_https = ( ( isset( $_SERVER['HTTPS'] ) && 'on' == strtolower( $_SERVER['HTTPS'] ) ) || ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) ); // Also supports https requests coming from an nginx reverse proxy
948
  $extra_str = $is_https ? '-https' : '';
949
 
950
+ if ( function_exists( 'apply_filters' ) ) {
951
  $extra_str = apply_filters( 'supercache_filename_str', $extra_str );
952
  } else {
953
  $extra_str = do_cacheaction( 'supercache_filename_str', $extra_str );
954
  }
955
 
956
+ if ( is_array( $cached_direct_pages ) && in_array( $_SERVER['REQUEST_URI'], $cached_direct_pages ) ) {
957
  $extra_str = '';
958
  }
959
  $filename = 'index' . $extra_str . '.html';
962
  }
963
 
964
  function get_oc_version() {
965
+ $wp_cache_oc_key = wp_cache_get( 'wp_cache_oc_key' );
966
  if ( ! $wp_cache_oc_key ) {
967
+ $wp_cache_oc_key['key'] = reset_oc_version();
968
+ } elseif ( $wp_cache_oc_key['ts'] < time() - 600 ) {
969
+ wp_cache_set(
970
+ 'wp_cache_oc_key',
971
+ array(
972
+ 'ts' => time(),
973
+ 'key' => $wp_cache_oc_key['key'],
974
+ )
975
+ );
976
+ }
977
+ return $wp_cache_oc_key['key'];
978
  }
979
 
980
  function reset_oc_version( $version = 1 ) {
981
+ if ( $version == 1 ) {
982
  $version = mt_rand();
983
+ }
984
+ wp_cache_set(
985
+ 'wp_cache_oc_key',
986
+ array(
987
+ 'ts' => time(),
988
+ 'key' => $version,
989
+ )
990
+ );
991
 
992
  return $version;
993
  }
996
  global $wp_cache_gzip_encoding, $WPSC_HTTP_HOST;
997
 
998
  if ( $url ) {
999
+ $key = intval( $_SERVER['SERVER_PORT'] ) . preg_replace( '/:.*$/', '', $WPSC_HTTP_HOST ) . $url;
1000
  } else {
1001
  $key = get_current_url_supercache_dir();
1002
  }
1078
  $dir == '' ||
1079
  $dir == $rp_cache_path ||
1080
  $dir == wpsc_get_realpath( $blog_cache_dir ) ||
1081
+ $dir == wpsc_get_realpath( $blog_cache_dir . 'meta/' ) ||
1082
+ $dir == wpsc_get_realpath( $cache_path . 'supercache' )
1083
  ) {
1084
  return false;
1085
  } else {
1101
 
1102
  function wpsc_get_protected_directories() {
1103
  global $cache_path, $blog_cache_dir;
1104
+ return apply_filters(
1105
+ 'wpsc_protected_directories',
1106
+ array(
1107
+ $cache_path . '.htaccess',
1108
+ $cache_path . 'index.html',
1109
+ $blog_cache_dir,
1110
+ $blog_cache_dir . 'index.html',
1111
+ $blog_cache_dir . 'meta',
1112
+ $blog_cache_dir . 'meta/index.html',
1113
+ $cache_path . 'supercache/index.html',
1114
+ $cache_path . 'supercache',
1115
+ )
1116
+ );
1117
  }
1118
 
1119
  function wpsc_debug_username() {
1129
  if ( $filename != '' ) {
1130
  $wp_cache_debug_log = $filename;
1131
  } else {
1132
+ $wp_cache_debug_log = md5( time() + mt_rand() ) . '.php';
1133
  }
1134
  if ( $username != '' ) {
1135
  $wp_cache_debug_username = $username;
1138
  }
1139
 
1140
  $msg = 'die( "Please use the viewer" );' . PHP_EOL;
1141
+ $fp = fopen( $cache_path . $wp_cache_debug_log, 'w' );
1142
  if ( $fp ) {
1143
  fwrite( $fp, '<' . "?php\n" );
1144
  fwrite( $fp, $msg );
1145
+ fwrite( $fp, '?' . '><pre>' . PHP_EOL );
1146
  fwrite( $fp, '<' . '?php // END HEADER ?' . '>' . PHP_EOL );
1147
  fclose( $fp );
1148
  wp_cache_setting( 'wp_cache_debug_log', $wp_cache_debug_log );
1159
 
1160
  $fp = fopen( $cache_path . 'view_' . $wp_cache_debug_log, 'w' );
1161
  if ( $fp ) {
1162
+ fwrite( $fp, '<' . '?php' . PHP_EOL );
1163
  $msg .= '$debug_log = file( "./' . $wp_cache_debug_log . '" );
1164
  $start_log = 1 + array_search( "<" . "?php // END HEADER ?" . ">" . PHP_EOL, $debug_log );
1165
  if ( $start_log > 1 ) {
1224
  fclose( $fp );
1225
  }
1226
 
1227
+ return array(
1228
+ 'wp_cache_debug_log' => $wp_cache_debug_log,
1229
+ 'wp_cache_debug_username' => $wp_cache_debug_username,
1230
+ );
1231
  }
1232
 
1233
  function wpsc_delete_url_cache( $url ) {
1267
 
1268
  // check tmp file for read/write capabilities
1269
  $rm = file_exists( $path );
1270
+ $f = @fopen( $path, 'a' );
1271
+ if ( $f === false ) {
1272
  return false;
1273
+ }
1274
  fclose( $f );
1275
  if ( ! $rm ) {
1276
  unlink( $path );
1304
  }
1305
  return false;
1306
  }
1307
+ if ( ! is_writeable_ACLSafe( $my_file ) ) {
1308
  if ( function_exists( 'set_transient' ) ) {
1309
  set_transient( 'wpsc_config_error', 'config_file_ro', 10 );
1310
  }
1312
  return false;
1313
  }
1314
 
1315
+ $found = false;
1316
  $loaded = false;
1317
+ $c = 0;
1318
+ $lines = array();
1319
+ while ( ! $loaded ) {
1320
  $lines = file( $my_file );
1321
  if ( ! empty( $lines ) && is_array( $lines ) ) {
1322
  $loaded = true;
1331
  }
1332
  }
1333
  }
1334
+ foreach ( (array) $lines as $line ) {
1335
  if (
1336
  trim( $new ) != '' &&
1337
  trim( $new ) == trim( $line )
1339
  wp_cache_debug( "wp_cache_replace_line: setting not changed - $new" );
1340
  return true;
1341
  } elseif ( preg_match( "/$old/", $line ) ) {
1342
+ wp_cache_debug( 'wp_cache_replace_line: changing line ' . trim( $line ) . " to *$new*" );
1343
  $found = true;
1344
  }
1345
  }
1351
  die( __( 'WARNING: attempt to intercept updating of config file.', 'wp-super-cache' ) );
1352
  }
1353
  }
1354
+ rename( $tmp_config_filename, $tmp_config_filename . '.php' );
1355
+ $tmp_config_filename .= '.php';
1356
  wp_cache_debug( 'wp_cache_replace_line: writing to ' . $tmp_config_filename );
1357
  $fd = fopen( $tmp_config_filename, 'w' );
1358
  if ( ! $fd ) {
1363
  return false;
1364
  }
1365
  if ( $found ) {
1366
+ foreach ( (array) $lines as $line ) {
1367
  if ( ! preg_match( "/$old/", $line ) ) {
1368
  fputs( $fd, $line );
1369
  } elseif ( $new != '' ) {
1372
  }
1373
  } else {
1374
  $done = false;
1375
+ foreach ( (array) $lines as $line ) {
1376
  if ( $done || ! preg_match( '/^(if\ \(\ \!\ )?define|\$|\?>/', $line ) ) {
1377
+ fputs( $fd, $line );
1378
  } else {
1379
+ fputs( $fd, "$new\n" );
1380
+ fputs( $fd, $line );
1381
  $done = true;
1382
  }
1383
  }
1386
  rename( $tmp_config_filename, $my_file );
1387
  wp_cache_debug( 'wp_cache_replace_line: moved ' . $tmp_config_filename . ' to ' . $my_file );
1388
 
1389
+ if ( function_exists( 'opcache_invalidate' ) ) {
1390
  @opcache_invalidate( $my_file );
1391
  }
1392
 
1397
  static $did_wp_footer = false;
1398
  global $wp_super_cache_comments;
1399
 
1400
+ if ( ! defined( 'WPSCSHUTDOWNMESSAGE' ) || ( isset( $wp_super_cache_comments ) && ! $wp_super_cache_comments ) ) {
1401
  return;
1402
  }
1403
 
1426
 
1427
  wp_cache_debug( 'In WP Cache Phase 2', 5 );
1428
 
1429
+ $wp_cache_gmt_offset = get_option( 'gmt_offset' ); // caching for later use when wpdb is gone. https://wordpress.org/support/topic/224349
1430
  $wp_cache_blog_charset = get_option( 'blog_charset' );
1431
 
1432
  wp_cache_mutex_init();
1468
  if ( ( $_SERVER['REQUEST_METHOD'] !== 'POST' && empty( $_POST ) ) && $super_cache_enabled && $cache_rebuild_files ) {
1469
  $user_info = wp_cache_get_cookies_values();
1470
 
1471
+ if ( empty( $user_info )
1472
  || true === apply_filters( 'do_createsupercache', $user_info )
1473
  ) {
1474
  wpcache_do_rebuild( get_current_url_supercache_dir() );
1514
  add_action( 'transition_post_status', 'wpsc_post_transition', 10, 3 );
1515
 
1516
  // Cron hooks
1517
+ add_action( 'wp_cache_gc', 'wp_cache_gc_cron' );
1518
  add_action( 'wp_cache_gc_watcher', 'wp_cache_gc_watcher' );
1519
 
1520
  $done = true;
1524
  global $do_rebuild_list, $cache_path, $wpsc_file_mtimes;
1525
  wp_cache_debug( "wpcache_do_rebuild: doing rebuild for $dir" );
1526
 
1527
+ if ( ! is_dir( $dir ) ) {
1528
  wp_cache_debug( "wpcache_do_rebuild: exiting as directory is not a directory: $dir" );
1529
  return false;
1530
  }
1541
  }
1542
 
1543
  $protected = wpsc_get_protected_directories();
1544
+ foreach ( $protected as $id => $directory ) {
1545
  $protected[ $id ] = wpsc_get_realpath( $directory );
1546
  }
1547
 
1555
  return false;
1556
  }
1557
 
1558
+ if ( ! is_dir( $dir ) ) {
1559
  wp_cache_debug( "wpcache_do_rebuild: exiting as directory is not a directory: $dir" );
1560
  return false;
1561
  }
1566
  return false;
1567
  }
1568
 
1569
+ $dir = trailingslashit( $dir );
1570
  $wpsc_file_mtimes = array();
1571
  while ( ( $file = readdir( $dh ) ) !== false ) {
1572
  if ( $file == '.' || $file == '..' || false == is_file( $dir . $file ) ) {
1600
  @unlink( $cache_file );
1601
  wp_cache_debug( "wpcache_do_rebuild: rebuild file rename failed. Deleted rebuild file: $cache_file" );
1602
  } else {
1603
+ $do_rebuild_list[ $dir ] = 1;
1604
  $wpsc_file_mtimes[ $base_file ] = $mtime;
1605
  wp_cache_debug( "wpcache_do_rebuild: rebuild file renamed: $base_file" );
1606
  }
1736
  return false;
1737
  }
1738
 
1739
+ function wp_cache_is_rejected( $uri ) {
1740
  global $cache_rejected_uri;
1741
 
1742
  $auto_rejected = array( '/wp-admin/', 'xmlrpc.php', 'wp-app.php' );
1743
+ foreach ( $auto_rejected as $u ) {
1744
+ if ( strstr( $uri, $u ) ) {
1745
  return true; // we don't allow caching of wp-admin for security reasons
1746
+ }
1747
  }
1748
+ if ( false == is_array( $cache_rejected_uri ) ) {
1749
  return false;
1750
+ }
1751
  foreach ( $cache_rejected_uri as $expr ) {
1752
+ if ( $expr != '' && @preg_match( "~$expr~", $uri ) ) {
1753
  return true;
1754
+ }
1755
  }
1756
  return false;
1757
  }
1759
  function wp_cache_mutex_init() {
1760
  global $mutex, $wp_cache_mutex_disabled, $use_flock, $blog_cache_dir, $mutex_filename, $sem_id;
1761
 
1762
+ if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) ) {
1763
  return true;
1764
+ }
1765
 
1766
+ if ( ! is_bool( $use_flock ) ) {
1767
+ if ( function_exists( 'sem_get' ) ) {
1768
  $use_flock = false;
1769
+ } else {
1770
  $use_flock = true;
1771
+ }
1772
  }
1773
 
1774
  $mutex = false;
1775
+ if ( $use_flock ) {
1776
  setup_blog_cache_dir();
1777
  wp_cache_debug( "Created mutex lock on filename: {$blog_cache_dir}{$mutex_filename}", 5 );
1778
  $mutex = @fopen( $blog_cache_dir . $mutex_filename, 'w' );
1779
  } else {
1780
  wp_cache_debug( "Created mutex lock on semaphore: {$sem_id}", 5 );
1781
+ // PHP 8.0 expects a bool. Prior expects an int.
1782
+ $auto_release = ( version_compare( phpversion(), '8.0.0', '<=' ) ) ? 1 : true;
1783
+ $mutex = @sem_get( $sem_id, 1, 0666, $auto_release );
1784
  }
1785
  }
1786
 
1787
  function wp_cache_writers_entry() {
1788
  global $mutex, $wp_cache_mutex_disabled, $use_flock;
1789
 
1790
+ if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) ) {
1791
  return true;
1792
+ }
1793
 
1794
+ if ( ! $mutex ) {
1795
  wp_cache_debug( '(writers entry) mutex lock not created. not caching.', 2 );
1796
  return false;
1797
  }
1798
 
1799
  if ( $use_flock ) {
1800
  wp_cache_debug( 'grabbing lock using flock()', 5 );
1801
+ flock( $mutex, LOCK_EX );
1802
  } else {
1803
  wp_cache_debug( 'grabbing lock using sem_acquire()', 5 );
1804
+ @sem_acquire( $mutex );
1805
  }
1806
 
1807
  return true;
1810
  function wp_cache_writers_exit() {
1811
  global $mutex, $wp_cache_mutex_disabled, $use_flock;
1812
 
1813
+ if ( defined( 'WPSC_DISABLE_LOCKING' ) || ( isset( $wp_cache_mutex_disabled ) && $wp_cache_mutex_disabled ) ) {
1814
  return true;
1815
+ }
1816
 
1817
+ if ( ! $mutex ) {
1818
  wp_cache_debug( '(writers exit) mutex lock not created. not caching.', 2 );
1819
  return false;
1820
  }
1821
 
1822
  if ( $use_flock ) {
1823
  wp_cache_debug( 'releasing lock using flock()', 5 );
1824
+ flock( $mutex, LOCK_UN );
1825
  } else {
1826
  wp_cache_debug( 'releasing lock using sem_release() and sem_remove()', 5 );
1827
  @sem_release( $mutex );
1828
+ if ( defined( 'WPSC_REMOVE_SEMAPHORE' ) ) {
1829
  @sem_remove( $mutex );
1830
+ }
1831
  }
1832
  }
1833
 
1834
  function wp_super_cache_query_vars() {
1835
  global $wp_super_cache_query;
1836
 
1837
+ if ( is_search() ) {
1838
+ $wp_super_cache_query['is_search'] = 1;
1839
+ }
1840
+ if ( is_page() ) {
1841
+ $wp_super_cache_query['is_page'] = 1;
1842
+ }
1843
+ if ( is_archive() ) {
1844
+ $wp_super_cache_query['is_archive'] = 1;
1845
+ }
1846
+ if ( is_tag() ) {
1847
+ $wp_super_cache_query['is_tag'] = 1;
1848
+ }
1849
+ if ( is_single() ) {
1850
+ $wp_super_cache_query['is_single'] = 1;
1851
+ }
1852
+ if ( is_category() ) {
1853
+ $wp_super_cache_query['is_category'] = 1;
1854
+ }
1855
+ if ( is_front_page() ) {
1856
+ $wp_super_cache_query['is_front_page'] = 1;
1857
+ }
1858
+ if ( is_home() ) {
1859
+ $wp_super_cache_query['is_home'] = 1;
1860
+ }
1861
+ if ( is_author() ) {
1862
+ $wp_super_cache_query['is_author'] = 1;
1863
+ }
1864
 
1865
  // REST API
1866
+ if ( ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ||
1867
+ ( defined( 'JSON_REQUEST' ) && JSON_REQUEST ) ||
1868
+ ( defined( 'WC_API_REQUEST' ) && WC_API_REQUEST )
1869
  ) {
1870
+ $wp_super_cache_query['is_rest'] = 1;
1871
  }
1872
 
1873
  // Feeds, sitemaps and robots.txt
1874
  if ( is_feed() ) {
1875
+ $wp_super_cache_query['is_feed'] = 1;
1876
  if ( get_query_var( 'feed' ) == 'sitemap' ) {
1877
+ $wp_super_cache_query['is_sitemap'] = 1;
1878
  }
1879
  } elseif ( get_query_var( 'sitemap' ) || get_query_var( 'xsl' ) || get_query_var( 'xml_sitemap' ) ) {
1880
+ $wp_super_cache_query['is_feed'] = 1;
1881
+ $wp_super_cache_query['is_sitemap'] = 1;
1882
  } elseif ( is_robots() ) {
1883
+ $wp_super_cache_query['is_robots'] = 1;
1884
  }
1885
 
1886
  // Reset everything if it's 404
1887
+ if ( is_404() ) {
1888
  $wp_super_cache_query = array( 'is_404' => 1 );
1889
+ }
1890
 
1891
  return $wp_super_cache_query;
1892
  }
1893
 
1894
  function wpsc_catch_status_header( $status_header, $code ) {
1895
 
1896
+ if ( $code != 200 ) {
1897
  wpsc_catch_http_status_code( $code );
1898
+ }
1899
 
1900
  return $status_header;
1901
  }
1904
  global $wp_super_cache_query;
1905
 
1906
  if ( in_array( intval( $status ), array( 301, 302, 303, 307 ) ) ) {
1907
+ $wp_super_cache_query['is_redirect'] = 1;
1908
  } elseif ( $status == 304 ) {
1909
+ $wp_super_cache_query['is_304'] = 1;
1910
  } elseif ( $status == 404 ) {
1911
+ $wp_super_cache_query['is_404'] = 1;
1912
  }
1913
 
1914
  return $status;
1922
  }
1923
 
1924
  if ( $error['type'] & ( E_ERROR | E_CORE_ERROR | E_PARSE | E_COMPILE_ERROR | E_USER_ERROR ) ) {
1925
+ $wp_super_cache_query['is_fatal_error'] = 1;
1926
  return true;
1927
  }
1928
 
1931
 
1932
  function wp_cache_ob_callback( $buffer ) {
1933
  global $wp_cache_pages, $wp_query, $wp_super_cache_query, $cache_acceptable_files, $wp_cache_no_cache_for_get, $wp_cache_request_uri, $do_rebuild_list, $wpsc_file_mtimes, $wpsc_save_headers, $super_cache_enabled;
1934
+ $script = basename( $_SERVER['PHP_SELF'] );
1935
 
1936
  // All the things that can stop a page being cached
1937
  $cache_this_page = true;
1939
  if ( wpsc_is_fatal_error() ) {
1940
  wp_cache_debug( 'wp_cache_ob_callback: PHP Fatal error occurred. Not caching incomplete page.' );
1941
  $cache_this_page = false;
1942
+ } elseif ( empty( $wp_super_cache_query ) && ! empty( $buffer ) && is_object( $wp_query ) && method_exists( $wp_query, 'get' ) ) {
1943
  $wp_super_cache_query = wp_super_cache_query_vars();
1944
  } elseif ( empty( $wp_super_cache_query ) && function_exists( 'http_response_code' ) ) {
1945
  wpsc_catch_http_status_code( http_response_code() );
1953
  } elseif ( $wp_cache_no_cache_for_get && wpsc_is_get_query() ) {
1954
  wp_cache_debug( 'Non empty GET request. Caching disabled on settings page. ' . wpsc_dump_get_request(), 1 );
1955
  $cache_this_page = false;
1956
+ } elseif ( $_SERVER['REQUEST_METHOD'] == 'POST' || ! empty( $_POST ) || get_option( 'gzipcompression' ) ) {
1957
  wp_cache_debug( 'Not caching POST request.', 5 );
1958
  $cache_this_page = false;
1959
+ } elseif ( $_SERVER['REQUEST_METHOD'] == 'PUT' ) {
1960
  wp_cache_debug( 'Not caching PUT request.', 5 );
1961
  $cache_this_page = false;
1962
+ } elseif ( $_SERVER['REQUEST_METHOD'] == 'DELETE' ) {
1963
  wp_cache_debug( 'Not caching DELETE request.', 5 );
1964
  $cache_this_page = false;
1965
+ } elseif ( isset( $_GET['preview'] ) ) {
1966
  wp_cache_debug( 'Not caching preview post.', 2 );
1967
  $cache_this_page = false;
1968
+ } elseif ( ! in_array( $script, (array) $cache_acceptable_files ) && wp_cache_is_rejected( $wp_cache_request_uri ) ) {
1969
  wp_cache_debug( 'URI rejected. Not Caching', 2 );
1970
  $cache_this_page = false;
1971
  } elseif ( wp_cache_user_agent_is_rejected() ) {
1972
  wp_cache_debug( "USER AGENT ({$_SERVER[ 'HTTP_USER_AGENT' ]}) rejected. Not Caching", 4 );
1973
  $cache_this_page = false;
1974
+ } elseif ( isset( $wp_cache_pages['single'] ) && $wp_cache_pages['single'] == 1 && isset( $wp_super_cache_query['is_single'] ) ) {
1975
  wp_cache_debug( 'Not caching single post.', 2 );
1976
  $cache_this_page = false;
1977
+ } elseif ( isset( $wp_cache_pages['pages'] ) && $wp_cache_pages['pages'] == 1 && isset( $wp_super_cache_query['is_page'] ) ) {
1978
  wp_cache_debug( 'Not caching single page.', 2 );
1979
  $cache_this_page = false;
1980
+ } elseif ( isset( $wp_cache_pages['archives'] ) && $wp_cache_pages['archives'] == 1 && isset( $wp_super_cache_query['is_archive'] ) ) {
1981
  wp_cache_debug( 'Not caching archive page.', 2 );
1982
  $cache_this_page = false;
1983
+ } elseif ( isset( $wp_cache_pages['tag'] ) && $wp_cache_pages['tag'] == 1 && isset( $wp_super_cache_query['is_tag'] ) ) {
1984
  wp_cache_debug( 'Not caching tag page.', 2 );
1985
  $cache_this_page = false;
1986
+ } elseif ( isset( $wp_cache_pages['category'] ) && $wp_cache_pages['category'] == 1 && isset( $wp_super_cache_query['is_category'] ) ) {
1987
  wp_cache_debug( 'Not caching category page.', 2 );
1988
  $cache_this_page = false;
1989
+ } elseif ( isset( $wp_cache_pages['frontpage'] ) && $wp_cache_pages['frontpage'] == 1 && isset( $wp_super_cache_query['is_front_page'] ) ) {
1990
  wp_cache_debug( 'Not caching front page.', 2 );
1991
  $cache_this_page = false;
1992
+ } elseif ( isset( $wp_cache_pages['home'] ) && $wp_cache_pages['home'] == 1 && isset( $wp_super_cache_query['is_home'] ) ) {
1993
  wp_cache_debug( 'Not caching home page.', 2 );
1994
  $cache_this_page = false;
1995
+ } elseif ( isset( $wp_cache_pages['search'] ) && $wp_cache_pages['search'] == 1 && isset( $wp_super_cache_query['is_search'] ) ) {
1996
  wp_cache_debug( 'Not caching search page.', 2 );
1997
  $cache_this_page = false;
1998
+ } elseif ( isset( $wp_cache_pages['author'] ) && $wp_cache_pages['author'] == 1 && isset( $wp_super_cache_query['is_author'] ) ) {
1999
  wp_cache_debug( 'Not caching author page.', 2 );
2000
  $cache_this_page = false;
2001
+ } elseif ( isset( $wp_cache_pages['feed'] ) && $wp_cache_pages['feed'] == 1 && isset( $wp_super_cache_query['is_feed'] ) ) {
2002
  wp_cache_debug( 'Not caching feed.', 2 );
2003
  $cache_this_page = false;
2004
+ } elseif ( isset( $wp_super_cache_query['is_rest'] ) ) {
2005
  wp_cache_debug( 'REST API detected. Caching disabled.' );
2006
  $cache_this_page = false;
2007
+ } elseif ( isset( $wp_super_cache_query['is_robots'] ) ) {
2008
  wp_cache_debug( 'robots.txt detected. Caching disabled.' );
2009
  $cache_this_page = false;
2010
+ } elseif ( isset( $wp_super_cache_query['is_redirect'] ) ) {
2011
  wp_cache_debug( 'Redirect detected. Caching disabled.' );
2012
  $cache_this_page = false;
2013
+ } elseif ( isset( $wp_super_cache_query['is_304'] ) ) {
2014
  wp_cache_debug( 'HTTP 304 (Not Modified) sent. Caching disabled.' );
2015
  $cache_this_page = false;
2016
+ } elseif ( empty( $wp_super_cache_query ) && ! empty( $buffer ) && apply_filters( 'wpsc_only_cache_known_pages', 1 ) ) {
2017
  wp_cache_debug( 'wp_cache_ob_callback: wp_super_cache_query is empty. Not caching unknown page type. Return 0 to the wpsc_only_cache_known_pages filter to cache this page.' );
2018
  $cache_this_page = false;
2019
  } elseif ( wpsc_is_caching_user_disabled() ) {
2024
  $cache_this_page = false;
2025
  }
2026
 
2027
+ if ( isset( $wpsc_save_headers ) && $wpsc_save_headers ) {
2028
  $super_cache_enabled = false; // use standard caching to record headers
2029
+ }
2030
 
2031
  if ( $cache_this_page ) {
2032
 
2035
  $buffer = wp_cache_get_ob( $buffer );
2036
  wp_cache_shutdown_callback();
2037
 
2038
+ if ( ! empty( $wpsc_file_mtimes ) && is_array( $wpsc_file_mtimes ) ) {
2039
+ foreach ( $wpsc_file_mtimes as $cache_file => $old_mtime ) {
2040
  if ( $old_mtime == @filemtime( $cache_file ) ) {
2041
  wp_cache_debug( "wp_cache_ob_callback deleting unmodified rebuilt cache file: $cache_file" );
2042
  if ( wp_cache_confirm_delete( $cache_file ) ) {
2047
  }
2048
  return $buffer;
2049
  } else {
2050
+ if ( ! empty( $do_rebuild_list ) && is_array( $do_rebuild_list ) ) {
2051
+ foreach ( $do_rebuild_list as $dir => $n ) {
2052
  if ( wp_cache_confirm_delete( $dir ) ) {
2053
  wp_cache_debug( 'wp_cache_ob_callback clearing rebuilt files in ' . $dir );
2054
  wpsc_delete_files( $dir );
2063
  global $wp_cache_gmt_offset, $wp_super_cache_comments;
2064
  global $cache_enabled, $super_cache_enabled;
2065
 
2066
+ if ( false == isset( $wp_super_cache_comments ) ) {
2067
  $wp_super_cache_comments = 1;
2068
+ }
2069
 
2070
+ if ( $wp_super_cache_comments == 0 ) {
2071
  return false;
2072
+ }
2073
 
2074
+ $timestamp = gmdate( 'Y-m-d H:i:s', ( time() + ( $wp_cache_gmt_offset * 3600 ) ) );
2075
  if ( $cache_enabled || $super_cache_enabled ) {
2076
  $msg = "Cached page generated by WP-Super-Cache on $timestamp";
2077
  } else {
2079
  }
2080
 
2081
  if ( strpos( $buffer, '<html' ) === false ) {
2082
+ wp_cache_debug( site_url( $_SERVER['REQUEST_URI'] ) . ' - ' . $msg );
2083
  return false;
2084
  }
2085
 
2089
  function wp_cache_add_to_buffer( &$buffer, $text ) {
2090
  global $wp_super_cache_comments;
2091
 
2092
+ if ( false == isset( $wp_super_cache_comments ) ) {
2093
  $wp_super_cache_comments = 1;
2094
+ }
2095
 
2096
+ if ( $wp_super_cache_comments == 0 ) {
2097
  return false;
2098
+ }
2099
 
2100
  if ( strpos( $buffer, '<html' ) === false ) {
2101
+ wp_cache_debug( site_url( $_SERVER['REQUEST_URI'] ) . ' - ' . $text );
2102
  return false;
2103
  }
2104
 
2105
  $buffer .= "\n<!-- $text -->";
2106
  }
2107
 
 
2108
  /*
2109
  * If dynamic caching is enabled then run buffer through wpsc_cachedata filter before returning it.
2110
  * or we'll return template tags to visitors.
2120
  }
2121
  }
2122
 
2123
+ function wp_cache_get_ob( &$buffer ) {
2124
  global $cache_enabled, $cache_path, $cache_filename, $wp_start_time, $supercachedir;
2125
  global $new_cache, $wp_cache_meta, $cache_compression, $wp_super_cache_query;
2126
  global $wp_cache_gzip_encoding, $super_cache_enabled;
2129
  global $wp_cache_not_logged_in, $cache_max_time;
2130
  global $wp_cache_is_home, $wp_cache_front_page_checks, $wp_cache_mfunc_enabled;
2131
 
2132
+ if ( isset( $wp_cache_mfunc_enabled ) == false ) {
2133
  $wp_cache_mfunc_enabled = 0;
2134
+ }
2135
 
2136
+ $new_cache = true;
2137
  $wp_cache_meta = array();
2138
 
2139
+ /*
2140
+ Mode paranoic, check for closing tags
2141
  * we avoid caching incomplete files */
2142
  if ( $buffer == '' ) {
2143
  $new_cache = false;
2144
+ if ( isset( $GLOBALS['wp_super_cache_debug'] ) && $GLOBALS['wp_super_cache_debug'] ) {
2145
  wp_cache_debug( "Buffer is blank. Output buffer may have been corrupted by another plugin or this is a redirected URL. Look for text 'ob_start' in the files of your plugins directory.", 2 );
2146
+ wp_cache_add_to_buffer( $buffer, 'Page not cached by WP Super Cache. Blank Page. Check output buffer usage by plugins.' );
2147
  }
2148
  }
2149
 
2150
+ if ( isset( $wp_super_cache_query['is_404'] ) && false == apply_filters( 'wpsupercache_404', false ) ) {
2151
  $new_cache = false;
2152
+ if ( isset( $GLOBALS['wp_super_cache_debug'] ) && $GLOBALS['wp_super_cache_debug'] ) {
2153
  wp_cache_debug( '404 file not found not cached', 2 );
2154
+ wp_cache_add_to_buffer( $buffer, 'Page not cached by WP Super Cache. 404.' );
2155
  }
2156
  }
2157
 
2158
+ if ( ! preg_match( apply_filters( 'wp_cache_eof_tags', '/(<\/html>|<\/rss>|<\/feed>|<\/urlset|<\?xml)/i' ), $buffer ) ) {
2159
  $new_cache = false;
2160
+ if ( isset( $GLOBALS['wp_super_cache_debug'] ) && $GLOBALS['wp_super_cache_debug'] ) {
2161
  wp_cache_debug( 'No closing html tag. Not caching.', 2 );
2162
+ wp_cache_add_to_buffer( $buffer, 'Page not cached by WP Super Cache. No closing HTML tag. Check your theme.' );
2163
  }
2164
  }
2165
 
2166
+ if ( ! $new_cache ) {
2167
  return wp_cache_maybe_dynamic( $buffer );
2168
+ }
2169
 
2170
+ $duration = wp_cache_microtime_diff( $wp_start_time, microtime() );
2171
+ $duration = sprintf( '%0.3f', $duration );
2172
  wp_cache_add_to_buffer( $buffer, "Dynamic page generated in $duration seconds." );
2173
 
2174
+ if ( ! wp_cache_writers_entry() ) {
2175
+ wp_cache_add_to_buffer( $buffer, 'Page not cached by WP Super Cache. Could not get mutex lock.' );
2176
  wp_cache_debug( 'Could not get mutex lock. Not caching.', 1 );
2177
  return wp_cache_maybe_dynamic( $buffer );
2178
  }
2179
 
2180
+ if ( $wp_cache_not_logged_in && isset( $wp_super_cache_query['is_feed'] ) ) {
2181
  wp_cache_debug( 'Feed detected. Writing wpcache cache files.', 5 );
2182
  $wp_cache_not_logged_in = false;
2183
  }
2184
 
2185
  $home_url = parse_url( trailingslashit( get_bloginfo( 'url' ) ) );
2186
 
2187
+ $dir = get_current_url_supercache_dir();
2188
+ $supercachedir = $cache_path . 'supercache/' . preg_replace( '/:.*$/', '', $home_url['host'] );
2189
+ if ( wpsc_is_get_query() || isset( $wp_super_cache_query['is_feed'] ) || ( $super_cache_enabled == true && is_dir( substr( $supercachedir, 0, -1 ) . '.disabled' ) ) ) {
2190
  wp_cache_debug( 'Supercache disabled: GET or feed detected or disabled by config.', 2 );
2191
  $super_cache_enabled = false;
2192
  }
2200
  $supercacheonly = false;
2201
  }
2202
 
2203
+ if ( $super_cache_enabled ) {
2204
  if ( wp_cache_get_cookies_values() == '' && ! wpsc_is_get_query() ) {
2205
  wp_cache_debug( 'Anonymous user detected. Only creating Supercache file.', 3 );
2206
  $supercacheonly = true;
2210
  $cache_error = '';
2211
  if ( wpsc_is_caching_user_disabled() ) {
2212
  $super_cache_enabled = false;
2213
+ $cache_enabled = false;
2214
+ $cache_error = 'Not caching requests by known users. (See Advanced Settings page)';
2215
  wp_cache_debug( 'Not caching for known user.', 5 );
2216
  }
2217
 
2218
+ if ( ! $cache_enabled ) {
2219
  wp_cache_debug( 'Cache is not enabled. Sending buffer to browser.', 5 );
2220
  wp_cache_writers_exit();
2221
  wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Check your settings page. $cache_error" );
2222
  if ( $wp_cache_mfunc_enabled == 1 ) {
2223
  global $wp_super_cache_late_init;
2224
+ if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) ) {
2225
  wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but $wp_super_cache_late_init not set. See the readme.txt for further details.' );
2226
+ }
2227
  }
2228
 
2229
  return wp_cache_maybe_dynamic( $buffer );
2230
  }
2231
 
2232
+ if ( @is_dir( $dir ) == false ) {
2233
  @wp_mkdir_p( $dir );
2234
+ }
2235
  $dir = wpsc_get_realpath( $dir );
2236
 
2237
  if ( ! $dir ) {
2258
  }
2259
  } else {
2260
  $user_info = wp_cache_get_cookies_values();
2261
+ $do_cache = apply_filters( 'do_createsupercache', $user_info );
2262
  if (
2263
  $super_cache_enabled &&
2264
  (
2266
  $do_cache === true
2267
  )
2268
  ) {
2269
+ $cache_fname = $dir . supercache_filename();
2270
  $tmp_cache_filename = $dir . uniqid( mt_rand(), true ) . '.tmp';
2271
+ $fr2 = @fopen( $tmp_cache_filename, 'w' );
2272
+ if ( ! $fr2 ) {
2273
  wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ), 1 );
2274
  wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) );
2275
  @fclose( $fr );
2283
  $wp_cache_mfunc_enabled == 0
2284
  )
2285
  ) { // don't want to store compressed files if using dynamic content
2286
+ $gz = @fopen( $tmp_cache_filename . '.gz', 'w' );
2287
+ if ( ! $gz ) {
2288
+ wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ) . '.gz', 1 );
2289
+ wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) . '.gz' );
2290
  @fclose( $fr );
2291
  @unlink( $tmp_wpcache_filename );
2292
  @fclose( $fr2 );
2299
  }
2300
 
2301
  $added_cache = 0;
2302
+ $oc_key = get_oc_key();
2303
+ $buffer = apply_filters( 'wpsupercache_buffer', $buffer );
2304
  wp_cache_append_tag( $buffer );
2305
 
2306
  /*
2308
  * the wpsc_cachedata filter. Buffer is then returned to the visitor.
2309
  */
2310
  if ( $wp_cache_mfunc_enabled == 1 ) {
2311
+ if ( preg_match( '/<!--mclude|<!--mfunc|<!--dynamic-cached-content-->/', $buffer ) ) { // Dynamic content
2312
  wp_cache_debug( 'mfunc/mclude/dynamic-cached-content tags have been retired. Please update your theme. See docs for updates.' );
2313
+ wp_cache_add_to_buffer( $buffer, 'Warning! Obsolete mfunc/mclude/dynamic-cached-content tags found. Please update your theme. See http://ocaoimh.ie/y/5b for more information.' );
2314
  }
2315
 
2316
  global $wp_super_cache_late_init;
2317
+ if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) ) {
2318
  wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but late init not set. See the readme.txt for further details.' );
2319
+ }
2320
 
2321
  if ( $fr ) { // wpcache caching
2322
  wp_cache_debug( 'Writing dynamic buffer to wpcache file.' );
2323
+ wp_cache_add_to_buffer( $buffer, 'Dynamic WPCache Super Cache' );
2324
  fputs( $fr, '<?php die(); ?>' . $buffer );
2325
  } elseif ( isset( $fr2 ) ) { // supercache active
2326
  wp_cache_debug( 'Writing dynamic buffer to supercache file.' );
2327
+ wp_cache_add_to_buffer( $buffer, 'Dynamic Super Cache' );
2328
  fputs( $fr2, $buffer );
2329
  }
2330
+ $wp_cache_meta['dynamic'] = true;
2331
  if ( $wp_cache_mfunc_enabled == 1 && do_cacheaction( 'wpsc_cachedata_safety', 0 ) === 1 ) {
2332
  $buffer = do_cacheaction( 'wpsc_cachedata', $buffer ); // dynamic content for display
2333
  }
2334
 
2335
  if ( $cache_compression && $wp_cache_gzip_encoding ) {
2336
  wp_cache_debug( 'Gzipping dynamic buffer for display.', 5 );
2337
+ wp_cache_add_to_buffer( $buffer, 'Compression = gzip' );
2338
  $gzdata = gzencode( $buffer, 6, FORCE_GZIP );
2339
  $gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
2340
  }
2349
  $vary_header = 'Accept-Encoding, Cookie';
2350
  }
2351
  if ( $vary_header ) {
2352
+ $wp_cache_meta['headers']['Vary'] = 'Vary: ' . $vary_header;
2353
  }
2354
  if ( $gz || $wp_cache_gzip_encoding ) {
2355
  wp_cache_debug( 'Gzipping buffer.', 5 );
2356
+ wp_cache_add_to_buffer( $buffer, 'Compression = gzip' );
2357
  $gzdata = gzencode( $buffer, 6, FORCE_GZIP );
2358
  $gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
2359
 
2360
+ $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
2361
  // Return uncompressed data & store compressed for later use
2362
  if ( $fr ) {
2363
  wp_cache_debug( 'Writing gzipped buffer to wp-cache cache file.', 5 );
2364
+ fputs( $fr, '<?php die(); ?>' . $gzdata );
2365
  }
2366
  } else { // no compression
2367
  if ( $fr ) {
2368
  wp_cache_debug( 'Writing non-gzipped buffer to wp-cache cache file.' );
2369
+ fputs( $fr, '<?php die(); ?>' . $buffer );
2370
  }
2371
  }
2372
  if ( $fr2 ) {
2373
  wp_cache_debug( 'Writing non-gzipped buffer to supercache file.' );
2374
+ wp_cache_add_to_buffer( $buffer, 'super cache' );
2375
+ fputs( $fr2, $buffer );
2376
  }
2377
  if ( isset( $gzdata ) && $gz ) {
2378
  wp_cache_debug( 'Writing gzipped buffer to supercache file.' );
2379
+ fwrite( $gz, $gzdata );
2380
  }
2381
  }
2382
 
2406
 
2407
  if ( $fr2 ) {
2408
  fclose( $fr2 );
2409
+ if ( $wp_cache_front_page_checks && $cache_fname == $supercachedir . $home_url['path'] . supercache_filename() && ! ( $wp_cache_is_home ) ) {
2410
  wp_cache_writers_exit();
2411
  wp_cache_debug( 'Warning! Not writing another page to front page cache.', 1 );
2412
  return $buffer;
2439
 
2440
  if ( $added_cache && isset( $wp_supercache_cache_list ) && $wp_supercache_cache_list ) {
2441
  update_option( 'wpsupercache_count', ( get_option( 'wpsupercache_count' ) + 1 ) );
2442
+ $last_urls = (array) get_option( 'supercache_last_cached' );
2443
+ if ( count( $last_urls ) >= 10 ) {
2444
  $last_urls = array_slice( $last_urls, 1, 9 );
2445
+ }
2446
+ $last_urls[] = array(
2447
+ 'url' => preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER['REQUEST_URI'] ),
2448
+ 'date' => date( 'Y-m-d H:i:s' ),
2449
+ );
2450
  update_option( 'supercache_last_cached', $last_urls );
2451
  }
2452
  wp_cache_writers_exit();
2453
+ if ( ! headers_sent() && $wp_cache_gzip_encoding && $gzdata ) {
2454
  wp_cache_debug( 'Writing gzip content headers. Sending buffer to browser', 5 );
2455
  header( 'Content-Encoding: ' . $wp_cache_gzip_encoding );
2456
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
2473
  }
2474
  }
2475
 
2476
+ function wp_cache_phase2_clean_cache( $file_prefix ) {
2477
  global $wpdb, $blog_cache_dir;
2478
 
2479
+ if ( ! wp_cache_writers_entry() ) {
2480
  return false;
2481
+ }
2482
  wp_cache_debug( "wp_cache_phase2_clean_cache: Cleaning cache in $blog_cache_dir" );
2483
  if ( $handle = @opendir( $blog_cache_dir ) ) {
2484
+ while ( false !== ( $file = @readdir( $handle ) ) ) {
2485
  if ( strpos( $file, $file_prefix ) !== false ) {
2486
  if ( strpos( $file, '.html' ) ) {
2487
  // delete old wpcache files immediately
2488
  wp_cache_debug( "wp_cache_phase2_clean_cache: Deleting obsolete wpcache cache+meta files: $file" );
2489
+ @unlink( $blog_cache_dir . $file );
2490
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
2491
  } else {
2492
  $meta = json_decode( wp_cache_get_legacy_cache( $blog_cache_dir . 'meta/' . $file ), true );
2493
+ if ( $meta['blog_id'] == $wpdb->blogid ) {
2494
  @unlink( $blog_cache_dir . $file );
2495
  @unlink( $blog_cache_dir . 'meta/' . $file );
2496
  }
2497
  }
2498
  }
2499
  }
2500
+ closedir( $handle );
2501
  do_action( 'wp_cache_cleared' );
2502
  }
2503
  wp_cache_writers_exit();
2512
  }
2513
 
2514
  global $cache_max_time, $cache_path, $blog_cache_dir;
2515
+ static $log = 0;
2516
  static $protected_directories = '';
2517
 
2518
+ $dir = $directory;
2519
  $directory = wpsc_get_realpath( $directory );
2520
  if ( $directory == '' ) {
2521
  wp_cache_debug( "prune_super_cache: exiting as file/directory does not exist : $dir" );
2530
  wp_cache_debug( "prune_super_cache: exiting as file/dir does not exist: $directory" );
2531
  return $log;
2532
  }
2533
+ if ( ! isset( $cache_max_time ) ) {
2534
  $cache_max_time = 3600;
2535
+ }
2536
 
2537
  $now = time();
2538
 
2540
  $protected_directories = wpsc_get_protected_directories();
2541
  }
2542
 
2543
+ if ( is_dir( $directory ) ) {
2544
+ if ( $dh = @opendir( $directory ) ) {
2545
  $directory = trailingslashit( $directory );
2546
+ while ( ( $entry = @readdir( $dh ) ) !== false ) {
2547
+ if ( $entry == '.' || $entry == '..' ) {
2548
  continue;
2549
+ }
2550
  $entry = $directory . $entry;
2551
  prune_super_cache( $entry, $force, $rename );
2552
  // If entry is a directory, AND it's not a protected one, AND we're either forcing the delete, OR the file is out of date,
2553
+ if ( is_dir( $entry ) && ! in_array( $entry, $protected_directories ) && ( $force || @filemtime( $entry ) + $cache_max_time <= $now ) ) {
2554
  // if the directory isn't empty can't delete it
2555
+ if ( $handle = @opendir( $entry ) ) {
2556
  $donotdelete = false;
2557
+ while ( ! $donotdelete && ( $file = @readdir( $handle ) ) !== false ) {
2558
+ if ( $file == '.' || $file == '..' ) {
2559
  continue;
2560
+ }
2561
  $donotdelete = true;
2562
  wp_cache_debug( "gc: could not delete $entry as it's not empty: $file", 2 );
2563
  }
2564
+ closedir( $handle );
2565
  }
2566
+ if ( $donotdelete ) {
2567
  continue;
2568
+ }
2569
+ if ( ! $rename ) {
2570
  @rmdir( $entry );
2571
  $log++;
2572
  if ( $force ) {
2579
  wp_cache_debug( "gc: could not delete $entry as it's protected.", 2 );
2580
  }
2581
  }
2582
+ closedir( $dh );
2583
  }
2584
+ } elseif ( is_file( $directory ) && ( $force || @filemtime( $directory ) + $cache_max_time <= $now ) ) {
2585
  $oktodelete = true;
2586
  if ( in_array( $directory, $protected_directories ) ) {
2587
  wp_cache_debug( "gc: could not delete $directory as it's protected.", 2 );
2588
  $oktodelete = false;
2589
  }
2590
+ if ( $oktodelete && ! $rename ) {
2591
  wp_cache_debug( "prune_super_cache: deleted $directory", 5 );
2592
  @unlink( $directory );
2593
  $log++;
2594
+ } elseif ( $oktodelete && $rename ) {
2595
  wp_cache_debug( "prune_super_cache: wp_cache_rebuild_or_delete( $directory )", 5 );
2596
  wp_cache_rebuild_or_delete( $directory );
2597
  $log++;
2607
  function wp_cache_rebuild_or_delete( $file ) {
2608
  global $cache_rebuild_files, $cache_path, $file_prefix;
2609
 
2610
+ if ( strpos( $file, '?' ) !== false ) {
 
2611
  $file = substr( $file, 0, strpos( $file, '?' ) );
2612
+ }
2613
 
2614
  $file = wpsc_get_realpath( $file );
2615
 
2624
  }
2625
 
2626
  $protected = wpsc_get_protected_directories();
2627
+ foreach ( $protected as $id => $directory ) {
2628
  $protected[ $id ] = wpsc_get_realpath( $directory );
2629
  }
2630
 
2649
  wp_cache_debug( "rebuild_or_gc: file has disappeared: $file" );
2650
  return false;
2651
  }
2652
+ if ( $cache_rebuild_files && substr( $file, -14 ) != '.needs-rebuild' ) {
2653
+ if ( @rename( $file, $file . '.needs-rebuild' ) ) {
2654
  @touch( $file . '.needs-rebuild' );
2655
  wp_cache_debug( "rebuild_or_gc: rename file to {$file}.needs-rebuild", 2 );
2656
  } else {
2670
  global $cache_path, $cache_max_time, $blog_cache_dir, $wp_cache_preload_on;
2671
 
2672
  if ( $cache_max_time == 0 ) {
2673
+ wp_cache_debug( 'wp_cache_phase2_clean_expired: disabled because GC disabled.', 2 );
2674
  return false;
2675
  }
2676
 
2677
  clearstatcache();
2678
+ if ( ! wp_cache_writers_entry() ) {
2679
  return false;
2680
+ }
2681
  $now = time();
2682
  wp_cache_debug( "Cleaning expired cache files in $blog_cache_dir", 2 );
2683
  $deleted = 0;
2684
  if ( ( $handle = @opendir( $blog_cache_dir ) ) ) {
2685
+ while ( false !== ( $file = readdir( $handle ) ) ) {
2686
+ if ( preg_match( "/^$file_prefix/", $file ) &&
2687
+ ( @filemtime( $blog_cache_dir . $file ) + $cache_max_time ) <= $now ) {
2688
  @unlink( $blog_cache_dir . $file );
2689
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
2690
  wp_cache_debug( "wp_cache_phase2_clean_expired: Deleting obsolete wpcache cache+meta files: $file" );
2691
  continue;
2692
  }
2693
+ if ( $file != '.' && $file != '..' ) {
2694
+ if ( is_dir( $blog_cache_dir . $file ) == false && ( @filemtime( $blog_cache_dir . $file ) + $cache_max_time ) <= $now ) {
2695
  if ( substr( $file, -9 ) != '.htaccess' && $file != 'index.html' ) {
2696
+ @unlink( $blog_cache_dir . $file );
2697
  wp_cache_debug( "Deleting $blog_cache_dir{$file}, older than $cache_max_time seconds", 5 );
2698
  }
2699
  }
2700
  }
2701
  }
2702
+ closedir( $handle );
2703
  if ( false == $wp_cache_preload_on || true == $force ) {
2704
  wp_cache_debug( "Doing GC on supercache dir: {$cache_path}supercache", 2 );
2705
  $deleted = prune_super_cache( $cache_path . 'supercache', false, false );
2725
  wp_cache_debug( 'wp_cache_shutdown_callback: Plugin not loaded. Setting feed ttl to 60 seconds.' );
2726
  }
2727
 
 
2728
  if ( false == $new_cache ) {
2729
  wp_cache_debug( 'wp_cache_shutdown_callback: No cache file created. Returning.' );
2730
  return false;
2731
  }
2732
 
2733
+ $wp_cache_meta['uri'] = $WPSC_HTTP_HOST . preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $wp_cache_request_uri ); // To avoid XSS attacks
2734
+ $wp_cache_meta['blog_id'] = $blog_id;
2735
+ $wp_cache_meta['post'] = wp_cache_post_id();
2736
+ $wp_cache_meta['key'] = $wp_cache_key;
2737
+ $wp_cache_meta = apply_filters( 'wp_cache_meta', $wp_cache_meta );
2738
 
2739
  $response = wp_cache_get_response_headers();
2740
+ foreach ( $response as $key => $value ) {
2741
+ $wp_cache_meta['headers'][ $key ] = "$key: $value";
2742
  }
2743
 
2744
  wp_cache_debug( 'wp_cache_shutdown_callback: collecting meta data.', 2 );
2745
 
2746
+ if ( ! isset( $response['Last-Modified'] ) ) {
2747
+ $value = gmdate( 'D, d M Y H:i:s' ) . ' GMT';
2748
+ /*
2749
+ Dont send this the first time */
2750
  /* @header('Last-Modified: ' . $value); */
2751
+ $wp_cache_meta['headers']['Last-Modified'] = "Last-Modified: $value";
2752
  }
2753
  $is_feed = false;
2754
+ if ( ! isset( $response['Content-Type'] ) && ! isset( $response['Content-type'] ) ) {
2755
  // On some systems, headers set by PHP can't be fetched from
2756
  // the output buffer. This is a last ditch effort to set the
2757
  // correct Content-Type header for feeds, if we didn't see
2758
  // it in the response headers already. -- dougal
2759
+ if ( isset( $wp_super_cache_query['is_feed'] ) ) {
2760
+ if ( isset( $wp_super_cache_query['is_sitemap'] ) ) {
2761
  $type = 'sitemap';
2762
  $value = 'text/xml';
2763
  } else {
2764
  $type = get_query_var( 'feed' );
2765
+ $type = str_replace( '/', '', $type );
2766
+ switch ( $type ) {
2767
  case 'atom':
2768
  $value = 'application/atom+xml';
2769
  break;
2779
  $is_feed = true;
2780
 
2781
  if ( isset( $wpsc_feed_ttl ) && $wpsc_feed_ttl == 1 ) {
2782
+ $wp_cache_meta['ttl'] = 60;
2783
  }
2784
  $is_feed = true;
2785
 
2786
  wp_cache_debug( "wp_cache_shutdown_callback: feed is type: $type - $value" );
2787
+ } elseif ( isset( $wp_super_cache_query['is_rest'] ) ) { // json
2788
  $value = 'application/json';
2789
  } else { // not a feed
2790
  $value = get_option( 'html_type' );
2791
+ if ( $value == '' ) {
2792
  $value = 'text/html';
2793
+ }
2794
  }
2795
+ $value .= '; charset="' . $wp_cache_blog_charset . '"';
2796
 
2797
  wp_cache_debug( "Sending 'Content-Type: $value' header.", 2 );
2798
+ @header( "Content-Type: $value" );
2799
+ $wp_cache_meta['headers']['Content-Type'] = "Content-Type: $value";
2800
  }
2801
 
2802
+ if ( $cache_enabled && ! $supercacheonly && $new_cache ) {
2803
+ if ( ! isset( $wp_cache_meta['dynamic'] ) && $wp_cache_gzip_encoding && ! in_array( 'Content-Encoding: ' . $wp_cache_gzip_encoding, $wp_cache_meta['headers'] ) ) {
2804
  wp_cache_debug( 'Sending gzip headers.', 2 );
2805
+ $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
2806
  if ( defined( 'WPSC_VARY_HEADER' ) ) {
2807
  if ( WPSC_VARY_HEADER != '' ) {
2808
  $vary_header = WPSC_VARY_HEADER;
2813
  $vary_header = 'Accept-Encoding, Cookie';
2814
  }
2815
  if ( $vary_header ) {
2816
+ $wp_cache_meta['headers']['Vary'] = 'Vary: ' . $vary_header;
2817
  }
2818
  }
2819
 
2820
  $serial = '<?php die(); ?>' . json_encode( $wp_cache_meta );
2821
+ $dir = get_current_url_supercache_dir();
2822
+ if ( @is_dir( $dir ) == false ) {
2823
  @wp_mkdir_p( $dir );
2824
+ }
2825
 
2826
+ if ( wp_cache_writers_entry() ) {
2827
  wp_cache_debug( "Writing meta file: {$dir}meta-{$meta_file}", 2 );
2828
 
2829
+ $tmp_meta_filename = $dir . uniqid( mt_rand(), true ) . '.tmp';
2830
+ $final_meta_filename = $dir . 'meta-' . $meta_file;
2831
+ $fr = @fopen( $tmp_meta_filename, 'w' );
2832
  if ( $fr ) {
2833
+ fputs( $fr, $serial );
2834
+ fclose( $fr );
2835
+ @chmod( $tmp_meta_filename, 0666 & ~umask() );
2836
+ if ( ! @rename( $tmp_meta_filename, $final_meta_filename ) ) {
2837
  @unlink( $dir . $final_meta_filename );
2838
  @rename( $tmp_meta_filename, $final_meta_filename );
2839
  }
2844
 
2845
  // record locations of archive feeds to be updated when the site is updated.
2846
  // Only record a maximum of 50 feeds to avoid bloating database.
2847
+ if ( ( isset( $wp_super_cache_query['is_feed'] ) || $is_feed ) && ! isset( $wp_super_cache_query['is_single'] ) ) {
2848
  $wpsc_feed_list = (array) get_option( 'wpsc_feed_list' );
2849
  if ( count( $wpsc_feed_list ) <= 50 ) {
2850
  $wpsc_feed_list[] = $dir . $meta_file;
2856
  wp_cache_debug( "Did not write meta file: meta-{$meta_file}\nsupercacheonly: $supercacheonly\nwp_cache_not_logged_in: $wp_cache_not_logged_in\nnew_cache:$new_cache" );
2857
  }
2858
  global $time_to_gc_cache;
2859
+ if ( isset( $time_to_gc_cache ) && $time_to_gc_cache == 1 ) {
2860
  wp_cache_debug( 'Executing wp_cache_gc action.', 3 );
2861
  do_action( 'wp_cache_gc' );
2862
  }
2863
  }
2864
 
2865
+ function wp_cache_no_postid( $id ) {
2866
+ return wp_cache_post_change( wp_cache_post_id() );
2867
  }
2868
 
2869
  function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
2874
  }
2875
 
2876
  // Check is it "Empty Spam" or "Empty Trash"
2877
+ if ( isset( $GLOBALS['pagenow'] ) && $GLOBALS['pagenow'] === 'edit-comments.php' &&
2878
  ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
2879
  ) {
2880
  wp_cache_debug( "Delete all SPAM or Trash comments. Don't delete any cache files.", 4 );
2882
  return;
2883
  }
2884
 
2885
+ $comment = get_comment( $comment_id, ARRAY_A );
2886
  if ( $status != 'NA' ) {
2887
+ $comment['old_comment_approved'] = $comment['comment_approved'];
2888
+ $comment['comment_approved'] = $status;
2889
  }
2890
 
2891
+ if ( ( $status == 'trash' || $status == 'spam' ) && $comment['old_comment_approved'] != 1 ) {
2892
  // don't modify cache if moderated comments are trashed or spammed
2893
  wp_cache_debug( "Moderated comment deleted or spammed. Don't delete any cache files.", 4 );
2894
  define( 'DONOTDELETECACHE', 1 );
2895
  return wp_cache_post_id();
2896
  }
2897
+ $postid = isset( $comment['comment_post_ID'] ) ? (int) $comment['comment_post_ID'] : 0;
2898
  // Do nothing if comment is not moderated
2899
  // http://ocaoimh.ie/2006/12/05/caching-wordpress-with-wp-cache-in-a-spam-filled-world
2900
+ if ( ! preg_match( '/wp-admin\//', $wp_cache_request_uri ) ) {
2901
+ if ( $comment['comment_approved'] == 'delete' && ( isset( $comment['old_comment_approved'] ) && $comment['old_comment_approved'] == 0 ) ) { // do nothing if moderated comments are deleted
2902
  wp_cache_debug( "Moderated comment deleted. Don't delete any cache files.", 4 );
2903
  define( 'DONOTDELETECACHE', 1 );
2904
  return $postid;
2906
  wp_cache_debug( "Spam comment. Don't delete any cache files.", 4 );
2907
  define( 'DONOTDELETECACHE', 1 );
2908
  return $postid;
2909
+ } elseif ( $comment['comment_approved'] == '0' ) {
2910
+ if ( $comment['comment_type'] == '' ) {
2911
  wp_cache_debug( "Moderated comment. Don't delete supercache file until comment approved.", 4 );
2912
  $super_cache_enabled = 0; // don't remove the super cache static file until comment is approved
2913
  define( 'DONOTDELETECACHE', 1 );
2921
  // We must check it up again due to WP bugs calling two different actions
2922
  // for delete, for example both wp_set_comment_status and delete_comment
2923
  // are called when deleting a comment
2924
+ if ( $postid > 0 ) {
2925
  wp_cache_debug( "Post $postid changed. Update cache.", 4 );
2926
  return wp_cache_post_change( $postid );
2927
  } else {
2960
  }
2961
 
2962
  // Taxonomies - categories, tags, custom taxonomies
2963
+ foreach ( get_object_taxonomies( $post, 'objects' ) as $taxonomy ) {
2964
 
2965
  if ( ! $taxonomy->public || ! $taxonomy->rewrite ) {
2966
  continue;
2971
  continue;
2972
  }
2973
 
2974
+ foreach ( $terms as $term ) {
2975
 
2976
  $term_url = get_term_link( $term, $taxonomy->name );
2977
  if ( is_wp_error( $term_url ) ) {
3010
  _deprecated_function( __FUNCTION__, 'WP Super Cache 1.6.3', 'wpsc_delete_post_archives' );
3011
  }
3012
 
3013
+ $post = get_post( $post );
3014
+ $categories = get_the_category( $post->ID );
3015
  if ( $categories ) {
3016
+ $category_base = get_option( 'category_base' );
3017
+ if ( $category_base == '' ) {
3018
  $category_base = '/category/';
3019
+ }
3020
  $category_base = trailingslashit( $category_base ); // paranoid much?
3021
+ foreach ( $categories as $cat ) {
3022
+ prune_super_cache( get_supercache_dir() . $category_base . $cat->slug . '/', true );
3023
  wp_cache_debug( 'wpsc_post_transition: deleting category: ' . get_supercache_dir() . $category_base . $cat->slug . '/' );
3024
  }
3025
  }
3026
+ $posttags = get_the_tags( $post->ID );
3027
  if ( $posttags ) {
3028
  $tag_base = get_option( 'tag_base' );
3029
+ if ( $tag_base == '' ) {
3030
  $tag_base = '/tag/';
3031
+ }
3032
  $tag_base = trailingslashit( str_replace( '..', '', $tag_base ) ); // maybe!
3033
+ foreach ( $posttags as $tag ) {
3034
  prune_super_cache( get_supercache_dir() . $tag_base . $tag->slug . '/', true );
3035
  wp_cache_debug( 'wpsc_post_transition: deleting tag: ' . get_supercache_dir() . $tag_base . $tag->slug . '/' );
3036
  }
3044
  return;
3045
  }
3046
 
3047
+ if ( ( $old_status === 'private' || $old_status === 'publish' ) && $new_status !== 'publish' ) { // post unpublished
3048
  if ( ! function_exists( 'get_sample_permalink' ) ) {
3049
+ require_once ABSPATH . 'wp-admin/includes/post.php';
3050
  }
3051
  list( $permalink, $post_name ) = get_sample_permalink( $post );
3052
+ $post_url = str_replace( array( '%postname%', '%pagename%' ), $post->post_name, $permalink );
3053
  } elseif ( $old_status !== 'publish' && $new_status === 'publish' ) { // post published
3054
  wp_cache_post_edit( $post->ID );
3055
  return;
3087
 
3088
  // we want to process the post again just in case it becomes published before the second time this function is called.
3089
  $last_post_edited = $post_id;
3090
+ if ( $wp_cache_clear_on_post_edit ) {
3091
  wp_cache_debug( "wp_cache_post_edit: Clearing cache $blog_cache_dir and {$cache_path}supercache/ on post edit per config.", 2 );
3092
  prune_super_cache( $blog_cache_dir, true );
3093
  prune_super_cache( get_supercache_dir(), true );
3102
  function wp_cache_post_id_gc( $post_id, $all = 'all' ) {
3103
 
3104
  $post_id = intval( $post_id );
3105
+ if ( $post_id == 0 ) {
3106
  return true;
3107
+ }
3108
 
3109
  $permalink = trailingslashit( str_replace( get_option( 'home' ), '', get_permalink( $post_id ) ) );
3110
  if ( false !== strpos( $permalink, '?' ) ) {
3178
  }
3179
 
3180
  $all_backup = $all;
3181
+ $all = apply_filters( 'wpsc_delete_related_pages_on_edit', $all ); // return 0 to disable deleting homepage and other pages.
3182
+ if ( $all != $all_backup ) {
3183
  wp_cache_debug( 'wp_cache_post_change: $all changed by wpsc_delete_related_pages_on_edit filter: ' . intval( $all ) );
3184
+ }
3185
 
3186
  // Delete supercache files whenever a post change event occurs, even if supercache is currently disabled.
3187
  $dir = get_supercache_dir();
3217
  wp_cache_debug( "wp_cache_post_change: checking {$blog_cache_dir}meta/", 4 );
3218
  $supercache_files_deleted = false;
3219
  if ( $handle = @opendir( $blog_cache_dir ) ) {
3220
+ while ( false !== ( $file = readdir( $handle ) ) ) {
3221
  if ( strpos( $file, $file_prefix ) !== false ) {
3222
  if ( strpos( $file, '.html' ) ) {
3223
  // delete old wpcache files immediately
3224
  wp_cache_debug( "wp_cache_post_change: Deleting obsolete wpcache cache+meta files: $file" );
3225
+ @unlink( $blog_cache_dir . $file );
3226
  @unlink( $blog_cache_dir . 'meta/' . str_replace( '.html', '.meta', $file ) );
3227
  continue;
3228
  } else {
3229
  $meta = json_decode( wp_cache_get_legacy_cache( $blog_cache_dir . 'meta/' . $file ), true );
3230
+ if ( false == is_array( $meta ) ) {
3231
  wp_cache_debug( "Post change cleaning up stray file: $file", 4 );
3232
  @unlink( $blog_cache_dir . 'meta/' . $file );
3233
  @unlink( $blog_cache_dir . $file );
3235
  }
3236
  if ( $post_id > 0 && $meta ) {
3237
  $permalink = trailingslashit( str_replace( get_option( 'home' ), '', get_permalink( $post_id ) ) );
3238
+ if ( $meta['blog_id'] == $blog_id && ( ( $all == true && ! $meta['post'] ) || $meta['post'] == $post_id ) ) {
3239
  wp_cache_debug( "Post change: deleting post wp-cache files for {$meta[ 'uri' ]}: $file", 4 );
3240
  @unlink( $blog_cache_dir . 'meta/' . $file );
3241
  @unlink( $blog_cache_dir . $file );
3246
  do_action( 'gc_cache', 'rebuild', $permalink );
3247
  }
3248
  }
3249
+ } elseif ( $meta['blog_id'] == $blog_id ) {
3250
  wp_cache_debug( "Post change: deleting wp-cache files for {$meta[ 'uri' ]}: $file", 4 );
3251
  @unlink( $blog_cache_dir . 'meta/' . $file );
3252
  @unlink( $blog_cache_dir . $file );
3253
  if ( $super_cache_enabled == true ) {
3254
  wp_cache_debug( "Post change: deleting supercache files for {$meta[ 'uri' ]}" );
3255
+ wpsc_rebuild_files( $dir . $meta['uri'] );
3256
+ do_action( 'gc_cache', 'rebuild', trailingslashit( $meta['uri'] ) );
3257
  }
3258
  }
3259
  }
3260
  }
3261
  }
3262
+ closedir( $handle );
3263
  }
3264
  wp_cache_writers_exit();
3265
  return $post_id;
3266
  }
3267
 
3268
+ function wp_cache_microtime_diff( $a, $b ) {
3269
+ list($a_dec, $a_sec) = explode( ' ', $a );
3270
+ list($b_dec, $b_sec) = explode( ' ', $b );
3271
+ return (float) $b_sec - (float) $a_sec + (float) $b_dec - (float) $a_dec;
3272
  }
3273
 
3274
  function wp_cache_post_id() {
3275
  global $posts, $comment_post_ID, $post_ID;
3276
  // We try hard all options. More frequent first.
3277
+ if ( $post_ID > 0 ) {
3278
+ return $post_ID;
3279
+ }
3280
+ if ( $comment_post_ID > 0 ) {
3281
+ return $comment_post_ID;
3282
+ }
3283
+ if ( is_singular() && ! empty( $posts ) ) {
3284
+ return $posts[0]->ID;
3285
+ }
3286
+ if ( isset( $_GET['p'] ) && $_GET['p'] > 0 ) {
3287
+ return $_GET['p'];
3288
+ }
3289
+ if ( isset( $_POST['p'] ) && $_POST['p'] > 0 ) {
3290
+ return $_POST['p'];
3291
+ }
3292
  return 0;
3293
  }
3294
 
3310
  }
3311
  function get_gc_flag() {
3312
  global $cache_path;
3313
+ return $cache_path . strtolower( preg_replace( '!/:.*$!', '', str_replace( 'http://', '', str_replace( 'https://', '', get_option( 'home' ) ) ) ) ) . '_wp_cache_gc.txt';
3314
  }
3315
 
3316
  function wp_cache_gc_cron() {
3337
 
3338
  wp_cache_debug( 'Cache garbage collection.', 5 );
3339
 
3340
+ if ( ! isset( $cache_max_time ) ) {
3341
  $cache_max_time = 600;
3342
+ }
3343
 
3344
  $start = time();
3345
+ $num = 0;
3346
+ if ( false === ( $num = wp_cache_phase2_clean_expired( $file_prefix ) ) ) {
3347
  wp_cache_debug( 'Cache Expiry cron job failed. Probably mutex locked.', 1 );
3348
  update_option( 'wpsupercache_gc_time', time() - ( $cache_time_interval - 10 ) ); // if GC failed then run it again in one minute
3349
  $msg .= __( 'Cache expiry cron job failed. Job will run again in 10 seconds.', 'wp-super-cache' ) . "\n";
3350
  }
3351
+ if ( time() - $start > 30 ) {
3352
  wp_cache_debug( "Cache Expiry cron job took more than 30 seconds to execute.\nYou should reduce the Expiry Time in the WP Super Cache admin page\nas you probably have more cache files than your server can handle efficiently.", 1 );
3353
  $msg .= __( 'Cache expiry cron job took more than 30 seconds. You should probably run the garbage collector more often.', 'wp-super-cache' ) . "\n";
3354
  }
3355
 
3356
  if ( $cache_gc_email_me ) {
3357
+ if ( $msg != '' ) {
3358
  $msg = "The following warnings were generated by the WP Super Cache Garbage Collector:\n" . $msg;
3359
+ }
3360
 
3361
+ $msg = "Hi,\n\nThe WP Super Cache Garbage Collector has now run, deleting " . (int) $num . " files and directories.\nIf you want to switch off these emails please see the WP Super Cache Advanced Settings\npage on your blog.\n\n{$msg}\nRegards,\nThe Garbage Collector.";
3362
 
3363
  wp_mail( get_option( 'admin_email' ), sprintf( __( '[%1$s] WP Super Cache GC Report', 'wp-super-cache' ), home_url() ), $msg );
3364
  }
3370
  function schedule_wp_gc( $forced = 0 ) {
3371
  global $cache_schedule_type, $cache_max_time, $cache_time_interval, $cache_scheduled_time, $cache_schedule_interval;
3372
 
3373
+ if ( false == isset( $cache_time_interval ) ) {
3374
  $cache_time_interval = 3600;
3375
+ }
3376
 
3377
  if ( false == isset( $cache_schedule_type ) ) {
3378
+ $cache_schedule_type = 'interval';
3379
  $cache_schedule_interval = $cache_max_time;
3380
  }
3381
  if ( $cache_schedule_type == 'interval' ) {
3382
+ if ( ! isset( $cache_max_time ) ) {
3383
  $cache_max_time = 600;
3384
+ }
3385
+ if ( $cache_max_time == 0 ) {
3386
  return false;
3387
+ }
3388
+ $last_gc = get_option( 'wpsupercache_gc_time' );
3389
 
3390
+ if ( ! $last_gc ) {
3391
  update_option( 'wpsupercache_gc_time', time() );
3392
+ $last_gc = get_option( 'wpsupercache_gc_time' );
3393
  }
3394
  if ( $forced || ( $last_gc < ( time() - 60 ) ) ) { // Allow up to 60 seconds for the previous job to run
3395
  global $wp_cache_shutdown_gc;
3396
+ if ( ! isset( $wp_cache_shutdown_gc ) || $wp_cache_shutdown_gc == 0 ) {
3397
+ if ( ! ( $t = wp_next_scheduled( 'wp_cache_gc' ) ) ) {
3398
  wp_clear_scheduled_hook( 'wp_cache_gc' );
3399
  wp_schedule_single_event( time() + $cache_time_interval, 'wp_cache_gc' );
3400
  wp_cache_debug( 'scheduled wp_cache_gc for 10 seconds time.', 5 );
3404
  $time_to_gc_cache = 1; // tell the "shutdown gc" to run!
3405
  }
3406
  }
3407
+ } elseif ( $cache_schedule_type == 'time' && ! wp_next_scheduled( 'wp_cache_gc' ) ) {
3408
  wp_schedule_event( strtotime( $cache_scheduled_time ), $cache_schedule_interval, 'wp_cache_gc' );
3409
  }
3410
  return true;
3421
  static $is_get_query = null;
3422
 
3423
  if ( null === $is_get_query ) {
3424
+ $request_uri = parse_url( $_SERVER['REQUEST_URI'] );
3425
  $is_get_query = $request_uri && ! empty( $request_uri['query'] );
3426
  }
3427
 
3440
 
3441
  foreach ( array_keys( $_SERVER ) as $skey ) {
3442
  if ( 0 === strpos( $skey, 'HTTP_' ) ) {
3443
+ $header = implode( '-', array_map( 'ucfirst', array_slice( explode( '_', strtolower( $skey ) ), 1 ) ) );
3444
  $headers[ $header ] = $_SERVER[ $skey ];
3445
  }
3446
  }
wp-cache.php CHANGED
@@ -1,15 +1,15 @@
1
  <?php
2
  /*
3
- Plugin Name: WP Super Cache
4
- Plugin URI: https://wordpress.org/plugins/wp-super-cache/
5
- Description: Very fast caching plugin for WordPress.
6
- Version: 1.7.9
7
- Author: Automattic
8
- Author URI: https://automattic.com/
9
- License: GPL2+
10
- License URI: https://www.gnu.org/licenses/gpl-2.0.txt
11
- Text Domain: wp-super-cache
12
- */
13
 
14
  /*
15
  Copyright Automattic and many other contributors.
@@ -29,11 +29,11 @@ Text Domain: wp-super-cache
29
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30
  */
31
 
32
- require_once( dirname( __FILE__ ) . '/inc/delete-cache-button.php');
33
- require_once( dirname( __FILE__ ) . '/inc/preload-notification.php');
34
 
35
  if ( ! function_exists( 'wp_cache_phase2' ) ) {
36
- require_once( dirname( __FILE__ ) . '/wp-cache-phase2.php');
37
  }
38
 
39
  if ( ! defined( 'PHP_VERSION_ID' ) ) {
@@ -56,9 +56,9 @@ function wpsc_init() {
56
  define( 'WPCACHEHOME', dirname( __FILE__ ) . '/' );
57
  $wp_cache_config_file_sample = WPCACHEHOME . 'wp-cache-config-sample.php';
58
  $wpsc_advanced_cache_dist_filename = WPCACHEHOME . 'advanced-cache.php';
59
- } elseif ( realpath( WPCACHEHOME ) != realpath( dirname( __FILE__ ) ) ) {
60
- $wp_cache_config_file_sample = dirname( __FILE__ ) . '/wp-cache-config-sample.php';
61
- $wpsc_advanced_cache_dist_filename = dirname( __FILE__ ) . '/advanced-cache.php';
62
  if ( ! defined( 'ADVANCEDCACHEPROBLEM' ) ) {
63
  define( 'ADVANCEDCACHEPROBLEM', 1 ); // force an update of WPCACHEHOME
64
  }
@@ -101,12 +101,12 @@ if ( ! isset( $cache_enabled, $super_cache_enabled, $wp_cache_mod_rewrite, $cach
101
 
102
  include(WPCACHEHOME . 'wp-cache-base.php');
103
  if ( class_exists( 'WP_REST_Controller' ) ) {
104
- include( dirname( __FILE__ ) . '/rest/load.php' );
105
  }
106
 
107
  function wp_super_cache_init_action() {
108
 
109
- load_plugin_textdomain( 'wp-super-cache', false, basename( dirname( __FILE__ ) ) . '/languages' );
110
 
111
  wpsc_register_post_hooks();
112
  }
@@ -130,10 +130,10 @@ function get_wpcachehome() {
130
  }
131
 
132
  if ( ! defined( 'WPCACHEHOME' ) ) {
133
- if ( is_file( dirname( __FILE__ ) . '/wp-cache-config-sample.php' ) ) {
134
  define( 'WPCACHEHOME', trailingslashit( dirname( __FILE__ ) ) );
135
- } elseif ( is_file( dirname( __FILE__ ) . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
136
- define( 'WPCACHEHOME', dirname( __FILE__ ) . '/wp-super-cache/' );
137
  } else {
138
  die( sprintf( esc_html__( 'Please create %s/wp-cache-config.php from wp-super-cache/wp-cache-config-sample.php', 'wp-super-cache' ), esc_attr( WPCACHECONFIGPATH ) ) );
139
  }
@@ -243,6 +243,7 @@ function wp_cache_add_pages() {
243
  }
244
  add_action( 'admin_menu', 'wp_cache_add_pages' );
245
 
 
246
  function wp_cache_network_pages() {
247
  add_submenu_page( 'settings.php', 'WP Super Cache', 'WP Super Cache', 'manage_options', 'wpsupercache', 'wp_cache_manager' );
248
  }
@@ -733,6 +734,17 @@ function wp_cache_manager_updates() {
733
  if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page' ] == 'wpsupercache' )
734
  add_action( 'admin_init', 'wp_cache_manager_updates' );
735
 
 
 
 
 
 
 
 
 
 
 
 
736
  function wp_cache_manager() {
737
  global $wp_cache_config_file, $valid_nonce, $supercachedir, $cache_path, $cache_enabled, $cache_compression, $super_cache_enabled;
738
  global $wp_cache_clear_on_post_edit, $cache_rebuild_files, $wp_cache_mutex_disabled, $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_no_cache_for_get;
@@ -802,7 +814,7 @@ function toggleLayer( whichLayer ) {
802
  // -->
803
  //Clicking header opens fieldset options
804
  jQuery(document).ready(function(){
805
- jQuery("fieldset h4").css("cursor","pointer").click(function(){
806
  jQuery(this).parent("fieldset").find("p,form,ul,blockquote").toggle("slow");
807
  });
808
  });
@@ -919,6 +931,125 @@ table.wpsc-settings-table {
919
  }
920
 
921
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
922
  <table class="wpsc-settings-table"><td valign="top">
923
  <?php
924
 
@@ -1042,9 +1173,11 @@ table.wpsc-settings-table {
1042
 
1043
  </fieldset>
1044
  </td><td valign='top' style='width: 300px'>
1045
- <div style='background: #ffc; border: 1px solid #333; margin: 2px; padding: 3px 15px'>
1046
  <h4><?php _e( 'Other Site Tools', 'wp-super-cache' ); ?></h4>
1047
  <ul style="list-style: square; margin-left: 2em;">
 
 
1048
  <li><a href="https://jetpack.com/redirect/?source=jitm-wpsc-generic"><?php _e( 'Speed up images and photos (free)', 'wp-super-cache' ); ?></a></li>
1049
  <li><a href="https://jetpack.com/redirect/?source=jitm-wpsc-premium"><?php _e( 'Fast video hosting (paid)', 'wp-super-cache' ); ?></a></li>
1050
  <li><a href="https://crowdsignal.com/pricing/?ad=wpsc"><?php _e( 'Add Surveys and Polls to your site', 'wp-super-cache' ); ?></a></li>
@@ -1737,7 +1870,7 @@ function wp_cache_index_notice() {
1737
  <script type='text/javascript'>
1738
  <!--
1739
  jQuery(document).ready(function(){
1740
- jQuery('#wpsc-dismiss').click(function() {
1741
  jQuery.ajax({
1742
  type: "post",url: "admin-ajax.php",data: { action: 'wpsc-index-dismiss', _ajax_nonce: '<?php echo wp_create_nonce( 'wpsc-index-dismiss' ); ?>' },
1743
  beforeSend: function() {jQuery("#wpsc-index-warning").fadeOut('slow');},
1
  <?php
2
  /*
3
+ * Plugin Name: WP Super Cache
4
+ * Plugin URI: https://wordpress.org/plugins/wp-super-cache/
5
+ * Description: Very fast caching plugin for WordPress.
6
+ * Version: 1.8
7
+ * Author: Automattic
8
+ * Author URI: https://automattic.com/
9
+ * License: GPL2+
10
+ * License URI: https://www.gnu.org/licenses/gpl-2.0.txt
11
+ * Text Domain: wp-super-cache
12
+ */
13
 
14
  /*
15
  Copyright Automattic and many other contributors.
29
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30
  */
31
 
32
+ require_once( __DIR__. '/inc/delete-cache-button.php');
33
+ require_once( __DIR__. '/inc/preload-notification.php');
34
 
35
  if ( ! function_exists( 'wp_cache_phase2' ) ) {
36
+ require_once( __DIR__. '/wp-cache-phase2.php');
37
  }
38
 
39
  if ( ! defined( 'PHP_VERSION_ID' ) ) {
56
  define( 'WPCACHEHOME', dirname( __FILE__ ) . '/' );
57
  $wp_cache_config_file_sample = WPCACHEHOME . 'wp-cache-config-sample.php';
58
  $wpsc_advanced_cache_dist_filename = WPCACHEHOME . 'advanced-cache.php';
59
+ } elseif ( realpath( WPCACHEHOME ) != realpath( __DIR__ ) ) {
60
+ $wp_cache_config_file_sample = __DIR__. '/wp-cache-config-sample.php';
61
+ $wpsc_advanced_cache_dist_filename = __DIR__. '/advanced-cache.php';
62
  if ( ! defined( 'ADVANCEDCACHEPROBLEM' ) ) {
63
  define( 'ADVANCEDCACHEPROBLEM', 1 ); // force an update of WPCACHEHOME
64
  }
101
 
102
  include(WPCACHEHOME . 'wp-cache-base.php');
103
  if ( class_exists( 'WP_REST_Controller' ) ) {
104
+ include( __DIR__. '/rest/load.php' );
105
  }
106
 
107
  function wp_super_cache_init_action() {
108
 
109
+ load_plugin_textdomain( 'wp-super-cache', false, basename( __DIR__ ) . '/languages' );
110
 
111
  wpsc_register_post_hooks();
112
  }
130
  }
131
 
132
  if ( ! defined( 'WPCACHEHOME' ) ) {
133
+ if ( is_file( __DIR__ . '/wp-cache-config-sample.php' ) ) {
134
  define( 'WPCACHEHOME', trailingslashit( dirname( __FILE__ ) ) );
135
+ } elseif ( is_file( __DIR__ . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
136
+ define( 'WPCACHEHOME', __DIR__ . '/wp-super-cache/' );
137
  } else {
138
  die( sprintf( esc_html__( 'Please create %s/wp-cache-config.php from wp-super-cache/wp-cache-config-sample.php', 'wp-super-cache' ), esc_attr( WPCACHECONFIGPATH ) ) );
139
  }
243
  }
244
  add_action( 'admin_menu', 'wp_cache_add_pages' );
245
 
246
+
247
  function wp_cache_network_pages() {
248
  add_submenu_page( 'settings.php', 'WP Super Cache', 'WP Super Cache', 'manage_options', 'wpsupercache', 'wp_cache_manager' );
249
  }
734
  if ( isset( $_GET[ 'page' ] ) && $_GET[ 'page' ] == 'wpsupercache' )
735
  add_action( 'admin_init', 'wp_cache_manager_updates' );
736
 
737
+
738
+ add_action( 'wp_ajax_wpsc-hide-survey', 'wpsc_hide_survey' );
739
+ function wpsc_hide_survey(){
740
+ //nonce it
741
+ check_ajax_referer( 'wpsc-2022-survey', 'security' );
742
+ //update it
743
+ update_option('wpsc_2022-survey', 0, false);
744
+ wp_die();
745
+ }
746
+
747
+
748
  function wp_cache_manager() {
749
  global $wp_cache_config_file, $valid_nonce, $supercachedir, $cache_path, $cache_enabled, $cache_compression, $super_cache_enabled;
750
  global $wp_cache_clear_on_post_edit, $cache_rebuild_files, $wp_cache_mutex_disabled, $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_no_cache_for_get;
814
  // -->
815
  //Clicking header opens fieldset options
816
  jQuery(document).ready(function(){
817
+ jQuery("fieldset h4").css("cursor","pointer").on("click",function(){
818
  jQuery(this).parent("fieldset").find("p,form,ul,blockquote").toggle("slow");
819
  });
820
  });
931
  }
932
 
933
  ?>
934
+ <style>
935
+ .feedback-notice{
936
+ background:white;
937
+ border: 1px solid #DCDCDE;
938
+ border-radius: 4px;
939
+ position:relative;
940
+ height: 86px;
941
+ width: calc(100% - 310px);
942
+ }
943
+ .feedback-notice .content{
944
+ margin-top:5px;
945
+ position: absolute;
946
+ width:65%;
947
+ padding-right:5%;
948
+ height: 42px;
949
+ left: 65px;
950
+ top: calc(50% - 65px/2);
951
+ font-size: 14px;
952
+ }
953
+ .megaphone{
954
+ position:absolute;
955
+ width: 24px;
956
+ height: 24px;
957
+ left: 21px;
958
+ top: calc(50% - 24px/2);
959
+ }
960
+ .survey-title b{
961
+ font-size:14px;
962
+ }
963
+ .survey-cta{
964
+ position: absolute;
965
+ width: 140px;
966
+ height: 40px;
967
+ right: 64px;
968
+ top: calc(50% - 40px/2);
969
+ background: #FFFFFF;
970
+ border: 1px solid #000000;
971
+ border-radius: 4px;
972
+ line-height:40px;
973
+ text-align:center;
974
+ font-style: normal;
975
+ font-weight: 600;
976
+ font-size: 16px;
977
+ letter-spacing: -0.01em;
978
+ }
979
+ .survey-cta a{
980
+ color:#000000 !important;
981
+ text-decoration:none !important;
982
+ }
983
+ .close{
984
+ position: absolute;
985
+ width: 24px;
986
+ height: 24px;
987
+ right: 20px;
988
+ top: calc(50% - 24px/2);
989
+ cursor:pointer;
990
+ }
991
+ </style>
992
+
993
+ <?php
994
+ $survey_nonce = wp_create_nonce( "wpsc-2022-survey" );
995
+ $call_out_box = "0px";
996
+ $showing_2022_survey = get_option('wpsc_2022-survey', true);
997
+ //to handle the way the yellow box is output in the UI in a table cell.
998
+ if ( $showing_2022_survey && $curr_tab !== 'contents' ) {
999
+ $call_out_box = '-90px';
1000
+ }
1001
+ ?>
1002
+
1003
+ <script>
1004
+
1005
+ function dismissNotice(){
1006
+ // hide the notice here sometimes it can be a little slow if waiting for
1007
+ // the success response.
1008
+ jQuery('#wp-super-cache-2022-survey').fadeOut('slow');
1009
+ document.getElementById('wpsc-callout').style.marginTop = "0px";
1010
+ jQuery.ajax({
1011
+ type: "post",
1012
+ dataType: "json",
1013
+ url: ajaxurl,
1014
+ data: {
1015
+ action: 'wpsc-hide-survey',
1016
+ security: '<?php echo $survey_nonce; ?>',
1017
+ }
1018
+ });
1019
+ }
1020
+
1021
+ </script>
1022
+
1023
+ <?php
1024
+ //only show the notification if not dismissed.
1025
+ if($showing_2022_survey){
1026
+ ?>
1027
+ <div class="feedback-notice" id="wp-super-cache-2022-survey">
1028
+ <div class="megaphone">
1029
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1030
+ <path d="M5 10H5.07846L5.15522 9.98376L18.0785 7.25H19.25V15.25H18.0785L5.15522 12.5162L5.07846 12.5H5H4.75V10H5Z" stroke="#1E1E1E" stroke-width="1.5"/>
1031
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M9.92831 16.2481C8.73996 15.8848 8.07114 14.6269 8.43446 13.4386L7 13C6.39448 14.9806 7.50918 17.077 9.48975 17.6825C11.4703 18.2881 13.5668 17.1734 14.1723 15.1928L12.7378 14.7542C12.3745 15.9426 11.1166 16.6114 9.92831 16.2481Z" fill="#1E1E1E"/>
1032
+ </svg>
1033
+ </div>
1034
+ <div class="content">
1035
+ <div style="survey-title">
1036
+ <b><?php _e("WP Super Cache Survey", "wp-super-cache"); ?></b>
1037
+ </div>
1038
+ <?php
1039
+ _e("We’d love to hear your thoughts about what should make it into WP Super Cache in the future. Please take our quick survey to help us improve!", "wp-super-cache");
1040
+ ?>
1041
+ </div>
1042
+ <div class="survey-cta">
1043
+ <a href="https://docs.google.com/forms/d/e/1FAIpQLScOnrNs4_g-vOqzpPRghfK4WPFGGrBWqn9J5ZX8OYwyxa_QKg/viewform" target="_blank"><?php _e("Take Survey", "wp-super-cache"); ?></a>
1044
+ </div>
1045
+ <div class="close" onclick="dismissNotice()">
1046
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1047
+ <path d="M5.40456 5L19 19M5 19L18.5954 5" stroke="#1E1E1E" stroke-width="1.5"/>
1048
+ </svg>
1049
+ </div>
1050
+ </div>
1051
+ <?php } ?>
1052
+
1053
  <table class="wpsc-settings-table"><td valign="top">
1054
  <?php
1055
 
1173
 
1174
  </fieldset>
1175
  </td><td valign='top' style='width: 300px'>
1176
+ <div id="wpsc-callout" style='background: #ffc; border: 1px solid #333; margin: 2px; padding: 3px 15px;margin-top:<?php echo $call_out_box;?>;'>
1177
  <h4><?php _e( 'Other Site Tools', 'wp-super-cache' ); ?></h4>
1178
  <ul style="list-style: square; margin-left: 2em;">
1179
+
1180
+ <li><a href="https://jetpack.com/redirect/?source=wp-super-cache-boost"><?php _e( 'Boost your page speed scores', 'wp-super-cache' ); ?></a></li>
1181
  <li><a href="https://jetpack.com/redirect/?source=jitm-wpsc-generic"><?php _e( 'Speed up images and photos (free)', 'wp-super-cache' ); ?></a></li>
1182
  <li><a href="https://jetpack.com/redirect/?source=jitm-wpsc-premium"><?php _e( 'Fast video hosting (paid)', 'wp-super-cache' ); ?></a></li>
1183
  <li><a href="https://crowdsignal.com/pricing/?ad=wpsc"><?php _e( 'Add Surveys and Polls to your site', 'wp-super-cache' ); ?></a></li>
1870
  <script type='text/javascript'>
1871
  <!--
1872
  jQuery(document).ready(function(){
1873
+ jQuery('#wpsc-dismiss').on("click",function() {
1874
  jQuery.ajax({
1875
  type: "post",url: "admin-ajax.php",data: { action: 'wpsc-index-dismiss', _ajax_nonce: '<?php echo wp_create_nonce( 'wpsc-index-dismiss' ); ?>' },
1876
  beforeSend: function() {jQuery("#wpsc-index-warning").fadeOut('slow');},
wp-super-cache.pot DELETED
@@ -1,2242 +0,0 @@
1
- # Copyright (C) 2017 WP Super Cache
2
- # This file is distributed under the same license as the WP Super Cache package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: WP Super Cache 1.4.9\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-super-cache\n"
7
- "POT-Creation-Date: 2017-02-28 12:51:09+00:00\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
14
-
15
- #: ossdl-cdn.php:153
16
- msgid ""
17
- "Your website probably uses lots of static files. Image, Javascript and CSS "
18
- "files are usually static files that could just as easily be served from "
19
- "another site or CDN. Therefore, this plugin replaces any links in the "
20
- "<code>wp-content</code> and <code>wp-includes</code> directories (except for "
21
- "PHP files) on your site with the URL you provide below. That way you can "
22
- "either copy all the static content to a dedicated host or mirror the files "
23
- "to a CDN by <a href=\"https://knowledgelayer.softlayer.com/faq/how-does-"
24
- "origin-pull-work\" target=\"_blank\">origin pull</a>."
25
- msgstr ""
26
-
27
- #: ossdl-cdn.php:154
28
- msgid ""
29
- "<strong style=\"color: red\">WARNING:</strong> Test some static urls e.g., "
30
- "%s to ensure your CDN service is fully working before saving changes."
31
- msgstr ""
32
-
33
- #: ossdl-cdn.php:155
34
- msgid "You can define different CDN URLs for each site on a multsite network."
35
- msgstr ""
36
-
37
- #: ossdl-cdn.php:163
38
- msgid "Enable CDN Support"
39
- msgstr ""
40
-
41
- #: ossdl-cdn.php:166
42
- msgid "Off-site URL"
43
- msgstr ""
44
-
45
- #: ossdl-cdn.php:169
46
- msgid ""
47
- "The new URL to be used in place of %1$s for rewriting. No trailing <code>/</"
48
- "code> please.<br />Example: <code>%2$s</code>."
49
- msgstr ""
50
-
51
- #: ossdl-cdn.php:173
52
- msgid "Include directories"
53
- msgstr ""
54
-
55
- #: ossdl-cdn.php:176
56
- msgid ""
57
- "Directories to include in static file matching. Use a comma as the "
58
- "delimiter. Default is <code>wp-content, wp-includes</code>, which will be "
59
- "enforced if this field is left empty."
60
- msgstr ""
61
-
62
- #: ossdl-cdn.php:180
63
- msgid "Exclude if substring"
64
- msgstr ""
65
-
66
- #: ossdl-cdn.php:183
67
- msgid ""
68
- "Excludes something from being rewritten if one of the above strings is found "
69
- "in the match. Use a comma as the delimiter like this, <code>.php, .flv, .do</"
70
- "code>, and always include <code>.php</code> (default)."
71
- msgstr ""
72
-
73
- #: ossdl-cdn.php:187
74
- msgid "Additional CNAMES"
75
- msgstr ""
76
-
77
- #: ossdl-cdn.php:190
78
- msgid ""
79
- "These <a href=\"http://en.wikipedia.org/wiki/CNAME_record\">CNAMES</a> will "
80
- "be used in place of %1$s for rewriting (in addition to the off-site URL "
81
- "above). Use a comma as the delimiter. For pages with a large number of "
82
- "static files, this can improve browser performance. CNAMEs may also need to "
83
- "be configured on your CDN.<br />Example: %2$s"
84
- msgstr ""
85
-
86
- #: ossdl-cdn.php:194
87
- msgid "Skip https URLs to avoid \"mixed content\" errors"
88
- msgstr ""
89
-
90
- #: ossdl-cdn.php:198
91
- msgid "Save Changes"
92
- msgstr ""
93
-
94
- #: ossdl-cdn.php:200
95
- msgid ""
96
- "CDN functionality provided by <a href=\"http://wordpress.org/plugins/ossdl-"
97
- "cdn-off-linker/\">OSSDL CDN Off Linker</a> by <a href=\"http://mark.ossdl.de/"
98
- "\">Mark Kubacki</a>"
99
- msgstr ""
100
-
101
- #: plugins/awaitingmoderation.php:4
102
- msgid "Your comment is awaiting moderation."
103
- msgstr ""
104
-
105
- #: plugins/awaitingmoderation.php:32
106
- msgid "Awaiting Moderation"
107
- msgstr ""
108
-
109
- #: plugins/awaitingmoderation.php:34 plugins/badbehaviour.php:65
110
- #: plugins/domain-mapping.php:75 plugins/jetpack.php:31
111
- #: plugins/searchengine.php:69 plugins/wptouch.php:22 wp-cache.php:1500
112
- msgid "Enabled"
113
- msgstr ""
114
-
115
- #: plugins/awaitingmoderation.php:35 plugins/badbehaviour.php:66
116
- #: plugins/domain-mapping.php:76 plugins/jetpack.php:32
117
- #: plugins/searchengine.php:70 plugins/wptouch.php:23 wp-cache.php:1500
118
- msgid "Disabled"
119
- msgstr ""
120
-
121
- #: plugins/awaitingmoderation.php:36
122
- msgid ""
123
- "Enables or disables plugin to Remove the text \"Your comment is awaiting "
124
- "moderation.\" when someone leaves a moderated comment."
125
- msgstr ""
126
-
127
- #: plugins/awaitingmoderation.php:40 plugins/badbehaviour.php:71
128
- #: plugins/domain-mapping.php:81 plugins/jetpack.php:37
129
- #: plugins/searchengine.php:75 plugins/wptouch.php:28 wp-cache.php:1977
130
- #: wp-cache.php:1979
131
- msgid "enabled"
132
- msgstr ""
133
-
134
- #: plugins/awaitingmoderation.php:42 plugins/badbehaviour.php:73
135
- #: plugins/domain-mapping.php:83 plugins/jetpack.php:39
136
- #: plugins/searchengine.php:77 plugins/wptouch.php:30
137
- msgid "disabled"
138
- msgstr ""
139
-
140
- #: plugins/awaitingmoderation.php:43
141
- msgid "Awaiting Moderation is now %s"
142
- msgstr ""
143
-
144
- #: plugins/awaitingmoderation.php:45 plugins/badbehaviour.php:76
145
- #: plugins/domain-mapping.php:86 plugins/jetpack.php:42
146
- #: plugins/searchengine.php:80 plugins/wptouch.php:33
147
- msgid "Update"
148
- msgstr ""
149
-
150
- #: plugins/badbehaviour.php:47
151
- msgid "Bad Behaviour not found. Please check your install."
152
- msgstr ""
153
-
154
- #: plugins/badbehaviour.php:63
155
- msgid "Bad Behavior"
156
- msgstr ""
157
-
158
- #: plugins/badbehaviour.php:68
159
- msgid ""
160
- "(Only legacy caching supported, disabled compression and requires <a href="
161
- "\"http://www.bad-behavior.ioerror.us/\">Bad Behavior</a> in \"%s/plugins/bad-"
162
- "behavior/\") "
163
- msgstr ""
164
-
165
- #: plugins/badbehaviour.php:74
166
- msgid "Bad Behavior support is now %s"
167
- msgstr ""
168
-
169
- #: plugins/badbehaviour.php:83 wp-cache.php:1593 wp-cache.php:1598
170
- msgid "Warning!"
171
- msgstr ""
172
-
173
- #: plugins/domain-mapping.php:73
174
- msgid "Domain Mapping"
175
- msgstr ""
176
-
177
- #: plugins/domain-mapping.php:78
178
- msgid ""
179
- "Provides support for <a href=\"http://wordpress.org/extend/plugins/wordpress-"
180
- "mu-domain-mapping/\">Domain Mapping</a> plugin to map multiple domains to a "
181
- "blog."
182
- msgstr ""
183
-
184
- #: plugins/domain-mapping.php:84
185
- msgid "Domain Mapping support is now %s"
186
- msgstr ""
187
-
188
- #: plugins/domain-mapping.php:98
189
- msgid ""
190
- "Domain Mapping plugin detected! Please go to the Supercache plugins page and "
191
- "enable the domain mapping helper plugin."
192
- msgstr ""
193
-
194
- #: plugins/jetpack.php:25
195
- msgid "Jetpack Mobile Theme"
196
- msgstr ""
197
-
198
- #: plugins/jetpack.php:28
199
- msgid ""
200
- "Jetpack not found in %s. Install it and enable the mobile theme and this "
201
- "helper plugin to cache visits by mobile visitors."
202
- msgstr ""
203
-
204
- #: plugins/jetpack.php:34
205
- msgid ""
206
- "Provides support for the <a href=\"http://wordpress.org/extend/plugins/"
207
- "jetpack/\">Jetpack</a> mobile theme and plugin. PHP caching mode and mobile "
208
- "support will be enabled too."
209
- msgstr ""
210
-
211
- #: plugins/jetpack.php:40
212
- msgid "Jetpack Mobile Theme support is now %s"
213
- msgstr ""
214
-
215
- #: plugins/multisite.php:13
216
- msgid "Cached"
217
- msgstr ""
218
-
219
- #: plugins/multisite.php:31 wp-cache.php:1513
220
- msgid "Enable"
221
- msgstr ""
222
-
223
- #: plugins/multisite.php:33 plugins/searchengine.php:61 wp-cache.php:1513
224
- msgid "Disable"
225
- msgstr ""
226
-
227
- #: plugins/multisite.php:39
228
- msgid "Caching has been disabled on this blog on the Network Admin Sites page."
229
- msgstr ""
230
-
231
- #: plugins/searchengine.php:67
232
- msgid "No Adverts for Friends"
233
- msgstr ""
234
-
235
- #: plugins/searchengine.php:72
236
- msgid ""
237
- "Provides support for <a href=\"http://ocaoimh.ie/no-adverts-for-friends/"
238
- "\">No Adverts for Friends</a>."
239
- msgstr ""
240
-
241
- #: plugins/searchengine.php:78
242
- msgid "No Adverts for Friends support is now %s"
243
- msgstr ""
244
-
245
- #: plugins/wptouch.php:20
246
- msgid "WPTouch"
247
- msgstr ""
248
-
249
- #: plugins/wptouch.php:25
250
- msgid ""
251
- "Provides support for <a href=\"http://wordpress.org/extend/plugins/wptouch/"
252
- "\">WPTouch</a> mobile theme and plugin."
253
- msgstr ""
254
-
255
- #: plugins/wptouch.php:31
256
- msgid "WPTouch support is now %s"
257
- msgstr ""
258
-
259
- #: plugins/wptouch.php:45
260
- msgid ""
261
- "WPTouch plugin detected! Please go to the Supercache plugins page and enable "
262
- "the WPTouch helper plugin."
263
- msgstr ""
264
-
265
- #: wp-cache-phase2.php:1389
266
- msgid "Cache expiry cron job failed. Job will run again in 10 seconds."
267
- msgstr ""
268
-
269
- #: wp-cache-phase2.php:1393
270
- msgid ""
271
- "Cache expiry cron job took more than 30 seconds. You should probably run the "
272
- "garbage collector more often."
273
- msgstr ""
274
-
275
- #: wp-cache-phase2.php:1402
276
- msgid "[%1$s] WP Super Cache GC Report"
277
- msgstr ""
278
-
279
- #: wp-cache.php:111
280
- msgid ""
281
- "Please create %s /wp-cache-config.php from wp-super-cache/wp-cache-config-"
282
- "sample.php"
283
- msgstr ""
284
-
285
- #: wp-cache.php:203
286
- msgid "Warning! PHP Safe Mode Enabled!"
287
- msgstr ""
288
-
289
- #: wp-cache.php:204
290
- msgid ""
291
- "You may experience problems running this plugin because SAFE MODE is enabled."
292
- msgstr ""
293
-
294
- #: wp-cache.php:208
295
- msgid ""
296
- "Your server is set up to check the owner of PHP scripts before allowing them "
297
- "to read and write files."
298
- msgstr ""
299
-
300
- #: wp-cache.php:209
301
- msgid ""
302
- "You or an administrator may be able to make it work by changing the group "
303
- "owner of the plugin scripts to match that of the web server user. The group "
304
- "owner of the %s/cache/ directory must also be changed. See the <a href="
305
- "\"http://php.net/features.safe-mode\">safe mode manual page</a> for further "
306
- "details."
307
- msgstr ""
308
-
309
- #: wp-cache.php:211
310
- msgid ""
311
- "You or an administrator must disable this. See the <a href=\"http://php.net/"
312
- "features.safe-mode\">safe mode manual page</a> for further details. This "
313
- "cannot be disabled in a .htaccess file unfortunately. It must be done in the "
314
- "php.ini config file."
315
- msgstr ""
316
-
317
- #: wp-cache.php:217
318
- msgid "Permlink Structure Error"
319
- msgstr ""
320
-
321
- #: wp-cache.php:218
322
- msgid ""
323
- "A custom url or permalink structure is required for this plugin to work "
324
- "correctly. Please go to the <a href=\"options-permalink.php\">Permalinks "
325
- "Options Page</a> to configure your permalinks."
326
- msgstr ""
327
-
328
- #: wp-cache.php:230
329
- msgid "Warning! Your hostname \"%s\" resolves to %s"
330
- msgstr ""
331
-
332
- #: wp-cache.php:231
333
- msgid ""
334
- "Your server thinks your hostname resolves to %s. Some services such as "
335
- "garbage collection by this plugin, and WordPress scheduled posts may not "
336
- "operate correctly."
337
- msgstr ""
338
-
339
- #: wp-cache.php:232 wp-cache.php:246
340
- msgid ""
341
- "Please see entry 16 in the <a href=\"%s\">Troubleshooting section</a> of the "
342
- "readme.txt"
343
- msgstr ""
344
-
345
- #: wp-cache.php:245
346
- msgid ""
347
- "Unfortunately, WordPress cannot find the file wp-cron.php. This script is "
348
- "required for the correct operation of garbage collection by this plugin, "
349
- "WordPress scheduled posts as well as other critical activities."
350
- msgstr ""
351
-
352
- #: wp-cache.php:259
353
- msgid "Cannot continue... fix previous problems and retry."
354
- msgstr ""
355
-
356
- #: wp-cache.php:268
357
- msgid "Zlib Output Compression Enabled!"
358
- msgstr ""
359
-
360
- #: wp-cache.php:269
361
- msgid ""
362
- "PHP is compressing the data sent to the visitors of your site. Disabling "
363
- "this is recommended as the plugin caches the compressed output once instead "
364
- "of compressing the same page over and over again. Also see #21 in the "
365
- "Troubleshooting section. See <a href=\"http://php.net/manual/en/zlib."
366
- "configuration.php\">this page</a> for instructions on modifying your php.ini."
367
- msgstr ""
368
-
369
- #: wp-cache.php:273
370
- msgid "Mod rewrite may not be installed!"
371
- msgstr ""
372
-
373
- #: wp-cache.php:274
374
- msgid ""
375
- "It appears that mod_rewrite is not installed. Sometimes this check isn&#8217;"
376
- "t 100% reliable, especially if you are not using Apache. Please verify that "
377
- "the mod_rewrite module is loaded. It is required for serving Super Cache "
378
- "static files. You will still be able to use legacy or PHP modes."
379
- msgstr ""
380
-
381
- #: wp-cache.php:280
382
- msgid "Read Only Mode. Configuration cannot be changed."
383
- msgstr ""
384
-
385
- #: wp-cache.php:281
386
- msgid ""
387
- "The WP Super Cache configuration file is <code>%s/wp-cache-config.php</code> "
388
- "and cannot be modified. That file must be writeable by the web server to "
389
- "make any changes."
390
- msgstr ""
391
-
392
- #: wp-cache.php:282
393
- msgid ""
394
- "A simple way of doing that is by changing the permissions temporarily using "
395
- "the CHMOD command or through your ftp client. Make sure it&#8217;s globally "
396
- "writeable and it should be fine."
397
- msgstr ""
398
-
399
- #: wp-cache.php:283 wp-cache.php:332
400
- msgid ""
401
- "<a href=\"http://codex.wordpress.org/Changing_File_Permissions\">This page</"
402
- "a> explains how to change file permissions."
403
- msgstr ""
404
-
405
- #: wp-cache.php:284
406
- msgid "Writeable:"
407
- msgstr ""
408
-
409
- #: wp-cache.php:285
410
- msgid "Read-only:"
411
- msgstr ""
412
-
413
- #: wp-cache.php:303
414
- msgid "Warning! Garbage collection is not scheduled!"
415
- msgstr ""
416
-
417
- #: wp-cache.php:304
418
- msgid ""
419
- "Garbage collection by this plugin clears out expired and old cached pages on "
420
- "a regular basis. Use <a href=\"#expirytime\">this form</a> to enable it."
421
- msgstr ""
422
-
423
- #: wp-cache.php:309 wp-cache.php:337 wp-cache.php:409 wp-cache.php:2169
424
- msgid "Dismiss"
425
- msgstr ""
426
-
427
- #: wp-cache.php:330
428
- msgid "Warning! %s is writeable!"
429
- msgstr ""
430
-
431
- #: wp-cache.php:331
432
- msgid ""
433
- "You should change the permissions on %s and make it more restrictive. Use "
434
- "your ftp client, or the following command to fix things:"
435
- msgstr ""
436
-
437
- #: wp-cache.php:349
438
- msgid "Mobile rewrite rules detected"
439
- msgstr ""
440
-
441
- #: wp-cache.php:350
442
- msgid ""
443
- "For best performance you should enable \"Mobile device support\" or delete "
444
- "the mobile rewrite rules in your .htaccess. Look for the 2 lines with the "
445
- "text \"2.0\\ MMP|240x320\" and delete those."
446
- msgstr ""
447
-
448
- #: wp-cache.php:350
449
- msgid ""
450
- "This will have no affect on ordinary users but mobile users will see "
451
- "uncached pages."
452
- msgstr ""
453
-
454
- #: wp-cache.php:356 wp-cache.php:367
455
- msgid "Rewrite rules must be updated"
456
- msgstr ""
457
-
458
- #: wp-cache.php:357 wp-cache.php:368
459
- msgid "The rewrite rules required by this plugin have changed or are missing. "
460
- msgstr ""
461
-
462
- #: wp-cache.php:358
463
- msgid ""
464
- "Mobile support requires extra rules in your .htaccess file, or you can set "
465
- "the plugin to legacy mode. Here are your options (in order of difficulty):"
466
- msgstr ""
467
-
468
- #: wp-cache.php:359
469
- msgid "Set the plugin to legacy mode and enable mobile support."
470
- msgstr ""
471
-
472
- #: wp-cache.php:360 wp-cache.php:369
473
- msgid ""
474
- "Scroll down the Advanced Settings page and click the <strong>Update "
475
- "Mod_Rewrite Rules</strong> button."
476
- msgstr ""
477
-
478
- #: wp-cache.php:361
479
- msgid ""
480
- "Delete the plugin mod_rewrite rules in %s.htaccess enclosed by <code># BEGIN "
481
- "WPSuperCache</code> and <code># END WPSuperCache</code> and let the plugin "
482
- "regenerate them by reloading this page."
483
- msgstr ""
484
-
485
- #: wp-cache.php:362
486
- msgid ""
487
- "Add the rules yourself. Edit %s.htaccess and find the block of code enclosed "
488
- "by the lines <code># BEGIN WPSuperCache</code> and <code># END WPSuperCache</"
489
- "code>. There are two sections that look very similar. Just below the line "
490
- "<code>%%{HTTP:Cookie} !^.*(comment_author_|%s|wp-postpass_).*$</code> add "
491
- "these lines: (do it twice, once for each section)"
492
- msgstr ""
493
-
494
- #: wp-cache.php:375
495
- msgid "Required to serve compressed supercache files properly."
496
- msgstr ""
497
-
498
- #: wp-cache.php:375
499
- msgid ""
500
- "Required to set caching information on supercache pages. IE7 users will see "
501
- "old pages without this module."
502
- msgstr ""
503
-
504
- #: wp-cache.php:375
505
- msgid ""
506
- "Set the expiry date on supercached pages. Visitors may not see new pages "
507
- "when they refresh or leave comments without this module."
508
- msgstr ""
509
-
510
- #: wp-cache.php:382
511
- msgid "Missing Apache Modules"
512
- msgstr ""
513
-
514
- #: wp-cache.php:383
515
- msgid ""
516
- "The following Apache modules are missing. The plugin will work in legacy "
517
- "mode without them. In full Supercache mode, your visitors may see corrupted "
518
- "pages or out of date content however."
519
- msgstr ""
520
-
521
- #: wp-cache.php:403
522
- msgid ".htaccess file may need to be moved"
523
- msgstr ""
524
-
525
- #: wp-cache.php:404
526
- msgid ""
527
- "It appears you have WordPress installed in a sub directory as described <a "
528
- "href=\"http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory\">here</"
529
- "a>. Unfortunately, WordPress writes to the .htaccess in the install "
530
- "directory, not where your site is served from.<br />When you update the "
531
- "rewrite rules in this plugin you will have to copy the file to where your "
532
- "site is hosted. This will be fixed in the future."
533
- msgstr ""
534
-
535
- #: wp-cache.php:663
536
- msgid ""
537
- "<strong>Warning!</strong> You attempted to enable compression but <code>zlib."
538
- "output_compression</code> is enabled. See #21 in the Troubleshooting section "
539
- "of the readme file."
540
- msgstr ""
541
-
542
- #: wp-cache.php:763
543
- msgid "WP Super Cache Settings"
544
- msgstr ""
545
-
546
- #: wp-cache.php:777
547
- msgid ""
548
- "Notice: <em>Mod_rewrite or Legacy caching enabled</em>. Showing Advanced "
549
- "Settings Page by default."
550
- msgstr ""
551
-
552
- #: wp-cache.php:788
553
- msgid ""
554
- "Configuration file changed, some values might be wrong. Load the page again "
555
- "from the \"Settings\" menu to reset them."
556
- msgstr ""
557
-
558
- #: wp-cache.php:820
559
- msgid "Caching must be enabled to use this feature"
560
- msgstr ""
561
-
562
- #: wp-cache.php:838 wp-cache.php:978
563
- msgid "Cancel Cache Preload"
564
- msgstr ""
565
-
566
- #: wp-cache.php:846
567
- msgid ""
568
- "Scheduled preloading of cache almost cancelled. It may take up to a minute "
569
- "for it to cancel completely."
570
- msgstr ""
571
-
572
- #: wp-cache.php:857
573
- msgid "Scheduled preloading of cache cancelled."
574
- msgstr ""
575
-
576
- #: wp-cache.php:889 wp-cache.php:976
577
- msgid "Preload Cache Now"
578
- msgstr ""
579
-
580
- #: wp-cache.php:893
581
- msgid "Scheduled preloading of cache in 10 seconds."
582
- msgstr ""
583
-
584
- #: wp-cache.php:898
585
- msgid "Scheduled preloading of cache in %d minutes"
586
- msgstr ""
587
-
588
- #: wp-cache.php:902
589
- msgid ""
590
- "This will cache every published post and page on your site. It will create "
591
- "supercache static files so unknown visitors (including bots) will hit a "
592
- "cached page. This will probably help your Google ranking as they are using "
593
- "speed as a metric when judging websites now."
594
- msgstr ""
595
-
596
- #: wp-cache.php:903
597
- msgid ""
598
- "Preloading creates lots of files however. Caching is done from the newest "
599
- "post to the oldest so please consider only caching the newest if you have "
600
- "lots (10,000+) of posts. This is especially important on shared hosting."
601
- msgstr ""
602
-
603
- #: wp-cache.php:904
604
- msgid ""
605
- "In &#8217;Preload Mode&#8217; regular garbage collection will only clean out "
606
- "old legacy files for known users, not the preloaded supercache files. This "
607
- "is a recommended setting when the cache is preloaded."
608
- msgstr ""
609
-
610
- #: wp-cache.php:908
611
- msgid ""
612
- "Refresh preloaded cache files every %s minutes. (0 to disable, minimum %d "
613
- "minutes.)"
614
- msgstr ""
615
-
616
- #: wp-cache.php:921
617
- msgid "all"
618
- msgstr ""
619
-
620
- #: wp-cache.php:934
621
- msgid "Preload %s posts."
622
- msgstr ""
623
-
624
- #: wp-cache.php:941
625
- msgid ""
626
- "Preload mode (garbage collection only on legacy cache files. Recommended.)"
627
- msgstr ""
628
-
629
- #: wp-cache.php:944
630
- msgid "Preload tags, categories and other taxonomies."
631
- msgstr ""
632
-
633
- #: wp-cache.php:947
634
- msgid "Send me status emails when files are refreshed."
635
- msgstr ""
636
-
637
- #: wp-cache.php:952
638
- msgid "Many emails, 2 emails per 100 posts."
639
- msgstr ""
640
-
641
- #: wp-cache.php:955
642
- msgid "Medium, 1 email per 100 posts."
643
- msgstr ""
644
-
645
- #: wp-cache.php:958
646
- msgid "Less emails, 1 at the start and 1 at the end of preloading all posts."
647
- msgstr ""
648
-
649
- #: wp-cache.php:962
650
- msgid "Refresh of cache in %d hours %d minutes and %d seconds."
651
- msgstr ""
652
-
653
- #: wp-cache.php:963
654
- msgid "Full refresh of cache in %d hours %d minutes and %d seconds."
655
- msgstr ""
656
-
657
- #: wp-cache.php:969
658
- msgid "Currently caching from post %d to %d."
659
- msgstr ""
660
-
661
- #: wp-cache.php:973
662
- msgid "<strong>Page last cached:</strong> %s"
663
- msgstr ""
664
-
665
- #: wp-cache.php:976
666
- msgid "Update Settings"
667
- msgstr ""
668
-
669
- #: wp-cache.php:984
670
- msgid ""
671
- "Preloading of cache disabled. Please disable legacy page caching or talk to "
672
- "your host administrator."
673
- msgstr ""
674
-
675
- #: wp-cache.php:1001 wp-cache.php:1146
676
- msgid "Caching"
677
- msgstr ""
678
-
679
- #: wp-cache.php:1005 wp-cache.php:1149
680
- msgid "Caching On"
681
- msgstr ""
682
-
683
- #: wp-cache.php:1005 wp-cache.php:1008 wp-cache.php:1024 wp-cache.php:1029
684
- #: wp-cache.php:1030 wp-cache.php:1037 wp-cache.php:1064 wp-cache.php:1149
685
- msgid "Recommended"
686
- msgstr ""
687
-
688
- #: wp-cache.php:1006 wp-cache.php:1150
689
- msgid "Caching Off"
690
- msgstr ""
691
-
692
- #: wp-cache.php:1007
693
- msgid "Use mod_rewrite to serve cache files."
694
- msgstr ""
695
-
696
- #: wp-cache.php:1008
697
- msgid "Use PHP to serve cache files."
698
- msgstr ""
699
-
700
- #: wp-cache.php:1009
701
- msgid "Legacy page caching."
702
- msgstr ""
703
-
704
- #: wp-cache.php:1010
705
- msgid ""
706
- "Mod_rewrite is fastest, PHP is almost as fast and easier to get working, "
707
- "while legacy caching is slower again, but more flexible and also easy to get "
708
- "working. New users should use PHP caching."
709
- msgstr ""
710
-
711
- #: wp-cache.php:1016
712
- msgid "Miscellaneous"
713
- msgstr ""
714
-
715
- #: wp-cache.php:1022
716
- msgid "Warning! Compression is disabled as gzencode() function was not found."
717
- msgstr ""
718
-
719
- #: wp-cache.php:1024
720
- msgid "Compress pages so they&#8217;re served more quickly to visitors."
721
- msgstr ""
722
-
723
- #: wp-cache.php:1025
724
- msgid ""
725
- "Compression is disabled by default because some hosts have problems with "
726
- "compressed files. Switching it on and off clears the cache."
727
- msgstr ""
728
-
729
- #: wp-cache.php:1029
730
- msgid ""
731
- "Don&#8217;t cache pages for <acronym title=\"Logged in users and those that "
732
- "comment\">known users</acronym>."
733
- msgstr ""
734
-
735
- #: wp-cache.php:1030
736
- msgid ""
737
- "Cache rebuild. Serve a supercache file to anonymous users while a new file "
738
- "is being generated."
739
- msgstr ""
740
-
741
- #: wp-cache.php:1037
742
- msgid ""
743
- "304 Not Modified browser caching. Indicate when a page has not been modified "
744
- "since it was last requested."
745
- msgstr ""
746
-
747
- #: wp-cache.php:1040
748
- msgid ""
749
- "Warning! 304 browser caching is only supported when mod_rewrite caching is "
750
- "not used."
751
- msgstr ""
752
-
753
- #: wp-cache.php:1042
754
- msgid ""
755
- "304 support is disabled by default because some hosts have had problems with "
756
- "the headers used in the past."
757
- msgstr ""
758
-
759
- #: wp-cache.php:1045
760
- msgid "Don&#8217;t cache pages with GET parameters. (?x=y at the end of a url)"
761
- msgstr ""
762
-
763
- #: wp-cache.php:1046
764
- msgid ""
765
- "Make known users anonymous so they&#8217;re served supercached static files."
766
- msgstr ""
767
-
768
- #: wp-cache.php:1047
769
- msgid ""
770
- "Proudly tell the world your server is <a href=\"%s\">Stephen Fry proof</a>! "
771
- "(places a message in your blog&#8217;s footer)"
772
- msgstr ""
773
-
774
- #: wp-cache.php:1053 wp-cache.php:1350 wp-cache.php:1986
775
- msgid "Advanced"
776
- msgstr ""
777
-
778
- #: wp-cache.php:1057
779
- msgid ""
780
- "Enable dynamic caching. Requires PHP or legacy caching. (See <a href="
781
- "\"http://wordpress.org/plugins/wp-super-cache/faq/\">FAQ</a> or wp-super-"
782
- "cache/plugins/dynamic-cache-test.php for example code.)"
783
- msgstr ""
784
-
785
- #: wp-cache.php:1058
786
- msgid ""
787
- "Mobile device support. (External plugin or theme required. See the <a href="
788
- "\"http://wordpress.org/plugins/wp-super-cache/faq/\">FAQ</a> for further "
789
- "details.)"
790
- msgstr ""
791
-
792
- #: wp-cache.php:1060
793
- msgid "Mobile Browsers"
794
- msgstr ""
795
-
796
- #: wp-cache.php:1060
797
- msgid "Mobile Prefixes"
798
- msgstr ""
799
-
800
- #: wp-cache.php:1062
801
- msgid ""
802
- "Remove UTF8/blog charset support from .htaccess file. Only necessary if you "
803
- "see odd characters or punctuation looks incorrect. Requires rewrite rules "
804
- "update."
805
- msgstr ""
806
-
807
- #: wp-cache.php:1063
808
- msgid "Clear all cache files when a post or page is published or updated."
809
- msgstr ""
810
-
811
- #: wp-cache.php:1064
812
- msgid "Extra homepage checks. (Very occasionally stops homepage caching)"
813
- msgstr ""
814
-
815
- #: wp-cache.php:1065
816
- msgid "Only refresh current page when comments made."
817
- msgstr ""
818
-
819
- #: wp-cache.php:1066
820
- msgid "List the newest cached pages on this page."
821
- msgstr ""
822
-
823
- #: wp-cache.php:1068
824
- msgid ""
825
- "Coarse file locking. You do not need this as it will slow down your website."
826
- msgstr ""
827
-
828
- #: wp-cache.php:1070
829
- msgid ""
830
- "Late init. Display cached files after WordPress has loaded. Most useful in "
831
- "legacy mode."
832
- msgstr ""
833
-
834
- #: wp-cache.php:1072
835
- msgid "Use object cache to store cached files."
836
- msgstr ""
837
-
838
- #: wp-cache.php:1072
839
- msgid "(Experimental)"
840
- msgstr ""
841
-
842
- #: wp-cache.php:1074
843
- msgid "<strong>DO NOT CACHE PAGE</strong> secret key: <a href=\"%s\">%s</a>"
844
- msgstr ""
845
-
846
- #: wp-cache.php:1079
847
- msgid "Cache Location"
848
- msgstr ""
849
-
850
- #: wp-cache.php:1084
851
- msgid ""
852
- "Change the location of your cache files. The default is WP_CONTENT_DIR . /"
853
- "cache/ which translates to %s."
854
- msgstr ""
855
-
856
- #: wp-cache.php:1085
857
- msgid "You must give the full path to the directory."
858
- msgstr ""
859
-
860
- #: wp-cache.php:1086
861
- msgid ""
862
- "If the directory does not exist, it will be created. Please make sure your "
863
- "web server user has write access to the parent directory. The parent "
864
- "directory must exist."
865
- msgstr ""
866
-
867
- #: wp-cache.php:1087
868
- msgid ""
869
- "If the new cache directory does not exist, it will be created and the "
870
- "contents of the old cache directory will be moved there. Otherwise, the old "
871
- "cache directory will be left where it is."
872
- msgstr ""
873
-
874
- #: wp-cache.php:1088
875
- msgid ""
876
- "Submit a blank entry to set it to the default directory, WP_CONTENT_DIR . /"
877
- "cache/."
878
- msgstr ""
879
-
880
- #: wp-cache.php:1090
881
- msgid ""
882
- "The plugin detected a bare directory index in your cache directory, which "
883
- "would let visitors see your cache files directly and might expose private "
884
- "posts."
885
- msgstr ""
886
-
887
- #: wp-cache.php:1092
888
- msgid ""
889
- "You are using mod_rewrite to serve cache files so the plugin has added "
890
- "<q>Options -Indexes</q> to the .htaccess file in the cache directory to "
891
- "disable indexes. However, if that does not work, you should contact your "
892
- "system administrator or support and ask for them to be disabled, or use PHP "
893
- "mode and move the cache outside of the web root."
894
- msgstr ""
895
-
896
- #: wp-cache.php:1094
897
- msgid ""
898
- "index.html files have been added in key directories, but unless directory "
899
- "indexes are disabled, it is probably better to store the cache files outside "
900
- "of the web root of %s"
901
- msgstr ""
902
-
903
- #: wp-cache.php:1101
904
- msgid ""
905
- "Since you are using mod_rewrite to serve cache files, you must choose a "
906
- "directory in your web root which is <q>%s</q> and update the mod_rewrite "
907
- "rules in the .htaccess file."
908
- msgstr ""
909
-
910
- #: wp-cache.php:1109
911
- msgid "Note:"
912
- msgstr ""
913
-
914
- #: wp-cache.php:1111
915
- msgid ""
916
- "Uninstall this plugin on the plugins page. It will automatically clean up "
917
- "after itself. If manual intervention is required, then simple instructions "
918
- "are provided."
919
- msgstr ""
920
-
921
- #: wp-cache.php:1112
922
- msgid ""
923
- "If uninstalling this plugin, make sure the directory <em>%s</em> is "
924
- "writeable by the webserver so the files <em>advanced-cache.php</em> and "
925
- "<em>cache-config.php</em> can be deleted automatically. (Making sure those "
926
- "files are writeable is probably a good idea!)"
927
- msgstr ""
928
-
929
- #: wp-cache.php:1113
930
- msgid ""
931
- "Please see the <a href=\"%1$s/wp-super-cache/readme.txt\">readme.txt</a> for "
932
- "instructions on uninstalling this script. Look for the heading, \"How to "
933
- "uninstall WP Super Cache\"."
934
- msgstr ""
935
-
936
- #: wp-cache.php:1114
937
- msgid ""
938
- "Need help? Check the <a href=\"%1$s\">Super Cache readme file</a>. It "
939
- "includes installation documentation, a FAQ and Troubleshooting tips. The <a "
940
- "href=\"%2$s\">support forum</a> is also available. Your question may already "
941
- "have been answered."
942
- msgstr ""
943
-
944
- #: wp-cache.php:1117 wp-cache.php:1162
945
- msgid "Update Status"
946
- msgstr ""
947
-
948
- #: wp-cache.php:1124
949
- msgid "Accepted Filenames &amp; Rejected URIs"
950
- msgstr ""
951
-
952
- #: wp-cache.php:1159
953
- msgid ""
954
- "Notice: PHP caching enabled but Supercache mod_rewrite rules detected. "
955
- "Cached files will be served using those rules. If your site is working ok, "
956
- "please ignore this message. Otherwise, you can edit the .htaccess file in "
957
- "the root of your install and remove the SuperCache rules."
958
- msgstr ""
959
-
960
- #: wp-cache.php:1164
961
- msgid "Cache Tester"
962
- msgstr ""
963
-
964
- #: wp-cache.php:1165
965
- msgid "Test your cached website by clicking the test button below."
966
- msgstr ""
967
-
968
- #: wp-cache.php:1171
969
- msgid "Fetching %s to prime cache: "
970
- msgstr ""
971
-
972
- #: wp-cache.php:1173 wp-cache.php:1182 wp-cache.php:1194
973
- msgid "OK"
974
- msgstr ""
975
-
976
- #: wp-cache.php:1176
977
- msgid "Fetching first copy of %s: "
978
- msgstr ""
979
-
980
- #: wp-cache.php:1185 wp-cache.php:1196
981
- msgid "FAILED"
982
- msgstr ""
983
-
984
- #: wp-cache.php:1188
985
- msgid "Fetching second copy of %s: "
986
- msgstr ""
987
-
988
- #: wp-cache.php:1200
989
- msgid "One or more page requests failed:"
990
- msgstr ""
991
-
992
- #: wp-cache.php:1219 wp-cache.php:1220
993
- msgid "Page %d: %d (%s)"
994
- msgstr ""
995
-
996
- #: wp-cache.php:1226
997
- msgid "Page 1: %s"
998
- msgstr ""
999
-
1000
- #: wp-cache.php:1227
1001
- msgid "Page 2: %s"
1002
- msgstr ""
1003
-
1004
- #: wp-cache.php:1228
1005
- msgid "The timestamps on both pages match!"
1006
- msgstr ""
1007
-
1008
- #: wp-cache.php:1230
1009
- msgid "The pages do not match! Timestamps differ or were not found!"
1010
- msgstr ""
1011
-
1012
- #: wp-cache.php:1231
1013
- msgid "Things you can do:"
1014
- msgstr ""
1015
-
1016
- #: wp-cache.php:1232
1017
- msgid ""
1018
- "Load your homepage in a logged out browser, check the timestamp at the end "
1019
- "of the html source. Load the page again and compare the timestamp. Caching "
1020
- "is working if the timestamps match."
1021
- msgstr ""
1022
-
1023
- #: wp-cache.php:1233
1024
- msgid ""
1025
- "Enable logging on the Debug page here. That should help you track down the "
1026
- "problem."
1027
- msgstr ""
1028
-
1029
- #: wp-cache.php:1234
1030
- msgid ""
1031
- "You should check Page 1 and Page 2 above for errors. Your local server "
1032
- "configuration may not allow your website to access itself."
1033
- msgstr ""
1034
-
1035
- #: wp-cache.php:1242
1036
- msgid "Send non-secure (non https) request for homepage"
1037
- msgstr ""
1038
-
1039
- #: wp-cache.php:1243
1040
- msgid "Test Cache"
1041
- msgstr ""
1042
-
1043
- #: wp-cache.php:1247
1044
- msgid "Delete Cached Pages"
1045
- msgstr ""
1046
-
1047
- #: wp-cache.php:1248
1048
- msgid ""
1049
- "Cached pages are stored on your server as html and PHP files. If you need to "
1050
- "delete them, use the button below."
1051
- msgstr ""
1052
-
1053
- #: wp-cache.php:1251 wp-cache.php:2691 wp-cache.php:2710 wp-cache.php:2901
1054
- #: wp-cache.php:3440
1055
- msgid "Delete Cache"
1056
- msgstr ""
1057
-
1058
- #: wp-cache.php:1258 wp-cache.php:2697
1059
- msgid "Delete Cache On All Blogs"
1060
- msgstr ""
1061
-
1062
- #: wp-cache.php:1263
1063
- msgid "Recommended Links and Plugins"
1064
- msgstr ""
1065
-
1066
- #: wp-cache.php:1264
1067
- msgid ""
1068
- "Caching is only one part of making a website faster. Here are some other "
1069
- "plugins that will help:"
1070
- msgstr ""
1071
-
1072
- #: wp-cache.php:1265
1073
- msgid ""
1074
- "<a href=\"%s\">Yahoo! Yslow</a> is an extension for the Firefox add-on "
1075
- "Firebug. It analyzes web pages and suggests ways to improve their "
1076
- "performance based on a set of rules for high performance web pages. Also try "
1077
- "the performance tools online at <a href=\"%s\">GTMetrix</a>."
1078
- msgstr ""
1079
-
1080
- #: wp-cache.php:1266
1081
- msgid ""
1082
- "<a href=\"%s\">Use Google Libraries</a> allows you to load some commonly "
1083
- "used Javascript libraries from Google webservers. Ironically, it may reduce "
1084
- "your Yslow score."
1085
- msgstr ""
1086
-
1087
- #: wp-cache.php:1267
1088
- msgid ""
1089
- "<strong>Advanced users only:</strong> Install an object cache. Choose from "
1090
- "<a href=\"%s\">Memcached</a>, <a href=\"%s\">XCache</a>, <a href=\"%s"
1091
- "\">eAcccelerator</a> and others."
1092
- msgstr ""
1093
-
1094
- #: wp-cache.php:1268
1095
- msgid ""
1096
- "<a href=\"%s\">Cron View</a> is a useful plugin to use when trying to debug "
1097
- "garbage collection and preload problems."
1098
- msgstr ""
1099
-
1100
- #: wp-cache.php:1279
1101
- msgid "Need Help?"
1102
- msgstr ""
1103
-
1104
- #: wp-cache.php:1281
1105
- msgid ""
1106
- "Use the debug system in the Debug tab above. It will tell you what the "
1107
- "plugin is doing."
1108
- msgstr ""
1109
-
1110
- #: wp-cache.php:1282
1111
- msgid "<a href=\"%1$s\">Installation Help</a>"
1112
- msgstr ""
1113
-
1114
- #: wp-cache.php:1283
1115
- msgid "<a href=\"%1$s\">Frequently Asked Questions</a>"
1116
- msgstr ""
1117
-
1118
- #: wp-cache.php:1284
1119
- msgid "<a href=\"%1$s\">Support Forum</a>"
1120
- msgstr ""
1121
-
1122
- #: wp-cache.php:1285
1123
- msgid "<a href=\"%1$s\">Development Version</a>"
1124
- msgstr ""
1125
-
1126
- #: wp-cache.php:1287
1127
- msgid "Rate This Plugin!"
1128
- msgstr ""
1129
-
1130
- #: wp-cache.php:1288
1131
- msgid ""
1132
- "Please <a href=\"%s\">rate</a> this plugin and tell me if it works for you "
1133
- "or not. It really helps development."
1134
- msgstr ""
1135
-
1136
- #: wp-cache.php:1297
1137
- msgid "Cached pages since %1$s : <strong>%2$s</strong>"
1138
- msgstr ""
1139
-
1140
- #: wp-cache.php:1298
1141
- msgid "Newest Cached Pages:"
1142
- msgstr ""
1143
-
1144
- #: wp-cache.php:1302
1145
- msgid "Cached %s seconds ago"
1146
- msgstr ""
1147
-
1148
- #: wp-cache.php:1305
1149
- msgid "(may not always be accurate on busy sites)"
1150
- msgstr ""
1151
-
1152
- #: wp-cache.php:1321
1153
- msgid ""
1154
- "Cache plugins are PHP scripts that live in a plugins folder inside the wp-"
1155
- "super-cache folder. They are loaded when Supercache loads, much sooner than "
1156
- "regular WordPress plugins."
1157
- msgstr ""
1158
-
1159
- #: wp-cache.php:1322
1160
- msgid ""
1161
- "This is strictly an advanced feature only and knowledge of both PHP and "
1162
- "WordPress actions is required to create them."
1163
- msgstr ""
1164
-
1165
- #: wp-cache.php:1323
1166
- msgid ""
1167
- "<strong>Warning</strong>! Due to the way WordPress upgrades plugins, the "
1168
- "plugins you upload to wp-super-cache/plugins/ will be deleted when you "
1169
- "upgrade WP Super Cache. You can avoid this by loading the plugins from "
1170
- "elsewhere. Set <strong>$wp_cache_plugins_dir</strong> to the new location in "
1171
- "wp-config.php and WP Super Cache will look there instead.<br />More info "
1172
- "available in the <a href=\"http://ocaoimh.ie/wp-super-cache-developers/"
1173
- "\">developer documentation</a>."
1174
- msgstr ""
1175
-
1176
- #: wp-cache.php:1333
1177
- msgid "Available Plugins"
1178
- msgstr ""
1179
-
1180
- #: wp-cache.php:1350
1181
- msgid "Easy"
1182
- msgstr ""
1183
-
1184
- #: wp-cache.php:1350
1185
- msgid "CDN"
1186
- msgstr ""
1187
-
1188
- #: wp-cache.php:1350
1189
- msgid "Contents"
1190
- msgstr ""
1191
-
1192
- #: wp-cache.php:1350
1193
- msgid "Preload"
1194
- msgstr ""
1195
-
1196
- #: wp-cache.php:1350
1197
- msgid "Plugins"
1198
- msgstr ""
1199
-
1200
- #: wp-cache.php:1350
1201
- msgid "Debug"
1202
- msgstr ""
1203
-
1204
- #: wp-cache.php:1388
1205
- msgid ""
1206
- "Notice: WP Super Cache mod_rewrite rule checks disabled unless running on <a "
1207
- "href=\"%s\">the main site</a> of this network."
1208
- msgstr ""
1209
-
1210
- #: wp-cache.php:1397
1211
- msgid "Mod Rewrite Rules"
1212
- msgstr ""
1213
-
1214
- #: wp-cache.php:1403
1215
- msgid "WordPress MU Detected"
1216
- msgstr ""
1217
-
1218
- #: wp-cache.php:1403
1219
- msgid ""
1220
- "Unfortunately, the rewrite rules cannot be updated automatically when "
1221
- "running WordPress MU. Please open your .htaccess and add the following "
1222
- "mod_rewrite rules above any other rules in that file."
1223
- msgstr ""
1224
-
1225
- #: wp-cache.php:1405
1226
- msgid "Mod Rewrite rules cannot be updated!"
1227
- msgstr ""
1228
-
1229
- #: wp-cache.php:1406
1230
- msgid ""
1231
- "You must have <strong>BEGIN</strong> and <strong>END</strong> markers in %s."
1232
- "htaccess for the auto update to work. They look like this and surround the "
1233
- "main WordPress mod_rewrite rules:"
1234
- msgstr ""
1235
-
1236
- #: wp-cache.php:1408
1237
- msgid "Refresh this page when you have updated your .htaccess file."
1238
- msgstr ""
1239
-
1240
- #: wp-cache.php:1412
1241
- msgid "Thank you for upgrading."
1242
- msgstr ""
1243
-
1244
- #: wp-cache.php:1412
1245
- msgid ""
1246
- "The mod_rewrite rules changed since you last installed this plugin. "
1247
- "Unfortunately, you must remove the old supercache rules before the new ones "
1248
- "are updated. Refresh this page when you have edited your .htaccess file. If "
1249
- "you wish to manually upgrade, change the following line: %1$s so it looks "
1250
- "like this: %2$s The only changes are \"HTTP_COOKIE\" becomes \"HTTP:Cookie\" "
1251
- "and \"wordpressuser\" becomes \"wordpress\". This is a WordPress 2.5 change "
1252
- "but it&#8217;s backwards compatible with older versions if you&#8217;re "
1253
- "brave enough to use them."
1254
- msgstr ""
1255
-
1256
- #: wp-cache.php:1416
1257
- msgid "Trailing slash check required."
1258
- msgstr ""
1259
-
1260
- #: wp-cache.php:1416
1261
- msgid ""
1262
- "It looks like your blog has URLs that end with a \"/\". Unfortunately since "
1263
- "you installed this plugin a duplicate content bug has been found where URLs "
1264
- "not ending in a \"/\" end serve the same content as those with the \"/\" and "
1265
- "do not redirect to the proper URL. To fix, you must edit your .htaccess file "
1266
- "and add these two rules to the two groups of Super Cache rules:"
1267
- msgstr ""
1268
-
1269
- #: wp-cache.php:1418
1270
- msgid ""
1271
- "You can see where the rules go and examine the complete rules by clicking "
1272
- "the \"View mod_rewrite rules\" link below."
1273
- msgstr ""
1274
-
1275
- #: wp-cache.php:1432
1276
- msgid "Mod Rewrite rules updated!"
1277
- msgstr ""
1278
-
1279
- #: wp-cache.php:1433
1280
- msgid ""
1281
- "%s.htaccess has been updated with the necessary mod_rewrite rules. Please "
1282
- "verify they are correct. They should look like this:"
1283
- msgstr ""
1284
-
1285
- #: wp-cache.php:1435
1286
- msgid "Mod Rewrite rules must be updated!"
1287
- msgstr ""
1288
-
1289
- #: wp-cache.php:1436
1290
- msgid ""
1291
- "Your %s.htaccess is not writable by the webserver and must be updated with "
1292
- "the necessary mod_rewrite rules. The new rules go above the regular "
1293
- "WordPress rules as shown in the code below:"
1294
- msgstr ""
1295
-
1296
- #: wp-cache.php:1441
1297
- msgid ""
1298
- "WP Super Cache mod rewrite rules were detected in your %s.htaccess file.<br /"
1299
- "> Click the following link to see the lines added to that file. If you have "
1300
- "upgraded the plugin, make sure these rules match."
1301
- msgstr ""
1302
-
1303
- #: wp-cache.php:1444
1304
- msgid ""
1305
- "A difference between the rules in your .htaccess file and the plugin rewrite "
1306
- "rules has been found. This could be simple whitespace differences, but you "
1307
- "should compare the rules in the file with those below as soon as possible. "
1308
- "Click the &#8217;Update Mod_Rewrite Rules&#8217; button to update the rules."
1309
- msgstr ""
1310
-
1311
- #: wp-cache.php:1446
1312
- msgid "View Mod_Rewrite Rules"
1313
- msgstr ""
1314
-
1315
- #: wp-cache.php:1452 wp-cache.php:3019
1316
- msgid "Rules must be added to %s too:"
1317
- msgstr ""
1318
-
1319
- #: wp-cache.php:1458
1320
- msgid "Gzip encoding rules in %s.htaccess created."
1321
- msgstr ""
1322
-
1323
- #: wp-cache.php:1464
1324
- msgid "Fix Configuration"
1325
- msgstr ""
1326
-
1327
- #: wp-cache.php:1467
1328
- msgid "Restore Default Configuration"
1329
- msgstr ""
1330
-
1331
- #: wp-cache.php:1475
1332
- msgid ""
1333
- "Comment moderation is enabled. Your comment may take some time to appear."
1334
- msgstr ""
1335
-
1336
- #: wp-cache.php:1500
1337
- msgid "Lock Down:"
1338
- msgstr ""
1339
-
1340
- #: wp-cache.php:1501
1341
- msgid ""
1342
- "Prepare your server for an expected spike in traffic by enabling the lock "
1343
- "down. When this is enabled, new comments on a post will not refresh the "
1344
- "cached static files."
1345
- msgstr ""
1346
-
1347
- #: wp-cache.php:1502
1348
- msgid ""
1349
- "Developers: Make your plugin lock down compatible by checking the "
1350
- "\"WPLOCKDOWN\" constant. The following code will make sure your plugin "
1351
- "respects the WPLOCKDOWN setting."
1352
- msgstr ""
1353
-
1354
- #: wp-cache.php:1504
1355
- msgid "Sorry. My blog is locked down. Updates will appear shortly"
1356
- msgstr ""
1357
-
1358
- #: wp-cache.php:1508
1359
- msgid ""
1360
- "WordPress is locked down. Super Cache static files will not be deleted when "
1361
- "new comments are made."
1362
- msgstr ""
1363
-
1364
- #: wp-cache.php:1510
1365
- msgid ""
1366
- "WordPress is not locked down. New comments will refresh Super Cache static "
1367
- "files as normal."
1368
- msgstr ""
1369
-
1370
- #: wp-cache.php:1516
1371
- msgid "Lock Down"
1372
- msgstr ""
1373
-
1374
- #: wp-cache.php:1524
1375
- msgid "Directly Cached Files"
1376
- msgstr ""
1377
-
1378
- #: wp-cache.php:1576
1379
- msgid "Cannot delete directory"
1380
- msgstr ""
1381
-
1382
- #: wp-cache.php:1585
1383
- msgid "%s removed!"
1384
- msgstr ""
1385
-
1386
- #: wp-cache.php:1593
1387
- msgid ""
1388
- "You must make %s writable to enable this feature. As this is a security "
1389
- "risk, please make it read-only after your page is generated."
1390
- msgstr ""
1391
-
1392
- #: wp-cache.php:1598
1393
- msgid ""
1394
- "%s is writable. Please make it readonly after your page is generated as this "
1395
- "is a security risk."
1396
- msgstr ""
1397
-
1398
- #: wp-cache.php:1613
1399
- msgid "Existing direct page"
1400
- msgstr ""
1401
-
1402
- #: wp-cache.php:1613
1403
- msgid "Delete cached file"
1404
- msgstr ""
1405
-
1406
- #: wp-cache.php:1618
1407
- msgid "Add direct page:"
1408
- msgstr ""
1409
-
1410
- #: wp-cache.php:1620
1411
- msgid ""
1412
- "Directly cached files are files created directly off %s where your blog "
1413
- "lives. This feature is only useful if you are expecting a major Digg or "
1414
- "Slashdot level of traffic to one post or page."
1415
- msgstr ""
1416
-
1417
- #: wp-cache.php:1622
1418
- msgid ""
1419
- "For example: to cache <em>%1$sabout/</em>, you would enter %1$sabout/ or /"
1420
- "about/. The cached file will be generated the next time an anonymous user "
1421
- "visits that page."
1422
- msgstr ""
1423
-
1424
- #: wp-cache.php:1623
1425
- msgid ""
1426
- "Make the textbox blank to remove it from the list of direct pages and delete "
1427
- "the cached file."
1428
- msgstr ""
1429
-
1430
- #: wp-cache.php:1628
1431
- msgid "Update Direct Pages"
1432
- msgstr ""
1433
-
1434
- #: wp-cache.php:1656
1435
- msgctxt "timezone date format"
1436
- msgid "Y-m-d G:i:s"
1437
- msgstr ""
1438
-
1439
- #: wp-cache.php:1728
1440
- msgid "Expiry Time &amp; Garbage Collection"
1441
- msgstr ""
1442
-
1443
- #: wp-cache.php:1730
1444
- msgid ""
1445
- "<abbr title=\"Coordinated Universal Time\">UTC</abbr> time is <code>%s</code>"
1446
- msgstr ""
1447
-
1448
- #: wp-cache.php:1733
1449
- msgid "Local time is <code>%1$s</code>"
1450
- msgstr ""
1451
-
1452
- #: wp-cache.php:1737
1453
- msgid "Next scheduled garbage collection will be at <strong>%s UTC</strong>"
1454
- msgstr ""
1455
-
1456
- #: wp-cache.php:1741
1457
- msgid ""
1458
- "Warning! <strong>PRELOAD MODE</strong> activated. Supercache files will not "
1459
- "be deleted regardless of age."
1460
- msgstr ""
1461
-
1462
- #: wp-cache.php:1759
1463
- msgid "Cache Timeout"
1464
- msgstr ""
1465
-
1466
- #: wp-cache.php:1760 wp-cache.php:1763
1467
- msgid "seconds"
1468
- msgstr ""
1469
-
1470
- #: wp-cache.php:1761
1471
- msgid ""
1472
- "How long should cached pages remain fresh? Set to 0 to disable garbage "
1473
- "collection. A good starting point is 3600 seconds."
1474
- msgstr ""
1475
-
1476
- #: wp-cache.php:1762
1477
- msgid "Scheduler"
1478
- msgstr ""
1479
-
1480
- #: wp-cache.php:1762
1481
- msgid "Timer:"
1482
- msgstr ""
1483
-
1484
- #: wp-cache.php:1763
1485
- msgid "Check for stale cached files every <em>interval</em> seconds."
1486
- msgstr ""
1487
-
1488
- #: wp-cache.php:1764
1489
- msgid "Clock:"
1490
- msgstr ""
1491
-
1492
- #: wp-cache.php:1765
1493
- msgid "HH:MM"
1494
- msgstr ""
1495
-
1496
- #: wp-cache.php:1765
1497
- msgid ""
1498
- "Check for stale cached files at this time <strong>(UTC)</strong> or starting "
1499
- "at this time every <em>interval</em> below."
1500
- msgstr ""
1501
-
1502
- #: wp-cache.php:1767
1503
- msgid "Interval:"
1504
- msgstr ""
1505
-
1506
- #: wp-cache.php:1773
1507
- msgid "Notification Emails"
1508
- msgstr ""
1509
-
1510
- #: wp-cache.php:1774
1511
- msgid "Email me when the garbage collection runs."
1512
- msgstr ""
1513
-
1514
- #: wp-cache.php:1776
1515
- msgid "Garbage Collection"
1516
- msgstr ""
1517
-
1518
- #: wp-cache.php:1777
1519
- msgid ""
1520
- "<em>Garbage collection</em> is the simple act of throwing out your garbage. "
1521
- "For this plugin that would be old or <em>stale</em> cached files that may be "
1522
- "out of date. New cached files are described as <em>fresh</em>."
1523
- msgstr ""
1524
-
1525
- #: wp-cache.php:1778
1526
- msgid ""
1527
- "Cached files are fresh for a limited length of time. You can set that time "
1528
- "in the <em>Cache Timeout</em> text box on this page."
1529
- msgstr ""
1530
-
1531
- #: wp-cache.php:1779
1532
- msgid ""
1533
- "Stale cached files are not removed as soon as they become stale. They have "
1534
- "to be removed by the garbage collecter. That is why you have to tell the "
1535
- "plugin when the garbage collector should run."
1536
- msgstr ""
1537
-
1538
- #: wp-cache.php:1780
1539
- msgid ""
1540
- "Use the <em>Timer</em> or <em>Clock</em> schedulers to define when the "
1541
- "garbage collector should run."
1542
- msgstr ""
1543
-
1544
- #: wp-cache.php:1781
1545
- msgid ""
1546
- "The <em>Timer</em> scheduler tells the plugin to run the garbage collector "
1547
- "at regular intervals. When one garbage collection is done, the next run is "
1548
- "scheduled."
1549
- msgstr ""
1550
-
1551
- #: wp-cache.php:1782
1552
- msgid ""
1553
- "Or, the <em>Clock</em> scheduler allows the garbage collection to run at "
1554
- "specific times. If set to run hourly or twice daily, the garbage collector "
1555
- "will be first scheduled for the time you enter here. It will then run again "
1556
- "at the indicated interval. If set to run daily, it will run once a day at "
1557
- "the time specified."
1558
- msgstr ""
1559
-
1560
- #: wp-cache.php:1784
1561
- msgid ""
1562
- "There are no best garbage collection settings but here are a few scenarios. "
1563
- "Garbage collection is separate to other actions that clear our cached files "
1564
- "like leaving a comment or publishing a post."
1565
- msgstr ""
1566
-
1567
- #: wp-cache.php:1786
1568
- msgid ""
1569
- "Sites that want to serve lots of newly generated data should set the "
1570
- "<em>Cache Timeout</em> to 60 and use the <em>Timer</em> scheduler set to 90 "
1571
- "seconds."
1572
- msgstr ""
1573
-
1574
- #: wp-cache.php:1787
1575
- msgid ""
1576
- "Sites with widgets and rss feeds in their sidebar should probably use a "
1577
- "timeout of 3600 seconds and set the timer to 600 seconds. Stale files will "
1578
- "be caught within 10 minutes of going stale."
1579
- msgstr ""
1580
-
1581
- #: wp-cache.php:1788
1582
- msgid ""
1583
- "Sites with lots of static content, no widgets or rss feeds in their sidebar "
1584
- "can use a timeout of 86400 seconds or even more and set the timer to "
1585
- "something equally long."
1586
- msgstr ""
1587
-
1588
- #: wp-cache.php:1789
1589
- msgid ""
1590
- "Sites where an external data source updates at a particular time every day "
1591
- "should set the timeout to 86400 seconds and use the Clock scheduler set "
1592
- "appropriately."
1593
- msgstr ""
1594
-
1595
- #: wp-cache.php:1791
1596
- msgid ""
1597
- "Checking for and deleting expired files is expensive, but it&#8217;s "
1598
- "expensive leaving them there too. On a very busy site, you should set the "
1599
- "expiry time to <em>600 seconds</em>. Experiment with different values and "
1600
- "visit this page to see how many expired files remain at different times "
1601
- "during the day. If you are using legacy caching, aim to have less than 500 "
1602
- "cached files if possible. You can have many times more cached files when "
1603
- "using mod_rewrite or PHP caching."
1604
- msgstr ""
1605
-
1606
- #: wp-cache.php:1792
1607
- msgid "Set the expiry time to 0 seconds to disable garbage collection."
1608
- msgstr ""
1609
-
1610
- #: wp-cache.php:1793
1611
- msgid "Change Expiration"
1612
- msgstr ""
1613
-
1614
- #: wp-cache.php:1837
1615
- msgid "Rejected User Agents"
1616
- msgstr ""
1617
-
1618
- #: wp-cache.php:1838
1619
- msgid ""
1620
- "Strings in the HTTP &#8217;User Agent&#8217; header that prevent WP-Cache "
1621
- "from caching bot, spiders, and crawlers&#8217; requests. Note that super "
1622
- "cached files are still sent to these agents if they already exists."
1623
- msgstr ""
1624
-
1625
- #: wp-cache.php:1845
1626
- msgid "Save UA Strings"
1627
- msgstr ""
1628
-
1629
- #: wp-cache.php:1868
1630
- msgid ""
1631
- "Do not cache the following page types. See the <a href=\"http://codex."
1632
- "wordpress.org/Conditional_Tags\">Conditional Tags</a> documentation for a "
1633
- "complete discussion on each type."
1634
- msgstr ""
1635
-
1636
- #: wp-cache.php:1871
1637
- msgid "Single Posts"
1638
- msgstr ""
1639
-
1640
- #: wp-cache.php:1872
1641
- msgid "Pages"
1642
- msgstr ""
1643
-
1644
- #: wp-cache.php:1873
1645
- msgid "Front Page"
1646
- msgstr ""
1647
-
1648
- #: wp-cache.php:1874
1649
- msgid "Home"
1650
- msgstr ""
1651
-
1652
- #: wp-cache.php:1875
1653
- msgid "Archives"
1654
- msgstr ""
1655
-
1656
- #: wp-cache.php:1876
1657
- msgid "Tags"
1658
- msgstr ""
1659
-
1660
- #: wp-cache.php:1877
1661
- msgid "Category"
1662
- msgstr ""
1663
-
1664
- #: wp-cache.php:1878
1665
- msgid "Feeds"
1666
- msgstr ""
1667
-
1668
- #: wp-cache.php:1879
1669
- msgid "Search Pages"
1670
- msgstr ""
1671
-
1672
- #: wp-cache.php:1880
1673
- msgid "Author Pages"
1674
- msgstr ""
1675
-
1676
- #: wp-cache.php:1882 wp-cache.php:1996
1677
- msgid "Save"
1678
- msgstr ""
1679
-
1680
- #: wp-cache.php:1899
1681
- msgid ""
1682
- "Add here strings (not a filename) that forces a page not to be cached. For "
1683
- "example, if your URLs include year and you dont want to cache last year "
1684
- "posts, it&#8217;s enough to specify the year, i.e. &#8217;/2004/&#8217;. WP-"
1685
- "Cache will search if that string is part of the URI and if so, it will not "
1686
- "cache that page."
1687
- msgstr ""
1688
-
1689
- #: wp-cache.php:1905
1690
- msgid "Save Strings"
1691
- msgstr ""
1692
-
1693
- #: wp-cache.php:1921
1694
- msgid ""
1695
- "Add here those filenames that can be cached, even if they match one of the "
1696
- "rejected substring specified above."
1697
- msgstr ""
1698
-
1699
- #: wp-cache.php:1927
1700
- msgid "Save Files"
1701
- msgstr ""
1702
-
1703
- #: wp-cache.php:1970
1704
- msgid "Currently logging to: %s"
1705
- msgstr ""
1706
-
1707
- #: wp-cache.php:1973
1708
- msgid ""
1709
- "Fix problems with the plugin by debugging it here. It can log them to a file "
1710
- "in your cache directory."
1711
- msgstr ""
1712
-
1713
- #: wp-cache.php:1977
1714
- msgid "Debugging"
1715
- msgstr ""
1716
-
1717
- #: wp-cache.php:1978
1718
- msgid "IP Address"
1719
- msgstr ""
1720
-
1721
- #: wp-cache.php:1978
1722
- msgid "(only log requests from this IP address. Your IP is %s)"
1723
- msgstr ""
1724
-
1725
- #: wp-cache.php:1979
1726
- msgid "Cache Status Messages"
1727
- msgstr ""
1728
-
1729
- #: wp-cache.php:1980
1730
- msgid "Display comments at the end of every page like this:"
1731
- msgstr ""
1732
-
1733
- #: wp-cache.php:1986
1734
- msgid ""
1735
- "In very rare cases two problems may arise on some blogs:<ol><li> The front "
1736
- "page may start downloading as a zip file.</li><li> The wrong page is "
1737
- "occasionally cached as the front page if your blog uses a static front page "
1738
- "and the permalink structure is <em>/%category%/%postname%/</em>.</li></ol>"
1739
- msgstr ""
1740
-
1741
- #: wp-cache.php:1987
1742
- msgid ""
1743
- "I&#8217;m 99% certain that they aren&#8217;t bugs in WP Super Cache and they "
1744
- "only happen in very rare cases but you can run a simple check once every 5 "
1745
- "minutes to verify that your site is ok if you&#8217;re worried. You will be "
1746
- "emailed if there is a problem."
1747
- msgstr ""
1748
-
1749
- #: wp-cache.php:1989
1750
- msgid "Check front page every 5 minutes."
1751
- msgstr ""
1752
-
1753
- #: wp-cache.php:1990
1754
- msgid "Front page text"
1755
- msgstr ""
1756
-
1757
- #: wp-cache.php:1990
1758
- msgid ""
1759
- "Text to search for on your front page. If this text is missing, the cache "
1760
- "will be cleared. Leave blank to disable."
1761
- msgstr ""
1762
-
1763
- #: wp-cache.php:1991
1764
- msgid "Clear cache on error."
1765
- msgstr ""
1766
-
1767
- #: wp-cache.php:1992
1768
- msgid "Email the blog admin when checks are made. (useful for testing)"
1769
- msgstr ""
1770
-
1771
- #: wp-cache.php:2006
1772
- msgid ""
1773
- "Error: GZIP compression is enabled. Disable it if you want to enable wp-"
1774
- "cache."
1775
- msgstr ""
1776
-
1777
- #: wp-cache.php:2056 wp-cache.php:2355 wp-cache.php:2391
1778
- msgid "Warning"
1779
- msgstr ""
1780
-
1781
- #: wp-cache.php:2056
1782
- msgid ""
1783
- "GZIP compression is enabled in WordPress, wp-cache will be bypassed until "
1784
- "you disable gzip compression."
1785
- msgstr ""
1786
-
1787
- #: wp-cache.php:2153 wp-cache.php:2159
1788
- msgid "WP Super Cache Warning!"
1789
- msgstr ""
1790
-
1791
- #: wp-cache.php:2154
1792
- msgid ""
1793
- "All users of this site have been logged out to refresh their login cookies."
1794
- msgstr ""
1795
-
1796
- #: wp-cache.php:2160
1797
- msgid ""
1798
- "Your server is configured to show files and directories, which may expose "
1799
- "sensitive data such as login cookies to attackers in the cache directories. "
1800
- "That has been fixed by adding a file named index.html to each directory. If "
1801
- "you use PHP or legacy caching, consider moving the location of the cache "
1802
- "directory on the Advanced Settings page."
1803
- msgstr ""
1804
-
1805
- #: wp-cache.php:2162
1806
- msgid ""
1807
- "If you just installed WP Super Cache for the first time, you can dismiss "
1808
- "this message. Otherwise, you should probably refresh the login cookies of "
1809
- "all logged in WordPress users here by clicking the logout link below."
1810
- msgstr ""
1811
-
1812
- #: wp-cache.php:2165
1813
- msgid ""
1814
- "Your site is using a very old version of WordPress. When you update to the "
1815
- "latest version everyone will be logged out and cookie information updated."
1816
- msgstr ""
1817
-
1818
- #: wp-cache.php:2167
1819
- msgid ""
1820
- "The logout link will log out all WordPress users on this site except you. "
1821
- "Your authentication cookie will be updated, but you will not be logged out."
1822
- msgstr ""
1823
-
1824
- #: wp-cache.php:2171
1825
- msgid "Logout"
1826
- msgstr ""
1827
-
1828
- #: wp-cache.php:2275 wp-cache.php:2280 wp-cache.php:2314 wp-cache.php:2319
1829
- #: wp-cache.php:2325
1830
- msgid "Error"
1831
- msgstr ""
1832
-
1833
- #: wp-cache.php:2275
1834
- msgid ""
1835
- "Your cache directory (<strong>%1$s</strong>) did not exist and couldn&#8217;"
1836
- "t be created by the web server. Check %1$s permissions."
1837
- msgstr ""
1838
-
1839
- #: wp-cache.php:2280
1840
- msgid ""
1841
- "Your cache directory (<strong>%1$s</strong>) or <strong>%2$s</strong> need "
1842
- "to be writable for this plugin to work. Double-check it."
1843
- msgstr ""
1844
-
1845
- #: wp-cache.php:2314
1846
- msgid ""
1847
- "Your WP-Cache config file (<strong>%s</strong>) is out of date and not "
1848
- "writable by the Web server. Please delete it and refresh this page."
1849
- msgstr ""
1850
-
1851
- #: wp-cache.php:2319
1852
- msgid ""
1853
- "Configuration file missing and %1$s directory (<strong>%2$s</strong>) is "
1854
- "not writable by the web server. Check its permissions."
1855
- msgstr ""
1856
-
1857
- #: wp-cache.php:2325
1858
- msgid ""
1859
- "Sample WP-Cache config file (<strong>%s</strong>) does not exist. Verify "
1860
- "your installation."
1861
- msgstr ""
1862
-
1863
- #: wp-cache.php:2355
1864
- msgid "Could not update %s!</em> WPCACHEHOME must be set in config file."
1865
- msgstr ""
1866
-
1867
- #: wp-cache.php:2391
1868
- msgid "%s/advanced-cache.php</em> does not exist or cannot be updated."
1869
- msgstr ""
1870
-
1871
- #: wp-cache.php:2392
1872
- msgid "1. If it already exists, please delete the file first."
1873
- msgstr ""
1874
-
1875
- #: wp-cache.php:2393
1876
- msgid ""
1877
- "2. Make %1$s writable using the chmod command through your ftp or server "
1878
- "software. (<em>chmod 777 %1$s</em>) and refresh this page. This is only a "
1879
- "temporary measure and you&#8217;ll have to make it read only afterwards "
1880
- "again. (Change 777 to 755 in the previous command)"
1881
- msgstr ""
1882
-
1883
- #: wp-cache.php:2394
1884
- msgid "3. Refresh this page to update <em>%s/advanced-cache.php</em>"
1885
- msgstr ""
1886
-
1887
- #: wp-cache.php:2395
1888
- msgid ""
1889
- "If that doesn&#8217;t work, make sure the file <em>%s/advanced-cache.php</"
1890
- "em> doesn&#8217;t exist:"
1891
- msgstr ""
1892
-
1893
- #: wp-cache.php:2396
1894
- msgid ""
1895
- "<li>1. Open <em>%1$s$wp_cache_file</em> in a text editor.</li><li>2. Change "
1896
- "the text <em>CACHEHOME</em> to <em>%2$s</em></li><li>3. Save the file and "
1897
- "copy it to <em>%3$s</em> and refresh this page.</li>"
1898
- msgstr ""
1899
-
1900
- #: wp-cache.php:2419
1901
- msgid ""
1902
- "<h3>WP_CACHE constant set to false</h3><p>The WP_CACHE constant is used by "
1903
- "WordPress to load the code that serves cached pages. Unfortunately, it is "
1904
- "set to false. Please edit your wp-config.php and add or edit the following "
1905
- "line above the final require_once command:<br /><br /><code>define"
1906
- "('WP_CACHE', true);</code></p>"
1907
- msgstr ""
1908
-
1909
- #: wp-cache.php:2421
1910
- msgid ""
1911
- "<strong>Error: WP_CACHE is not enabled</strong> in your <code>wp-config.php</"
1912
- "code> file and I couldn&#8217;t modify it."
1913
- msgstr ""
1914
-
1915
- #: wp-cache.php:2422
1916
- msgid ""
1917
- "Edit <code>%s</code> and add the following line:<br /> <code>define"
1918
- "('WP_CACHE', true);</code><br />Otherwise, <strong>WP-Cache will not be "
1919
- "executed</strong> by WordPress core. "
1920
- msgstr ""
1921
-
1922
- #: wp-cache.php:2426
1923
- msgid ""
1924
- "<h3>WP_CACHE constant added to wp-config.php</h3><p>If you continue to see "
1925
- "this warning message please see point 5 of the <a href=\"http://wordpress."
1926
- "org/plugins/wp-super-cache/faq/\">Troubleshooting Guide</a>. The WP_CACHE "
1927
- "line must be moved up."
1928
- msgstr ""
1929
-
1930
- #: wp-cache.php:2454
1931
- msgid "Cache Contents"
1932
- msgstr ""
1933
-
1934
- #: wp-cache.php:2457
1935
- msgid "Object cache in use. No cache listing available."
1936
- msgstr ""
1937
-
1938
- #: wp-cache.php:2481
1939
- msgid "Deleting supercache file: <strong>%s</strong><br />"
1940
- msgstr ""
1941
-
1942
- #: wp-cache.php:2502
1943
- msgid "Deleting wp-cache file: <strong>%s</strong><br />"
1944
- msgstr ""
1945
-
1946
- #: wp-cache.php:2569
1947
- msgid ""
1948
- "Cache stats are not automatically generated. You must click the link below "
1949
- "to regenerate the stats on this page."
1950
- msgstr ""
1951
-
1952
- #: wp-cache.php:2570
1953
- msgid "Regenerate cache stats"
1954
- msgstr ""
1955
-
1956
- #: wp-cache.php:2572
1957
- msgid "Cache stats last generated: %s minutes ago."
1958
- msgstr ""
1959
-
1960
- #: wp-cache.php:2578
1961
- msgid "WP-Cache"
1962
- msgstr ""
1963
-
1964
- #: wp-cache.php:2579 wp-cache.php:2594
1965
- msgid "%s Cached Pages"
1966
- msgstr ""
1967
-
1968
- #: wp-cache.php:2580 wp-cache.php:2599
1969
- msgid "%s Expired Pages"
1970
- msgstr ""
1971
-
1972
- #: wp-cache.php:2593
1973
- msgid "WP-Super-Cache"
1974
- msgstr ""
1975
-
1976
- #: wp-cache.php:2603
1977
- msgid "Fresh WP-Cached Files"
1978
- msgstr ""
1979
-
1980
- #: wp-cache.php:2604 wp-cache.php:2620 wp-cache.php:2636 wp-cache.php:2652
1981
- msgid "URI"
1982
- msgstr ""
1983
-
1984
- #: wp-cache.php:2604 wp-cache.php:2620
1985
- msgid "Key"
1986
- msgstr ""
1987
-
1988
- #: wp-cache.php:2604 wp-cache.php:2620 wp-cache.php:2636 wp-cache.php:2652
1989
- msgid "Age"
1990
- msgstr ""
1991
-
1992
- #: wp-cache.php:2604 wp-cache.php:2620 wp-cache.php:2636 wp-cache.php:2652
1993
- msgid "Delete"
1994
- msgstr ""
1995
-
1996
- #: wp-cache.php:2619
1997
- msgid "Stale WP-Cached Files"
1998
- msgstr ""
1999
-
2000
- #: wp-cache.php:2635
2001
- msgid "Fresh Super Cached Files"
2002
- msgstr ""
2003
-
2004
- #: wp-cache.php:2651
2005
- msgid "Stale Super Cached Files"
2006
- msgstr ""
2007
-
2008
- #: wp-cache.php:2667
2009
- msgid "Hide file list"
2010
- msgstr ""
2011
-
2012
- #: wp-cache.php:2669
2013
- msgid "Too many cached files, no listing possible."
2014
- msgstr ""
2015
-
2016
- #: wp-cache.php:2671
2017
- msgid "List all cached files"
2018
- msgstr ""
2019
-
2020
- #: wp-cache.php:2674
2021
- msgid ""
2022
- "Expired files are files older than %s seconds. They are still used by the "
2023
- "plugin and are deleted periodically."
2024
- msgstr ""
2025
-
2026
- #: wp-cache.php:2685
2027
- msgid "Delete Expired"
2028
- msgstr ""
2029
-
2030
- #: wp-cache.php:2710
2031
- msgid "Delete Super Cache cached files (opens in new window)"
2032
- msgstr ""
2033
-
2034
- #: wp-cache.php:2877
2035
- msgid "%1$s is Stephen Fry proof thanks to caching by %2$s"
2036
- msgstr ""
2037
-
2038
- #: wp-cache.php:2910
2039
- msgid ""
2040
- "WP Super Cache must be configured. Go to <a href=\"%s\">the admin page</a> "
2041
- "to enable and configure the plugin."
2042
- msgstr ""
2043
-
2044
- #: wp-cache.php:2916
2045
- msgid "Settings"
2046
- msgstr ""
2047
-
2048
- #: wp-cache.php:2926
2049
- msgid ""
2050
- "WP Super Cache is disabled. Please go to the <a href=\"%s\">plugin admin "
2051
- "page</a> to enable caching."
2052
- msgstr ""
2053
-
2054
- #: wp-cache.php:2929
2055
- msgid ""
2056
- "Warning! WP Super Cache caching <strong>was</strong> broken but has been "
2057
- "<strong>fixed</strong>! The script advanced-cache.php could not load wp-"
2058
- "cache-phase1.php.<br /><br />The file %1$s/advanced-cache.php has been "
2059
- "recreated and WPCACHEHOME fixed in your wp-config.php. Reload to hide this "
2060
- "message."
2061
- msgstr ""
2062
-
2063
- #: wp-cache.php:2950
2064
- msgid "[%s] Front page is gzipped! Please clear cache!"
2065
- msgstr ""
2066
-
2067
- #: wp-cache.php:2950
2068
- msgid ""
2069
- "Please visit %s to clear the cache as the front page of your site is now "
2070
- "downloading!"
2071
- msgstr ""
2072
-
2073
- #: wp-cache.php:2953
2074
- msgid "[%s] Front page is gzipped! Cache Cleared!"
2075
- msgstr ""
2076
-
2077
- #: wp-cache.php:2953
2078
- msgid ""
2079
- "The cache on your blog has been cleared because the front page of your site "
2080
- "is now downloading. Please visit %s to verify the cache has been cleared."
2081
- msgstr ""
2082
-
2083
- #: wp-cache.php:2960
2084
- msgid "[%s] Front page is not correct! Please clear cache!"
2085
- msgstr ""
2086
-
2087
- #: wp-cache.php:2960
2088
- msgid ""
2089
- "Please visit %1$s to clear the cache as the front page of your site is not "
2090
- "correct and missing the text, \"%2$s\"!"
2091
- msgstr ""
2092
-
2093
- #: wp-cache.php:2963
2094
- msgid "[%s] Front page is not correct! Cache Cleared!"
2095
- msgstr ""
2096
-
2097
- #: wp-cache.php:2963
2098
- msgid ""
2099
- "The cache on your blog has been cleared because the front page of your site "
2100
- "is missing the text \"%2$s\". Please visit %1$s to verify the cache has been "
2101
- "cleared."
2102
- msgstr ""
2103
-
2104
- #: wp-cache.php:2968
2105
- msgid "[%s] Front page check!"
2106
- msgstr ""
2107
-
2108
- #: wp-cache.php:2968
2109
- msgid ""
2110
- "WP Super Cache has checked the front page of your blog. Please visit %s if "
2111
- "you would like to disable this."
2112
- msgstr ""
2113
-
2114
- #: wp-cache.php:3011
2115
- msgid "Cannot update .htaccess"
2116
- msgstr ""
2117
-
2118
- #: wp-cache.php:3011
2119
- msgid ""
2120
- "The file <code>%s.htaccess</code> cannot be modified by the web server. "
2121
- "Please correct this using the chmod command or your ftp client."
2122
- msgstr ""
2123
-
2124
- #: wp-cache.php:3011
2125
- msgid "Refresh this page when the file permissions have been modified."
2126
- msgstr ""
2127
-
2128
- #: wp-cache.php:3011
2129
- msgid ""
2130
- "Alternatively, you can edit your <code>%s.htaccess</code> file manually and "
2131
- "add the following code (before any WordPress rules):"
2132
- msgstr ""
2133
-
2134
- #: wp-cache.php:3015
2135
- msgid ""
2136
- "To serve static html files your server must have the correct mod_rewrite "
2137
- "rules added to a file called <code>%s.htaccess</code>"
2138
- msgstr ""
2139
-
2140
- #: wp-cache.php:3016
2141
- msgid "You can edit the file yourself. Add the following rules."
2142
- msgstr ""
2143
-
2144
- #: wp-cache.php:3017
2145
- msgid " Make sure they appear before any existing WordPress rules. "
2146
- msgstr ""
2147
-
2148
- #: wp-cache.php:3025
2149
- msgid "Update Mod_Rewrite Rules"
2150
- msgstr ""
2151
-
2152
- #: wp-cache.php:3188
2153
- msgid "[%1$s] Cache Preload Started"
2154
- msgstr ""
2155
-
2156
- #: wp-cache.php:3218
2157
- msgid "[%1$s] Refreshing %2$s taxonomy from %3$d to %4$d"
2158
- msgstr ""
2159
-
2160
- #: wp-cache.php:3267
2161
- msgid "[%1$s] Refreshing posts from %2$d to %3$d"
2162
- msgstr ""
2163
-
2164
- #: wp-cache.php:3288
2165
- msgid "[%1$s] Cache Preload Stopped"
2166
- msgstr ""
2167
-
2168
- #: wp-cache.php:3298
2169
- msgid "[%1$s] %2$d posts refreshed"
2170
- msgstr ""
2171
-
2172
- #: wp-cache.php:3298
2173
- msgid "Refreshed the following posts:"
2174
- msgstr ""
2175
-
2176
- #: wp-cache.php:3308
2177
- msgid "Scheduling next preload refresh in %d minutes."
2178
- msgstr ""
2179
-
2180
- #: wp-cache.php:3319
2181
- msgid "[%s] Cache Preload Completed"
2182
- msgstr ""
2183
-
2184
- #: wp-cache.php:3319
2185
- msgid "Cleaning up old supercache files."
2186
- msgstr ""
2187
-
2188
- #: wp-cache.php:3361
2189
- msgid "[%s] Preload may have stalled."
2190
- msgstr ""
2191
-
2192
- #: wp-cache.php:3361
2193
- msgid ""
2194
- "Preload has been restarted.\n"
2195
- "%s"
2196
- msgstr ""
2197
-
2198
- #: wp-cache.php:3404
2199
- msgid "Supercache Uninstall Problems"
2200
- msgstr ""
2201
-
2202
- #: wp-cache.php:3404
2203
- msgid ""
2204
- "Dear User,\n"
2205
- "\n"
2206
- "WP Super Cache was removed from your blog but the mod_rewrite rules\n"
2207
- "in your .htaccess were not.\n"
2208
- "\n"
2209
- "Please edit the following file and remove the code\n"
2210
- "between 'BEGIN WPSuperCache' and 'END WPSuperCache'. Please backup the file "
2211
- "first!\n"
2212
- "\n"
2213
- "%s\n"
2214
- "\n"
2215
- "Regards,\n"
2216
- "WP Super Cache Plugin\n"
2217
- "http://wordpress.org/plugins/wp-super-cache/"
2218
- msgstr ""
2219
-
2220
- #: wp-cache.php:3441
2221
- msgid "Delete cache of the current page"
2222
- msgstr ""
2223
-
2224
- #. Plugin Name of the plugin/theme
2225
- msgid "WP Super Cache"
2226
- msgstr ""
2227
-
2228
- #. Plugin URI of the plugin/theme
2229
- msgid "https://wordpress.org/plugins/wp-super-cache/"
2230
- msgstr ""
2231
-
2232
- #. Description of the plugin/theme
2233
- msgid "Very fast caching plugin for WordPress."
2234
- msgstr ""
2235
-
2236
- #. Author of the plugin/theme
2237
- msgid "Automattic"
2238
- msgstr ""
2239
-
2240
- #. Author URI of the plugin/theme
2241
- msgid "https://automattic.com/"
2242
- msgstr ""