8791 sujets

Développement web côté serveur, CMS

Hello,

je cherche un moyen d'éviter que, lorsque mes visiteurs cliquent sur le lien de mes vidéos, celles-ci ne s'ouvrent dans le mediaplayer ou directement dans le navigateur (IE).

J'essaye bien d'expliquer qu'il faut faire un clique droit et choisir "enregistrer la cible du lien sous", mais je constate que les gens n'y font pas attention.

Comme il s'agit de fichiers vidéos qui ne sont pas en streaming et qui sont volumineux, ils ne peuvent pas être lus directement, d'où ma démarche...
Modifié par Noisequik (14 May 2007 - 14:47)
Noisequik a écrit :
Hello,

je cherche un moyen d'éviter que, lorsque mes visiteurs cliquent sur le lien de mes vidéos, celles-ci ne s'ouvrent dans le mediaplayer ou directement dans le navigateur (IE).

Salut
Je ne suis pas sur que la solution soit en JS.
Amha je chercherai plutot une solution serveur (php ou autre).
Tu ne peux pas forcer les utilisateurs à utiliser le menu contextuel > enregistrer la cible sous.
Par contre, tu peux forcer le téléchargement d'un fichier quelconque au moyen de php.

Voici un exemple volontairement simpliste :

<?php
$fichier = $_GET['fichier'];
$data = file_get_contents($fichier);
header("Content-Type:video/quicktime");
header("Content-Disposition:attachment; filename=$fichier");
echo $data;
?>

En appelant la page avec le paramètre qui va bien, tu pourras forcer le téléchargement d'un fichier. Attention à bien mettre à jour les liens qui seront de la forme page.php?fichier=monfichier.avi.
Attention également à bien vérifier ce que contient la variable GET pour éviter toute faille de sécurité. Ici, je n'y prends pas garde, je reste simple.
Pense aussi à adapter le Content-Type en fonction du format que tu proposes.
Merci bien pour ta réponse, je vais me lancer dans cette page php et je te tiens au courant.

Si un modo passe par là, merci de déplacer le post dans le salon adéquat

Smiley biggrin
malheureusement je crois que cette ligne risque de poser problème

$data = file_get_contents($fichier);


Car mes fichiers font plusieurs centaines de mégas Smiley confused
Tu peux forcer le contenu du fichier avec la méthode d'attachement (comme indiquée par QuentinC) ou en forçant le type de contenu :
header('Content-type: application/force-download');
Dans ce cas ouvre le fichier avec fopen, et envoie le contenu au fur et à mesure que tu lis le fichier, genre par paquet de 32 ou 64 Ko. Comme ça tu es sûr de ne pas provoquer une erreur de mémoire.


$stream = fopen($fichier, "r");
while (!feof($stream)) {
$buffer = fread($stream, 65536);
echo $buffer;
}
fclose($stream);
QuentinC a écrit :
Dans ce cas ouvre le fichier avec fopen, et envoie le contenu au fur et à mesure que tu lis le fichier, genre par paquet de 32 ou 64 Ko. Comme ça tu es sûr de ne pas provoquer une erreur de mémoire.


$stream = fopen($fichier, "r");
while (!feof($stream)) {
$buffer = fread($stream, 65536);
echo $buffer;
}
fclose($stream);


C'est tout bon, ca marche mieux que readfile, merci 1000 fois !
Modifié par Noisequik (14 May 2007 - 14:47)