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.

Revisions

  1. Awilson089 revised this gist Feb 26, 2024. No changes.
  2. Awilson089 created this gist Feb 26, 2024.
    68 changes: 68 additions & 0 deletions LocalValetDriver.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    <?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;
    }

    }