include("compteur.php"); ?>
Файлы, директории и PHPРабота с файламиНеобходимость в операциях с файлами встает перед программистом очень часто. Если ваши скрипты не используют баз данных, то файлы остаются единственными приемлемыми хранителями информации для скрипта. Применение файлов как хранилищ информации выполнения скрипта позволяет использовать их в самых разнообразных ситуациях. Практически все скрипты-счетчики чего-либо написаны на основании работы с файлами. Также возможно привести кучу других примеров, но пора переходить непосредственно от слов к делу. Сразу хочу сказать, что работа с файлом должна быть санкционирована. По умолчанию PHP не допускает работу с файлом в целях безопасности. Чтобы снять этот запрет в FTP-менеджере CuteFTP в свойствах файла выставьте все галочки, в других менеджерах должно быть что-то подобное.
file_existsПрежде, чем производить операции с файлом, часто необходимо убедиться, что указанный файл вообще существует. Этим и занимается функция file_exists. Эта функция может возвращать только два значения, как вы сами понимаете, TRUE (если указанный файл существует) и FALSE. Обычно использование данной функции выглядит так:
Заметьте, что функция действует только на локальных файлах, то есть если вы возжелаете проверить, обзавелся ли Яндекс файлом robot.txt, то ваши усилия будут тщетны. Но зато возможно проверить любой файл, лежащий на локальном сервере независимо от директории его расположения. Вот некоторые правила описания пути к файлу.
filesizeКак видно из названия, функция определяет размер файла и возвращает его в байтах. Полезно, если вы хотите проверить файл на наличие в нем информации (как вы понимаете, пустой файл содержит 0 байт), а также возможно проверить размер файла на превышения определенного лимита.
fileЭта функция уже непосредственно работает с файлом. Она возвращает содержимое указанного файла, причем делает она это в виде массива, где каждый его элемент является строкой файла. Функция полезна, когда в одном файле необходимо сохранить несколько разных значений, которые не должны пересекаться. Тогда каждое значение сохраняется на отдельной строке и читается функцией file, которая возвращает массив, вследствие чего обращение к заданной переменной происходит с помощью чтения значения элемента массива с индексом, соответствующим строке в файле. Кроме того, возможно воссоединение всех элементов возвращенного массива в одну переменную. Это делается с помощью функции работы с массивами implode.
readfileКак и предыдущая функция, readfile выводит содержание указанного файла, а также возвращает число символов в файле (или количество байт, кому как нравится, так как один символ равен одному байту). Но учтите, что в отличие от file, эта функция не предусматривает присваивание прочитанного содержимого файла переменной. Если вы попытаетесь это сделать, то переменной присвоится только число прочитанных символов.
fopenЕсли предыдущая функция самодостаточна и в общем не связана с другими функциями, то последующие функции работы с файлами работают в связке с fopen. Эта функция открывает указанный файл и возвращает идентификатор соединения с файлом, который используется в служебных целях. С содержимым файла эта функция никаким образом не связывается. Функция fopen имеет несколько режимов работы с файлом. Они указываются после имени файла и представляют из себя следующие обозначения:
fgetsФункция чтения файла, открытого функцией fopen. Но в отличие от file, эта функция за каждый раз своего выполнения возвращает только одну строку файла, при этом она перемещает внутренний указатель файла на следующую строку, которую она прочитает при следующем обращении к функции. Поэтому, если вам необходимо прочитать файл целиком, необходимо использовать эту функцию в цикле. Заметьте, что функция fgets использует дополнительный параметр length, который указывает максимальную длину строки файла для чтения. Если объем строки превышает это число, то функция возратит ее в "урезанном" виде объемом в число length байт. По умолчанию этот параметр установлен в 1024 байт, или в один килобайт. Тем более обратите внимание на этот параметр, если вы используете файлы больших размеров, так как при чтении таких файлов может переполниться буфер выполнения PHP (его объем указывается в файле конфигурации), что приведет к зависанию.
Обратите внимание, что в качестве указания файла для чтения необходимо указывать не имя файла, а идентификатор соединения с файлом, возвращенный функцией fopen (в нашем примере это значение переменной $file).
fputsФункция записи информации в файл, причем делает она это по принципу работы функции fgets, то есть начинает запись с позиции внутреннего файлового указателя. Вообще, эта функции во многом схожа с вышеуказанной: она также использует параметр длины записываемых данных, который также является опциональным.
fcloseКак вы догадались, эта функция закрывает указанный файл. Вообще-то, по завершении выполнения скрипта, PHP сам закрывает все открытые им файлы, но все же лучше это делать вручную. В качестве параметра функции необходимо указать идентификатор соединения с файлом. Для иллюстрации связки вышеуказанных функций приведем пример создания простого счетчика посещений.
Работа с директориямиТесно связаны с действиями над файлами операции с директориями. Алгоритм работы с ними схож с операциями над файлами: сначала директорию необходимо открыть, выполнить какие-либо действия и, наконец, закрыть ее. opendirЭта функция открывает указанную директорию и возвращает служебный идентификатор соединения с директорией. Пути к директории следует указывать следующим образом:
readdirФункция читает директорию, открытую opendir. За каждый проход она возвращает имя файла или папки, лежащих в указанной директории, и перемещает внутренний указатель на следующий объект директории. Так что для прочтения всей директории ее необходимо использовать в цикле. Также необходимо заметить, что эта функция возвращает служебные объекты папки . и .., которые можно отсекать при выводе оператором IF. closedirЗакрываем директорию, указывая в качестве аргумента идентификатор соединения с папкой. Иногда использование функций работы с директориями очень облегчают жизнь. Например, в разделе Функции вы можете видеть список функций в алфавитном порядке. Представляете, сколько времени нужно было бы потратить, чтобы вручную написать весь этот список с ссылками, да еще и в алфавитном порядке. И вот как раз здесь мне помогли функции работы с директорией. Каждая функция была помещена в отдельный файл с именем, соответствующим названию функции, без каких-либо расширений.
Так что, при каждом заходе на страницу вы получаете только что сгенерированный список функций. На этом все. Встретимся на следующем уроке. |