SiteMaker - Академия сайтостроительства | Разработка сайта
| Вёрстка сайта
| Веб программирование
| Интернет технологии
| Продвижение ресурса
| Инструментарий
карта сервера :: форум :: профайл :: авторам :: о сайте
Гид: SiteMaker.Ru » Веб программирование » PHP » PHP – Работа с файлами

PHP – Работа с файлами


Версия для печати

В настоящее время существует огромное количество средств для создания по истине интерактивных веб приложений. Среди наиболее популярных стоит отметить ASP, Perl и PHP. Эти средства прочно вошли в жизнь веб-разработчика. На данный момент самым быстро развивающимся является язык PHP. Поэтому рассмотрим его возможности более подробно.

PHP является внедряемым языком сценариев. Многое из его синтаксиса заимствовано из C, Java и Perl с некоторыми, заложенными в него, уникальными особенностями. Цель языка состоит в том, чтобы позволить веб-разработчикам быстро создавать динамически генерируемые страницы.

Развитие Сети диктует свои требования по предоставлению пользователю интересующей его информации. Сайт - это не только набор веб-страничек. Это еще и средство для хранения информации, организации обработки запросов пользователя и создания адекватного ответа на пользовательский запрос.

Хранить информацию на сервере можно несколькими способами. Первый – с использованием баз данных. Очень удобный способ хранения больших объемов информации, когда необходимо организовывать выборки, сортировать информацию по различным параметрам и т. д. Если же необходимо обработать небольшой объем информации, да еще и без каких–то ухищрений (например, организовать учет посещений), то подойдет второй способ – размещение информации в файлах.

PHP предоставляет очень большой набор средств по работе с файлами и файловой системой. Рассмотрим подробнее некоторые функции для работы с файлами.

Естественно, для начала работы с файлом его надо открыть. Для этого предназначена функция fopen(). Эту функцию можно использовать для открытия любого файла в файловой системе сервера через HTTP или FTP:

int fopen(string filename, 
   string mode);

filename – имя открываемого файла, mode – указатель на режим открытия файла. Он может принимать одно из следующих значений:

Значение

Описание

a

Открыть файл только для дополнений. Данные дописываются в конец файла.

a

Открыть файл для дополнения и чтения. Данные дописываются в конец файла.

r

Открыть файл только для чтения.

 

r

Открыть файл для чтения и дополнения. Данные дописываются в начало файла.

w

Открыть файл только для записи. Существующие данные будут утрачены.

w

Открыть файл для чтения и записи. Существующие данные будут утрачены.

При работе с двоичным файлом, необходимо указать флаг b. Однако, если между двоичными и текстовыми файлами не делается различия (как в системе Unix), то этот флаг игнорируется.

При успешном выполнении функция fopen() возвращает дескриптор файла, который представляет собой целое число. Этот дескриптор предназначен для ссылок на файл при последующих вызовах функций работы с файлами. При неудаче возвращается false. Пример:

$file_hendel = fopen("report", "a");
if (!$file_hendle) {
   echo("Невозможно открыть файл...");
   }
else {
   // функции работы с файлами;
   }

По завершении работы с файлом необходимо его закрыть:

int fclose(int fp)

В качестве аргумента, функция fclose() принимает дескриптор закрываемого файла. В случае успеха возвращается true, в случае неудачи – false.

Просто так файлы открывать бессмысленно. С ними надо что–то делать. Первое, что приходит на ум – вывести содержимое файла на экран. Эту операцию осуществляет функция fpassthru():

int fpassthru (int fp);

Эта функция выполняет чтение с текущей позиции в открываемом файле и до его конца, после чего она закрывает файл. В случае успеха возвращается true, в случае неудачи – false.

Может не возникнуть необходимости выводить весь файл. Возможно, нам понадобится прочесть только часть данных, для использования их на нашей странице. Для этой цели в РHP есть несколько функций.

Для чтения заданного количества символов из открываемого файла, можно воспользоваться функцией fread():

string fread(int fp, int length);

Функция читает строку длиной length символов из файла с дескриптором fp. Пример:

$file_hendel=fopen("text.txt", "r");
   if (!$file_hendle) {
      echo("Невозможно открыть файл...");
      }
   else {
      $text = fread($file_hendel, 5); //Считывается первые 5 символов
      fclose($file_hendel);
      }

Если конец файла достигнут раньше длины length, то возвращается весь прочитанный текст.

Так же для чтения данных из файла применяются функции fgetc(), fgets() и fgetss()

string fgets(int fp, int length);
string fgetss(int fp, int length);

Функция fgetc() производит считывание одного символа.

Функция fgets() возвращает строку из (length–1) символов. Чтение завершается, если будет достигнут символ перевода строки или конец файла.

Функция fgetss() идентична fgets(), но все теги HTML удаляются из строки, но учитываются в длине строки length.

При ошибке эти функции возвращают false.

Также, для чтения содержимого файла можно использовать функцию file(), возвращающую содержимое файла в виде массива. Каждая строка файла представляется в виде элемента массива:

array file(string filename);

Функция принимает в качестве аргумента не дескриптор файла, а строку с именем файла.

Для записи в файл используются функции fputs() и fwtite().

int fputs(int fp, string string, [int length]);
int fwrite(int fp, string string, [int length]);

Если последний параметр не указан, то осуществляется запись всей строки. Пример (учет посещений с занесением данных о дате посещения и IP посетителя в файл и вывода на экран сообщения о номере посещения):

<?php

//Учет посещений
// количество посетителей будем хранить в файле report
$date=date("d M Y, H:i:s");
$ip=getenv("REMOTE_ADDR"); // опредляем IP узла
$host = gethostbyaddr($ip); // определяем имя узла по его IP
$str=(    // формируем строку,
Date – $date // для размещения ее в файле
Host – $host // учета IP – $ip
–––––––––––––––––––––"); 
$file_hendle = fopen("report", "a "); 
//открываем файл report для добавлений,
fputs($file_hendle,$str); // записываем в него подготовленную строку и
fclose($file_hendle); // закрываем файл

// Определние и вывод порядкового номера посетителя
// количество посетителей будем хранить в файле visitors

// открываем файл visitors для перезаписи
$file_hendle = fopen("visitors", "w ");
$visitor_number = fread($file_hendle, filesize("visitors"));
$visitor_numbe ; // прибавляем еще одного посетителя,
rewind($file_hendle);
fwrite($file_hendle,$visitor_numbe); // переписываем файл visitors и
fclose($file_hendle); // закрываем файл
echo ("Поздравляем, вы $visitor_numbe посетитель!");

?>

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

Функция rewind() устанавливает текущую позицию в начало файла, дескриптор которого она принимает в качестве аргумента.

Может возникнуть необходимость определить текущее положение в файле. Для этой цели служит функция ftell()

int ftell(int fp);

С помощью функции fseek() можно переместиться в заданную позицию.

int fseek(int fp, int offset [, int whence]);

Основными аргументами функции являются дескриптор файла и значение заданной позиции от начала файла. Например, с помощь функции ftell() можно организовать перемещение в заданную позицию:

fseek($fp, ftell($fp) 10); // переход на 10 позиций вперед от текущей

Но этого же эффекта в PHP4 можно добиться без использования функции ftell(), так как в функции fseek() появился необязательный аргумент, который определяет способ перемещения на заданную позицию:
SEEK_SET – отсчитывает значение от начала файла (по умолчанию);
SEEK_CUR – отсчитывает значение от текущей позиции;
SEEK_END – прибавляет значение offset к концу файла.

Тот же пример в PHP4 примет вид:

fseek($fp, 10, SEEK_CUR);

Часто возникают ситуации, когда надо проверить положение указателя относительно конца файла. Для этого применяется функция feof(), которая возвращает
true, если достигнут конец файла и false, если конец файла не достигнут.

Возможности PHP по работе с файлами не ограничиваются приведенными здесь функциями. С полным описанием функций для работы с файловой системой можно ознакомится на официальном сайте PHP в разделе PHP: Manual: Filesystem functions.


Автор: Иван Шувалов, shuvalov.spb.ruДата публикации: 14.01.2002
Рейтинг статьи: [3.61] рейтинг статьи: 3.61рейтинг статьи: 3.61рейтинг статьи: 3.61рейтинг статьи: 3.61 [голосов: 36]Кол-во просмотров: 61540
Оценить статью: Установите cookies!

Комментарии читателей:


Сообщение №32 Gribikcgribikc@narod.ru в новом окне10.08.2002 13:34:11
Да хранить в файлах очень удобно можно хранить что угодно записывать читать но что вы скажете по поводу зашиты?
Вот вам вопрос мне требуеться хранить в файле логины и пароли
но если так делать то этот файл смотриться в браузере!!!
А это совсем не безопасно!!!
Да в правах доступа к файлу можно поставить так чтоб его нельзя было смотреть но он и от чтения тоже становиться закрытым!!!!
Сообщение №34 Denveroidhttp://sitemaker.ru в новом окне11.08.2002 2:08:20
Дык нужно умело работать с файлами. Советую прочитать статью &laquo;chmod - изменение режима доступа к файлам&raquo;. В работе с базами данных тоже нужно предпринимать максимум осторожностей...
Сообщение №115 jeka!http://phpscript.ru/ в новом окне08.01.2003 1:40:57
>>> Gribikc
Ну а что тебе мешает положить всой файл например ниже чем ../document_root/, и тогда его никто не прочитает, тока root.
Сообщение №140 Jorj_K 01.02.2003 20:07:46
А как переместить файлы между двумя разными папками
Сообщение №142 Septicos 06.02.2003 23:35:16
Вообще, пароли не стоит хранить в файлах, их можно шифровать и хранить в зашифрованном виде, тут поможет функция md5(). Как работает - скармливаешь ей (функции) строку, а она тебе возвращает её (строки) 32-битный хэш-код (который, кстати, для одной и той же строки всегда одинаков, и работает только в одностороннем порядке, то есть расшифровке не подлежит), и для проверки пароля используешь уже этот код, проверяешь не сам пароль, который юзер вводит для авторизации, а шифруешь введённую строку тоже в md5 и полученный хэш-код сравниваешь. Единственная проблема, которая может тут возникнуть - как быть, если юзер забыл пароль, но и это дело поправимое. Ты, то есть твой сценарий не возвращаешь пароль юзеру, а даёшь ему форму для смены пароля (к примеру, присылаешь ему на емейл, который он указывал при регистрации, ссылку на эту страницу). Ну можно выслать сгенерированный новый пароль - тут как твоя левая нога захочет... Немного гиморно, но!!! При таком раскладе хакер, даже если он порутит сервак с твоим сайтом и получит к нему доступ, НИКОГДА не взломает пароль, т.к. алгоритм md5 до сих пор никому не удалось расшифровать. На мой взгляд, самый безопасный способ хранения паролей. Если я не прав, расскажите, как кто делает это у себя, т.к. мне это пригодится. Заранее благодарен.

» Читать все комментарии...

Ваши комментарии:

Ваше имя:*
Ваш E-mail:
Ваш URL:
HTML запрещен
BB Код разрешен


Ваше сообщение:*
* - обязательные поля для заполнения

Внимание!
Перед появлением сообщения на сайте, оно пройдет премодерацию.

Поиск по сайту:

Последние статьи:
Работа с WDDX в РНР Работа с WDDX в РНР
Транслитерация и детранслитерация на РНР Транслитерация и детранслитерация на РНР
Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP
Создаем PHP отладчик своими руками. Часть 2 Создаем PHP отладчик своими руками. Часть 2
Создаем PHP отладчик своими руками. Часть 1 Создаем PHP отладчик своими руками. Часть 1
» архив всех статей
Схожая тематика:
:: Perl/CGI
:: ASP
:: JavaScript и VBScript

Академия веб мастеринга и веб дизайна. Разработка сайта, вёрстка сайта, веб программирование, продвижение ресурса, инструментарий и другие темы, посвященные разработке ресурсов в сети Интернет. Форум для веб мастера.


карта сервера :: форум :: профайл :: авторам :: о сайтеНаверх
Rambler's Top100Rambler's Top100 Valid HTML 4.01! © 2000-2017 Все права защищены
страница создана за 0.015 секунд
На главную страницуDeveloped by SiteMaker