Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 21h03   #1
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
Par défaut Fichier tronqué au dl par appel php

Bonjour,
soit le script suivant, qui envoie un fichier txt:
Code :
1
2
3
4
  header("Content-type: application/force-download"); //essayé aussi avec 'octet-stream'
  header("Content-Length: ".filesize("nom.txt") );
  header("Content-Disposition: attachment; filename=nom.txt") ;
  readfile("nom.txt");
il s'agit de listes de noms, qui arrivent comme elle doivent si elles sont courtes (~50 lignes), mais il manque systématiquement les 9 derniers caractères s'il est long (~500 lignes)... Je ne vois pas vraiment où chercher
merci de votre aide
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 21h18   #2
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
je remarque aussi qu'il y a deux lignes vides au haut de la page... il va sans dire que le fichier est ok sur le serveur. Celui-ci a été créé avec fwrite, en résumé:
Code :
1
2
3
4
5
$fichier = fopen( $nom , 'w' ) ;
$contenu = 'bla bla
ligne 2
etc...' ;
fwrite( $fichier , $contenu ) ;
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h52   #3
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
bon, je viens d'essayer avec un fichier écrit avec un simpe éditeur ( gedit ) pour voir si ce n'était pas le script d'écriture qui posait problème, mais c'est pareil...
Puis j'ai remplacé le "force download" par "text/plain", et là il le télécharge bien, avec tous les caractères à la fin, mais j'ai tout de même les deux lignes vide en début de fichier!?!
et de plus, est-ce que certains navigateurs ne risquent pas de l'afficher plutôt que de le télécharger?
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h54   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Avec l'entête Content-Transfer-Encoding: binary ça devrait bien passer...
Code :
1
2
3
4
header('Content-Type: plain/text');
header('Content-Disposition: attachment; filename="nom.txt"');
header('Content-Length: '.filesize('nom.txt'));
header('Content-Transfer-Encoding: binary');
sur tous les navigateurs.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 13h48   #5
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
ça n'a rien changé, mais j'ai trouvé la solution:
j'ai mis selon la doc php de fileread():
Code :
1
2
3
4
5
6
7
8
9
10
11
header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
et par élimination, c'est ob_clean() qui manquait...
J'ai un autre script qui envoie un gros zip avec du son, je vais faire pareil par sécurité, même si ça semblait fonctionner.
Mais je ne suis pas sûr de comprendre le problème...
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h33.


 
 
 
 
Partenaires

Hébergement Web