Урок 15: Чтение из текстового файла

В предыдущем уроке мы научились использовать РНР для доступа к файловой системе сервера. В этом уроке используем эту информацию для чтения из простого текстового файла.

Текстовые файлы отлично подходят для хранения разного рода данных. Они не так гибки, как базы данных, но обычно не требую такого количества памяти. Более того, текстовые файлы имеют формат, который читается на большинстве систем.

Открыть текстовый файл

Для открытия текстового файла используем функцию документацияfopen. Вот её синтаксис:


	fopen(filename, mode)
	
	
filename
Имя открываемого файла.
mode
Mode/Режим может быть "r" (reading/чтение), "w" (writing/запись) или "a" (appending/присоединение). В этом уроке мы будем только читать из файла и, соответственно, используем "r". В следующем уроке мы научимся записывать и присоединять текст.

Примеры этого урока используют файл unitednations.txt. Это простой список программ и фондов ООН и их доменов. Можете загрузить этот файл или создать свой и использовать его в примерах.

Сначала попробуем открыть unitednations.txt:


	<?php

	// Открыть текстовый файл
	$f = fopen("unitednations.txt", "r");

	// Закрыть текстовый файл
	fclose($f);

	?>

	
	

Пример 1: Чтение строки из текстового файла

С помощью функции документацияfgets можно читать строку из текстового файла. Этот метод читает до первого символа переноса строки (но не включая символ переноса строки).


	<html>

	<head>
	<title>Чтение из текстовых файлов</title>
	</head>
	<body>

	<?php

	$f = fopen("unitednations.txt", "r");

	// Читать строку их текстового файла и записать содержимое клиенту
	echo fgets($f); 

	fclose($f);

	?>

	</body>
	</html>
	
	

Пример 2: Чтение всех строк текстового файла


	<html>

	<head>
	<title>Чтение из текстовых файлов</title>
	</head>
	<body>

	<?php

	$f = fopen("unitednations.txt", "r");

	// Читать построчно до конца файла
	while(!feof($f)) { 
	    echo fgets($f) . "<br />";
	}

	fclose($f);

	?>

	</body>
	</html>
	
	

В этом примере мы выполняем цикл по всем строкам и используем функцию документацияfeof (for end-of-file/до конца файла) для проверки достижения конца файла. Если конец не достигнуть ("!" - см. Урок 6), строка записывается.

Вместо цикличного прохода по всем строкам мы можем получить тот же результат функцией документацияfread. При работе с очень большими текстовыми файлами помните, что документацияfread использует больше ресурсов, чем документацияfgets. Для маленьких файлов разница в работе несущественна.

Пример 3: Простая директория ссылок

Как сказано в начале этого урока, текстовые файлы могут отлично подойти для хранения данных. Это показано на следующем примере, где создаётся простая директория ссылок из содержимого файла unitednations.txt.

В файле систематизированно записаны: название программы, запятая, домен. Как вы, вероятно, могли предположить, в файле с разделением запятыми можно записать куда больше информации.

Для получения информации из каждой строки используем массив. См. в Уроке 8 о массивах.


	<html>
	<head>
	<title>Чтение из текстовых файлов</title>

	</head>
	<body>

	<?php
	$f = fopen("unitednations.txt", "r");

	// Читать построчно до конца файла
	while (!feof($f)) { 

	// Создать массив с запятой-разделителем
	   $arrM = explode(",",fgets($f)); 

	// Записать ссылки (получить данные из массива)
	   echo "<li><a href='http://" . $arrM[1] . "'>" . $arrM[0]. "</a></li>"; 

	}

	fclose($f);
	?>

	</body>
	</html>
	
	

Весьма удобно, правда? В принципе вы можете расширить этот файл сотнями ссылок или расширить директорию, включив также адреса.

В следующем уроке мы мы посмотрим, как записать в текстовый файл.



<< Урок 14: Файловая система

Урок 16: Запись в текстовый файл >>