php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #42357 add optional parameter for line ending to fputcsv
Submitted: 2007-08-21 06:13 UTC Modified: 2016-10-25 17:57 UTC
Votes:7
Avg. Score:4.1 ± 0.8
Reproduced:7 of 7 (100.0%)
Same Version:2 (28.6%)
Same OS:4 (57.1%)
From: php at phihag dot de Assigned:
Status: Open Package: Filesystem function related
PHP Version: 5.2.4RC2 OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: php at phihag dot de
New email:
PHP Version: OS:

 

 [2007-08-21 06:13 UTC] php at phihag dot de
Description:
------------
Currently, there is no way to set a custom line ending when writing CSV files with fputcsv. For instance, this is needed when writing CSV for various Microsoft products which require "\r\n" as line ending.
Therefore, an optional parameter $ending (as for stream_get_line), which defaults to auto-detection (current behaviour), would be nice.

To ensure the result is still a valid CSV file, either document using anything else than line endings (or tabs etc.) is not a good idea, or define/use constants for the common line endings.

Reproduce code:
---------------
<?php
$f = fopen("php://stdout", "w");
fputcsv($f, array("a", "b c"), ",", '"',  "\r\n");
fclose($f);
?>

Expected result:
----------------
As a php string:
"a,\"b c\"\r\n"

Actual result:
--------------
n/a, without the last parameter: "a,\"b c\"\n" (hardcoded line ending in file.c)

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-08-21 06:20 UTC] derick@php.net
Does it work if you open the file in text mode ("wt") ? That *should* do the trick.
 [2007-08-22 16:25 UTC] php at phihag dot de
No, same behavior (tested on Linux).

From php.net/fopen:
*Windows* offers a text-mode translation flag ('t') ...

Small correction of the original bug report: \n is always used, have a look at ext/standard/file.c:~1991:

(...)
        smart_str_appendc(&csvline, '\n');
        smart_str_0(&csvline);
(...)
 [2011-04-08 21:39 UTC] jani@php.net
-Package: Feature/Change Request +Package: Filesystem function related
 [2016-10-25 17:57 UTC] cmb@php.net
> Small correction of the original bug report: \n is always used,
> […]

Indeed[1], and this is actually a bug. RFC 4180[2] states:

> Each record is located on a separate line, delimited by a line
> break (CRLF).

[1] <https://github.com/php/php-src/blob/PHP-7.0.12/ext/standard/file.c#L1927>
[2] <https://tools.ietf.org/html/rfc4180>
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Sun Nov 19 01:31:42 2017 UTC