Comment puis-je changer de fins de ligne utilisé par fputcsv?
J'ai créer un fichier CSV à télécharger par notre client à l'aide de
$output = fopen('php://output', 'w');
et à l'aide de fputcsv()
écrire des données dans un fichier CSV qui est téléchargé par le client.
Je suis en cours d'exécution de PHP sur Linux et par conséquent les fins de ligne ne sont pas interprétées par la plupart des applications Windows.
Je pourrais écrire le fichier CSV dans un répertoire sur le serveur, le lire et effectuer un str_replace()
de \n
à \r\n
, mais cela semble assez maladroit moyen de résoudre le problème. Est-il un moyen pour effectuer la conversion, sans la création d'un fichier physique?
À moins que l'utilisateur ouvre le fichier dans un éditeur de texte Windows qui nécessite CRLF, ou certaines assez anciennes applications Windows, alors il ne devrait pas vraiment d'importance... la plupart des applications Windows ces jours ne reconnaître d'un simple LF au lieu
Désolé pour les +1 que vous étiez au 1337, le plus gracieux rep. Mais votre question m'intéresse, pas moyen de changer escape char trop...
Oui, c'est ce que j'attendais. Malheureusement, ils sont de l'importation du fichier CSV dans certains SIM qu'ils utilisent, ce qui ne semble pas être plus intelligent que le bloc-notes à cet égard.
Avez-vous lu les commentaires dans le manuel pour fputcsv? lv.php.net/manual/en/function.fputcsv.php#90883
Oui, j'ai certainement, et j'ai pu retomber sur la fonction spécifique est lié, mais je voulais utiliser
Désolé pour les +1 que vous étiez au 1337, le plus gracieux rep. Mais votre question m'intéresse, pas moyen de changer escape char trop...
Oui, c'est ce que j'attendais. Malheureusement, ils sont de l'importation du fichier CSV dans certains SIM qu'ils utilisent, ce qui ne semble pas être plus intelligent que le bloc-notes à cet égard.
Avez-vous lu les commentaires dans le manuel pour fputcsv? lv.php.net/manual/en/function.fputcsv.php#90883
Oui, j'ai certainement, et j'ai pu retomber sur la fonction spécifique est lié, mais je voulais utiliser
fputcsv()
et tout simplement de convertir les fins de ligne par la suite, plutôt que de reproduire l'intégralité des fonctionnalités de fputcsv()
et l'ajout de la ligne fin de la conversion. L'utilisateur PHP notes ne sont pas toujours les meilleures ressources. C'est pourquoi je viens ici 🙂OriginalL'auteur Kalessin | 2012-10-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des filtres de courant pour accomplir cette tâche. Cet exemple de l'écriture d'un fichier physique, mais il devrait fonctionner correctement pour
php://output
.OriginalL'auteur Ja͢ck
Vous ne savez pas si vous pouvez le faire avec PHP lui-même. Il y a peut être un moyen de changer de PHP EOL pour l'écriture dans un fichier, mais c'est probablement dépendante du système. Vous n'avez pas de système de windows vous pourriez ping, pensez-vous? 😉
Comme pour une vraie solution, au lieu de
str_replace
ligne-par-ligne, vous pouvez utiliser le programme Linuxunix2dos
(l'inverse dedos2unix
) en supposant que vous l'avez installé:OriginalL'auteur Explosion Pills
OriginalL'auteur Wandering Zombie
Si PHP n'est pas correctement en reconnaissant les fins de ligne lors de la lecture de fichiers sur ou créé par un ordinateur Macintosh, l'activation de la auto_detect_line_endings au moment de l'exécution de l'option de configuration peut aider à résoudre le problème.
la fonction ini_set("auto_detect_line_endings", true);
OriginalL'auteur Ankit Saxena
Plutôt que d'écrire le fichier, une meilleure solution est d'utiliser le tampon de sortie
OriginalL'auteur Tom B