Лекция 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). Если запустим скрипт, то увидим в последней строке вичисленное значение: