---
layout: default
title: Source & cache
---

# Source & cache

Glide makes it possible to access images stored in a variety of file systems. It does this using the [Flysystem](http://flysystem.thephpleague.com/) file system abstraction library. For example, you may choose to store your source images on [Amazon S3](http://aws.amazon.com/s3/), but keep your rendered images (the cache) on the local disk.

## Setup using Flysystem

To set your source and cache locations, simply pass an instance of `League\Flysystem\Filesystem` for each. See the Flysystem [website](https://flysystem.thephpleague.com/) for a complete list of available adapters.

~~~ php
<?php

use League\Flysystem\Local\LocalFilesystemAdapter;
use League\Flysystem\Filesystem;
use League\Glide\ServerFactory;

// Setup Glide server
$server = ServerFactory::create([
    'source' => new Filesystem(new LocalFilesystemAdapter('path/to/source/folder')),
    'cache' => new Filesystem(new LocalFilesystemAdapter('path/to/cache/folder')),
]);
~~~

## Setup using local disk

Alternatively, if you are only using the local disk, you can simply provide the paths as a string.

~~~ php
<?php

$server = League\Glide\ServerFactory::create([
    'source' => 'path/to/source/folder',
    'cache' => 'path/to/cache/folder',
]);
~~~

## Set default path prefix

While it's normally possible to set the full source and cache path using Flysystem, there are situations where it may be desirable to set a default path prefix. For example, when only one instance of the `Filesystem` is available.

~~~ php
<?php

// Set using factory
$server = League\Glide\ServerFactory::create([
    'source' => $filesystem,
    'cache' => $filesystem,
    'source_path_prefix' => 'source',
    'cache_path_prefix' => 'cache',
]);

// Set using setter methods
$server->setSourcePathPrefix('source');
$server->setCachePathPrefix('cache');
~~~

## Set a base URL

It's common to route all images under the path `/img/`. However, since Glide maps the image request path directly to the image source path, you would need to have an `/img/` folder in your source location as well. For example:

~~~ js
'http://example.com/img/kayaks.jpg' => '/path/to/source/img/kayaks.jpg'
~~~

The `base_url` allows you to define which part of the URL should be omitted from the source path.

~~~ php
<?php

// Set using factory
$server = League\Glide\ServerFactory::create([
    'base_url' => '/img/',
]);

// Set using setter method
$server->setBaseUrl('/img/');
~~~

With the base URL configured, the new image source paths will no longer include `/img/`.

~~~ js
'http://example.com/img/kayaks.jpg' => '/path/to/source/kayaks.jpg'
~~~

## Disabling the cache

In some situations it may be desirable to disable the cache. For example, you may choose to use a tool like Varnish for caching instead. The best way to do this with Glide is to use an [in-memory adapter](https://flysystem.thephpleague.com/v2/docs/adapter/in-memory/) for Flysystem. This will prevent any cached images from being saved to your local disk.

## Grouping cache in folders

By default Glide groups cached images into folders. For example, all variations of `kayaks.jpg` will be found in a `/path/to/cache/folder/kayaks.jpg` folder. If you'd prefer to have all cached images in the same folder, this can be done in two ways:

~~~ php
<?php

// Set using factory
$server = League\Glide\ServerFactory::create([
    'group_cache_in_folders' => false
]);

// Set using setter method
$server->setGroupCacheInFolders(false);
~~~

## Deleting cached images

Glide does not automatically purge cached images. However, this can be done by your application using the `deleteCache()` method. Note, grouping cache in folders MUST be enabled in order to delete cached images, which is the default setting.

~~~ php
<?php

$server->deleteCache('kayaks.jpg');
~~~
