Перемещение внутри файла

Опубликовал: Понедельник, Апрель 9, 2012 в категории HTML | Пока нет комментариев

Каждый открытый файл поддерживает указатель на текущую позицию в файле. Для перемещения и манипулирования позицией указателя внутри файла используются следующие функции:

? 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) — (Профессиональное программирование)

Add to Social Bookmarks
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • BobrDobr
  • Mr. Wong
  • Yandex.Bookmarks
  • Text 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Pisali
  • SMI 2
  • Moe Mesto
  • 100 Zakladok
  • Vaau!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>