2010-08-13 7 views

Répondre

29

un panneau de téléchargement à afficher sur en cliquant sur le lien de téléchargement, je ne veux pas naviguer à l'image à afficher Si vous voulez forcer un téléchargement, vous pouvez utiliser quelque chose comme ce qui suit:

<?php 
    // Fetch the file info. 
    $filePath = '/path/to/file/on/disk.jpg'; 

    if(file_exists($filePath)) { 
     $fileName = basename($filePath); 
     $fileSize = filesize($filePath); 

     // Output headers. 
     header("Cache-Control: private"); 
     header("Content-Type: application/stream"); 
     header("Content-Length: ".$fileSize); 
     header("Content-Disposition: attachment; filename=".$fileName); 

     // Output file. 
     readfile ($filePath);     
     exit(); 
    } 
    else { 
     die('The provided file path is not valid.'); 
    } 
?> 

Si vous avez simplement un lien vers ce script En utilisant un lien normal, le fichier sera téléchargé. Incidemment, l'extrait de code ci-dessus doit être exécuté au début d'une page (avant que tout en-tête ou sortie HTML ne se produise). Faites également attention si vous décidez de créer une fonction basée autour de ceci pour télécharger des fichiers arbitraires - vous devez vous assurer que vous empêchez la traversée de répertoire (realpath est pratique), autorisez uniquement les téléchargements à partir d'une zone définie, etc. si vous acceptez l'entrée d'un $ _GET ou $ _POST.

+0

Exactement je veux cela, mais comment puis-je le connecter avec un lien comme "Télécharger" sur le clic sur lequel ce script devrait être exécuté –

+0

Opps - bon point. Je vais mettre à jour ma réponse. –

+1

+1 Hey mec, cela a fonctionné, mais le fichier téléchargé trouvé corrompu, je ne pouvais pas ouvrir l'image .. –

1

La solution est plus facile que vous pensez;) Utilisation simple:

header('Content-Disposition: attachment'); 

Et voilà tout. Facebook par exemple fait la même chose.

0

Vous pouvez le faire dans .htaccess et spécifier pour différentes extensions de fichiers. Il est parfois plus facile de le faire que de coder en dur dans l'application. Par ailleurs, vous devrez peut-être effacer le cache du navigateur avant qu'il ne fonctionne correctement.

+0

au lieu d'ajouter la même réponse répétée vous pourriez envisager de marquer, les questions que vous avez trouvé comme identiques, comme doublon. – bummi

+1

Ils ne sont pas en double. Ce sont toutes des questions différentes mais elles ont cette même solution possible. Les réponses individuelles à chaque question peuvent être plus pertinentes pour les personnes. Ainsi, le signaler comme doublon peut détruire des informations utiles. C'est juste que la réponse que j'ai donnée peut être utile à QUELQUES personnes qui cherchent ces questions. Toutes ces questions auxquelles j'ai répondu sont apparues dans une recherche Google alors que j'essayais moi-même de trouver la réponse. Il m'a fallu beaucoup de temps pour trouver la solution et je voulais répondre à chacun d'entre eux afin que quiconque cherchant soit également au courant de cette solution. –

1

En HTML5 download attribut de <a> tag peut être utilisé:

echo '<a href="path/to/file" download>Download</a>'; 

Cet attribut est utilisé uniquement si l'attribut href est défini.

Il n'y a pas de restrictions sur les valeurs autorisées, et le navigateur se détecte automatiquement l'extension de fichier correct et l'ajouter au fichier (.img, .pdf, .txt, .html, etc.).

En savoir plus here.

Questions connexes