[RESOLU] Retourner un fichier audio ou vidéo avec PHP

Eléphant du PHP | 88 Messages

03 juin 2018, 13:47

Bonjour tout le monde, j’ai un petit problème depuis quelques jours.
J’ai fait une page (file.php) qui renvoie un fichier, c’est à dire son contenu et des headers associés.
Cette première page va être appelée par une autre page (render.php) et en fonction des paramètres GET passés dans la requêtes, un fichier différent va être retourné.

Donc :
- La page render.php appelle la page file.php, passe différents paramètres GET
- La page file.php, renvoie un fichier en fonction des paramètres qui lui sont envoyés
- En fonction du type de fichier reçu par render.php, j’affiche le fichier d’une façon ou d’une autre :
- Image : Je met l’url de file.php dans la balise image
- Text : Je met le contenu de file.php dans une div
- Video : Je met l’url de file.php en src de la balise source d’une balise video
- Audio : Je met l’url de file.php en src de la balise source d’une balise audio

Si c’est une image ou un fichier texte le contenu est affiché correctement mais lorsque c’est un fichier video ou audio, je n’ai pas d’erreur 404 pour la récuperation de la ressource, je n’ai juste pas de contenu dans ma balise audio ou video.

J’ai essayé de comparer les headers que je renvoie avec les headers renvoyés par le serveur lorsque l’on fait un appel « normal » à un fichier video/audio (ex: /song/mysong.ogg) et ça donne ça :

Appel normal :
< HTTP/1.1 200 OK
< Date: Sun, 03 Jun 2018 11:20:05 GMT
< Server: Apache/2.4.25
< Last-Modified: Sat, 02 Jun 2018 11:09:34 GMT
< ETag: "4cd498-56da6bc498154"
< Accept-Ranges: bytes
< Content-Length: 5035160
< Content-Type: audio/ogg
Appel page file.php :
< HTTP/1.1 200 OK
< Date: Sun, 03 Jun 2018 11:20:43 GMT
< Server: Apache/2.4.25
< Pragma: no-cache
< Cache-Control: no-store, no-cache, must-revalidate
< Accept-Ranges: bytes
< Expires: Sun, 03 Jun 2018 15:20:43 CEST
< Content-Length: 5035160
< Content-Type: audio/ogg
Le corps du message est identique pour les deux réponses et lorsque je passe l’url « normal » en source à ma balise, le fichier est lu.
Je ne trouve pas qu’il y aie quelque chose de véritablement différent entre les deux réponses.

Pouvez vous m’aider s’il vous plait ? Avez vous une idée ? Merci d’avance :)
Le temps donne sa légitimité à l'existence...

ViPHP
ViPHP | 1996 Messages

03 juin 2018, 19:11

Comment renvois-tu les fichiers vidéos ou audios ? Quelles sont les balises utilisées ?
Un truc du style en HTML 5 ?
<video controls src="video.ogv">Ici la vidéo</video>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 88 Messages

03 juin 2018, 20:23

J'ai un objet Response qui contient des headers et un body. Le body est "echo". Je récupère le contenu du fichier avec file_get_content(). Et l'url du fichier est placé dans l'attribut src d'une balise <source>.
Le temps donne sa légitimité à l'existence...

Eléphant du PHP | 88 Messages

04 juin 2018, 11:49

Alors, j'ai trouvé la solution : ça ne venait pas du code mais du serveur !
J'ai passé le module mpm d'apache en mode worker (il était en mode event avant) et finalement je retourne ces headers maintenant :

Code : Tout sélectionner

Content-Disposition: inline; filename="filename" Content-Type: filemimetype Content-Length: filename Content-Transfer-Encoding: binary Cache-Control: no-cache Accept-Ranges: bytes Expires: plus_tard

J'ai pensé à mpm quand j'ai tester sur Chrome et que j'ai vu que mes requêtes étaient en "pending".

Bonne journée à tous ;)
Le temps donne sa légitimité à l'existence...