-
CréateurSujet
-
août 28, 2025 à 1:54 am #45128
BotParticipantYo,
Comment faire pour générer en php un fichier stocké sur un serveur et un paramètre pour définir sa date d’expiration dans l’URL par exemple
https://example.com/download/file.txt?exp=ts
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
CréateurSujet
-
AuteurRéponses
-
-
août 28, 2025 à 9:17 am #45130
Quand tu dis générer tu veux dire télécharger ?
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 9:18 am #45131
Et 2eme question, pourquoi l’expiration devrait être dans l’url? Normalement l’utilisateur ne peut pas changer l’expiration dans un contexte normal, c’est une propriété que tu règles dans ton backend
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 1:42 pm #45157
Oui
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 1:43 pm #45159
Sur aws par exemple tu as dans le lien l’expiration
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 1:43 pm #45160
Même si tu peux la changer
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 4:29 pm #45161
Donc ça sert a quoi concretement?
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 4:29 pm #45162
Genre c’est quoi l’utilisation voulue
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:09 pm #45163
Bah faire en sorte qu’un fichier soit téléchargeable jusqu’à l’expiration
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:10 pm #45164
T’as pas une idée
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:11 pm #45165
Mais du coup si t’es un peu malin tu change la date d’expiration jusqu’en 2099?
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:12 pm #45166
Bah non
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:12 pm #45167
Ça marche pas
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:12 pm #45168
La date d’expiration ca doit pas etre quelque chose de parametrable dans un telechargement
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:12 pm #45169
Sinon l’utilisateur il met ce qu’il veut
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:13 pm #45170
C’est parametrable côté serveur mais ça apparaît quand même sur l’URL pour le client
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:13 pm #45171
T’as déjà utilisé aws?
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:13 pm #45172
Mais le parametre dans l’url, l’utilisateur il peut le changer oui ou non?
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:14 pm #45173
Oui mais pour le cloud
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:14 pm #45174
Non
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:14 pm #45175
Ben alors pourquoi tu t’emmerde a vouloir le mettre dans l’url, retourne le juste dans ta response ton expiration
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:14 pm #45176
Un parametre dans l’url c’est pour etre parametré, changé
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45177
Genre c’est une variable
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45178
Car j’en ai besoin
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45179
Mais pourquoi tu as absolument besoin dans l’url
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45180
Il faut que l’expiration apparaisse dans l’URL pour vérifier l’intégrité
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45181
Att je me renseigne deux secondes
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:15 pm #45182
Va y merci
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:16 pm #45183
La j’ai pas d’exemple
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:19 pm #45184
Ok j’ai compris
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:22 pm #45185
Ce que tu n’as pas dit c’est que l’exp retournée dans l’url est accompagnée d’une signature HMAC(file + exp, secret) et est ajoutée aussi a l’url dans la variable sig
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:22 pm #45186
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:23 pm #45187
Donc oui, avec une signature c’est deja plus pertinent, car le exp tout seul c’est modifiable
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:23 pm #45188
Oui y’a la signature ausis
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:24 pm #45189
^
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:24 pm #45190
T’aurai du le mettre dans l’url de ton premier poste, mais donc voila t’as ta reponse
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:25 pm #45191
Ok merci
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:26 pm #45192
Ton $exp c’est time() + le temps que tu veux donner
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:26 pm #45193
$sig c’est la fonction hmac php mais jla connais pas avec comme argument ton fichier, l’expiration, et ton secret
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:27 pm #45194
Ça ok
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:27 pm #45195
Je vois déjà comment signer le tout
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:28 pm #45196
Ce qu’il faudrait c’est pouvoir rendre le fichier téléchargeable depuis l’url uniquement et pas juste l’exposer au public
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:29 pm #45197
Comme une redirection ?
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:30 pm #45198
Logiquement non ton serveur il donne que l’url pas le fichier
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:30 pm #45199
Donc ton fichier il est stocké qq part et pas accessible sinon
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:31 pm #45200
Du cou ?
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:31 pm #45201
Apres c’est ton php qui le retourne quand t’utilise le lien
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:31 pm #45202
Donc pas de probleme?
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:32 pm #45203
Mais je fais comment mdr
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:32 pm #45204
Je stocke mon fichier à l’extérieur de mon site, ou alors je change les permission de lecture ?
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:32 pm #45205
https://stackoverflow.com/questions/6175533/how-to-return-a-file-in-php
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45206
Non on s’en fout des perms
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45207
Ça a rien a voir
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45208
De ce que je comprend
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45209
C’est avec readfile()
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45210
Donc je renvoie un stream ou le contenu ok
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45211
Bah oui
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:33 pm #45212
J’suis con
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:34 pm #45213
Oui voila 👌
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:34 pm #45214
En plus je le faisais avant
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:34 pm #45215
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:34 pm #45216
Va y carré merci
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 5:34 pm #45217
Tqt on pers tous la boule quand on est trop focus
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 7:43 pm #45218
Bah, tu stock un timestamp dans l’URL, ça correspond à la date limite d’expiration et dans ton code tu vérifie si la date du jour – timestamp est dépassé ou pas, en vrai rien de spécial
——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 7:43 pm #45219
Tu peux même passer une vraie date sous n’importe quel format
——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 7:44 pm #45220
Nan mais c’est un peu different son use case
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 8:55 pm #45221
j’ai pas bien compris pourquoi tu as besoin de l’expiration dans l’url
——————–
mjollnir4 – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 8:58 pm #45222
à part « faire comme aws »
——————–
mjollnir4 – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 9:06 pm #45223
Je crois que c’est une facon de ne pas stocker d’expiration date sur un fichier mais de dire « quand cet url est créé il est valide 2h » par exemple
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 9:07 pm #45224
Sans avoir une table en db avec l’url et l’exp
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 10:15 pm #45225
mais comment il sait quand il doit le supprimer si il ne stock pas la date ?
——————–
mjollnir4 – Envoyé depuis le Discord : Culte du code -
août 28, 2025 à 10:15 pm #45226
parce que la si personne ne requête le fichier, il a aucun moyen de savoir
——————–
mjollnir4 – Envoyé depuis le Discord : Culte du code -
août 29, 2025 à 12:01 am #45227
Le fichier n’est jamais supprimé. C’est juste que ça genere un lien de telechargement vers une resource et admettons chaque liens est valide 3 h, alors l’exp c’est la date actuelle + 3h et t’as aussi le param sig pour signer l’exp, comme ca si l’user modifie l’exp le sig est plus valide, vu qu’il est calculé coté serv
——————–
allinmachine – Envoyé depuis le Discord : Culte du code -
août 29, 2025 à 12:48 am #45228
Exactement
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code -
août 29, 2025 à 10:05 am #45229
Ben pour moi ça reviens a ce que je disais, je comprends pas trop la subtilité sinon. J’avais pas le temps d’écrire du code mais voilà ce que j’ai généré et qui corresponds à ce que j’ai compris :
—
## 🔹 1. Générer un lien avec un paramètre d’expiration (timestamp + hash)
C’est la méthode la plus classique pour sécuriser un fichier temporaire.
### Exemple :
php
<?php
// Génération du lien
$file = "exports/rapport.pdf";
$expires = time() + 3600; // expiration dans 1h
$secret = "MaCléUltraSecrète"; // clé privée connue seulement du serveur
// On calcule un hash de sécurité
$token = hash('sha256', $file.$expires.$secret);
// URL à donner à l'utilisateur
$url = "download.php?file=" . urlencode($file) . "&exp=$expires&token=$token";
echo "Télécharger : Lien« ;Et dans `download.php` :
php
$exp) {
die(« Lien expiré ! »);
}
// Vérification hash
$expected = hash(‘sha256’, $file.$exp.$secret);
if ($token !== $expected) {
die(« Lien invalide ! »);
}
// Vérifie si le fichier existe
if (!file_exists($file)) {
die(« Fichier introuvable ! »);
}
// Envoi du fichier
header(« Content-Type: application/octet-stream »);
header(« Content-Disposition: attachment; filename= » . basename($file));
readfile($file);
exit;👉 Avantage : pas besoin de base de données, le lien est auto-suffisant.
👉 Inconvénient : une fois généré, le fichier reste stocké tant que tu ne le supprimes pas (prévoir un cron ou une purge).
—
## 🔹 2. Stockage en base + jeton unique
Tu peux aussi stocker l’info dans une BDD :
* `token` (hash unique)
* `file_path`
* `expiration_timestamp`
Puis dans ton script `download.php`, tu vérifies que le `token` existe, que la date d’expiration n’est pas passée, et tu sers le fichier.
C’est plus flexible si tu veux révoquer des liens manuellement.
—
## 🔹 3. Expiration côté système de fichiers
Tu peux générer le fichier avec un nom unique, le mettre dans un répertoire temporaire, et utiliser un `cron` qui supprime tous les fichiers de plus de X minutes.
Dans ce cas, le lien peut juste être un identifiant de fichier (`download.php?file=xyz123.pdf`), et l’expiration est gérée par suppression automatique.// Génération du lien $file = "exports/rapport.pdf"; $expires = time() + 3600; // expiration dans 1h $secret = "MaCléUltraSecrète"; // clé privée connue seulement du serveur // On calcule un hash de sécurité $token = hash('sha256', $file.$expires.$secret); // URL à donner à l'utilisateur $url = "download.?file=" . urlencode($file) . "&exp=$expires&token=$token"; echo "Télécharger : Lien";$file = $_GET['file'] ?? null; $exp = $_GET['exp'] ?? 0; $token = $_GET['token'] ?? ''; $secret = "MaCléUltraSecrète"; // Vérification expiration if (time() > $exp) { die("Lien expiré !"); } // Vérification hash $expected = hash('sha256', $file.$exp.$secret); if ($token !== $expected) { die("Lien invalide !"); } // Vérifie si le fichier existe if (!file_exists($file)) { die("Fichier introuvable !"); } // Envoi du fichier header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=" . basename($file)); readfile($file); exit;——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 29, 2025 à 10:41 am #45230
j’ai vu merci
——————–
ranma_chu – Envoyé depuis le Discord : Culte du code
-
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
Sujets récents
-
Communauté autour du torrenting
par
Bot
il y a 1 jour et 16 heures -
AIDE !!
par
Bot
il y a 2 jours et 17 heures -
Récupération de données critique urgente
par
Bot
il y a 2 semaines et 4 jours -
PC qui a duré 2 semaines LOL
par
Bot
il y a 2 semaines et 5 jours -
self hosting
par
Bot
il y a 3 semaines et 3 jours
Statistiques des Forums
- Comptes enregistrés
- 2 913
- Forums
- 51
- Sujets
- 1 124
- Réponses
- 20 324
- Mot-clés du sujet
- 0




