PHP - 在开头使用换行符创建的文件

时间:2018-01-21 19:57:51

标签: php file text line break

我需要创建一个文本文件来动态下载,但我只是无法摆脱文件开头的换行符,我尝试了很多修剪,替换但第一行仍在那里,我需要在开始时创建没有换行符的文件,因为它将被另一个不期望在开头使用换行符的应用程序使用。

以下是代码:

$strfilename = "test.txt";
$testFile = fopen($strfilename, "w") or die("Error!");

//header
$strLine = "test|1\r\n";
$strLine .= "A|1|2|\r\n";
$line_out = preg_replace('/[\n\r]+/', '', $strLine);
$line_out = str_replace(array("\n", "\r"), '', $strLine);
fwrite($testFile, $line_out);

fclose($testFile);

header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.basename($strfilename));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($testFile));
readfile($strfilename);
exit;

例如,使用记事本打开文件时,第一行不存在:

1 - test|1
2 - A|1|2|

但是如果你使用高级文本编辑器(例如Notepad ++)打开它,你可以在开头看到一个换行符:

1 - 
2 - test|1
3 - A|1|2|

2 个答案:

答案 0 :(得分:0)

尝试以下代码。

$strfilename = "test.txt";
$testFile = '';

//header
$strLine = "test|1\r\n";
$strLine .= "A|1|2|\r\n";
$line_out = str_replace(array("\n", "\r"), '', $strLine);
$testFile .= $line_out;

file_put_contents(trim($strfilename));

header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.basename($strfilename));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($testFile));
readfile($strfilename);
exit;

将其分解

$testFile = file_get_contents($strfilename);将所有文件内容都添加到字符串中,这可以省略,使用$testFile = '';对于其余代码来说已经足够了 - 如果文件为空则

$testFile .= $line_out;将您的文本放入$ testFile变量

file_put_contents(trim($strfilename));这会写下文件,清除开头或结尾的所有换行符。

$line_out = preg_replace('/[\n\r]+/', '', $strLine);已删除,因为它是不必要的

在您自己的代码中,您的文件$strfilename已经有一个换行符,当您打开它时,您将获得该文件,而不会更改它的内容,因此在开头会有换行符。然后你会改写一下fclose文件,而不删除第一个换行符。如果因为换行符在文件中而修剪$line_out将不会产生任何差异。

答案 1 :(得分:0)

试试这段代码:

<?php

$strfilename = "test.txt";
$testFile = fopen($strfilename, "w") or die("Error!");

//header
$strLine = "test|1\r\n";
$strLine .= "A|1|2|\r\n";
$line_out = preg_replace('/[\r]+/', '', $strLine);
$line_out = str_replace(array("\r"), "", $strLine);
$line_out = trim($line_out);
fwrite($testFile, $line_out);
fclose($testFile);

header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.basename($strfilename));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($strfilename));

readfile($strfilename);
exit;