2010-07-23 4 views
0

J'ai un script qui télécharge des fichiers dans un répertoire en ligne et stocke les détails du fichier dans une base de données. Les fichiers stockés sont renommés en ID de l'entrée dans la base de données. Chaque fois qu'un utilisateur demande un téléchargement, une instruction SQL simple récupère les détails du fichier dans la base de données, le contenu du fichier est lu dans la base de données et le fichier est invité à être téléchargé. Ce qui suit est mon code:Le script de téléchargement Php ne fonctionne pas

$one_file = $FILE_OBJECT->get($_GET['id']); // this is an object which just grabs the file details from the database 


header("Content-type: ".$one_file['type']); // add here more headers for diff. extensions 
header("Content-Disposition: attachment; filename=\"".$one_file["filename"]."\""); // use 'attachment' to force a download 
header("Content-type: application/octet-stream"); 
header("Content-Disposition: filename=\"".$one_file["filename"]."\""); 

readfile(_config('files_path').$_GET['id']);// reading the actual raw file stored in my online directory 

Le problème est que Im test en utilisant un document Word et son téléchargement parfaitement - j'ai même vérifié le fichier brut en cours de téléchargement en modifiant manuellement son extension et il est tout à fait le téléchargement. Le problème est que quand il est téléchargé en utilisant le code ci-dessus, le fichier Word semble corrompu ou quelque chose, parce que quand j'essaie de l'ouvrir, tout est marmonné et brouillé. Que ce passe-t-il? J'ai utilisé cet extrait sur d'autres sites sur lesquels j'ai travaillé, et ils fonctionnent parfaitement bien ... Aidez s'il vous plaît!

+0

Argh ... ** le **, le 'teh'. Mais comme une question: (1) Pouvez-vous confirmer que le stockage dans la base de données est fait correctement, à savoir: si vous enregistrez ce contenu sous forme de fichier sur le système de fichiers, cela fonctionne-t-il? (2) Que se passe-t-il si je donne '' ../conf/ yoursupersecretpasswordfile'' comme '$ _GET ['id']'? – Wrikken

+0

Ce message est difficile à lire lorsque vous utilisez "teh" tout le temps. L'orthographe correcte n'est pas difficile à trouver surtout avec Firefox et Chrome ayant des vérificateurs d'orthographe intégrés. Si l'anglais n'est pas votre langue maternelle, eh bien, je suggère un vérificateur d'orthographe en tout cas parce qu'il se détériore de votre poste et le rendre beaucoup plus difficile pour quelqu'un d'aider/comprendre. (Ne signifie pas flamber ou quoi que ce soit, juste fournir une critique utile pour les prochains messages) –

+1

Fixt. Ça m'a énervé aussi. – cHao

Répondre

1

Voir si cela aide:

Webkit and Excel file(PHPexcel)

+0

Thanjs man - Je ne sais toujours pas exactement pourquoi mon code a cessé de fonctionner tout d'un soudain ... – Ali

2

Par défaut, la fonction d'en-tête de PHP remplacera les en-têtes précédents avec le même nom, de sorte que vos deux premiers en-têtes sont remplacés par les deux suivants. Supprimer les deux secondes et voir si cela fonctionne.

+0

A fait cela, mais n'a pas aidé du tout .. le problème est quelque part dans l'extrait de code mentionné ci-dessus que le fichier est bien stocké sur le répertoire en ligne – Ali

+0

Il pourrait être un encodage problème avec readfile, essayez d'ajouter 'header (" Content-Transfer-Encoding: binary ");' D'autres types de fichiers fonctionnent? Essayez de télécharger un fichier texte brut –

0

je le même problème: chaque fois que je téléchargé un fichier, il était soi-disant « corrompu ». Il s'avère que j'avais fait une erreur de chemin de répertoire stupide, mais l'erreur de php était écrit en le fichier téléchargé. Ce qui, bien sûr, l'a rendu "corrompu".

En fait, j'ai résolu en lisant le commentaire de Ian Wetherbee sur les tests avec un fichier texte. Merci Ian!

Questions connexes