我需要创建一个文本文件来动态下载,但我只是无法摆脱文件开头的换行符,我尝试了很多修剪,替换但第一行仍在那里,我需要在开始时创建没有换行符的文件,因为它将被另一个不期望在开头使用换行符的应用程序使用。
以下是代码:
$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|
答案 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;