PHP PHP Построчная запись и чтение текстового файла

chapo

чопа сребдс // @moujeek
Автор темы
Модератор
8,855
11,526
Как проще всего построчно записывать/читать текстовый файл?
 
Решение
для построчной записи в конец файла, открываешь файл в режиме a+ (подробнее об fopen)
PHP:
$hFile = fopen("path/to/your/file", "a+");


пишешь в любое время, используя fwrite
для обозначения конца строки используешь \n (LF, рекомендуется) или \r\n (CRLF), либо кроссплатформенную переменную PHP_EOL
PHP:
fwrite($hFile, "content\n");


по окончанию работы с файлом закрываешь его, используя fclose
файл автоматически закрывается после окончания работы скрипта, поэтому использовать часто не приходится
PHP:
fclose($hFile);


читать файл построчно можно используя функцию file без использования fopen
PHP:
$lines = file("path/to/your/file"); // в этом массиве все строки файла...

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
709
для построчной записи в конец файла, открываешь файл в режиме a+ (подробнее об fopen)
PHP:
$hFile = fopen("path/to/your/file", "a+");


пишешь в любое время, используя fwrite
для обозначения конца строки используешь \n (LF, рекомендуется) или \r\n (CRLF), либо кроссплатформенную переменную PHP_EOL
PHP:
fwrite($hFile, "content\n");


по окончанию работы с файлом закрываешь его, используя fclose
файл автоматически закрывается после окончания работы скрипта, поэтому использовать часто не приходится
PHP:
fclose($hFile);


читать файл построчно можно используя функцию file без использования fopen
PHP:
$lines = file("path/to/your/file"); // в этом массиве все строки файла
$rev = array_reverse($lines); // а здесь в обратном порядке (если нужно)

foreach ($lines as $line_number => $line_text) {
    printf("Строка %d: %s\n", $line_number, $line_text);
}


если нужно иметь сразу как всё содержимое файла, так и массив строк,
можно использовать file_get_contents и сплитнуть содержимое по \n (сначала заменив все \r\n на \n)
PHP:
$content = file_get_contents("path/to/your/file"); // все содержимое файла
$lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $content)); // строки в массиве

foreach ($lines as $line_number => $line_text)
    printf("line %d => %s\n");


либо наоборот склеить массив с \n
PHP:
$lines = file("path/to/your/file"); // строки в массиве
$content = implode("\n", $lines); // все содержимое файла (при использовании этого, хеш сумма будет отличаться от настоящего содержимого, которое может быть получено с помощью file_get_contents)


file_put_contents полностью перезаписывает файл

сам смотри, что тебе проще, каждому свое, либо зависит от ситуации
 
Последнее редактирование:
  • Нравится
Реакции: Lapenko и chapo

chapo

чопа сребдс // @moujeek
Автор темы
Модератор
8,855
11,526

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
709
А можно ли вписать переменную $folder в определенную строку (например во 2)?
конкретнее бы

file содержит массив строк, который ты можешь и редактировать
отсчет идет от 0, поэтому 2-я строка это 1

PHP:
$lines = file("path/to/your/file");
$lines[1] = "с заменой";
$lines[1] .= "дописать в конец строки";
$lines[1] = "записать в начало строки" . $lines[1];
array_splice($lines, 1, 0, ["строка 1", "строка 2"]); // добавить две строки после 2-й
file_put_contents("path/to/your/file", join("\n", $lines)); // сохранить изменения (символ переноса - LF)


если тебя интересует именно fopen, то можно взять fseek, чтобы установить курсор в определенную позицию, после чего записывать, используя fwrite
 
  • Нравится
Реакции: chapo