/IgorwFileServeBundle

Symfony2 Bundle for serving protected files.

Primary LanguagePHPMIT LicenseMIT

FileServeBundle

About

The FileServeBundle allows you to serve files that are not publicly available, such as private attachments.

Installation

Add the bundle to your composer.json:

{
    "require": {
        "igorw/file-serve-bundle": "~1.0"
    }
}

Add the FileServeBundle to your application's kernel:

public function registerBundles()
{
    $bundles = array(
        // ...
        new Igorw\FileServeBundle\IgorwFileServeBundle(),
        // ...
    );
    // ...
}

Usage

Use the igorw_file_serve.response_factory service to create a FileServe response. The path is relative to the app directory by default.

$response = $this->get('igorw_file_serve.response_factory')->create('../VERSION', 'text/plain');

You can also pass a set of options as the third parameter of the create method.

$options = array(
    'serve_filename' => 'VERSION.txt',
    'absolute_path' => true,
    'inline' => false,
);

$response = $this->get('igorw_file_serve.response_factory')
    ->create('../VERSION', 'text/plain', $options);
  • serve_filename: Filename the browser downloads the file as.
  • absolute_path: If enabled, the bundle will ignore the base_dir option and use the provided filename as an absolute path.

You can configure the factory used, for example to use a nginx XSendfile response factory:

igorw_file_serve:
    factory: sendfile     # The default value is "php"

You can also configure the base directory:

igorw_file_serve:
    base_dir: /files/dir     # The default value is "%kernel.root_dir%"

By default, this bundle does a file_exists check when creating a response object. Recent nginx versions require relative paths, in which case the paths inside of PHP are not actual physical paths. Use the skip_file_exists setting to disable the check.

igorw_file_serve:
    skip_file_exists: true  # The default value is false

Supported factories

  • php
  • sendfile (nginx)
  • xsendfile (apache)

Features

Todo

  • Tests
  • HTTP caching
  • HTTP range requests
  • Lighttpd XSendfile
  • Handle PhpResponse getContent(), setContent()