Файлы. Операции с файлами. Лекция 5

advertisement
Лекция 5
Файлы. Операции с файлами.
При выполнении практических задач иногда бывает необходимо записать некую
информацию в файл или прочитать данные из файла.
Для работы с файлами и файловой системой в PHP есть множество функций, которые могут
применятся в зависимости от задачи и ситуации http://www.php.su/functions/?cat=filesystem.
Рассмотрим простой пример чтения из файла:
Предположим, у нас есть текстовый файл data.txt, расположенный в той же папке, что и наш
основной скрипт index.php.
В самом простом случае мы можем считать всё содержимое файла data.txt полностью с
помощью функции file_get_contents().
...
// Запоминаем всё содержимое файла data.txt в переменную
$content = file_get_contents('data.txt');
…
если выведем содержимое переменной с помощью echo, то получим всё содержимое файла в
коде страницы:
Hello, it's my first experience with files!
Рассмотрим другой вариант файла данных. Положим, у нас есть файл (или тот же data.txt),
который содержит построчно числа – возраст жильцов подъезда из нашей традиционной
задачи:
И нам нужно считать эти числа так, чтобы получился массив, вида array(51, 60, 33, 25,
18, 40);
который мы смогли бы передать в функцию для обработки.
Прежде всего нам нужно открыть файл на чтение. Это можно сделать с помощью функции
fopen():
...
$file = fopen('data.txt', 'r');
...
Первым параметром мы указываем, какой файл нужно открыть, а вторым ('r') – для каких
операций мы открываем файл. Есть несколько вариантов знечений:
r
Открывает файл для чтения
w
Открывает файл только для записи. Если файл существует – содержимое его
обнуляется. Если файл не существует - пробует его создать.
r+
Открывает файл для чтения и записи.
w+
Открывает файл для чтения и записи. Если файл существует – содержимое его
обнуляется. Если файл не существует - пробует его создать.
a
Открывает файл только для записи. Позволяет Дозаписать файл. Если файл не
существует - пытается его создать.
a+
Открывает файл для чтения и записи; помещает указатель в конец файла. Если
файл не существует - пытается его создать.
* Есть также другие параметры (x, x+), но применяются гораздо реже.
В нашем примере, нам необходимо только считать данные, поэтому мы использовали режим
“r”. При этом в переменной $file мы получили данные типа “ресурс” - ещё один особый тип
данных в PHP.
Далее нам нужно считать построчно каждое число, записав его в массив. Для этого можем
использовать следующий цикл:
...
while(!feof($file)){
// Читаем файл построчно:
$age = fgets($file);
// Пишем считанное в массив:
$ages[] = $age;
}
...
Теперь поясним смысл написанного:
В качестве условия цикла while мы использовали стандартную функцию feof(), которая
возвращает true в том случае, когда достигнут конец указанного ресурса ( в нашем случае $file). То есть конструкция while( !feof($file) ) читается как: “Пока не достигнут
конец файла $file”.
Если всё выполнено верно, то в переменной $ages на выходе мы получим массив
интересующих нас чисел: Array ( [0] => 51 [1] => 60 [2] => 33 [3] => 25 [4] => 18
[5] => 40 )
Далее с этим массивом мы можем выполнить те операции, которые нам нужно, например,
посчитать по ним среднее арифметическое. Но эту часть мы опустим, поскольку она не
относится напрямую к данной теме, а полный вариант скрипта можно найти в прикреплении,
в архиве example_5.zip.
Усложним задание. Допустим, нам нужно после вычисления среднего арифметического нам
нужно записать результат вычисления в последнюю строку этого же файла.
Прежде чем открывать тот же файл на запись, нужно закрыть предыдущий сеанс доступа с
помощью функции fclose():
…
fclose($file);
…
После этого, можно открывать новый сеанс уже на запись, с помощью режима “a”:
…
$file = fopen('data.txt', 'a');
…
И записать результат вычисления в тот же файл в конце:
...
fwrite($file, "\n".getAverageAge($ages));
…
Для записи в файл используется функция fwrite(), которая принимает 2 аргумента:
Первый – идентификатор ресурса, в который производится запись ($file) и второй – значение,
которое необходимо записать “\n” . getAverageAge($ages) .
В нашем случае, при записи в конец файла, нужно записать значение с новой строки, потому
мы использовали символ новой строки “\n” (newline).
Если запустим скрипт, то увидим в последней строке вичисленное значение:
Download