2009-07-29 9 views
2

J'utilise PHP pour transmettre des informations dans un fichier texte à l'utilisateur qui est ensuite utilisé comme entrée pour une application. J'utilise la méthode montrée dans l'extrait suivant pour servir le fichier à l'utilisateur.Comment arrêter PHP préfixe LF au début du fichier

header('Content-type: text/csv'); 
header('Content-Disposition: attachment; filename=filename.dat'); 
echo $data; 
exit(); 

je reçois la sauvegarde que le dialogue fin et les données est présent, le seul problème est qu'il ya un caractère de saut de ligne au début du fichier de sortie que je ne peux pas l'air de se débarrasser.

Il se trouve que l'application qui utilise les données est sensible aux espaces blancs et bien qu'il soit facile de corriger cela, forcer les utilisateurs à mettre à jour n'est pas un itinéraire que je veux descendre pour diverses raisons.

Est-ce que quelqu'un sait ce qui cause cette situation et, plus important encore, toute solution de contournement.

+0

Les en-têtes HTTP sont censés se terminer par CRLF. Est-ce que le LF qui est ajouté à votre fichier est le LF qui termine le dernier en-tête? Si c'est le cas, c'est un bogue dans votre client HTTP. – jrockway

+1

Soit '$ data' contient ce saut de ligne, soit il y a quelque chose avant cet extrait qui le fait. Peut-être un saut de ligne avant d'ouvrir le bloc PHP. – Gumbo

+1

@Gumbo: ça me semble une réponse raisonnable, pourquoi utiliser un commentaire? – AnthonyWJones

Répondre

3

Comme je l'ai déjà dit dans les commentaires à la question:

Soit vous $data contient ce saut de ligne ou il y a quelque chose avant cet extrait qui fait cela. Peut-être un saut de ligne avant d'ouvrir le bloc PHP.

+0

Merci - J'ai supposé à tort que seules les déclarations après l'appel d'en-tête pourraient effectivement être dans le contenu des fichiers – Willbill

1

Probablement $ data contient le saut de ligne. Rechercher des inclusions aussi

1

On peut supposer que la nouvelle ligne supplémentaire entre dans $data. Si vous ne pouvez pas résoudre ce problème, vous pouvez ajouter les données avant de les répercuter.

Pouvez-vous publier comment vous définissez $data?

1

Juste une note supplémentaire.

Si vous travaillez sur un projet où vous ne pouvez pas identifier les fichiers qui ont le premier ou la ligne de fuite se nourrit, de nouvelles lignes, retours chariot suffit d'appeler le code ci-dessous avant vos en-têtes:

//Loop through any open buffers and nuke them. 
while(@ob_end_clean()); 
header('Content-type: text/csv'); 
header('Content-Disposition: attachment; filename=filename.dat'); 
echo $data; 
exit(); 

Cela peut avoir des effets secondaires inattendus sur le code qui repose sur ces tampons, mais est un moyen efficace pour effacer complètement votre tampon de sortie.

Questions connexes