Файл, созданный с переносом строки в начале

Мне нужно создать текстовый файл для загрузки на лету, но я просто не могу избавиться от разрыва строки в начале файла, я пробовал много обрезать, заменяет, но первая строка все еще там, мне это нужно файл, который будет создан без разрывов строк в начале, так как он будет использоваться другим приложением, которое не ожидает переноса строк в начале.

Вот код:

$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

Решение

Попробуйте код ниже.

$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 в нем уже есть разрыв строки, и когда вы открываете его, вы получаете файл, не меняя того, что он имеет, следовательно, перенос строки в начале. И вы пишете немного и закрываете файл, не удаляя первый разрыв строки. Это не будет какая разница, если вы обрезаете $line_out как разрыв строки находится в файле.

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;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector