PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.19.3
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.19.3
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 / Hosting / SiteGround.php
nitropack / classes / Integration / Hosting Last commit date
Closte.php 1 year ago Cloudways.php 1 year ago DreamHost.php 1 year ago Flywheel.php 1 year ago GoDaddyWPaaS.php 1 year ago GridPane.php 1 year ago Hosting.php 1 year ago Kinsta.php 1 year ago Pagely.php 1 year ago PagelyCachePurge.php 1 year ago Pantheon.php 1 year ago Pressable.php 1 year ago Raidboxes.php 1 year ago RocketNet.php 1 year ago Savvii.php 1 year ago SiteGround.php 3 months ago SpinupWp.php 1 year ago Vimexx.php 1 year ago WPEngine.php 1 year ago WPX.php 1 year ago WPmudev.php 1 year ago
SiteGround.php
92 lines
1 <?php
2
3 namespace NitroPack\Integration\Hosting;
4
5 class SiteGround extends Hosting {
6 const STAGE = "very_early";
7
8 public static function detect() {
9 if (strpos(gethostname(), "siteground.eu") !== false) return true;
10 $configFilePath = nitropack_get_wpconfig_path();
11 if (!$configFilePath) return false;
12 return strpos(file_get_contents($configFilePath), 'Added by SiteGround WordPress management system') !== false;
13 }
14
15 public function init($stage) {
16 if ($this->getHosting() == "siteground") {
17 add_action('nitropack_execute_purge_url', [$this, 'purgeUrl']);
18 add_action('nitropack_execute_purge_all', [$this, 'purgeAll']);
19 add_action('nitropack_early_cache_headers', [$this, 'setCacheControl']);
20 add_action('nitropack_cacheable_cache_headers', [$this, 'allowProxyCache']);
21 add_action('nitropack_cachehit_cache_headers', [$this, 'allowProxyCache']);
22 }
23 }
24
25 public function purgeUrl($url) {
26 $urlObj = new \NitroPack\Url\Url($url);
27
28 $host = preg_replace("/^www\./", "", $urlObj->getHost());
29 $path = $urlObj->getPath();
30
31 if ($urlObj->getQuery()) {
32 $path .= "(.*)";
33 }
34
35 try {
36 $sock_path = '/chroot/tmp/site-tools.sock';
37 if ( ! file_exists( $sock_path ) ) {
38 return false;
39 }
40
41 $sock = stream_socket_client( 'unix://' . $sock_path, $errno, $errstr, 5 );
42
43 if ( false === $sock ) {
44 return false;
45 }
46
47 $req = array(
48 'api' => 'domain-all',
49 'cmd' => 'update',
50 'settings' => array( 'json' => 1 ),
51 'params' => array(
52 'flush_cache' => '1',
53 'id' => $host,
54 'path' => $path,
55 ),
56 );
57
58 fwrite( $sock, json_encode( $req, JSON_FORCE_OBJECT ) . "\n" );
59 $response = fgets( $sock, 32 * 1024 );
60 fclose( $sock );
61 $result = @json_decode( $response, true );
62 if ( false === $result || isset( $result['err_code'] ) ) {
63 return false;
64 }
65 } catch (\Exception $e) {}
66
67 return true;
68 }
69
70 public function purgeAll() {
71 $siteConfig = nitropack_get_site_config();
72 if ($siteConfig && !empty($siteConfig["home_url"])) {
73 return $this->purgeUrl(nitropack_trailingslashit($siteConfig["home_url"]) . "/(.*)");
74 }
75 return false;
76 }
77
78 public function setCacheControl() {
79 nitropack_header("Cache-Control: public, max-age=0, s-maxage=3600"); // needs to be like that instead of Cache-Control: no-cache in order to allow caching in the provided reverse proxy, but prevent the browsers from doing so
80 }
81
82 public function allowProxyCache() {
83 if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
84 nitropack_header('X-Cache-Enabled: False');
85 return;
86 }
87 $this->setCacheControl();
88 nitropack_header('X-Cache-Enabled: True');
89 nitropack_header('Vary: User-Agent');
90 }
91 }
92