2011-03-24 5 views
0

Je viens de tester ce script de téléchargement ci-dessous. Le téléchargement fonctionne correctement mais l'archive zip ou rar téléchargée est toujours corrompue et ne peut pas être ouverte. Je l'ai testé sur un serveur de développement local ainsi que sur mon compte d'hébergement. J'essaie juste d'apprendre comment cela fonctionne mais je ne le comprends pas vraiment.Protéger les téléchargements

Toute aide est appréciée!

Code d'essai:

<?php 
$is_logged_in = 1; 
$path_to_file = 'downloads/tes.zip'; 
$file_name = 'test.zip'; 

if ($is_logged_in == 1) 
{ 
    header("X-Sendfile: $path_to_file"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=\"$file_name\""); 
    exit; 
} 
?> 

<h1>Permission denied</h1> 
<p>Please Login first!</p> 
+0

Ouvrez le fichier dans un éditeur de texte. Que vois-tu? –

+0

Vous n'envoyez pas de données, n'est-ce pas? – Gumbo

+0

Avez-vous installé 'mod_xsendfile' comme recommandé avec ce code? – icktoofay

Répondre

1

Il principalement probable que vous avez quelque chose ajoutée avant/fichier. Essayez d'utiliser buffering et nettoyage.

<?php 
ob_start(); 
$is_logged_in = 1; 
$path_to_file = 'downloads/tes.zip'; 
$file_name = 'test.zip'; 

if ($is_logged_in == 1) 
{ 
    $fp = fopen($path_to_file, 'rb'); 

    if(is_resource($fp)) 
    { 
      ob_clean(); 
      header("Content-Type: application/force-download"); 
      header("Content-Length: " . filesize($path_to_file)); 
      header("Cache-Control: max_age=0"); 
      header("Content-Disposition: attachment; filename=\"$file_name\""); 
      header("Pragma: public"); 
      fpassthru($fp); 
      die; 
    } 
} else { 
    echo "<h1>Permission denied</h1>"; 
    echo "<p>Please Login first!</p>"; 
} 
+0

Existe-t-il une alternative à l'utilisation de mod_xsendfile. Est-il possible de le faire sans avoir à installer un module? – usnidorg

+0

merci, gardez-le avec les en-têtes comme je l'ai écrit, il résout certains problèmes avec les téléchargements IE. – Igor

0

Avez-vous configuré votre serveur Web (Apache en particulier) pour charger mod_xsendfile? Sans ce module installé, votre script ne fait essentiellement rien.

Questions connexes