PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.5.9
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.5.9
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / classes / Integration / Server / LiteSpeed.php
nitropack / classes / Integration / Server Last commit date
Cloudflare.php 4 years ago Fastly.php 4 years ago LiteSpeed.php 4 years ago Sucuri.php 4 years ago
LiteSpeed.php
91 lines
1 <?php
2
3 namespace NitroPack\Integration\Server;
4
5 class LiteSpeed {
6 const STAGE = "very_early";
7 const DEVICE_COOKIE = "ls_nitro_device";
8
9 public static function detect() {
10 return !empty($_SERVER["X-LSCACHE"]) || ( !empty($_SERVER["SERVER_SOFTWARE"]) && strtolower($_SERVER["SERVER_SOFTWARE"]) == "litespeed" );
11 }
12
13 public static function isCacheEnabled() {
14 return false;
15 return self::detect() && !empty($_SERVER["X-LSCACHE"]) && in_array("on", array_map("trim", explode(",", $_SERVER["X-LSCACHE"])));
16 }
17
18 public static function isCachePossible() {
19 return isset($_COOKIE[self::DEVICE_COOKIE]);
20 }
21
22 public static function sendCacheHeader($maxAge = NULL) {
23 if (!$maxAge) {
24 header("X-LiteSpeed-Cache-Control: public");
25 } else if (is_numeric($maxAge)) {
26 header("X-LiteSpeed-Cache-Control: public,max-age=" . (int)$maxAge);
27 }
28 }
29
30 public static function purge($url = NULL, $tag = NULL) {
31 if ($url || $tag) {
32 $headerValues = [];
33
34 if ($url) {
35 $urlObj = new \NitroPack\Url((new \NitroPack\Url($url))->getNormalized());
36 if (!$urlObj->getQuery()) {
37 $headerValues[] = $urlObj->getPath();
38 } else {
39 $headerValues[] = $urlObj->getPath() . "?" . $urlObj->getQuery();
40 }
41 }
42
43 if ($tag) {
44 $headerValues[] = "tag=" . $tag;
45 }
46
47 header("X-LiteSpeed-Purge: " . implode(", ", $headerValues), false);
48 } else {
49 header("X-LiteSpeed-Purge: *", false);
50 }
51 }
52
53 public function init($stage) {
54 return;
55 if (self::isCacheEnabled()) {
56 add_action('nitropack_integration_purge_url', [$this, 'purgeUrl']);
57 add_action('nitropack_integration_purge_all', [$this, 'purgeAll']);
58 add_action('nitropack_early_cache_headers', [$this, 'setupVary']);
59 add_action('nitropack_cacheable_cache_headers', [$this, 'allowProxyCache']);
60 }
61 }
62
63 public function purgeUrl($url) {
64 self::purge($url);
65 }
66
67 public function purgeAll() {
68 self::purge();
69 }
70
71 public function setupVary() {
72 header("X-LiteSpeed-Vary: cookie=" . self::DEVICE_COOKIE);
73 }
74
75 public function allowProxyCache() {
76 if (self::isCachePossible()) {
77 self::sendCacheHeader(3600);
78 } else if (!empty($_SERVER["HTTP_USER_AGENT"])) {
79 $device = new \NitroPack\SDK\Device($_SERVER["HTTP_USER_AGENT"]);
80 if ($device->isMobile()) {
81 nitropack_setcookie(self::DEVICE_COOKIE, "mobile", time() + 86400);
82 } else if ($device->isTablet()) {
83 nitropack_setcookie(self::DEVICE_COOKIE, "tablet", time() + 86400);
84 } else {
85 nitropack_setcookie(self::DEVICE_COOKIE, "desktop", time() + 86400);
86 }
87 }
88 }
89 }
90
91