Skip to content

Instantly share code, notes, and snippets.

@Awilson089
Created February 26, 2024 16:27
Show Gist options
  • Save Awilson089/3c38a1b0e7162902d3b1530491339b2c to your computer and use it in GitHub Desktop.
Save Awilson089/3c38a1b0e7162902d3b1530491339b2c to your computer and use it in GitHub Desktop.
Remote image proxy for Valet 4 – Wordpress
<?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