Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Написали функцию calc, занимающуюся непосредственно вычислением результата и вывода его на экран пользователя.

Наконец, заканчиваем файл:

if ($action) calc(); else show();
?>

Если в переменной $action есть какое-либо значение (а оно может появиться только в случае нажатия кнопки "Выполнить"), то выполняется функция вычисления calc(), если же $action пуста, то выведется форма Калькулятора.

Конечно, можно было дополнить наш калькулятор еще тригонометрическими функциями (php функции sin(), cos(), tan(), котангенс - 1/tan() ), возможно было бы пристроить всяческие Java-навороты. Но это бы не меняло бы сути дела, а лишь сделало пример более громоздким. Так что если желаете использовать всяческие примочки на свой калькулятор - пожалуйста.

Также этот пример можно было сделать в двух отдельных файлах: допустим, show_calc. htm и calc. php, где первый файл содержал бы функцию show, а второй, соответственно, calc. Но мне хотелось показать использование, что называется, user-defined functions, то есть функций, определенных пользователем.

Файлы, директории и PHP

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

Необходимость в операциях с файлами встает перед программистом очень часто. Если ваши скрипты не используют баз данных, то файлы остаются единственными приемлемыми хранителями информации для скрипта. Применение файлов как хранилищ информации выполнения скрипта позволяет использовать их в самых разнообразных ситуациях. Практически все скрипты-счетчики чего-либо написаны на основании работы с файлами. Также возможно привести кучу других примеров, но пора переходить непосредственно от слов к делу.

НЕ нашли? Не то? Что вы ищете?

Сразу хочу сказать, что работа с файлом должна быть санкционирована. По умолчанию PHP не допускает работу с файлом в целях безопасности. Чтобы снять этот запрет в FTP-менеджере CuteFTP в свойствах файла выставьте все галочки, в других менеджерах должно быть что-то подобное.

file_exists

Прежде, чем производить операции с файлом, часто необходимо убедиться, что указанный файл вообще существует. Этим и занимается функция file_exists. Эта функция может возвращать только два значения, как вы сами понимаете, TRUE (если указанный файл существует) и FALSE. Обычно использование данной функции выглядит так:

if ( !file_exists("somefile. txt") ) exit("Указанный файл не существует");

Заметьте, что функция действует только на локальных файлах, то есть если вы возжелаете проверить, обзавелся ли Яндекс файлом robot. txt, то ваши усилия будут тщетны. Но зато возможно проверить любой файл, лежащий на локальном сервере независимо от директории его расположения.

Вот некоторые правила описания пути к файлу.

filename

Просто указание имени файла означает, что он находится в текущей директории.

./files/filename

Файл содержится в папке files, находящейся в текущей директории. Длина цепочки из папок не ограничена.

../filename

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

../files/filename

Файл находится в папке files, которая лежит в предыдущей директории.

filesize

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

file

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

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

$text_file = implode("", file("somefile"));
echo $text_file;

readfile

Как и предыдущая функция, readfile выводит содержание указанного файла, а также возвращает число символов в файле (или количество байт, кому как нравится, так как один символ равен одному байту). Но учтите, что в отличие от file, эта функция не предусматривает присваивание прочитанного содержимого файла переменной. Если вы попытаетесь это сделать, то переменной присвоится только число прочитанных символов.

$bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";

fopen

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

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

    "r" Файл открывается только для чтения его содержимого. "r+" Открытие файла как для чтения, так и для записи. "w" Файл открывается с целью записи. "w+" Открыть файл для чтения и записи. "a" Файл открывается для записи в конец файла (дозаписи). "a+" Открывается для дозаписи и чтения.

fgets

Функция чтения файла, открытого функцией fopen. Но в отличие от file, эта функция за каждый раз своего выполнения возвращает только одну строку файла, при этом она перемещает внутренний указатель файла на следующую строку, которую она прочитает при следующем обращении к функции. Поэтому, если вам необходимо прочитать файл целиком, необходимо использовать эту функцию в цикле.

Заметьте, что функция fgets использует дополнительный параметр length, который указывает максимальную длину строки файла для чтения. Если объем строки превышает это число, то функция возратит ее в "урезанном" виде объемом в число length байт. По умолчанию этот параметр установлен в 1024 байт, или в один килобайт. Тем более обратите внимание на этот параметр, если вы используете файлы больших размеров, так как при чтении таких файлов может переполниться буфер выполнения PHP (его объем указывается в файле конфигурации), что приведет к зависанию.

$file = fopen ("somefile", "r");
while ($line = fgets($file, 4096) )
{
  $line.="\n";
  echo $line;
}
следующие команды работы с файлом

Обратите внимание, что в качестве указания файла для чтения необходимо указывать не имя файла, а идентификатор соединения с файлом, возвращенный функцией fopen (в нашем примере это значение переменной $file).

fputs

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

fclose

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

Для иллюстрации связки вышеуказанных функций приведем пример создания простого счетчика посещений.

<?
$file = fopen("counter. txt", "r");
$c = fgets ($file, 150); 
fclose ($file); 
$c++; 
$file = fopen("counter. txt", "w"); 
fputs ($file, $c); 
fclose ($file); 
echo $c;
?>

Работа с директориями

Тесно связаны с действиями над файлами операции с директориями. Алгоритм работы с ними схож с операциями над файлами: сначала директорию необходимо открыть, выполнить какие-либо действия и, наконец, закрыть ее.

opendir

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

 .

Точка означает открытие текущей директории

./files/

Открытие папки files, находящейся в текущей директории

..

Открытие папки на уровень выше текущей

readdir

Функция читает директорию, открытую opendir. За каждый проход она возвращает имя файла или папки, лежащих в указанной директории, и перемещает внутренний указатель на следующий объект директории. Так что для прочтения всей директории ее необходимо использовать в цикле.

Также необходимо заметить, что эта функция возвращает служебные объекты папки . и .., которые можно отсекать при выводе оператором IF.

closedir

Закрываем директорию, указывая в качестве аргумента идентификатор соединения с папкой.

Иногда использование функций работы с директориями очень облегчают жизнь. Например, в разделе Функции вы можете видеть список функций в алфавитном порядке. Представляете, сколько времени нужно было бы потратить, чтобы вручную написать весь этот список с ссылками, да еще и в алфавитном порядке. И вот как раз здесь мне помогли функции работы с директорией. Каждая функция была помещена в отдельный файл с именем, соответствующим названию функции, без каких-либо расширений.

$i = 0;
$handle = opendir ('.');
while($file = readdir($handle))
{
  if ($file!= '.' && $file!= '..')
  {
  $func[$i] = $file;  //формируем массив названий файлов с функциями
  $i++;
  }
}
sort
($func);
for ($q = 0; $q<sizeof($func); $q++)
{
  echo "<a href='index. php?".$func[$q]."'>".$func[$q]."</a><br>\n";
}

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

На этом все. Встретимся на следующем уроке.

Добро пожаловать, или пишем Гостевую книгу.

Итак, мы добрались до чего-то серьезного. Если раньше мы занимались больше "отстраненными" делами, то сегодня мы будем решать реальную задачу, с которой может столкнутся практический любой вебмастер, - написание собственной гостевой книги.

Конечно, можно использовать "гостевые" специализированных серверов, например, какой-нибудь http://guestbook. *****/, и лицезреть каждый раз их баннеры; или же взять готовые скрипты, допустим, с *****, но это тоже не так интересно, потому что автор скрипта писал гостевую книгу не для вашего сайта, а следовательно, такая "гостевуха" может нарушить общую концепцию вашего обожаемого детища.

Ну, думаю, я вас убедил, что "своя рубашка ближе к телу", так что приступим.

Итак, с чего начинается любая программа? Правильно, с постановки задачи. Так, наша гостевая книга прежде всего должна делать следующее:

1.  Сохранять добавленное сообщение.

2.  Производить проверку добавляемого сообщения перед сохранением (в целях безопасности).

3.  Выводить все сообщения на экран.

Это общие формулировки задач, к которым по мере написания кода будут добавляться новые.

Теперь, что нам понадобится? Как вы понимаете, серьезные вещи не пишутся в одном файле. Так что создадим в одной папке следующие файлы:

1.  config. php - здесь будут храниться общие настройки гостевой книги.

2.  base. txt - файл, где будут храниться все сообщения, наша своеобразная база данных.

3.  guest. php - здесь будет содержаться непосредственно наш скрипт.

Все, приготовления на этом окончены и пора переходить к сути дела.

Начинаем писать файл guest. php. Сразу хочу сказать, что практически все действия мы будет записывать в функциях, которые мы изучили на уроке 4. Поверьте, это очень удобно.

Прежде всего сделаем HTML шапку, которая будет выводиться независимо от того, какие действия мы совершаем.

<HTML>

<HEAD>

<TITLE>Гостевая книга</TITLE>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

</HEAD>

<BODY>

<?

require("config. php");

Далее пишем функцию, которая будет выводить форму для добавления сообщения. Она основана на HTML. Код становится более "размашистым", поэтому дальнейшее использование таблиц для его отображения становится невозможным, так что я перехожу к <TextArea>.

function show_form() { ?> <form method="post" action=""> Имя<br> <input type="text" name="name" maxlength="22"> <br> E-mail<br> <input type="text" name="email" maxlength="21"> <br> Сообщение<br> <textarea cols="70" rows="20" name="mess"></textarea><br> <input type="submit" value="Послать"> <input type="reset" value="Очистить"> </form> <? }

Ну, я думаю, здесь все понятно: мы прерываем PHP код и пишем HTML, хотя эта часть по-прежнему относится к функции. Свойство action тега Form равно пустой строке, то есть обработчик формы находится в этом же файле. Уже при написании формы мы думаем о защите скрипта и ограничиваем количество вводимых символов свойством maxlength.

Итак, пользователь ввел сообщение и нажал на кнопку "Послать". Что же далее? Понятно, что нам нужно теперь сохранить это сообщение, чем сейчас и займемся.

Напишем в файле config. php следующие строки:

<?
$base = "base. txt";

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

Теперь название файла-базы занесено в переменную, что значительно облегчит нам жизнь, если мы пожелаем использовать другой файл-базу.

Возвращаемся обратно к нашему основному файлу и пишем в нем следующее:

function save_mess() { global $name, $email, $mess, $base; $date = date("d. m.y - H:i:s"); $text = $name."^^".$email."^^".$date."^^".$mess."\n"; $fp = fopen($base,"a"); fputs($fp, $text); fclose($fp); }

Ну, это, наверное, тоже несложно. Мы объявляем наши переменные как глобальные, то есть именно те, которые пользователь послал из формы. Далее мы присваиваем переменной $date текущую дату в виде день. месяц. год - часы:минуты:секунды (о функции date() читайте в статье Функция date() - вывод даты и времени в PHP). 

Затем имя отправившего сообщения, его адрес и само сообщение присваиваем переменной $text, причем разделяем их знаком ^^, который мы будем использовать для обратного процесса - из строки получать имя, адрес и сообщение. Для этого можно использовать любой символ или сочетание символов, которые не используются на письме, но я выбрал именно ^^.

Далее открываем файл-базу для дозаписи и приписываем в конце файла полученную строку из всех данных.

Итак, что мы имеем? Мы имеем форму для ввода сообщения и функцию для его сохранения. А теперь напишем функцию вывода сообщений.

Договоримся, что сообщения у нас будут выводиться в порядке убывания даты и времени их написания. Кроме того, ограничим число выводимых сообщений определенным числом, указанным в файле config. php, куда и добавляем строку:

$MessOnScreen = 10;

Вы можете установить здесь любое число.

Возвращаемся к guest. php и пишем довольно объемную функцию:

function show_mess() { global $base, $MessOnScreen; $file = file($base); $file = array_reverse($file); echo "<table>"; if(sizeof($file) < $MessOnScreen) $MessOnScreen = sizeof($file); for ($i = 0; $i < $MessOnScreen; $i++) { $mess = explode("^^",$file[$i]); ?> <tr> <td> <p>Написал: <? echo "<a href='mailto:".$mess[1]."'>".$mess[0]."</a>"; echo "<br>"; echo $mess[2]; ?> </td> <td> <p><?=$mess[3];?></td> </tr> <? } echo "</table></td>"; }

Функцией file() мы получаем массив, где в каждом элементе содержится строка с одним "блоком" - именем писавшего, адресом и его сообщением соответственно. Потом мы "переворачиваем" полученный массив, изменяем порядок элементов на обратный, так что самая последняя запись становится у нас первым элементом массива. Далее мы сравниваем количество элементов в $file (а значит и количество сообщений) с указанным в $MessOnScreen лимитом, и если оно меньше этого значения, то $MessOnScreen устанавливаем в число элементов $file.

Далее выполняется цикл вывода сообщений. С каждым проходом цикла значение переменной цикла увеличивается на единицу. Таким образом самые свежие сообщения (те, что были приписаны позже всех и находятся внизу файла-базы) выведутся первыми, а более старые - последними.

После этого переменной $mess присваиваем массив с элементами:
0-ой элемент - имя
1-ый элемент - адрес электронной почты
2-ой элемент - время добавления сообщения
3-й элемент - само сообщение

Это делается с помощью функции explode(), которая разбивает строку по символам ^^ (помните, говорили об этом выше).

Затем мы выводим в таблице все полученные значения. Если не встречались, то запись <?=$mess[2];?> эквивалентна <? echo $mess[2];?>

На сегодня все, продолжим на следующем уроке.

Снова здрасьте, или дописываем Гостевую книгу.

Итак, мы сегодня продолжаем писать нашу гостевую книгу и пора вспомнить, на чем мы остановились. Мы написали три функции: по выводу формы, сохранению сообщения и отображению всех ранее написанных сообщений.

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

Так что продолжаем.

А продолжим мы с очень важной функции проверки введенных данных. У нас будет даже не одна функция проверки, а больше.

Значит, открываем файл guest. php и пишем:

function check_mess() { global $name, $email, $mess; $mess=trim($mess); $email=trim($email); $name=trim($name); $name = htmlspecialchars($name); $email = htmlspecialchars($email); $mess = htmlspecialchars($mess); $mess = str_replace("\n","<br>",$mess);

Это еще не конец функции.

Здесь мы "отрезали" с помощью функции trim() все пустые символы (пробелы, переводы строк, символы табуляции) в начале и в конце строк. Далее мы заменили с помощью функции str_replace все символы перевода строки на тег <br>. Это облегчит нам задачу сохранения форматированных строк и их дальнейшего вывода.

Далее в функции следует очень важный элемент - первое, с чего следует начать строить защиту программы - функция htmlspecialchars(), которая обрабатывает все специальные символы HTML, то есть символ < переходит в &lt;  и так далее. Никогда не забывайте об этом элементе!

Мне вот подумалось: мы выполняем проверку данных, а ведь  в случае неверности данных нам требуется выдать сообщение о соответствующей ошибке. Так давайте это тоже оформим в виде функции. Не закрывая предыдущей функции, ниже пишем новую, которая будет отвечать за вывод ошибки:

function output_err($num) { global $err; ?> <center><h1>Oшибка!</h1></center> <p><?=$err[$num];?> <? exit(); }

В файле config. php в массиве $err мы будем перечислять сообщения для вывода при соответствующей ошибке. Обратите внимание, что мы при помощи функции exit() прекращаем работу скрипта после вывода сообщения об ошибке.

Дописываем функцию check_mess():

if (empty($name)) output_err(2); if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { output_err(1); } if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name)) output_err(2); }

И тут же, пока не забыли, пишем в файл config. php следующие строки:

$err[1] = "Неверно введен e-mail";
$err[2] = "Неверно введено имя";

Как видите, в предыдущей функции мы активно работали с регулярными выражениями. Сначала мы проверяли, чтобы e-mail был вида *****@***com, а затем проверке подвергнулось и имя: оно должно содержать только буквы латинского и русского алфавита и знак подчеркивания (_). При несоблюдении этих условий задействуется функция output_err() с аргументом, представляющим собой индекс массива $err для соответствующей ошибки.

Далее нам необходимо проверить данные на соответствие допустимой длине. Так что пишем новую функцию check_for_length():

function check_for_length() { global $mess, $email, $name, $MessLength; if (strlen($mess)>$MessLength) output_err(3); $email=substr($email, 0, 21); $name=substr($name, 0, 22); }

Здесь мы сначала сверяем длину сообщения с указанной в переменной $MessLength с помощью функции strlen(), которая возвращает количество символов в строке, и используем функцию output_err() в случае превышения длины сообщения над лимитом. Не забудьте в файле config. php написать следующие строки:

$MessLength = 1000;
$err[3] = "Недопустимая длина сообщения";

Далее мы "обрубаем" строку с помощью функции substr(), оставляя в переменной $email первые 21 символов, а в $name - 22. Вообще-то в нормальных условиях длина этих двух строк не может превышать эти числа, так как мы еще в форме для ввода сообщения указали этот лимит, но все-таки стоит перестраховаться.

Продолжаем блок проверки и пишем следующую функцию, которая будет заниматься отслеживанием флуда, то есть публикации одного и того же сообщения.

function check_mess_for_flud() { global $mess,$base; $file=file($base); $file=implode("",$file); $mess=preg_quote($mess); if (eregi($mess, $file)) output_err(4); $mess = stripslashes($mess); }

Эта функция основана на работе с регулярными выражениями. Сначала мы получаем массив строк файла-базы с помощью функции file(), затем объединяем весь массив в одну переменную. Далее мы "квотируем" сообщение пользователя (см. функцию preg_quote в соответствующем разделе) и смотрим, встречается ли этот текст в базе или нет. Если встречался, выводим ошибку. Следующая строка возвращает текст в переменной $mess в первоначальное состояние, то есть убирает все обратные слеши \ перед специльными символами, которые были добавлены функцией preg_quote. В файле config. php напишите:

$err[4] = "Такое сообщение уже существует";

Следующая функция заканчивает проверки, хотя она сама не является функцией проверки сообщения (она, скорее, функция проверки файла-базы), но все же мы отнесем ее сюда.

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

function del_mess_from_file() { global $base, $MessInFile; $file = file($base); $k = 0; if($MessInFile<sizeof($file)) { for($i=sizeof($file)-$MessInFile; $i<sizeof($file); $i++) { $ResFile[$k]=$file[$i]; $k++; } $fp=fopen($base,"w"); for($i=0; $i<sizeof($ResFile); $i++) { fputs($fp, $ResFile[$i]); } fclose($fp); } }

Сразу добавим строку в файл config. php:

$MessInFile = 20;

Это то количество сообщений, которые следует хранить в файле. Если вы не желаете иметь "архив" сообщений, установите здесь то же число, что и в переменной $MessInFile.

Теперь разберем функцию.

Сначала мы присваиваем переменной $file массив из строк файла базы. После мы ставим условие, что все дальнейшие действия функции будут выполняться только если количество сообщений в файле больше числа, указанного в $MessInFile. Далее запускаем цикл, который выполнится столько раз, сколько указано в той же переменной $MessInFile. Затем мы формируем массив $ResFile из последних 20 (так указано в $MessInFile) элементов массива $file. После этого мы переписываем файл-базу сохраняя там полученный массив $ResFile. Тем самым после выполнения функции мы отсеем старые сообщения, оставив 20 последних в том же порядке, что и до вызова функции.

Ну что же, функции написаны. Теперь осталось их правильно вызвать, так как сами по себе, как вы понимаете, они выполняться не будут.

Все дополнительные функции проверки у нас будут вызываться главной функцией проверки check_mess(). Теперь она должна выглядеть так:

function check_mess() { global $name, $email, $mess; $mess=trim($mess); $email=trim($email); $name=trim($name); $name=htmlspecialchars($name); $email=htmlspecialchars($email); $mess=htmlspecialchars($mess); $mess = str_replace("\n","<br>",$mess); check_for_length(); //добавили if (empty($name)) output_err(2); if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) output_err(1); if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name)) output_err(2); check_mess_for_flud(); //добавили del_mess_from_file(); //добавили }

А теперь завершающий этап. После всех записей внизу файла guest. php пишем:

if ($mess) {
 check_mess();
 save_mess();
}
show_mess();
show_form();
?>
</BODY>
</HTML>

Если в переменной $mess есть какое-либо значение (а оно могло появиться только при нажатии в форме кнопки "Послать"), то сначала выполняется функция проверки сообщения, а затем, если не происходит ошибки, выполняется функция сохранения сообщения. И независимо от того, есть ли сообщение или нет, выводятся сообщения из файла-базы и форма для ввода.

Все, гостевая книга готова к использованию. Сделайте для нее дизайн по вашему вкусу и все. Пользуйтесь.

Готовые файлы guest. php и config. php вы можете скачать здесь.

Урок 9. Сессии и с чем их едят.

Сессия (от лат. sessio - заседание),
организационная форма работы
представительного органа, суда,
научной или общественной организации.

На сегодняшнем уроке мы рассмотрим такой важный механизм PHP, как сессии.

Так зачем же нужны эти самые сессии и с чем их "едят"? Рано или поздно практически перед каждым вебмастером встает проблема передачи данных сквозь несколько страниц. Как же сделать так, чтобы пользователь, бродя по сайту, не "терял" однажды введенных данных?

Один из таких способов - использование скрытых элементов форм "hidden". На каждой странице сайта мы размещаем эти элементы, внося в них с помощью PHP значения и передавая эти значения далее, другой странице. Конечно, такой способ вполне возможен, но он нерационален. Представляете, сколько таких элементов надо вставить на сайте объемом, например, 50 страниц.

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

Реализация механизма сессий в PHP.

Любая сессия открывается с помощью функции session_start(), создающей специальный служебный файл с именем, соответствующим ID сессии, в который впоследствии будут записаны все данные, связанные с текущей сессией. Место размещения этих файлов зависит от настроек PHP. Так что если вы используете в своих скриптах сессии, не забывайте иногда подчищать директорию с этими временными файлами, так как там со временем может накопиться солидное количество ненужных файлов.

Также эта функция используется для продолжения текущей сессии. Таким образом, она должна быть вызвана на каждой странице, использующей данные текущей сессии.

В PHP предусмотрено два способа передачи ID сессии (сокращенно SID):

    Через метод GET.
    Тогда посетитель будет видеть в своем броузере адресную строку следующего типа:
    http:///main. php? PHPSESSID=bdd95bcd4e1e2ef5ec57fc83a69bba86 Через Cookie.
    Здесь, соответственно, посетитель не будет видеть признаков существования сессии, SID передается через Cookie.

Следующий шаг в работе с сессиями - запись данных в сессию. Этим занимается функция session_register(). Она сохраняет в файл текущей сессии значения указанных переменных, которыми вы в любой момент можете воспользоваться.

Регистрация данных в сессию должна выглядеть примерно следующим образом:

session_start();
session_register('name', 'birth');
$name = "Вася Пупкин";
$birth = "4 марта";

Теперь на любой странице данного сайта мы можем обратиться к посетителю по имени.

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

Дополнительные функции работы с сессиями

session_id

Нередко при работе с сессиями нам требуется определить ее ID. Этим занимается функция с соответствующим названием session_id(), которая в качестве результата возвращает ID текущей сессии. На этой функции основан механизм подсчета посетителей на сайте в данный момент (см. статью "Сейчас на сайте"), где мы с помощью данной функции сверяем ID текущей сессии с сессиями, записанными в файле.

session_name

Бывают случаи, когда становится очень неудобным использовать ID сессии, например, из-за его громозкости и ненаглядности, так как id сессии вида 7542b069d57510a99eaeb31391b15cbf нам практически ничего не скажет. В этом случае более разумным становится использование функции session_name, которая может выполнять две роли. Во-первых, она может возвращать имя текущей сессии (по умолчанию - PHPSESSID). В этом случае ее следует использовать без аргументов. Во-вторых, эта функция может устанавливать имя текущей сессии. Рассмотрим пример:

session_start();
echo session_name();
session_name("MySession");
echo session_name();

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4

НЕ нашли? Не то? Что вы ищете?
Просмотр