Wie kann ich das ändern die Zeilenenden verwendet fputcsv?
Erstelle ich eine CSV-Datei zum download von unserem client mit
$output = fopen('php://output', 'w');
und mit fputcsv()
zum schreiben von Daten in eine CSV-Datei, die heruntergeladen wird, die durch den client.
Ich bin PHP läuft auf Linux und damit die Zeilenenden sind nicht interpretiert, von vielen Windows-Anwendungen.
Ich könnte schreiben, die CSV-Datei in ein Verzeichnis auf dem server, Lesen Sie es wieder an und führen Sie eine str_replace()
aus \n
zu \r\n
, aber das erscheint mir doch ziemlich klobig Möglichkeit, das problem zu lösen. Gibt es eine Möglichkeit, die Konvertierung durchzuführen, ohne eine physikalische Datei?
- Es sei denn, der Nutzer ist das öffnen der Datei in einem Windows-text-editor, erfordert CRLF, oder einige ziemlich alte Windows-apps, dann sollte es nicht eigentlich egal... die meisten Windows-Anwendungen in diesen Tagen erkennen, ein einfaches LF statt
- Sorry für +1 Sie wurden im Jahre 1337, die meisten würdevollem rep. Aber deine Frage interessiert mich keine Möglichkeit, das zu ändern escape-char auch...
- Ja, das ist, was ich erwartet hatte. Leider sind Sie den Import der CSV in einigen MIS, die Sie verwenden, die nicht angezeigt werden jegliche klüger, als Editor in dieser Hinsicht.
- Haben Sie Lesen Sie die Kommentare in der " Bedienungsanleitung für fputcsv? lv.php.net/manual/en/function.fputcsv.php#90883
- Ja, ich sicherlich haben, und ich konnte zurückgreifen auf die spezifische Funktion Sie im Zusammenhang mit, aber ich wollte
fputcsv()
und konvertieren nur die Zeilenenden danach, anstatt die Replikation der gesamten Funktionalität vonfputcsv()
und das hinzufügen der Zeile Ende der Konvertierung. Die PHP user-Noten sind nicht immer die beste Quelle. Das ist, warum ich hierher komme 🙂 - Sie finden eine brillante und kurze Lösungen hier: die Einstellung Custom Line Endings in fputcsv()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie stream Filter, um dies zu erreichen. Dieses Beispiel schreibt in eine physische Datei, aber es sollte funktionieren gut für
php://output
als gut.Nicht sicher, ob man das mit PHP selbst. Es kann ein Weg, um zu ändern, PHP ist EOL für die Datei schreiben, aber es ist wohl system abhängig. Sie verfügen nicht über ein windows-system könntest du ping, und du? 😉
Als für eine wirkliche Lösung, statt
str_replace
line-by-line, können Sie das Linux-Programmunix2dos
(inverse vondos2unix
) angenommen, Sie es installiert haben:Wenn PHP nicht richtig erkennt die Zeilenenden beim Lesen von Dateien auf oder von einem Macintosh-computer mit der Möglichkeit, die auto_detect_line_endings Laufzeit-Konfigurations-option kann helfen, das problem zu beheben.
ini_set("auto_detect_line_endings", true);
Eher als schreiben der Datei, eine bessere Lösung ist die Verwendung von output buffering