2009-10-03 19 views
1

Je travaille sur un système de magasin et je le lien suivant http://cmstutorials.org/shop/downloads/2793156879 (lien d'origine est cmstutorials. Org/shop/downloads.php? Download = 2793156879)lien de téléchargement caché

ce que je suis en train de faire est de laisser l'utilisateur télécharger l'élément qui correspond à l'ID 2793156879 sans montrer le lien réel au fichier. Comme ils ont sur themeforest.net

comment est-ce que je ferais ceci?

+0

Est-ce une constante id? –

Répondre

0

wooohoooo

merci un gars du lot, ces règles du site que je reçois toujours la bonne réponse: D

Je collais ce au-dessus du header.php comprennent ob_start();

et juste avant les fonctions d'en-tête ob_get_clean();

pourrait être utile à des gens (ndlr: pour la deuxième fonction que j'ai ajouté un espace avant le départ il afficherait correctement, ne pas oublier de l'enlever quand l'utiliser u)

+0

Maintenant, vous devriez marquer la réponse la plus utile ... sauf si vous n'avez plus besoin d'aide ... – IProblemFactory

2

Cet exemple devrait vous aider:

$len = filesize($filename); 
header("Content-type: image/jpeg"); 
header("Content-Length: $len"); 
header("Content-Disposition: inline; filename=\"$new_filename\""); 
readfile($filename); 

ou un autre, me semble plus simple pour:

<?php 
header('Content-type: image/jpeg'); 
$f = file_get_contents('path/to/image.jpg'); 
print $f; 
?> 

PS bien sûr, vous devez content-type adapter à votre dossier.

+0

Le premier exemple devrait fonctionner et est nécessaire pour que le navigateur ait un indice sur ce qu'il faut appeler le fichier. –

0

Si vous Je vais essayer de faire évoluer ce service, je suggère de jeter un oeil à Perlbal. Un des trucs soignés est que votre application peut envoyer un en-tête spécial qui dit à perlbal de servir un fichier statique à un autre serveur. De cette façon, vous n'avez pas besoin d'attacher un thread PHP en poussant des bits vers un client.

0

Disposition de contenu est ok, mais une autre solution serait en utilisant PATH_INFO et obtenir le fichier de cette façon:

http://example.com/download.php/2793156879.zip 

Votre download.php sera comme

// handle path_info 
$filename=$_SERVER['PATH_INFO']; // gets "/2793156879.zip" as $filename 

// do smtg w/ $filename... 
// ... 

// download 
$len = filesize($filename); 
header("Content-type: application/force-download"); 
header("Content-Length: $len"); 
readfile($filename); 

Note: L'application/force- le téléchargement n'existe pas, il est juste là pour forcer les téléchargements avec tous les navigateurs. (certains MSIE semblent avoir eu des problèmes avec application/octet-stream)

Cette approche a l'avantage de fonctionner avec tous les navigateurs: même les très anciens, ne supportant pas l'en-tête "Content-Disposition:".

Il a le petit inconvénient que vous avez à substr() le code produit vous-même de la chaîne PATH_INFO