Navigation Menu

Skip to content

ruudk/Gaufrette

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gaufrette

Gaufrette is a PHP5 library that provides a filesystem abstraction layer.

This project is under intensive development. Everything can change at any time!

Why use Gaufrette?

Imagine you have to manage a lot of medias in a PHP project. Lets see how to take this situation in your advantage using Gaufrette.

The filesystem abstraction layer permits you to develop your application without the need to know were all those medias will be stored and how.

Another advantage of this is the possibility to update the files location without any impact on the code apart from the definition of your filesystem. In exemple, if your project grows up very fast and if your server reaches its limits, you can easily move your medias in an Amazon S3 server or any other solution.

Try it!

Setup your filesystem

<?php

use Gaufrette\Filesystem\Filesystem;
use Gaufrette\Filesystem\Adapter\Local as LocalAdapter;

$adapter = new LocalAdapter('/var/media');
$filesystem = new Filesystem($adapter)

Use the filesystem

<?php

// ... setup your filesystem

$content = $filesystem->read('myFile');

$content = 'Hello I am the new content';

$filesystem->write('myFile', $content);

Use file objects

Gaufrette also provide a File class that is a representation of files in a filesystem

<?php

$file = new File('newFile', $filesystem);
$file->setContent('Hello World');

echo $file->getContent(); // Hello World

Cache a slow filesystem

If you have to deal with a slow filesystem, it is out of quetion to use it directly. So, you need a cache! Happily, Gaufrette offers a cache system ready for use. It consist of an adapter itself composed of two adapters:

* The *source* adapter that should be cached
* The *cache* adapter that is used to cache

Here is an exemple of how to cache an ftp filesystem:

<?php

use Gaufrette\Filesystem\Filesystem;
use Gaufrette\Filesystem\Adapter\Ftp as FtpAdapter;
use Gaufrette\Filesystem\Adapter\Local as LocalAdapter;

// create an ftp adapter instance as $ftp and a local one as $local

$cachedFtp = new CacheAdapter($ftp, $local, 10);

$filesystem = new Filesystem($cachedFtp);

The third parameter of the cache adapter is the time to live of the cache.

Using Amazon S3

You will need to specify a CA certificate to be able to talk to Amazon servers in https. You can use the one which is shipped with the SDK by defining before creating the \AmazonS3 object:

define("AWS_CERTIFICATE_AUTHORITY", true);

Using Gaufrette in a Symfony2 project

As you can see, Gaufrette provides an elegant way to declare your filesystems.

In your Symdon2 project, add to deps:

[gaufrette]
    git=https://github.com/qpleple/Gaufrette.git

[aws-sdk]
    git=https://github.com/amazonwebservices/aws-sdk-for-php

and to app/autoload.php, at the end:

// AWS SDK needs a special autoloader
require_once __DIR__.'/../vendor/aws-sdk/sdk.class.php';

And then, you can simply add them as services of your dependency injection container. As an example, here is services declaration to use Amazon S3:

<service id="acme.s3" class="AmazonS3">
    <argument>%acme.aws_key%</argument>
    <argument>%acme.aws_secret_key%</argument>
</service>

<service id="acme.s3.adapter" class="Gaufrette\Adapter\AmazonS3">
    <argument type="service" id="acme.s3"></argument>
    <argument>%acme.s3.bucket_name%</argument>
</service>

<service id="acme.fs" class="Gaufrette\FileSystem">
    <argument type="service" id="acme.s3.adapter"></argument>
</service>

Don't forget to set the constant to tell the AWS SDK to use its CA cert (somewhere that will be executed before creating the \AmazonS3 object):

define("AWS_CERTIFICATE_AUTHORITY", true);
$fs = $container->get('acme.fs');
// use $fs

Running the Tests

The tests use PHPUnit.

Setup the vendor libraries

As some filesystem adapters use vendor libraries, you should install the vendors:

$ cd gaufrette
$ bin/install_vendors.sh

It will avoid skip a lot of tests.

Launch the Test Suite

In the Gaufrette root directory:

$ phpunit -c .

Is it green?

About

PHP5 library that provides a filesystem abstraction layer − will be a feast for your files!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 99.8%
  • Shell 0.2%