Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ PHPΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор white cat

error_reporting


Установка Π²ΠΈΠ΄ΠΎΠ² сообщаСмых ошибок.

Бинтаксис:

int error_reporting([int level])

Ѐункция error_reporting() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ установку Ρ‚ΠΈΠΏΠ° сообщаСмых ошибок. Если ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‚ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ пСрСопрСдСляСт Π΅Π΅. Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ константу, число ΠΈΠ»ΠΈ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску. Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константы вмСсто числСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями PHP.

error_reporting(2039); // Π² PHP эквивалСнт E_ALL ^ E_NOTICE

error_reporting(E_ALL ^ E_NOTICE); // установка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

error_reporting(0); // ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

// ΠΎΠ±Ρ‰ΠΈΠ΅ ошибки выполнСния

error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎ нСизвСстных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

error_reporting(E_ALL); // ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ всС ошибки



restore_error_handler


ВосстановлСниС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок.

Бинтаксис:

void restore_error_handler()

Π­Ρ‚Π° функция устанавливаСт Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок Ρ‚Ρƒ, которая Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄ΠΎ послСднСго Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ set_error_handler(). ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ установлСнный ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ встроСнный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PHP.


trigger_error


ГСнСрация ошибки.

Бинтаксис:

void trigger_error(string error_msg [, int error_type])

Π―Π²Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ошибок. Ѐункция способна Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок ( сСмСйство констант E_USER), ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏ ошибки error_type, ΠΎΠ½ считаСтся E_USER_NOTICE.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТныС конструкции Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций.

if(assert($divisor == 0))

trigger_error ("НСльзя Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 0 ", E_USER_ERROR);



user_error


Π‘ΠΈΠ½ΠΎΠ½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ trigger_error().

Бинтаксис:

void user_error(string error_msg [, int error_type])

Установка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок


set_error_handler


Установка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок.

Бинтаксис:

string set_error_handler(string error_handler)

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² качСствС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок (ΠΈΠ»ΠΈ FALSE ΠΏΡ€ΠΈ ошибкС), ΠΈ устанавливаСт, Π² качСствС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ error_handler ΠΈΠΌΠ΅Π½Π΅ΠΌ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΠ°Ρ€Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ trigger_error(), Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ конструкции Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π² C) для освобоТдСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… рСсурсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, удалСния созданных Ρ„Π°ΠΉΠ»ΠΎΠ²), Ссли сцСнарий Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ.

Ѐункция, устанавливаСмая Π² качСствС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Ρ‚Ρ€ΠΈ послСдних ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ):

<?php

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ константы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ошибок

define(FATAL, E_USER_ERROR);

define(ERROR, E_USER_WARNING);

define(WARNING, E_USER_NOTICE);


// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ошибки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² сцСнарии

error_reporting (FATAL | ERROR | WARNING);


// ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок

function myErrorHandler($errno,$errstr,$errfile,$errline) {

switch ($errno) {

case FATAL:

echo "<b>ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка</b> [$errno] $errstr<br>n";

echo "Π² строкС: $errline Ρ„Π°ΠΉΠ»Π°:".$errfile;

echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>n";

echo "Aborting...<br>n";

exit -1;

break;

case ERROR:

echo "<b>Ошибка</b> [$errno] $errstr<br>n";

break;

case WARNING:

echo "<b>ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅</b> [$errno] $errstr<br>n";

break;

default:

echo "НСизвСстный Ρ‚ΠΈΠΏ ошибки: [$errno] $errstr<br>n";

}

}


// функция для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок

// (ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива

function scale_by_log($vect, $scale) {

if(!is_numeric($scale) || $scale <= 0)

trigger_error("Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ log(x) для x <= 0 нСльзя. ",

"(x = $scale)", FATAL);

if(!is_array($vect)) {

trigger_error("ВрСбуСтся массив ", ERROR);

return null;

}

for($i=0; $i<count($vect); $i++) {

if(!is_numeric($vect[$i]))

trigger_error("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ($i) Π½Π΅ число ΠΈ

Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ считаСтся 0", WARNING);

$temp[$i]=log($scale)*$vect[$i];

}

return $temp;

}


// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок

$old_error_handler=set_error_handler("myErrorHandler");


$a=array(2,3,"foo",5.5,43.3,21.11);

print_r($a);


$b=scale_by_log($a,M_PI); // здСсь выдаСтся ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

echo "Массив, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ(Пи): ";

print_r($b);


$c=scale_by_log("not array",2,3); // здСсь ошибка

var_dump($c);


$d=scale_by_log($a, -2.5); // здСсь критичСская ошибка


echo "ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ сцСнария...";

?>

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сцСнария Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Array( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11)ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ [1024] Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ (2) Π½Π΅ число, ΠΈ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ считаСтся 0<br>Массив, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ(Пи): Array( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281)<b>Ошибка</b> [512] ВрСбуСтся массив <br>NULL<b>ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка</b> [256] Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ log(x) для x <=0 нСльзя, (x = -2.5)<br> Π² строкС: 37, Ρ„Π°ΠΉΠ»Π° E:wwwexampl.php, PHP 4.0.5 (WINNT)<br>Aborting...<br>

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ установкС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ошибок стандартный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PHP Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Установки error_reporting() Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ эффСкта, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС Π²ΠΈΠ΄Ρ‹ ошибок (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ error_reporting() ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ соотвСствСнно). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ошибки Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 0, Ссли ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π²ΠΎΠ΄ ошибок для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ "@".

Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ сцСнарий Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ die(), Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ return, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сцСнария продолТаСтся с Ρ‚ΠΎΠ³ΠΎ мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° Ρ‚ΠΎΠΉ инструкциСй, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСссиями


Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ сСссии


БСссия прСдставляСт собой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π³ΠΎ имя ΠΈ Π½ΠΎΠΌΠ΅Ρ€ счСта), ΠΌΠ΅ΠΆΠ΄Ρƒ запусками сцСнария.

Π’ Web-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ класс Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ссли ΠΏΠΈΡΠ°Ρ‚ΡŒ сцСнарий "Π² Π»ΠΎΠ±". Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ слабой сторонС CGI - нСвозмоТности Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² Π΅ΠΉ ΠΏΡ€ΠΈ этом ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм Ρ„ΠΎΡ€ΠΌΡƒ, Π½ΠΎ Π² Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΎΠ΅ большоС число ΠΏΠΎΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³Π»ΡƒΠΏΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° ΠΎΠ΄Π½Ρƒ страницу. Нам Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ процСсс заполнСния Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° нСсколько этапов, ΠΈΠ»ΠΈ стадий, ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².НапримСр, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ с Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠΌ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ имя ΠΈ фамилия, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ - Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΅Π³ΠΎ мСстС ΠΆΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°, ΠΈ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ - Π½ΠΎΠΌΠ΅Ρ€ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° шаг Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. НаконСц, Ссли всС Π² порядкС, накоплСнная информация обрабатываСтся - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, помСщаСтся Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

РСализация Ρ‚Π°ΠΊΠΎΠΉ схСмы оказываСтся для Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ довольно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΌ придСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС Ρ€Π°Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π΄Ρ€ΡƒΠ³ ΠΏΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π΅Ρ‚ ΠΈ ΡƒΠΉΠ΄Π΅Ρ‚ с сайта. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСриализации ΠΈ Ρ„Π°ΠΉΠ»Ρ‹. Однако ΠΈΠΌΠΈ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ этого Π½Π΅ сдСлали. Π’ΠΎΠ³Π΄Π°, Ссли Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ заполнСния ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° сайт Π·Π°ΠΉΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΆΠ΅ попытаСтся ввСсти свои Π΄Π°Π½Π½Ρ‹Π΅, получится Π±Π΅Π»Π΅Π±Π΅Ρ€Π΄Π°.ВсС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ сСссий.


ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСссий


Для Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» PHP ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠ΅Π³ΠΎ сцСнарий. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС PHP Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ запустил: Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ДСлаСтся это ΠΏΡƒΡ‚Π΅ΠΌ присвоСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сСссии. Π§Ρ‚ΠΎΠ±Ρ‹ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Ρ‹Π» доступСн ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС сцСнария, PHP ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Cookies Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, зная ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (дальшС SID), PHP ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС хранятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

НСмного ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ) Π² сСссии. Для этого ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π΅ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС рСгистрации ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС сцСнария Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Ρƒ Π½Π΅Π΅ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сцСнария PHP автоматичСски сохраняСт всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, зарСгистрированныС Π² сСссии, Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ - Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Π΅Π΅ ΠΈΠ· сСссии, ΠΈΠ»ΠΈ ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС Π΄Π°Π½Π½Ρ‹Π΅ сСссии.