Php et ftp

Fermé
ShiNji - 30 déc. 2007 à 20:04
 ShiNji - 31 déc. 2007 à 02:25
Bonsoir et joyeuses fetes a tous

en cette periode de fete j'ai une petite question...

j'ai un site web et un serveur ftp contenant des fichiers.
j'aimerai pouvoir mettre les fichiers en telechargement sur mon site.
le hic est que j'aimerai que la seul solution pour venir telecharger les fichiers soit de passé via mon site web.
en gros que le log et le pass ne soit pas visible dans le lien mais plutot que le serveur web phase une sorte de relai d'authentification.
j'espere avoir ete clair dans mon explication...
Sinon tant que j'y suis si vous connaissez une bonne solution php/mysql pour faire des stats sur ces fameux telechargement ftp ca m'interesse

en tout cas eclatez vous bien!!!

ShiNji
A voir également:

11 réponses

Bonjour,

Si ton serveur est un serveur Apache, tu peux utiliser un fichier .htaccess contenant la ligne
Deny from all
dans le répertoire qui contient les fichiers pour interdire tout téléchargement direct.
Ça obligera le gens à passer par ton site.
0
et ca fonction comment dans le cas ou tu as par exemple deux serveur ton serveur web avec ton apache php/mysql et un serveur ftp ailleur?
quelle sera la forme de ton lien?
0
Pardon, si tes fichiers sont dans un serveur ftp séparé du site web, un fichier .access ne sert absolument à rien.
Il faut passer par un script php

Je te montre le principe ci-dessous, il serait beaucoup plus intelligent de faire des boucles pour traiter la liste des fichiers :

tu crées une page avec une liste du genre

<a href="analyse.php"?id=1>télécharger fichier 1</a><BR>
<a href="analyse.php"?id=2>télécharger fichier 2</a><BR>
<a href="analyse.php"?id=2>télécharger fichier 3</a><BR>
etc

dans le fichier analyse.php

<?php
if (isset $_GET['id']) {
$fichier=""
switch ($_GET['id']) {
case 1 : $fichier="fichier1.wma"; break;
case 2 : $fichier="fichier2.jpg"; break;
case 3 : $fichier="fichier3.doc"; break;
} // switch
if ($fichier!="") { // s'il y a bien un fichier à charger
header('content-type: application');
readfile('ftp://loginftp:mdpftp@serveurftp/repertoire/'.$fichier);
exit;
}
} // if
echo 'demande incorrecte';
?>
0
ahh merci :)

parcontre une question pourquoi il me le telecharge en donnant pour nom le nom du script php?
2eme question dans le cas d'un mp3 comment faire pour le lire dans un lecteur flash qui necessite le lien de la source?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pour la deuxième question, enlève le
header('content-type: application');
En fait il faudrait le remplacer par un content-type adapté à chaque type de fichier que tu charges. Si c'est toujours du mp3 (tu as bien les droits ?) il faut :
header('content-type: audio/mpeg');

Pour la première question, je me re-penche sur le sujet
0
merci de ton aide :)
c'est peu etre quelque chose a ajouter dans le header?

je viens de faire le test pour le mp3 sauf qu'il lance le lecteur quick time dans une page...

moi en fait j'ai un petit lecteur flash comme ceci (le code est generé dans un script php):

<object width="200" height="20" data="flash/dewplayer.swf?mp3=ftp://toto:toto@toto.fr/toto.mp3" type="application/x-shockwave-flash">
<param value="transparent" name="wmode"/>
<param value="flash/dewplayer.swf?mp3=ftp://toto:toto@toto.fr/toto.mp3" name="movie"/>
</object>

donc j'aimerai pouvoir cacher le lien du mp3 pour eviter que l'on voit le login et password (ou simplement cacher le log et password) sinon c'est facil de venir tout telecharger directement du ftp... j'ai chercher dans les fonction ftp de php mais je n'ai pas trouvé mon bonheur (ou mal compris les descriptions des fonctions)
0
tu as essayé de remplacer le ftp:...mp3 par l'appel au script que je te proposais ?
<param value="flash/dewplayer.swf?mp3=http://site/analyse.php?id=1" name="movie"/>
avec id=1 ou 2 ou 3 etc..
0
ok pour ca c'est parfait ca marche!!!
merci c'est parfait!!!!
pour le download parcontre si tu trouves une solution je suis preneur :) c'est etange quand meme qu'il preine le nom du script...
0
Non, c'est normal qu'il prenne le nom du script. Le client interroge ton serveur HTTP avec le nom du script, il est tout à fait logique qu'il considère que les infos qui reviennent portent le nom de ce script. Il ne sait pas quelle "cuisine" on a fait derrière pour aller chercher le fichier, puisque justement on a voulu le cacher.
Je n'ai pour l'instant aucune idée pour éviter ça
0
ok je vois effectivement.
donc c'est plus au niveau du header qu'il faut chercher je suppose.
0
ca fonctionne en ajoutant cette ligne
header("Content-Disposition: attachment; filename=".basename($fichier));
il faut que je le teste sur plusieurs download voir si cela fonctionne bien
0