Перемещение внутри файла
Каждый открытый файл поддерживает указатель на текущую позицию в файле. Для перемещения и манипулирования позицией указателя внутри файла используются следующие функции:
? rewind(<Дескриптор>) устанавливает указатель на начало файла;
? ftell(<Дескриптор>) возвращает позицию указателя относительно нача-
ла файла;
? feof(<Дескриптор>) возвращает true, если указатель находится в конце файла;
? fseek(<Дескриптор>, <Смещение>[, <Позиция>]) устанавливает указатель в позицию, имеющую смещение <Смещение> относительно позиции <Пози- ция>. Параметр <Позиция> может принимать следующие значения:
• SEEK_SET — начало файла (по умолчанию);
• SEEK_CUR — текущая позиция указателя;
• SEEK_END — конец файла.
Установка указателя на конец файла продемонстрирована в программном коде, приведенном в листинге 5.44.
Листинг 5.44. Добавление E-mail с установкой указателя на конец файла
<?php
@$file = fopen("file.txt", "r+");
if ($file) {
flock($file, LOCK_EX);
fseek($file, 0, SEEK_END);
fwrite($file, "\[email protected]"); flock($file, LOCK_UN); fclose($file);
echo "Строка записана";
}
else {
echo "Не удалось открыть файл";
}
?>
5.25.4. Создание списка рассылки с возможностью добавления, изменения и удаления E-mail-адресов
В качестве примера рассмотрим создание списков рассылки. Создадим воз- можность добавления нового E-mail, удаления и переименования, а также выведем содержимое файла в поле <textarea>. Для этого создадим два фай- ла: mail_script.php (листинг 5.45) и mail.php (листинг 5.46).
Листинг 5.45. Содержимое файла mail_script.php
<?php
// Проверка E-mail на корректность
function f_test_email($email) {
$pattern = ‘/^([a-z0-9_.-]+)@([a-z0-9-]+\.)+[a-z]{2,6}$/is’;
return preg_match($pattern, $email);
}
// Проверка наличия E-mail. Возвращает индекс или false function f_in_array($email, $mass) {
for ($i=0, $c=count($mass); $i<$c; $i++) {
if (strtolower($email) === strtolower($mass[$i]))
return $i;
}
return false;
}
// Добавление E-mail function f_add(&$txt) {
if (f_test_email($txt)) {
if (!file_exists(‘file.txt’)) { // Если файл не существует
file_put_contents(‘file.txt’, $txt) or die(‘Ошибка’);
$txt = ”;
return ‘<span style="color: green">E-mail добавлен</span><br>’;
}
$arr = file(‘file.txt’,
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (count($arr) == 0) { // Если нет ни одного E-mail file_put_contents(‘file.txt’, $txt) or die(‘Ошибка’);
$txt = ”;
return ‘<span style="color: green">E-mail добавлен</span><br>’;
}
if (f_in_array($txt, $arr) === false) {
file_put_contents(‘file.txt’, "\n" . $txt, FILE_APPEND)
or die(‘Ошибка’);
$txt = ”;
return ‘<span style="color: green">E-mail добавлен</span><br>’;
}
else {
$msg = ‘<span style="color: red">E-mail был добавлен ‘;
$msg .= "ранее</span><br>\n";
return $msg;
}
}
else {
$msg = ‘<span style="color: red">E-mail не соответствует ‘;
$msg .= "шаблону</span><br>\n";
return $msg;
}
}
// Удаление E-mail
function f_delete(&$del) {
if (!file_exists(‘file.txt’)) { // Если файл не существует
$msg = ‘<span style="color: red">Файл не существует’;
$msg .= "</span><br>\n";
return $msg;
}
if (f_test_email($del)) {
$arr = file(‘file.txt’,
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$index = f_in_array($del, $arr);
if ($index !== false) {
$arr[$index] = ”;
$str = implode("\n", $arr);
$str = trim(str_replace("\n\n", "\n", $str));
if (file_put_contents(‘file.txt’, $str) === false)
die(‘Ошибка’);
$del = ”;
return ‘<span style="color: green">E-mail удален</span><br>’;
}
else {
return ‘<span style="color: red">E-mail не найден</span><br>’;
}
}
else {
$msg = ‘<span style="color: red">E-mail не соответствует ‘;
$msg .= "шаблону</span><br>\n";
return $msg;
}
}
// Изменение E-mail
function f_update(&$s, &$na) {
if (!file_exists(‘file.txt’)) { // Если файл не существует
$msg = ‘<span style="color: red">Файл не существует</span><br>’;
return $msg;
}
if (f_test_email($s) && f_test_email($na)) {
$arr = file(‘file.txt’,
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$index = f_in_array($s, $arr);
if ($index !== false) {
if (f_in_array($na, $arr) === false) {
$arr[$index] = $na;
$str = implode("\n", $arr);
file_put_contents(‘file.txt’, $str) or die(‘Ошибка’);
$s = $na = ”;
$msg = ‘<span style="color: green">E-mail ‘;
$msg .= ‘изменен</span><br>’;
return $msg;
}
else {
$msg = ‘<span style="color: red">Добавляемый E-mail ‘;
$msg .= ‘зарегистрирован ранее</span><br>’;
return $msg;
}
}
else {
return ‘<span style="color: red">E-mail не найден</span><br>’;
}
}
else {
$msg = ‘<span style="color: red">E-mail не соответствует ‘;
$msg .= ‘шаблону</span><br>’;
return $msg;
}
}
// Вывод содержимого файла
function f_print() {
echo ‘<textarea cols="25" rows="15">’;
if (file_exists(‘file.txt’)) readfile(‘file.txt’);
echo ‘</textarea><br>’;
}
?>
Листинг 5.46. Содержимое файла mail.php
<?php require_once(‘mail_script.php’); if (isset($_GET['add'])) {
$add = $_GET['add'];
echo f_add($add);
}
else $add = ”;
?>
<!- Выводим форму Добавить ->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="add" value="<?php echo $add; ?>">
<input type="submit" value="Добавить">
</form>
<?php
if (isset($_GET['del'])) {
$del = $_GET['del'];
echo f_delete($del);
}
else $del = ”;
?>
<!- Выводим форму Удалить ->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="del" value="<?php echo $del; ?>">
<input type="submit" value="Удалить">
</form>
<?php
if (isset($_GET['s']) && isset($_GET['na'])) {
$s = $_GET['s'];
$na = $_GET['na'];
echo f_update($s, $na);
}
else $s = $na = ”;
?>
<!- Выводим форму Изменить ->
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
Старый E-mail<br>
<input type="text" name="s" value="<?php echo $s; ?>"><br>
Новый E-mail<br>
<input type="text" name="na" value="<?php echo $na; ?>">
<input type="submit" value="Изменить">
</form>
<!- Выводим содержимое файла ->
<?php f_print(); ?>
Откроем в Web-браузере файл mail.php. С помощью форм можно добавить новый E-mail, удалить или переименовать существующий. Причем добавить можно только новый E-mail; если будет введен уже существующий E-mail, то в Web-браузере отобразится соответствующее предупреждение. Кроме того, производится проверка на корректность введенного E-mail; если он не соот- ветствует шаблону, то также отобразится сообщение. Заменить E-mail можно только на отсутствующий в файле E-mail. Таким образом, в файле будут за- писаны только уникальные E-mail-адреса.
Как разослать письма по E-mail-адресам из этого файла, мы рассмотрим при изучении отправки писем с сайта (см. разд. 5.26).
Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)
Похожие посты:
- Изменение вида ссылки при наведении на нее указателя мыши с помощью CSS без использования изображений или сценариев на JavaScript (0)
- Изменение фонового цвета строки при наведении на нее указателя мыши (0)
- Формы Django (0)
- Усовершенствование примера обработки формы (0)
- Создание формы для ввода отзыва Django (0)
- Ваш первый класс формы Django (0)
- Высокоуровневые абстракции функций представления (0)