J'ai besoin de réfléchir à la conception d'un système de téléchargement.
Exemple : un site de gestion de contenu va proposer à l'internaute de
pouvoir, après sélection et moteur de recherche, le téléchargement d'un
fichier (pdf, mpg, etc...).... Problème, il ne faut pas donner l'url
directe, il faut proposer une url temporaire valable par exemple 15 minutes,
ce qui signifie l'appel d'un script avec des paramètres, ce script envoyant
le fichier en réponse ou redirigeant sur une page d'expiration de
"session"....
Je suppose que de faire un fopen sur le fichier pour ensuite l'envoyer au
navigateur ligne par ligne est super gourmand en ressource et pas forcément
optimisé.
Dans ce cas de figure, que j'ai déjà vu sur le web : comment on fait, en
gros ? Il y a très certainement des méthodes principales et une logique
générales...
Quelqu'un a déjà travaillé sur un système du genre, ou y a déjà réfléchis ?
Le 18 Oct 2007 23:21:22 GMT, slambert écrivait dans fr.comp.lang.php:
J'ai besoin de réfléchir à la conception d'un système de téléchargement.
[...]
Quelqu'un a déjà travaillé sur un système du genre, ou y a déjà réfléchis ?
Je suis en train de réfléchir à un système similaire. Dans mon cas, il s'agit de bulletins anciens d'une revue livrés sous forme de pdf.
Ce que je ferais, c'est de créer un fichier, disons
20071018-4125-no-1.pdf où
20071018 est la date 4125 est un numéro aléatoire no-1 est le nom du fichier
Le tout précédé d'une commande comme
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
avec un
system ("rm 20071018-4125-no-1.pdf");
envoyé une heure plus tard via un "crontab", soit via un fichier 20071018-15.php avec la liste des fichiers à effacer pour l'heure (15:00 ici).
Evidemment, s'il y a une méthode plus simple, je suis preneur ;-)
Denis
Olivier Miakinen
Salut tous :)
J'ai besoin de réfléchir à la conception d'un système de téléchargement.
Exemple : un site de gestion de contenu va proposer à l'internaute de pouvoir, après sélection et moteur de recherche, le téléchargement d'un fichier (pdf, mpg, etc...).... Problème, il ne faut pas donner l'url directe, il faut proposer une url temporaire valable par exemple 15 minutes, ce qui signifie l'appel d'un script avec des paramètres, ce script envoyant le fichier en réponse ou redirigeant sur une page d'expiration de "session"....
Je suppose que de faire un fopen sur le fichier pour ensuite l'envoyer au navigateur ligne par ligne est super gourmand en ressource et pas forcément optimisé.
Bof... pourquoi pas ? Pas un fopen, mais un readfile. Il faudrait faire des mesures pour voir si c'est vraiment si gourmand en ressources.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
Salut tous :)
J'ai besoin de réfléchir à la conception d'un système de téléchargement.
Exemple : un site de gestion de contenu va proposer à l'internaute de
pouvoir, après sélection et moteur de recherche, le téléchargement d'un
fichier (pdf, mpg, etc...).... Problème, il ne faut pas donner l'url
directe, il faut proposer une url temporaire valable par exemple 15 minutes,
ce qui signifie l'appel d'un script avec des paramètres, ce script envoyant
le fichier en réponse ou redirigeant sur une page d'expiration de
"session"....
Je suppose que de faire un fopen sur le fichier pour ensuite l'envoyer au
navigateur ligne par ligne est super gourmand en ressource et pas forcément
optimisé.
Bof... pourquoi pas ? Pas un fopen, mais un readfile. Il faudrait faire
des mesures pour voir si c'est vraiment si gourmand en ressources.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras
qu'au bout des 15 minutes.
http://fr.php.net/manual/fr/function.symlink.php
(ne fonctionne que sur Unix)
J'ai besoin de réfléchir à la conception d'un système de téléchargement.
Exemple : un site de gestion de contenu va proposer à l'internaute de pouvoir, après sélection et moteur de recherche, le téléchargement d'un fichier (pdf, mpg, etc...).... Problème, il ne faut pas donner l'url directe, il faut proposer une url temporaire valable par exemple 15 minutes, ce qui signifie l'appel d'un script avec des paramètres, ce script envoyant le fichier en réponse ou redirigeant sur une page d'expiration de "session"....
Je suppose que de faire un fopen sur le fichier pour ensuite l'envoyer au navigateur ligne par ligne est super gourmand en ressource et pas forcément optimisé.
Bof... pourquoi pas ? Pas un fopen, mais un readfile. Il faudrait faire des mesures pour voir si c'est vraiment si gourmand en ressources.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
Olivier Miakinen
Ce que je ferais, c'est de créer un fichier, disons
20071018-4125-no-1.pdf où
20071018 est la date 4125 est un numéro aléatoire no-1 est le nom du fichier
Ça me semble bien. À condition de ne pas recopier le fichier inutilement.
Le tout précédé d'une commande comme
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Puisque tu copies avec cp, je suppose que le serveur est un Unix ou équivalent. Il vaudrait mieux faire un « ln » ou « ln -s », ce qui peut se faire directement sans appel à system() : http://fr2.php.net/manual/fr/function.link.php http://fr2.php.net/manual/fr/function.symlink.php
avec un
system ("rm 20071018-4125-no-1.pdf");
http://fr2.php.net/manual/fr/function.unlink.php
Note que, contrairement à ce que son nom peut laisser supposer, l'appel système unlink() et la fonction PHP de même nom peuvent servir à effacer des fichiers copiés par cp ou créés de quelque manière que ce soit : ce n'est pas réservé aux liens créés par link() et symlink() !
En fait, la commande rm fait un unlink().
Ce que je ferais, c'est de créer un fichier, disons
20071018-4125-no-1.pdf où
20071018 est la date
4125 est un numéro aléatoire
no-1 est le nom du fichier
Ça me semble bien. À condition de ne pas recopier le fichier inutilement.
Le tout précédé d'une commande comme
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Puisque tu copies avec cp, je suppose que le serveur est un Unix ou
équivalent. Il vaudrait mieux faire un « ln » ou « ln -s », ce qui peut
se faire directement sans appel à system() :
http://fr2.php.net/manual/fr/function.link.php
http://fr2.php.net/manual/fr/function.symlink.php
avec un
system ("rm 20071018-4125-no-1.pdf");
http://fr2.php.net/manual/fr/function.unlink.php
Note que, contrairement à ce que son nom peut laisser supposer, l'appel
système unlink() et la fonction PHP de même nom peuvent servir à effacer
des fichiers copiés par cp ou créés de quelque manière que ce soit : ce
n'est pas réservé aux liens créés par link() et symlink() !
Ce que je ferais, c'est de créer un fichier, disons
20071018-4125-no-1.pdf où
20071018 est la date 4125 est un numéro aléatoire no-1 est le nom du fichier
Ça me semble bien. À condition de ne pas recopier le fichier inutilement.
Le tout précédé d'une commande comme
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Puisque tu copies avec cp, je suppose que le serveur est un Unix ou équivalent. Il vaudrait mieux faire un « ln » ou « ln -s », ce qui peut se faire directement sans appel à system() : http://fr2.php.net/manual/fr/function.link.php http://fr2.php.net/manual/fr/function.symlink.php
avec un
system ("rm 20071018-4125-no-1.pdf");
http://fr2.php.net/manual/fr/function.unlink.php
Note que, contrairement à ce que son nom peut laisser supposer, l'appel système unlink() et la fonction PHP de même nom peuvent servir à effacer des fichiers copiés par cp ou créés de quelque manière que ce soit : ce n'est pas réservé aux liens créés par link() et symlink() !
En fait, la commande rm fait un unlink().
CrazyCat
A cela j'ajouterais qu'il est inutile de s'embéter acec un cron alors que de fonctions comme filemtime permettent de savoir quand le fichier a été créé (modifié) et donc de le supprimer si le temps est écoulé.
-- Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu Réseau IRC Francophone: http://www.crazy-irc.net
A cela j'ajouterais qu'il est inutile de s'embéter acec un cron alors
que de fonctions comme filemtime permettent de savoir quand le fichier a
été créé (modifié) et donc de le supprimer si le temps est écoulé.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
A cela j'ajouterais qu'il est inutile de s'embéter acec un cron alors que de fonctions comme filemtime permettent de savoir quand le fichier a été créé (modifié) et donc de le supprimer si le temps est écoulé.
-- Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu Réseau IRC Francophone: http://www.crazy-irc.net
slambert
Bof... pourquoi pas ?
Parceque tu le traites ligne par ligne ? Il faudrait ue je teste avec un include, directement. C'est bourrin, mais est ce que ca marcherait....
readfile.
Je vais creuser.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Stef
Bof... pourquoi pas ?
Parceque tu le traites ligne par ligne ? Il faudrait ue je teste avec un
include, directement. C'est bourrin, mais est ce que ca marcherait....
readfile.
Je vais creuser.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras
qu'au bout des 15 minutes.
http://fr.php.net/manual/fr/function.symlink.php
(ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Parceque tu le traites ligne par ligne ? Il faudrait ue je teste avec un include, directement. C'est bourrin, mais est ce que ca marcherait....
readfile.
Je vais creuser.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Stef
slambert
Ce que je ferais, c'est de créer un fichier, disons 20071018-4125-no-1.pdf où
Donc en fait tu crées un fichier par lien de telechargement à gerer ?
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Passons sur le fait que tu as accès au Cron, alors que je vais etre en mutualisé.... Au pire un script peut aller efffacer les fichiers dont le nom est d'un certain type par rapport à la date du jour.
C'est clair que tu n'as pas à traiter tes telechargement via un script, ca va economiser des ressources. Mais ca fait quand meme pas mal de fichiers, si le truc monte en volume ca va exploser, sauf si tu fais des liens symboliques :) De plus, ca sera moins evident pour faire des stats par fichiers, par user, etc.... Et tu n'es pas sur que c'est bien la bonne personne qui va venir telecharger, vu que n'importe qui pourra downloader sans passer par la verification de Session.......
A voir, à voir....
En tout cas, je préfère me poser mes ces questions avant de commencer, c'est plus sain :)
Stef
Ce que je ferais, c'est de créer un fichier, disons
20071018-4125-no-1.pdf où
Donc en fait tu crées un fichier par lien de telechargement à gerer ?
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Passons sur le fait que tu as accès au Cron, alors que je vais etre en
mutualisé.... Au pire un script peut aller efffacer les fichiers dont le
nom est d'un certain type par rapport à la date du jour.
C'est clair que tu n'as pas à traiter tes telechargement via un script, ca
va economiser des ressources. Mais ca fait quand meme pas mal de fichiers,
si le truc monte en volume ca va exploser, sauf si tu fais des liens
symboliques :) De plus, ca sera moins evident pour faire des stats par
fichiers, par user, etc.... Et tu n'es pas sur que c'est bien la bonne
personne qui va venir telecharger, vu que n'importe qui pourra downloader
sans passer par la verification de Session.......
A voir, à voir....
En tout cas, je préfère me poser mes ces questions avant de commencer, c'est
plus sain :)
Ce que je ferais, c'est de créer un fichier, disons 20071018-4125-no-1.pdf où
Donc en fait tu crées un fichier par lien de telechargement à gerer ?
system ("cp ../secretGhjiNV/no-1.pdf 20071018-4125-no-1.pdf");
Passons sur le fait que tu as accès au Cron, alors que je vais etre en mutualisé.... Au pire un script peut aller efffacer les fichiers dont le nom est d'un certain type par rapport à la date du jour.
C'est clair que tu n'as pas à traiter tes telechargement via un script, ca va economiser des ressources. Mais ca fait quand meme pas mal de fichiers, si le truc monte en volume ca va exploser, sauf si tu fais des liens symboliques :) De plus, ca sera moins evident pour faire des stats par fichiers, par user, etc.... Et tu n'es pas sur que c'est bien la bonne personne qui va venir telecharger, vu que n'importe qui pourra downloader sans passer par la verification de Session.......
A voir, à voir....
En tout cas, je préfère me poser mes ces questions avant de commencer, c'est plus sain :)
Stef
Olivier Miakinen
Bof... pourquoi pas ?
Parceque tu le traites ligne par ligne ?
Non, il ne faut surtout pas le faire ligne par ligne !
Le code doit se résumer à quelque chose comme ça, aux inévitables vérifications près (je donne l'exemple pour un JPEG) :
Cela dit, un lien (symbolique ou non) serait probablement préférable.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Et alors ? Chez Galacsys, j'ai demandé un jour à ce qu'on me crée un lien symbolique vers un répertoire parce que je ne pouvais pas le faire par FTP : ils ont eu la gentillesse de le faire, mais en précisant que j'aurais parfaitement pu le faire moi-même par PHP, alors même que c'était en dehors de l'arborescence web (mais dans mes répertoires, bien sûr).
Donc : commence par essayer, et seulement si ça ne marche pas demande à ton FSI s'ils ne pourraient pas débrider cette fonctionnalité.
Bof... pourquoi pas ?
Parceque tu le traites ligne par ligne ?
Non, il ne faut surtout pas le faire ligne par ligne !
Le code doit se résumer à quelque chose comme ça, aux inévitables
vérifications près (je donne l'exemple pour un JPEG) :
Cela dit, un lien (symbolique ou non) serait probablement préférable.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras
qu'au bout des 15 minutes.
http://fr.php.net/manual/fr/function.symlink.php
(ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Et alors ? Chez Galacsys, j'ai demandé un jour à ce qu'on me crée un
lien symbolique vers un répertoire parce que je ne pouvais pas le faire
par FTP : ils ont eu la gentillesse de le faire, mais en précisant que
j'aurais parfaitement pu le faire moi-même par PHP, alors même que
c'était en dehors de l'arborescence web (mais dans mes répertoires,
bien sûr).
Donc : commence par essayer, et seulement si ça ne marche pas demande à
ton FSI s'ils ne pourraient pas débrider cette fonctionnalité.
Cela dit, un lien (symbolique ou non) serait probablement préférable.
Mais sinon, tu peux toujours faire un lien symbolique que tu n'effaceras qu'au bout des 15 minutes. http://fr.php.net/manual/fr/function.symlink.php (ne fonctionne que sur Unix)
La bonne blague, c'est que je suis sur un mutualisé. :)
Et alors ? Chez Galacsys, j'ai demandé un jour à ce qu'on me crée un lien symbolique vers un répertoire parce que je ne pouvais pas le faire par FTP : ils ont eu la gentillesse de le faire, mais en précisant que j'aurais parfaitement pu le faire moi-même par PHP, alors même que c'était en dehors de l'arborescence web (mais dans mes répertoires, bien sûr).
Donc : commence par essayer, et seulement si ça ne marche pas demande à ton FSI s'ils ne pourraient pas débrider cette fonctionnalité.
CrazyCat
Olivier Miakinen wrote:
Le code doit se résumer à quelque chose comme ça, aux inévitables vérifications près (je donne l'exemple pour un JPEG) :
<?php header("Content-Type: image/jpeg"); header("Content-Disposition: inline; filename="toto.jpg""); readfile("/truc/bidule/toto.jpg"); ?> Cela dit, un lien (symbolique ou non) serait probablement préférable.
et pourquoi pas juste (après les inévitables contrôles de validité): header("Content-Disposition: inline; filename="nomALC.jpg""); readfile("/truc/bidule/toto.jpg");
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg Il suffit d'avoir un .htaccess par exemple qui permette de faire la relation entre un nomALC et un utilisateur et/ou timestamp.
-- Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu Réseau IRC Francophone: http://www.crazy-irc.net
Olivier Miakinen wrote:
Le code doit se résumer à quelque chose comme ça, aux inévitables
vérifications près (je donne l'exemple pour un JPEG) :
<?php
header("Content-Type: image/jpeg");
header("Content-Disposition: inline; filename="toto.jpg"");
readfile("/truc/bidule/toto.jpg");
?>
Cela dit, un lien (symbolique ou non) serait probablement préférable.
et pourquoi pas juste (après les inévitables contrôles de validité):
header("Content-Disposition: inline; filename="nomALC.jpg"");
readfile("/truc/bidule/toto.jpg");
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg
Il suffit d'avoir un .htaccess par exemple qui permette de faire la
relation entre un nomALC et un utilisateur et/ou timestamp.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
Le code doit se résumer à quelque chose comme ça, aux inévitables vérifications près (je donne l'exemple pour un JPEG) :
<?php header("Content-Type: image/jpeg"); header("Content-Disposition: inline; filename="toto.jpg""); readfile("/truc/bidule/toto.jpg"); ?> Cela dit, un lien (symbolique ou non) serait probablement préférable.
et pourquoi pas juste (après les inévitables contrôles de validité): header("Content-Disposition: inline; filename="nomALC.jpg""); readfile("/truc/bidule/toto.jpg");
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg Il suffit d'avoir un .htaccess par exemple qui permette de faire la relation entre un nomALC et un utilisateur et/ou timestamp.
-- Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu Réseau IRC Francophone: http://www.crazy-irc.net
slambert
Le code doit se résumer à quelque chose comme ça, aux inévitables vérifications près (je donne l'exemple pour un JPEG) : <?php header("Content-Type: image/jpeg"); header("Content-Disposition: inline; filename="toto.jpg""); readfile("/truc/bidule/toto.jpg"); ?>
Avec la création d'un lien symbolique vers le fichier à télécharger. Et un test avec filemtime (merci CrazyCat :) qui supprime le lien et redirige vers la page de fin de session si le temps alloué est expiré. En plus je commence à voir la structuration de mes objets.
Clairement, oui, ca peut le faire.
Va falloir que je fasse quelques tests, je vais encore avoir un bon We de détente, je le sens venir de loin celui là :)
Merci les gars
@++
Stef
Le code doit se résumer à quelque chose comme ça, aux inévitables
vérifications près (je donne l'exemple pour un JPEG) :
<?php
header("Content-Type: image/jpeg");
header("Content-Disposition: inline; filename="toto.jpg"");
readfile("/truc/bidule/toto.jpg");
?>
Avec la création d'un lien symbolique vers le fichier à télécharger. Et un
test avec filemtime (merci CrazyCat :) qui supprime le lien et redirige
vers la page de fin de session si le temps alloué est expiré. En plus je
commence à voir la structuration de mes objets.
Clairement, oui, ca peut le faire.
Va falloir que je fasse quelques tests, je vais encore avoir un bon We de
détente, je le sens venir de loin celui là :)
Le code doit se résumer à quelque chose comme ça, aux inévitables vérifications près (je donne l'exemple pour un JPEG) : <?php header("Content-Type: image/jpeg"); header("Content-Disposition: inline; filename="toto.jpg""); readfile("/truc/bidule/toto.jpg"); ?>
Avec la création d'un lien symbolique vers le fichier à télécharger. Et un test avec filemtime (merci CrazyCat :) qui supprime le lien et redirige vers la page de fin de session si le temps alloué est expiré. En plus je commence à voir la structuration de mes objets.
Clairement, oui, ca peut le faire.
Va falloir que je fasse quelques tests, je vais encore avoir un bon We de détente, je le sens venir de loin celui là :)
Merci les gars
@++
Stef
Olivier Miakinen
et pourquoi pas juste (après les inévitables contrôles de validité): header("Content-Disposition: inline; filename="nomALC.jpg""); readfile("/truc/bidule/toto.jpg");
C'est possible, bien sûr. Mais vu que ce nom de fichier ne sert que de nom par défaut au cas où le visiteur voudrait le sauver sur son disque dur, je ne vois pas pourquoi on irait lui coller un nom À L. C.. au lieu du nom qui a une signification.
J'ai supposé bien sûr que /truc/bidule était dans une partie de l'arbo- rescence inaccessible directement en HTTP.
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg Il suffit d'avoir un .htaccess par exemple qui permette de faire la relation entre un nomALC et un utilisateur et/ou timestamp.
Ah, j'ai l'impression que tu confonds le nom passé dans l'entête Content-Disposition et celui utilisé pour accéder au script. N'est-ce pas exact ?
Reprenons.
1. On file à l'utilisateur l'URL suivante : http://www.example.com/chemin/script.php?param=nomÀLCaléatoire
2. Le script script.php déduit de nomÀLCaléatoire (par une lecture en base de données) qu'il doit chercher /chemin/privé/CrazyCat.jpg
3. Il le renvoie via readfile() après avoir indiqué que c'était un fichier JPEG de nom CrazyCat.jpg
Et bien entendu, le visiteur ne pourra jamais lire directement un quelconque fichier CrazyCat.jpg sous http://www.example.com
--- Mais encore une fois le lien symbolique serait mille fois plus simple que tout ça. En plus on n'a pas besoin de s'embêter avec les paramètres de cache, par exemple.
et pourquoi pas juste (après les inévitables contrôles de validité):
header("Content-Disposition: inline; filename="nomALC.jpg"");
readfile("/truc/bidule/toto.jpg");
C'est possible, bien sûr. Mais vu que ce nom de fichier ne sert que de
nom par défaut au cas où le visiteur voudrait le sauver sur son disque
dur, je ne vois pas pourquoi on irait lui coller un nom À L. C.. au lieu
du nom qui a une signification.
J'ai supposé bien sûr que /truc/bidule était dans une partie de l'arbo-
rescence inaccessible directement en HTTP.
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg
Il suffit d'avoir un .htaccess par exemple qui permette de faire la
relation entre un nomALC et un utilisateur et/ou timestamp.
Ah, j'ai l'impression que tu confonds le nom passé dans l'entête
Content-Disposition et celui utilisé pour accéder au script.
N'est-ce pas exact ?
Reprenons.
1. On file à l'utilisateur l'URL suivante :
http://www.example.com/chemin/script.php?param=nomÀLCaléatoire
2. Le script script.php déduit de nomÀLCaléatoire (par une lecture en
base de données) qu'il doit chercher /chemin/privé/CrazyCat.jpg
3. Il le renvoie via readfile() après avoir indiqué que c'était un
fichier JPEG de nom CrazyCat.jpg
Et bien entendu, le visiteur ne pourra jamais lire directement un
quelconque fichier CrazyCat.jpg sous http://www.example.com
--- Mais encore une fois le lien symbolique serait mille fois plus
simple que tout ça. En plus on n'a pas besoin de s'embêter avec les
paramètres de cache, par exemple.
et pourquoi pas juste (après les inévitables contrôles de validité): header("Content-Disposition: inline; filename="nomALC.jpg""); readfile("/truc/bidule/toto.jpg");
C'est possible, bien sûr. Mais vu que ce nom de fichier ne sert que de nom par défaut au cas où le visiteur voudrait le sauver sur son disque dur, je ne vois pas pourquoi on irait lui coller un nom À L. C.. au lieu du nom qui a une signification.
J'ai supposé bien sûr que /truc/bidule était dans une partie de l'arbo- rescence inaccessible directement en HTTP.
L'utilisateur ne voit pas la source réelle et télécharge nomALC.jpg Il suffit d'avoir un .htaccess par exemple qui permette de faire la relation entre un nomALC et un utilisateur et/ou timestamp.
Ah, j'ai l'impression que tu confonds le nom passé dans l'entête Content-Disposition et celui utilisé pour accéder au script. N'est-ce pas exact ?
Reprenons.
1. On file à l'utilisateur l'URL suivante : http://www.example.com/chemin/script.php?param=nomÀLCaléatoire
2. Le script script.php déduit de nomÀLCaléatoire (par une lecture en base de données) qu'il doit chercher /chemin/privé/CrazyCat.jpg
3. Il le renvoie via readfile() après avoir indiqué que c'était un fichier JPEG de nom CrazyCat.jpg
Et bien entendu, le visiteur ne pourra jamais lire directement un quelconque fichier CrazyCat.jpg sous http://www.example.com
--- Mais encore une fois le lien symbolique serait mille fois plus simple que tout ça. En plus on n'a pas besoin de s'embêter avec les paramètres de cache, par exemple.