Problème explorateur de fichiers (lecteur réseau) [Résolu][Php] - PHP - Programmation
Marsh Posté le 19-02-2003 à 15:40:21
Notsukaw a écrit : Donc existe-t-il une manière de contourner ce problème afin que ce soit bien mon serveur qui lance le téléchargement de fichier, vers le client, et non pas le client qui essaye de le faire directement ? |
Bin tu passes par un script PHP
C'que j'veux dire, c'est qu'au lieu de mettre un lien direct vers le document, tu mets un lien vers un script download.php qui fait tout ce qu'il a à faire comme traitement avant de rediriger l'utilisateur vers le download du fichier en lui-même. Non ?
Marsh Posté le 19-02-2003 à 16:15:17
Taiche a écrit : |
Ouep ça je sais bien, mais je vois pas justement les traitements qu'il faut faire afin que le download soit possible
Créer à chaque fois sur le serveur une copie temporaire du fichier qu'on veut télécharger et ensuite balancer le téléchargement de ce fichier tempo (puisque là le client arrivera à le trouver) ? Ca me parait laborieux comme technique mais pour l'instant j'en vois pas d'autre
Marsh Posté le 19-02-2003 à 16:22:29
Notsukaw a écrit : |
Bin oui
Faudrait un système de callback pour que le serveur sache quand le client a fini son download mais j'ai pas ça sous la main.
Au pire, tu fais un script qui vire tous les fichiers qui ont plus d'1h de vie, mais franchement c'est de la grosse bidouille à deux balles.
Si quelqu'un a une solution propre, ça m'intéresse aussi, chu curieux de savoir
Marsh Posté le 19-02-2003 à 22:58:50
Une solution envisageable :
Créer un script php (ici, dl.php) qui prend en paramètre le nom du fichier à charger avec son chemin complet (que j'appelle $fic), du point de vue du serveur ($fic=$Entry; ou $fic=$Directory.$Entry; si je saisis votre script) et changer la balise <a href> (celle dans la boucle while, après l'image "carre_rouge.gif" ) par ceci :
---...
<a href="dl.php?fichier=$fic"> $fic </a>
---
(faut ajouter les guillemets, slashs et anti-slashs nécessaires)
et le script dl.php ressemble à ça :
---------- dl.php -----------
<?php
$filename=$_GET["fichier"];
$sendname=basename($filename);
header("Cache-control: private" ); // fix for IE
header("Content-Type: application/octet-stream" );
header("Content-Length: ".filesize($filename));
header("Content-Disposition: attachment; filename=$sendname" );
$fp = fopen($filename, 'r';
fpassthru($fp);
// fclose($fp); // Inutile avec fpassthru ?
?>
-----------------------------
Ca vient principalement des contributions des utilisateurs dans la doc php sur la fonction header :
http://www.php.net/manual/fr/function.header.php
Bien sur, il faut faire quelques vérifications sur $filename, afin de ne pas laisser charger n'importe quoi (comme ça brut, un utilisateur mal intentionné pourrait taper dans son navigateur "http://url/dl.php?fichier=cwindows/system.dat" ou je ne sais quel fichier représentant la base de registre pour le récupérer et pourrait l'analyser pour éventuellement récupérer des infos sur les utilisateurs)
Remarque : si le client est Mozilla 1.0 ou 1.1, la boite de dialogue pour sauvegarder le fichier ajoute l'extension .php, quelque soit le type du fichier ; pour éviter ce comportement, je crois qu'il faut ajouter '/' avant le '?' dans le <a href> :
<a href="dl.php/?fichier=$fic"> $fic </a>
Mozilla 1.2.1 résoud ce problème (au moins sous Linux)
Marsh Posté le 20-02-2003 à 01:04:03
unk00 a écrit : |
J'essaye ça demain et je vous tiens au courant
Marsh Posté le 20-02-2003 à 11:13:27
Putain ça marche presque !!!
Il me lance bien le téléchargement, mais en fait ça foire au niveau de la fin de la transmission, donc je n'obtiens que des fichiers corrompus, mais il manque pas grand chose je sens.
Marsh Posté le 20-02-2003 à 12:22:26
Ayé c'est bon ça fonctionne comme ça :
Code :
|
Marsh Posté le 19-02-2003 à 15:36:24
Bonjour à tous,
Ca fait deux jours que je me prends la tête dessus et ne trouve pas de solution
Afin d'exploiter des données communes stockées sur un lecteur réseau (autre que le serveur Apache), j'ai créé un petit module d'exploration de fichiers.
Donc voilà mon problème ...
La navigation se passe très bien (changement de répertoire, remonter, etc ...), par contre dès que je clique sur un fichier, afin de lancer le téléchargement de celui-ci, le navigateur ne trouve pas ce fichier (normal puisque seul mon serveur apache connaît le chemin).
Donc existe-t-il une manière de contourner ce problème afin que ce soit bien mon serveur qui lance le téléchargement de fichier, vers le client, et non pas le client qui essaye de le faire directement ?
Voici le code de mon explorateur :
Message édité par Notsukaw le 20-02-2003 à 12:23:29
---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro) [Galerie perso]