Page 1 sur 1
Protéger du contenu multimédia...
Posté : 17 déc. 2010, 19:30
par duvalwaafti
Bonjour,
Encore une question je sais mais vu que je dois encore tout apprendre, je vous demande un petit avis.
Je souhaite effectuer un lien avec id de session (en fait la personne visitant mon site sera dirigé vers une page download.php qui conduira à un id lié à une bdd mysql
je fais le lien suivant :
<?
echo "<a href="download.php", $_SESSION['ima']=$22>Photos 22>";</a>?>
ma page download.php aurait l'instruction suivant avant tout code :
SELECT `path` FROM `file` WHERE `id`=$ima
<?php
if(!empty($_GET["id"])){
$conn=mysql_connect('mondomaine.com','waaftiduval','xyz');
mysql_select_db('bdmultim',$conn);
$res=mysql_query("select path from files where id=".$_GET["id"]) or die(mysql_error());
if(mysql_num_rows($res)!=0){
$row=mysql_fetch_object($res);
header("Content-type: application/force-download");
header("Content-Length: ".filesize($row->path));
header("Content-Disposition: attachment; filename=".basename($row->path));
readfile($row->path);
}
}
?>
Le contenu, lui serait ensuite protéger par un fichier .htaccess joint dans le dossier (je protégerais de la sorte les "aspirateurs de site")
Merci de tous vos conseils.
Re: Protéger du contenu multimédia...
Posté : 17 déc. 2010, 22:49
par moogli
salut,
A priori tu ne fournira pas le lien physique et tu peut gérer les accès via un espace membre.
Par contre la syntaxe proposé du lien est plus qu'incorrecte !
@+
Re: Protéger du contenu multimédia...
Posté : 17 déc. 2010, 23:47
par duvalwaafti
Tu peux m'aider un peu sur la syntaxe ... je me plante à chaque fois dans mes "sessions" ?
Comme cela ?
<a href="download.php"><?php
session_start();
$_SESSION['ima'] =$22;
?>image 22</a>
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 09:34
par xTG
session_start() doit être la première instruction de ta page.
Enfin c'est quoi l'utilité de la variable de session dans ton cas ?
Ton code de récupération est fait sur une valeur $_GET.
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 11:35
par duvalwaafti
Bonjour,
Je souhaite donner un identifiant de session "ima" lors de l'ouverture du lien afin que cette identification aille rechercher dans la BDD Mysql un chemin d'accès vers un fichier image.
Tu parles de la récupération GET je viens de voir que j'ai mis
if(!empty($_GET["id"])){
je devrais peut-être écrire
if(!empty($_GET["ima"])){
En fait, ce que je cherche c'est d'éviter que l'on accède aux fichiers images en lien direct.
J'avais pensé au fichier .htaccess dans le répertoire mais je n'arrive pas à écrire ce fichier car je veux éviter le mot de passe.
La sous-question dans ce cas est :
est il possible de protéger un dossier sans mot de passe (p ex il faut absolument passer par la page des thumbs pour accéder au fichier "téléchargeable)
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 11:42
par Ryle
Je suis d'accord avec xTG. L'objectif de la session est de te permettre de conserver une information de page en page, tout au long de la navigation du visiteur. Si l'objectif est simplement de passer une info d'une page à une autre, les sessions ne te seront pas utiles.
De plus, pour qu'elles fonctionnent correctement et pouvoir y stocker la valeur choisie par l'utilisateur, il faut d'abord que l'utilisateur ait choisi son lien (il n'y a donc pas de raison de faire référence à la session quand tu constitues le lien).
Au final, ton lien devrait être un simple lien html (avec éventuellement une partie rendue dynamique par php) :
<a href="download.php?ima=<?php echo $maVariableQuiContientLIdDeLImage; ?>"> image 22 </a>
Tu peux ainsi récupérer dans ton script download.php la valeur de $_GET['ima'] qui contiendra l'id de l'image du lien qui a été utilisé.
Et ce n'est qu'à partir de là, si tu souhaites conserver cette information pour la réutiliser ultérieurement sur d'autres pages (mais est-ce vraiment nécessaire ?), que tu peux utiliser les sessions. Il te suffit alors de démarrer une session au début de ta page download.php, puis, une fois que tu as récupéré la valeur de $_GET['ima'], enregistrer celle-ci dans le tableau $_SESSION

Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 11:58
par duvalwaafti
Bonjour Ryle,
Ok donc quand le surfeur clique sur le lien il prend la variable définie dans le lien et ira chercher le bon chemin d'accès à la donnée dont l'identifiant est "$maVariableQuiContientLIdDeLImage"
Et comme sur la page je risque d'y mettre plusieurs fichiers ou packs images, je dois éviter que la variable de session reste de page en page.
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 12:03
par duvalwaafti
J'ai oublié un point qui me semble important,
La variable définie dans le lien, si avant l'ouverture de la page download.php, un script de micro-paiement interviens, est ce que cette variable ne sera pas "détruite" ?
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 13:39
par xTG
On vient de te montrer que ta variable de session ne sert strictement à rien...
Quant à l'option de micropaiement c'est pas du tout clair ton affaire là. Il nous faudrait plus d'information sur comment le processus se déroule.
Payer avant de choisir un téléchargement ? Payer le téléchargement choisi ?
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 15:23
par duvalwaafti
Re,
Alors comment cela se passe-t-il...
Une page de thumbs proposerait des packs photos;
Le visiteur clique sur le pack voulu et arrive ensuite sur une page de "paiement";
Le paiement effectué, le téléchargement peu débuté ...
La solution toute simple était le lien direct sur une page "normale" mais le soucis est que le fichier est "multimédia" et de ce fait, il est aisé d'accèder au fichier en lien direct (c'est pour cela que je "cachais" le lien dans une bdd mysql avec un identifiant.
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 16:29
par xTG
A priori du fait du système de paiement il te faudrait des urls non fixes.
Donc un id associé à chaque thumb dans l'url. Lors du clic dessus génération d'un id aléatoire dans une table avec le fichier à télécharger en correspondance et un champs timestamp pour indiquer une expiration du délai (afin que le lien ne soit pas valide à tout jamais).
Après cela dépend de comment fonctionne ton système de paiement, mais dans tous les cas il faudra bien qu'il revienne à un endroit sur ton site, donc c'est le lien avec l'id aléatoire qu'il faut qu'il renvoie.
Grâce à cet ID tu vas rechercher dans ta table la correspondance avec le fichier et tu le mets en téléchargement.
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 16:42
par duvalwaafti
Ok donc l'idée de Ryle avec un id dans le lien est la bonne piste mais :
Si l'Id est aléatoire, comment relier à un ID fixe dans la table ?
Le champ timestamp, je pense qu'il n'est pas utile car le gestionnaire de paiement vérifie lors de la page download si le code de paiement est valide.
Donc je mets sur mon thumbs le lien suivant :
<a href="download.php?ima=<?php echo $22; ?>"> image 22 </a>
La page de paiement fait son office et renvoie mon client sur la page :
.../download.php?ima$22
et le script cherchant dans la bdd :
SELECT `path` FROM `file` WHERE `id`=$ima
<?php
if(!empty($_GET["ima"])){
$conn=mysql_connect('mondomaine.com','waaftiduval','xyz');
mysql_select_db('bdmultim',$conn);
$res=mysql_query("select path from files where id=".$_GET["ima"]) or die(mysql_error());
if(mysql_num_rows($res)!=0){
$row=mysql_fetch_object($res);
header("Content-type: application/force-download");
header("Content-Length: ".filesize($row->path));
header("Content-Disposition: attachment; filename=".basename($row->path));
readfile($row->path);
}
}
?>
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 17:57
par xTG
Je n'ai jamais utilisé de système de paiement donc je ne sais pas comment cela fonctionne.
Mais si tu peux vérifier le paiement sur la page de téléchargement alors en effet pas besoin d'id aléatoire, ni de timestamp, pour cacher le lien puisque toute personne tapant manuellement l'url obtiendra une erreur du fait qu'il n'a pas payé.
Donc en gros ta table files suffira amplement.
Ainsi ton algo est donc correct, reste plus qu'à le vérifier. ^^
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 18:31
par duvalwaafti
J'ai testé et ca commence "pas bien"
( ! ) Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in C:\Program Files (x86)\EasyPHP-5.3.4.0\www\index.php on line 51
La ligne 51 est la ligne
<a href="download.php?ima=<?php echo $22; ?>"> image 22 </a>
Re: Protéger du contenu multimédia...
Posté : 18 déc. 2010, 18:52
par moogli
le problème viens du fait que ta variable $22 est syntaxiquement incorrect.
une variable ne peut commencer pas un chiffre =>
la doc
@+