XSendFile – Distribuer les fichiers avec PHP

Utiliser Apache plutôt que PHP.

Pour faire télécharger des fichiers à nos chers utilisateurs. Nous avons l’habitude de les mettre dans des répertoires directement accessibles. Pour mon dernier projet ShareBF je voulais que les fichiers soient stockés ailleurs sur le disque pour des raisons de sécurité. D’accord Php me permet de déplacer les fichiers uploadés, mais comment faire le lien au client ? Je suis d’abord parti sur la piste de lire le fichier par PHP et renvoyer le flux au client, mais niveau performances a connu mieux !

mod XSendFile

C’est là que je suis tombé sur ce mod. XsendFile. Il permet de confier à Apache ce qu’il fait de mieux : délivrer les fichiers. Quelques options directement dans le fichier config apache permettent de choisir les répertoires autorisés. Côté Php, il suffit de renvoyer un header adéquat.

Mise en pratique

Installation sur le serveur:

Configuration dans apache :

 

Et notre Php maintenant :

le cas de Symfony

Pour finir…

Comme vous pouvez le voir, c’est très simple à mettre en place ! Faites attention, le répertoire et le fichier doivent quand même être accessibles pour Apache en respectant les droits d’accès classiques. (utilisateur www-data par défaut)

Et Pour Nginx ????

Je l’ai brièvement évoqué, Nginx dispose d’un mode similaire nommé X-Accel-Redirect. Je n’en ai pas parlé ensuite, car mon cher Silentkernel, avec qui j’avais partagé mes problèmes et trouvailles, a fait un article traitant spécialement du cas sur son blog.

 

Et si vous souhaitez aller plus loin sur ce mod, c’est ici !

Start a Conversation

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *