2017-08-21 1 views
0

je dois fournir un fichierGénérer URL unique pour chaque client téléchargeant le même fichier

example.com/realpathofthe/file.zip 

aux clients mais je ne veux pas communiquer la même URL à tous les clients (ils pourraient facilement partager URL non -customers, et il serait difficile de savoir si le produit est livré ou non). Au lieu de cela, je génère une chaîne aléatoire en PHP et je veux partager une telle URL:

example.com/download/djbf6xu83/file.zip 

qui sera différent pour chaque client. Question: Devrais-je générer des liens symboliques pour chaque client pour lier le chemin de la chaîne aléatoire au chemin du fichier réel sur le serveur?
Ou utiliser une RewriteRule dans .htaccess pour cela? Mais alors, si c'est fait de cette façon (c'est-à-dire réécrire /download/*/file.zip au fichier réel), tous les chaînes aléatoires se lieraient au même fichier. Ce n'est pas bon car un non client pourrait générer un lien de téléchargement lui-même. Comment gérer cela correctement?

Note: Je voudrais éviter si possible que PHP doit traiter les gigaoctets de données de fichiers (à travers file_get_contents()) avant de le livrer. J'ai pensé (corrigez-moi si je me trompe) qu'il serait plus léger pour le serveur de laisser Apache distribuer le fichier.

+0

Stockez la chaîne aléatoire dans la base de données. Ensuite, utilisez une règle de réécriture pour rediriger vers un script php qui obtiendra la chaîne aléatoire et la fera correspondre à votre base de données, puis, si c'est ok, envoyez le fichier. Le fichier est toujours le même, mais votre script va vérifier la chaîne aléatoire. – Armage

+1

Pourquoi ne pas utiliser la RewriteRule dans un fichier de script PHP, et vérifier que la chaîne de caractères aléatoire est valide? – Fredster

+0

@Armage oui mais alors PHP lui-même doit traiter les gigaoctets de données de fichiers (via 'file_get_contents()') avant de le livrer. N'y at-il pas un moyen d'éviter cela et laisser Apache distribuer le fichier? – Basj

Répondre

0

Il peut y avoir plusieurs façons d'aborder ce problème. Voici ce que je suggère. Créez un fichier, par exemple /download.php et transmettez le code de téléchargement HTTP GET variable. Donc, il dirait quelque chose comme /download.php?code=abcdef, pendant ce temps générer et stocker des codes pour chaque client dans une base de données, et vérifier si le code existe lorsque quelqu'un ouvre download.php. Facile à suivre, et ne pas créer une structure de répertoire complexe.

+0

Merci. Mais alors cela signifie que PHP doit traiter des gigaoctets de données (voir Note dans l'article original). – Basj

+0

https://stackoverflow.com/questions/7263923/how-to-force-file-download-with-php vous n'avez pas besoin d'utiliser file_get_contents(); – Mav