Воскресенье, 2024-05-19, 1:12 PM
Статьи - PHP
Приветствую Вас Гость | RSS
Главная страница Каталог статей Регистрация Вход
Меню сайта

Категории каталога
PHP [158]
Статьи по PHP

Наш опрос
Выбираем ОС
Всего ответов: 192

Начало » Статьи » PHP » PHP

Функции работы с файлами
При работе с файлами в php основной порядок действий следующий:
Открытие файла
Совершение необходимых действий (запись в файл или чтение из файла)
Закрытие файла.
Для совершения каждого из этих шагов существуют отдельные функции, которые выполняют необходимые нам действия.
Для открытия файла служит функция fopen() :
$f = fopen("filename.txt","w");

Как вы видите, перед процедурой ставится переменная $f. Называться она может, естественно,
как угодно, но присутствовать должна обязательно. После вызова fopen() в эту переменную помещается
так называемый "дескриптор файла". Дескриптор нужен вот для чего.
Представьте, что в программе мы открываем несколько файлов.
Логично предположить, что в дальнейшем, когда мы будем, например, производить запись в файл, нам нужно будет указывать,
в какой именно файл мы пишем. Вот для этого и нужен дескриптор - он указывает тот файл, к которому мы обращаемся в данный момент.
Соответственно, для каждого открываемого файла нужен свой дескриптор, например, $f, $f1, $f2.
Подробнее про использование дескриптора вы увидите в дальнейших примерах.

Далее разбираем синтаксис самой функции fopen(). Она имеет два аргумента.
Первый - это путь к открываемому файлу, в нашем примере он называется "filename.txt".
Путь может быть указан как угодно, например так: "f:\site\htdocs\files\file.txt", или так: "/site/htdocs/1.dat".
Это может быть даже url, например "http://127.0.0.2/file.html" или "http://yandex.ru".
В этом случае, когда мы будем читать данные из файла, мы будем получать то, что выдает нам вебсервер.

Тут хочу сделать небольшое замечание и в очередной раз обратить ваше внимание на написание слешей.
Если вы пишете программу для windows то можно использовать обычное в этой системе написание слешей в именах файлов, то есть "\".
Но имейте в виду, что при загрузке программы на сервер провайдера в систему unix этот вариант написания путей работать не будет.
В unix необходимо использовать обратные слеши: "/". Как же быть, чтобы не путаться? Все очень просто:
в windows работает обратное написание слешей. То есть если вы напишите "/site/htdocs/file.txt" это будет работать и в windows и в unix.
Запомните это и возьмите за правило именно так указывать пути в ваших программах.

Второй аргумент функции fopen() это так называемый параметр режима.
Он указывает, для чего мы открываем этот файл - например, можно открыть файл
только для чтения, или для чтения и записи. Основные варианты параметра режима:

"r" - открыть файл для чтения (сокр. "read")
"w" - открыть файл для записи (сокр. "write")
"a" - открыть файл для записи в конец файла (сокр. "add")
Разница параметров "w" и "a" в том, что при открытии файла с помощью "w" его содержимое
перезаписывается, а при открытии с помощью "a" запись происходит в конец файла,
то есть новые данные добавляются к уже имеющимся.
Не забывайте про это важное отличие. Конкретные примеры использования функции fopen() вы увидите далее.

$s = fgets($f,255);

Здесь $s - переменная, в которую будет помещена прочитанная строка. $f - это дескриптор файла,
открытого с помощью fopen(), а 255 - количество байт, которое читается за один раз.
Конкретно в данном примере мы читаем 255 байт. Строка читается либо пока не будет прочитано
определенное заданное количество байт, либо пока не будет встречен символ переноса строки.

Существует также функция fgetss(), которая полностью идентичная fgets() за тем исключением,
что она исключает из прочитанной строки все тэги html и php. То есть если с помощью fgetss()
прочитать строку "<b>Строка</b>", результатом будет просто слово "Строка".

Для чтения символа из файла служит функция fgetc():

$c = fgetc($f);

Эта функция читает один символ. Здесь $c - прочитанный символ, а $f - дескриптор файла.

Для записи данных в файл служит основная функция fputs(): fputs($f,$s);

Здесь $f - дескриптор файла, а $s - записываемая строка.

Закрывает файл функция fclose($f). Файл обязательно закрывать всегда. Например, если вы не закрываете
файл после записи, то изменения просто не сохранятся.

Функция feof($f) проверяет достигнут ли конец файла. $f - файловый дескриптор. Если конец файла достигнут,
функция возвращает истину. По сути, файл можно вывести на экран такой небольшой программкой:

<?

$f = fopen("1.txt","r");
while (!feof($f)) echo fgets($f, 255);
fclose($f);

?>
И последняя функция:

$a = file("filename.txt");

Функция file() читает весь файл "filename.txt" и возвращает в переменную $a массив, каждый элемент которого
содержит отдельную строку файла. При чтении строки разделяются символами переноса строки.
Это одна из самых удобных функций для чтения файла, которая временами заменяет много действий.
Вот пример вывода файла на экран с помощью file():

<?

$f = file("1.txt");
for ($i=0;$i<count($f);$i++) echo $f[$i];

?>
Существует в php также очень полезная функция implode(), которая соединяет все элементы массива в одну переменную.
Иногда это очень удобно:

<?

echo implode("",file("1.txt"));

?>
Как вы видите, здесь мы выводим файл на экран всего одной строкой. Кстати, первый аргумент функции implode()
указывает чем необходимо склеивать элементы массива. В этом примере мы задаем пустой символ, а попробуйте,
например, так:

<?

echo implode("*",file("1.txt"));

?>
Ну а теперь давайте рассмотрим обработку файла на примере создания своей системы голосования.
Переходим к следующему разделу.

--------------------------------------------------------------------------------
Пример в номер: Своя система голосования на php
Вы когда-нибудь хотели узнать мнение своих посетителей по тому или иному поводу? Например,
"что Вы хотите видеть на сайте" или "нравиться ли Вам наш новый дизайн" ? Уверен, что такое желание возникало.
Действительно, установка на сайте собственного опроса или системы голосования позволяет не только
копить бесценную информацию о том, что думают Ваши посетители, но и придать сайту нелишнюю интерактивность.

В общем, достоинства собственной системы голосования очевидны. Но что делать, когда под рукой
нет необходимого скрипта? Можно, конечно, воспользоваться бесплатными системами голосования, которые позволяют
Вам установить форму с несколькими вопросами на свой сайт. В этом случае сам скрипт находиться на удаленном сервере
и выполняет всю работу. Но, на мой взгляд, это не очень подходящий вариант: во-первых, эти системы вставляют
свой баннер в голосование, во-вторых, работоспособность системы от Вас совершенно никаким образом не зависит.
Также, некоторые системы требуют довольно продолжительного нахождения в Сети, поскольку вся настройка голосования
происходит обычно on-line. А для некоторых пользователей это совсем немаловажный момент.

Итак, лучше всего создать свой собственный скрипт. Конечно, это потребует от Вас кое-какой работы,
но зато с лихвой окупиться за счет полной конфигурируемости, тонкости настройки и полностью своего интерфейса. Да и позволит лишний раз попрактиковаться в
программировании, что обычно не является лишним занятием для труженика сети :)

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

Итак, начнем.

Давайте представим, что мы на сайте хотим объявить следующее голосование:

ВАШЕ МНЕНИЕ:
Как Вам наш новый дизайн?
5 - Отлично!
3 - Так себе, потянет...
1 - Ужасно!!!
Пусть Вас не смущает количество вариантов ответов, на конфигурируемости это никак не отражается.
Вы сможете задать любое количество вопросов (равно как и любой вопрос в принципе) - от одного и
до бесконечности безо всяких проблем.

Двигаемся дальше. Для начала нам нужно сделать этот опрос в виде html, определив имена для переменных.

<form action="/php/vote.php" method="get" target="_blank">
<input type="hidden" name=id value=1>
<b>Как Вам наш новый дизайн?</b><p>
<input type="radio" name=vote value=1 checked>Отлично!<br>
<input type="radio" name=vote value=2>Так себе, потянет...<br>
<input type="radio" name=vote value=3>Ужасно!!!<p>
<input type="submit" value=" Голосовать! "><p>
<a href="/php/vote.php?id=1" target="_blank">Текущие результаты</a>
</form>
Это все. Теперь можно приступить к самому скрипту. Как видно из формы, нашему скрипту передается две переменных:

id=1: это номер голосования. Дальше Вы увидите, как он используется для создания нескольких независимых голосований.

vote=1: номер ответа, то есть конкретно выбранный вариант ответа Вашим посетителем.
Также к нашему скрипту ведет ссылка "Текущие результаты", указывающая только параметр id, без номера ответа.
Дело в том, что скрипт при отсутствии параметра vote просто выводит результаты, без сопутствующей благодарности
"Спасибо за Ваше мнение!" и каких-либо действий по учету голосования.
Продолжаем. Нашему скрипту потребуется собственная база данных с текстами вопросов и ответом к ним.
Конкретное голосование - это один вопрос и набор ответов к нему, а также количество мнений на каждый ответ.
Все голосования хранятся в отдельных текстовых файлах и определяются по переменной id, передаваемой
через форму. В примере id - это цифра (или что угодно другое), которая является первой частью имени файла.
Для примера, если id=1, значит база данных голосования лежит в таком файле: 1.dat или, в терминах php, $id.dat.
Впрочем, Вы увидите это далее на конкретном примере. Отсюда получается, что для создания голосования
Вам достаточно создать новый файл в очень простом формате (см. далее) и html-форму, содержащую тексты вопросов и id голосования.

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

Как Вам наш новый дизайн?
5~Отлично!
3~Так себе, потянет...
1~Ужасно!!!
Где 1я строка: это сам вопрос, остальные строки - пара "количество_мнений~ответ",
как Вы поняли, разделенных тильдой "~".
Теперь все, что нам осталось, это обрабатывать результаты.

Это делает следующий скрипт:

<?
// файл с конкретным голосованием
$data = file("$id.dat");

// выводим благодарности,
// если это не просто просмотр результатов
if ($vote) echo "<b><font color=red>
Спасибо за Ваше мнение!
</font></b><p>";

// выводим заголовок голосования - 1я строка файла
echo "<b>$data[0]</b><p>";

// печатаем список ответов и результатов - остальные строки
for ($i=1;$i<count($data);$i++) {
$votes = split("~", $data[$i]); // значение~ответ
echo "$votes[1]: <b>$votes[0]</b><br>";
}

// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
$f = fopen("$id.dat","w");
fputs($f, "$data[0]");
for ($i=1;$i<count($data);$i++) {
$votes = split("~", $data[$i]);
if ($i==$vote) $votes[0]++;
fputs($f,"$votes[0]~$votes[1]");
}
fclose($f);
}
?>
Собственно, это все, что требуется. Как видите, скрипт достаточно прост,
не выполняет каких-либо специфический действий,
да и ресурсов много не потребляет. Конечно, сюда можно добавить многие другие полезные функции, например,
сделать администраторский интерфейс для управления голосованиями через броузер и
держать все данные по голосованиям в одном файле,
чтобы не возиться каждый раз с $id.dat. Но это - в следующий раз, а пока моей целью было показать Вам,
что столь полезная система голосования очень просто реализуется.

Теперь Вы можете создать свой собственный дизайн, поправив html код формы и код, выводимый в скрипте.
Здесь очень просто что-либо изменить.

Категория: PHP | Добавил: webmaster (2006-12-06)
Просмотров: 416 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Сервисы

Поиск по каталогу

Друзья сайта

| Ссылки 1 | Ссылки 2 | Ссылки 3 |
www.webmaster.clan.su Каталог+поисковая система be number one Bakililar.az Top Sites Сервис авто регистрации в
каталогах, статьи про раскрутку сайтов, web дизайн, flash, 
photoshop, хостинг, рассылки; форум, баннерная сеть, каталог 
сайтов, услуги продвижения и рекламы сайтов Скрипт для определения тиц (Яндекс CY: индекс цитирования). Определение pr (Google Pagerank). Проверить тиц pr сайта.
Copyright WebMaster.Clan © 2006 Бесплатный хостинг uCoz