Symfony2 Bundle for serving protected files.

Installs: 133 205

Dependents: 1

Suggesters: 0

Stars: 175

Watchers: 9

Forks: 18

Open Issues: 6


v1.0.3 2014-01-06 20:35 UTC



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


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(),
        // ...
    // ...


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:

    factory: sendfile     # The default value is "php"

You can also configure the base directory:

    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.

    skip_file_exists: true  # The default value is false

Supported factories

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



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