Created
February 26, 2024 16:27
-
-
Save Awilson089/3c38a1b0e7162902d3b1530491339b2c to your computer and use it in GitHub Desktop.
Remote image proxy for Valet 4 – Wordpress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Valet\Drivers\Specific\WordPressValetDriver; | |
class LocalValetDriver extends WordPressValetDriver { | |
/** @var string The remote host to proxy requests to */ | |
const REMOTE_HOST = 'https://remotehost.com/'; | |
/** @var string If the request URI starts with this, we want to proxy the request to the remote host */ | |
const URI_PREFIX = '/wp-content/uploads/'; | |
/** @var bool Whether or not to load the current request remotely */ | |
private static $tryRemoteFallback = false; | |
/** | |
* This method checks if we have the file on disk. If not, changes the domain of any requests for files within the | |
* uploads directory to the remote domain. It also sets a flag that this request is now a remote request. | |
* | |
* @param string $sitePath | |
* @param string $siteName | |
* @param string $uri | |
* | |
* @return bool|false|string | |
*/ | |
public function isStaticFile( $sitePath, $siteName, $uri ) { | |
$localFileFound = parent::isStaticFile( $sitePath, $siteName, $uri ); | |
if ( $localFileFound ) { | |
return $localFileFound; | |
} | |
if ( self::stringStartsWith( $uri, self::URI_PREFIX ) ) { | |
self::$tryRemoteFallback = true; | |
return rtrim( self::REMOTE_HOST, '/' ) . $uri; | |
} | |
return false; | |
} | |
/** | |
* This method checks if the remote flag is set and, if so, redirects the request by setting the Location header. | |
* | |
* @param string $staticFilePath | |
* @param string $sitePath | |
* @param string $siteName | |
* @param string $uri | |
*/ | |
public function serveStaticFile( $staticFilePath, $sitePath, $siteName, $uri ): void { | |
if ( self::$tryRemoteFallback ) { | |
header( "Location: $staticFilePath" ); | |
} else { | |
parent::serveStaticFile( $staticFilePath, $sitePath, $siteName, $uri ); | |
} | |
} | |
/** | |
* @param string $string | |
* @param string $startsWith | |
* | |
* @return bool | |
*/ | |
private static function stringStartsWith( $string, $startsWith ) { | |
return strpos( $string, $startsWith ) === 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment