fputcsv and newline codes

前端 未结 8 2270
别那么骄傲
别那么骄傲 2020-11-28 10:12

I\'m using fputcsv in PHP to output a comma-delimited file of a database query. When opening the file in gedit in Ubuntu, it looks correct - each record has a line break (no

8条回答
  •  醉话见心
    2020-11-28 10:51

    Using the php function fputcsv writes only \n and cannot be customized. This makes the function worthless for microsoft environment although some packages will detect the linux newline also.

    Still the benefits of fputcsv kept me digging into a solution to replace the newline character just before sending to the file. This can be done by streaming the fputcsv to the build in php temp stream first. Then adapt the newline character(s) to whatever you want and then save to file. Like this:

    function getcsvline($list,  $seperator, $enclosure, $newline = "" ){
        $fp = fopen('php://temp', 'r+'); 
    
        fputcsv($fp, $list, $seperator, $enclosure );
        rewind($fp);
    
        $line = fgets($fp);
        if( $newline and $newline != "\n" ) {
          if( $line[strlen($line)-2] != "\r" and $line[strlen($line)-1] == "\n") {
            $line = substr_replace($line,"",-1) . $newline;
          } else {
            // return the line as is (literal string)
            //die( 'original csv line is already \r\n style' );
          }
        }
    
            return $line;
    }
    
    /* to call the function with the array $row and save to file with filehandle $fp */
    $line = getcsvline( $row, ",", "\"", "\r\n" );
    fwrite( $fp, $line);
    

提交回复
热议问题