108
__________P H P_________ Оператори Оператора е част от кода, който използва една или повече променливи или елементи, за да осъществите изчисление или за да сравните изрази. Можете да използвате оператори за извършване на аритметични и логически операции, както и за сравнение. В PHP са налични следните оператори: Аритметични оператори: Използват се за математически изчисления Оператори за присвояване: Използват се за присвояване на стойности Оператор за сравняване: Използва се за сравнения Оператор за изпълнение: Използва се за сравнение на код, като команди на шела; резултатът от изпълнението се присвоява в променлива Инкрементиращи/декрементиращи оператори: Иползват за Инкрементиращи (увеличаване) и декрементиращи (намаляване) на стойности Низови оператори: Използват за конкатенция на 2 низа Конкатениращи оператори: Използват се за разбора на низове Аритметични оператори Както може би се досещате от името, можете да използвате тези оператори за извършване на математически действия. Ето и операторите: + (Събиране): Изчислява сумата на 2 числа или конкатенира низове. - (Изваждане): Изчислява разликата между две числа. * (Умножение): Изчилслява просизведението на 2 числа. / (Делене): Изчислява частното на две яисла % (Остатък): Изчислява остатъка при делението на две числа Ето ви и няколко примера за използване на аритметични оператори: $Num1 = 9; $Num2 = 3; $Result = $Num1 + $Num2; //$Result = = 12 $Result = $Num1 - $Num2; //$Result = = 6 $Result = $Num1 * $Num2; //$Result = = 27 $Result = $Num1 / $Num2; //$Result = = 3 $Result = $Num1 % $Num2; //$Result = = 0 В горния пример на променливата $Num1 и $Num2 са присвоени стойности и са използвани аритметични оператори. Оператор за умножение Оператора за умножение се използва за умножение на две числа. Синтаксисът на оператора за умножение е следния: $Result = $Num1*$Num2; В горния синтаксис PHP разглежда $Num1 и $Num2 като числа. В следващите два примера оператора за умножение се използва за намиране на произведението на две числа: $Result = 3*5; // Връща стойност 15 $Result = 556.29*262.34; // Връща стойност 145929.2484

PHP Lessons

  • Upload
    -

  • View
    113

  • Download
    2

Embed Size (px)

Citation preview

Page 1: PHP Lessons

__________P H P_________Оператори

Оператора е част от кода, който използва една или повече променливи или елементи, за да осъществите изчисление или за да сравните изрази. Можете да използвате оператори за извършване на аритметични и логически операции, както и за сравнение. В PHP са налични следните оператори:

Аритметични оператори: Използват се за математически изчисления Оператори за присвояване: Използват се за присвояване на стойности Оператор за сравняване: Използва се за сравнения Оператор за изпълнение: Използва се за сравнение на код, като команди на шела; резултатът от

изпълнението се присвоява в променлива Инкрементиращи/декрементиращи оператори: Иползват за Инкрементиращи (увеличаване) и

декрементиращи (намаляване) на стойности Низови оператори: Използват за конкатенция на 2 низа Конкатениращи оператори: Използват се за разбора на низове

Аритметични операториКакто може би се досещате от името, можете да използвате тези оператори за извършване на

математически действия. Ето и операторите:

+ (Събиране): Изчислява сумата на 2 числа или конкатенира низове. - (Изваждане): Изчислява разликата между две числа. * (Умножение): Изчилслява просизведението на 2 числа. / (Делене): Изчислява частното на две яисла % (Остатък): Изчислява остатъка при делението на две числа

Ето ви и няколко примера за използване на аритметични оператори:

$Num1 = 9; $Num2 = 3; $Result = $Num1 + $Num2; //$Result = = 12 $Result = $Num1 - $Num2; //$Result = = 6 $Result = $Num1 * $Num2; //$Result = = 27 $Result = $Num1 / $Num2; //$Result = = 3 $Result = $Num1 % $Num2; //$Result = = 0

В горния пример на променливата $Num1 и $Num2 са присвоени стойности и са използвани аритметични оператори.

Оператор за умножениеОператора за умножение се използва за умножение на две числа. Синтаксисът на оператора за

умножение е следния: $Result = $Num1*$Num2;

В горния синтаксис PHP разглежда $Num1 и $Num2 като числа. В следващите два примера оператора за умножение се използва за намиране на произведението на две числа:

$Result = 3*5; // Връща стойност 15 $Result = 556.29*262.34; // Връща стойност 145929.2484

Оператор за делениеМожете да използвате оператора за делене за намиране на часното на две числа. Оператора връща

стойност реално число. Синтаксисът е следния: $Result = $Num1 / $Num2;

В горния синтаксис $Num1 и $Num2 са числа. Оператора връща резултата от делението на $Num1 и $Num2 като реално чилсо.

Ето и няколко примера за използване на оператора за деление:

Page 2: PHP Lessons

$Result = 19 / 3; // Връща стойност 6.3 $Result = 26 / 3; // Връща стойност 8.66667

В горните две примера първото цяло число се дели на второто и резултатът се съхранява в променливата $Result

Оператор за деление на модулОператора за деление на модул се използва за намиране на остатъка при деление на две числа.

Синтаксисът на оператора е следният:

$sult = $Num1 % $Num2; Където $Num1 и $Num2 са числа. Оператора връща остатъка при деление на $Num1 с $Num2. Ето няколко примера за използване на оператора за деление на модул:

$Result = 24 % 8; // Връща 0 $Result = 18 % 8; // Връща 2 $Result = 12 % 4.3; // Връща 3.4 $Result = 47.9 % 9.35; // Връща 1.15

Ако използвате променливи от тип float като операнди за оператора делене по модул, тогава остатъка от делението е съще реален тип.

Оператор за събиране (+)Оператора за събиране се използва за намиране на сумата на две числа. Синтаксисът на оператора е

следният: $Result = $Variable1 + $Variable2;

Променливите в израза могат да са или числа или низове. Ако използвате чилса, оператора връща сумата на $Variable1 и $Variable1. Ако променливите са низове, оператора връща конкатенцията им.

Когато използвате оператора за събиране, трябва да сте сигурни, че и двета операнда са от един и същи тип. Разгледайте следващите примери:

$IntValue = 8 + 6; // Връща 14 $IntValue = 348.45 + 5468; // Връща 5816.45 $StrValue = "Hello" + "World"; // Връща Hello World

Ако операндите са цели числа или реални числа, както е в случея с горните два примера, операторите сумират числата и връщат съответно цяла или реална стойност. В случаите, в които операндите са низове, оператора конкатинира двата низа.

Оператори за изваждане (-)Операторът за изваждане са използва за намиране на разликата на две числа. Синтаксиса на

оператора е следния: $Result = $Num1 - $Num2;

Където $Num1 и $Num2 са числа. Разгледайте следните примери:

$IntResult = 15 - 4; // Връща 11 $IntResult = 756.45 - 325.26; // Връща 431.19

Оператор за присвояванеВ момента когато видите оператора =, вероятно го асоциирате с математическото равенство.

Въпреки, че това може да е вярно за някои езици за програмиране, в PHP това е оператор за присвояване и се използва за задаване на стойност на променлива. Например:

Page 3: PHP Lessons

$Myvar = 12; // $Myvar става променлива от целочислен тип и има стойност 12. $Myvar = “World”; // $Myvar става променл. от низов тип и има стойност 'World'.

PHP ви позволява да използвате повече от един оператор за присвояване в един израз. Например:

$Result = ($Num1 = 3) + ($Num2 = 1); // $Result, $Num1 и $Num2 са целочисл. променл. и имат за стойност съотв. 4, 3 и 1

В горния пример първо се присвояват стойности на $Num1 и $Num2, след което се изчислява тяхната сума и се присвоява на $Result. PHP също така поддържа и комбинираните оператори += и .= . Тези оператори не само задават стойност на израза, но и съхраняват резултата от израза. Оператора += се използва за числа, а оператора .= за низове. Например:

$Num = 3; $Num+=1; // Увеличава стойността на $Num с 1 echo $Num;

В горния код промеливата $Num се изнициализира и на следващия ред текущата стойност на $Num се събира с единица и резултатът се присвоява отново на променливата.

$Myvar = "Add"; $Myvar .= " Something"; // $Myvar приема стойност "Add Something"

Горния израз може да се запише и като $Myvar = "Add" . "Something" Операторът .= добавя нова стойност към текущата на $Myvar.

Оператор за сравнениеОператорът за сравнение се използва за сравняване на изрази. Можете да проверявате дали

стойността на един израз е по-малка, по-голяма или равна на стойността на друг.Теоритичния оператор ? е условен оператор в PHP. Можеби вече сте го използвали за да сравните

два израза и да покажете трети израз, ако двата израза имат равни стойности в някой друг програмен език. Синтаксисът е следния:

(expr1) ? (expr2) : (expr3)където, ако израза expr1 има стойност true, то като резултат се връща стойността на променливата

expr2, в противен случай стойността на expr3.

Оператори за сравняване: Равенство = = Връща true, ако стойността на първата променлива е равна на втората Идентичност = = = Връща true, ако стойността на първата променлива е равна на втората и типовете им са еднакви Неравенство != Връща true, ако стойността на първата променлива не е равна на втората По-малко < Връща true, ако стойността на първата променлива е по-малка от втората По-голямо > Връща true, ако стойността на първата променлива е по-голяма от втората По-малко или равно <= Връща true, ако стойността на първата променлива е по-малка или равна на втората По-голямо или равно >= Връща true, ако стойността на първата променлива е по-голяма или равна на втората

Да разгледаме един пример за използване на оператори за сравнение:

<? $Num1 = 12.0; $Num2 = 12; echo "Num1, " = = ", $Num2, " = = ", $Num1 = = $Num2;

// Връща True, защото операторът = = не сравнява типовете им, а само стойностите на променливите $Num1 = 13;

Page 4: PHP Lessons

$Num2 = 12; echo "Num1, " = = ", $Num2, " = = ", $Num1 = = $Num2; // Връща False

$Num1 = 12; $Num2 = 12; echo "Num1, " = = ", $Num2, " = = ", $Num1 = = $Num2; // Връща True ?>

Ето още един пример за използване на операторите за сравняване <?$Num1 = 12;$Num2 = 12.0;echo $Num1, " !=", $Num2, " = ", $Num1 != $Num2;// Връща стойност False?>

Оператор за изпълнение(' ')В PHP е наличен само един оператор за изпълнение и това е операторът (' '). Можете да го

използвате, за да изпълните кода, съхранен между апострофите, като скрипт на шела и да присвоите резултата на променлива. Скриптовете на шела са подобни на програмите и се използват за едновременно изпълнение на множество команди. Променливата, в която се съхранява резултатът, се използва за обработка на данните, тъй като резултата не се включва директно в HTML страницата. Можете да образувате резултата и да го покажете в желания формат. Например:

$allfiles='ls';echo"$allfiles";

В горния пример командата ls на LINUX се изпълнява и резултатът се съхранява в променлива $allfiles. Mожете да обработите съдържанието на променливата $allfiles и след това да покажете само конкретни файлове.

Оператори за увеличаване и намаляване на стойностПо-рано видяхте как можете да увеличавате стойности на променлива с помоща на аритметичните

оператори. Въпреки че това е стандартния метод, той е предназначен за два различни операнда. В случайте когато имате само един операнд, изразът е ненужно дълъг, тъй като една и съща променлива се повтаря два пъти. Например $Num1 = $Num1 + 1; или $Num1 = $Num1 - 1; . Вместо да използвате аритметичните оператори, можете да използвате операторите + + и - -, които са унарни оператори. При използването на унарни оператори стойността на променлиовата се увеличава с единица и новата стойност се присвоява отново на същата променлива.

Можете да използвате тези оператори по два начина. Можете или да увеличите стойността на променливата или да я намалите. Стойността, връщана от тези оператори, зависи от това къде сте написали оператора преди или след променливата. Когато операторът " -- " е пред променливата, променливата първо се намалява с единица и след това намалената стойност се присвоява на променливата. Ако операторът " -- " се намира след променливата първо се взема стойността на променливата и след това се намалява с единица. Примери:

<?$Num = 17;echo "&Num + + :" . &Num + + .; //Текущата стойност е 17

//(Последващо увеличение)echo " $Num " . $Num .; // Текущата стойност е 18

$Num = 17;echo "+ + &Num :" . + + &Num .; //Текущата стойност е 18

//(Предварително увеличение)echo " $Num " . $Num .; // Текущата стойност е 18

$Num = 17;echo "&Num - - :" . &Num - - .; //Текущата стойност е 17

Page 5: PHP Lessons

//(Последващо увеличение)echo " $Num " . $Num .; // Текущата стойност е 16

$Num = 17;echo "- - &Num :" . - - &Num .; //Текущата стойност е 16

//(Предварително увеличение)echo " $Num " . $Num .; // Текущата стойност е 16

В горния пример стойността на променливата $Num първо се увеличава и след това се намалява с помоща на операторите за увеличаване и намаляване. Както можеби сте забелязали, когато използвате операторът за последващо увеличаване, текущата стойност на променливата $Num която е 17, първо се визуализира и след това се увеличава. Текущата стойност на променливата $Num е вече 18. Обаче, когато използвате операторът за предварително увеличаване, текущата стойност на променливата $Num се увеличава и след това се визлуализира. Поради тази причина стойността 18 се визуализура два пъти. По подобен начин се изпълнява и операторът за намаляване.

Оператори за обработване на низовеВ PHP има два оператора за обработване на низове. Първият е операторът за конкатенация( . ),

Вторият е операторът за конкатенация с присвояване ( .=), който конкатенира израза зададен в дясно, с този зададен в ляво. Например :

$Myvar1 = "some";$Myvar2 = "thing";$concat = $Myvar1 . $Myvar2;echo $concat; // $concat = = "something"

$Myvar1 = "some";$Myvar2 .= "thing";echo $Myvar1; // $Myvar1 = = "something"

$Myvar1 = "24 cats" + 5;echo $Myvar1; // $Myvar1 = = "29"

$Myvar1 = "24cats" + 5;echo $Myvar1; // $Myvar1 = = "29" $Myvar1 = "cats 24" + 5;echo $Myvar1; // $Myvar1 = = "5"

$Myvar1 = "24 cats" . 5;echo $Myvar1; // $Myvar1 = = "24 cats5"

$Myvar1 = "24cats" . 5;echo $Myvar1; // $Myvar1 = = "24cats5"

В горните примери операторите за низове се използват за конкатениране на низове и числа. Както може би сте забелязали, двата низа (some и thing) се комбинират заедно в един низ (something). Обаче, в случайте на събиране на низ с число, ако низът започва с цифри, резултатът е сумата от двете числови стойности. Ако цифрите са в средата на низа, се визуализира само числото. Ако използвате операторът за конкатенация, числовите стойности се разглеждат като низове и резултатът е конкатенацията на двата низа.

Сега след като се запознахте с операторите и тяхната употреба за работа с променливите, следва да научите повече за обработката на низовете, като и за промяната на типа на данните на променливите.

Обработка на низовеТрябва да знаете как да обработвате низове, за да можете да работите ефективно със скрипт

езиците. Низовете се обработват за да се извлече информацията от HTML страниците. Например, можете динамично да създадете потребителски идентификатор, като извлечете името на потребителя от дадена

Page 6: PHP Lessons

форма. Езикът PHP предоставя няколко функции за обработка на низове. Нека да разгледаме тези функции и тяхното използване.

Функцията substrФункцията substr извлича част от низ. Тя има три параметъра - низът, началната позиция и броя

символи, които да се извлекат. Началната позиция започва от 0, а параметъра за броя символи не е задължителен. Синтаксисът на функцията substr е следният:

string substr (string низ, int начало [, int дължина]) Ако стойността на параметъра начало е положителна, извличането започва от началото на низа.

Обаче, ако стойността на начало е отрицателна, началото на извлечения низ се изчислява от края на низа. Например:

$extract = substr ("Hello",1); // Връща "ello"$extract = substr ("Hello",1,2); // Връща "el"$extract = substr ("Hello",-2); // Връща "lo"$extract = substr ("Hello",-3,2); // Връща "ll"

Ако е зададена дължина на низ и тя е положително число, то се извлича зададения брой символи. Обаче, ако дължината е отрицателно число, то се земат символите до края на низа минус зададената дължина:

$extract = substr ("Hello",1,-1); // Връща "ell"$extract = substr ("Hello",2,-2); // Връща "l"

Функцията strstrФункцията strstr намира първото срещане на даден низ в друг. Функцията връща стойност False,

ако низът не е намерен. При извършването на търсенето се взима предвид регистърът на буквите. Синтаксисът на функцията е следния:

string strstr(string търсен_низ, string основен_низ);

Например:

$content = "Motherboard" ;$base = strstr ($content, 'b'); ???????????echo $base; // Връща 'board'

В горния пример низът $content се претърсва за символа 'b' и когато се открие този символ, се връща низът, започващ от този символ до края на низа.

Функцията str_repleaceФункцията str_repleace претърсва даден низ за всички срещания на друг низ и след това ги заменя с

друг низ. В случаите когато дължината на низа за замяна е по-малка от дължината на търсения низ, в края на заместващия низ се поставят интервали. Синтаксисът на функцията е следния:

mixed str_repleace (mixed търсен_низ, mixed заменящ_низ, mixed основен_низ); Например:

$story = "This is an excellent example of a horror story.";$retstring = str_repleace ("excellent", "exceptional", $story);

В горния пример се търси низът "excellent" в текста съхранен в променливата $story и след като се открие се заменя с низа "exceptional". Всички срещания на низа биват открити и заменени. След горните два реда съдържанието на променливата $story е "This is an exceptional example of a horror story." .

Page 7: PHP Lessons

Динамична промяна на типоветеВ PHP не е необходимо да декларирате променливите, като им зададете тип; техният тип се променя

в зависимост от съдържанието им. Например, променлива с име $test_item може да се инициализира с низ, след което може да съдържа цяло число. Поради тази причина в PHP променливите могат да съхраняват произволен тип данни, без да се декларира изрично типът им. Можете също така да съхранявате число като низ, ако го поставите в кавички. Ето и няколко примера:

$Мyval = " 1500 "; //Съхранява стойността като низ$Мyval = 1500; //Съхранява стойността като цало число$Мyval = " 145.215 "; //Съхранява стойността като низ$Мyval = 145.215; //Съхр.стойността като десетично число

В горния пример типът на променливата $Myval се променя на базата на зададена й стойност. Освен промяната на типа на базата на съдържанието на променливите, можете също така да

зададете изрично типове на променливите.

Явно задаване (промяна) на типоветеЕзикът PHP предоставя функционалност за промяна на типовете, подобна на тази в С. При явната

промяна на типовете (type casting) вие променяте явно типа на променливата. В PHP можете да извършвате следните промени на типовете:

Видове промяна на типоветеПредназначение Преобразуване

За конвентиране до булева стойност (bool), (boolen)За конвентиране до целочислена стойност (int), (integer)

За конвентиране до стойност десетична дроб (float), (double), (real)За конвентиране до масив (array)За конвентиране до обект (object)

Можете също така да конвентирате стойност до низ, като я поставите в кавички. Когато преобразувате масив до низ, резултатът е низът "Array". Обаче ако конвентирате обект до низ, резултатът е: "Object". От друга страна, ако низ се конвентира до масив, низът, става първи елемент на масива, а когато конвентирате низ до обект, резултатът е атрибут с име 'scaler' и стойност конвентирания низ.

Например:

$Val = ' Hello ';$Greet = (array) $Val;echo $Greet [0] ; // Резултатът е 'Hello'

$Val = 'Hello';$obj = (object) $Val;echo $obj -> scalar; // Резултатът ' Hello'

В горните примери променливата $Val има стойност Hello. В първият пример променливата $Val се конвентира до масив с име $Greet. Тази променлива съдържа символите на низа като отделни елементи на масива. Във втория пример същата променлива $Val се преобразува до обект с име $obj, който може да се използва за визуализиране на стойността.

Можете да конвентирате променлива от произволен тип до булев, целочислен тип или низ. Трябва обаче да спазвате някой павила при конвентирането на от един тип в друг. Следващите секции разглеждат конвентирането до булев, целочислен и нозов тип.

Конвентиране до булева стойностPHP 4 предоставя възможност за конвентирането на стойностите до булеви. Булевата стойност се

определя в зависимост от конвентираната стойност и може да е или True, или False.

Page 8: PHP Lessons

Можете да използвате изразите (bool) или (boolen), за да конвентирате променлива до булева стойност. Но в PHP по-честият случай е на неявно конвентиране до булева стойност, ако извиканата функция го изисква.

По време на конвентирането до булева стойност, при следните условия получената стойност е False: Празен низ или низ съдържащ 0 Целочислена стойност 0 Променлива имаща стойност NULL Масив с 0 елемента Обект с 0 елемента

Във всички други случай конвентираната стойност е True.

Конвентиране до целочислена стойностМожете да използвате изразите (int) и (integer), за да конвентирате стойности до целочислени. Ако

се опитвате да конвентирате реално число до цяло число, се взема само цялата част. Ако конвентирате булева стойност до цяло число, стойността True се конвентира до 1, a стойността False до 0. Както ще видите в случаите на конвентиране до низ, при низовете се взема началото, за да се определи каква ще бъде стойността при конвентирането.

Конвентиране на низНиз съдържащ цяло число може лесно да се конвентира до целочислен тип. Но ако низът съдържа

типовете '.', 'е' или 'Е'. той се конвентира до десетична дроб. При определяне на типа на конвентирания низ, се взема предвид началото на низа. Например, ако низът започва с число, то конвентираната стойност е число, ако низът започва с букви, то получената стойност е нула. Изключение от това правило се прави, когато низът освен букви съдържа и цифри, но разделени с интервали. В този случай резултатът е само числовата част. Например:

$item = " 15 boxes grain" + 2 ; // Резултатът е 17$item = "15units" + 2; // Резултатът е 15 ??$item = "12.4" + 2; // Резултатът е 14.4$item = "-12.4kg" + 2; ?? // Резултатът е -14.4

В горните примери, операторът за събиране се използва за събиране на низ с число. Както може би сте забелязали, ако низът съдържа цифра, цифрите се извличат и се събират с число.

Променящи се променливиПроменящa се променливa представлява променлива, съхраняваща име на променлива. Въпреки,

че това може да звучи малко объркващо, това означава, че текущата стойност, съхранена в $greet, се използва за създаване на друга променлива. Това се обяснява от следващия пример: $greet = "greeting";$$newgreet = "hello!"; // Това е еднакво с реда $greeting = "hello";

В горния пример променливата $greet съдържа стойността greeting. Вместо да се създаде нова променлива с име $greeting и да и се присвои стойност, можете да използвате $$newgreet. По този начин се създава нова променлива на базата на текущата стойност на $greet и й се присвоява стойността hello!. По този начин можете да създадете динамични променливи и да им присвоите стойност. Също така произволни данни съхранени в променлива, могат да станат име на функция.

Както споменахме по-рано, променливите в PHP се декларират при тяхното използване и не е необходимо да се декларира типът на данните им. В някой случай обаче може да ви се наложи да създадете тип на променлива. Това обикновенно става в случайте, когато искате променливата да съхранява данни само от определен тип. Тогава трябва изрично да зададете тип на данните, които ще се съхраняват в променливата. За тази цел PHP предоставя 2 функции settype() и gettype(). Функцията gettype() извлича типа на променливата, а функцията settype() задава типа на дадена променлива.

Page 9: PHP Lessons

Функции за определяне и задаване типа на променливаВъпреки че в PHP не е необходимо да задавате типа на променливите, в някои случаи това е

необходимо. Например, може да ви се наложи динамично да задаете типа на променливата в зависимост от нуждите на визуализацията. За да направите това, първо трябва да определите от какъв тип е текущата и стойност и да зададете новия тип. PHP предоставя две функции за определяне и задаване типа на променливата.

Функцията settype()Тази функция насила конвентира типа на променлива до друг. Синтаксиса на функцията е settype()

е следния:

boolen settype (mixed $myvariable, string setdatatype)

Функцията settype() конветира типа на променливата $myvariable до типа setdatatype. Върнатата стойност е от булев тип и е True, ако конвентирането е успешно. Ако не е извършено конвентиране, се връща стойност False.

Стойността setdatatype може да бъде integer, string, boolen, float, null, array и object. Например:

$Mystrval = "container 72" // Низ$Myboolval = False // Булева стойностsettype($Myboolvas, "string"); // Резултат 0 ?settype($Mystrval, "string"); // Резултат 72 ?settype($Myboolvas, "integer"); // Резултат 0

В горния пример променливата $Myboolval и $Mystrval съдържат съответно булева и низова стойност. Функцията settype() бе използвана за явно конвентиране на типовете на двете променливи до integer. ???

Функцията gettype()Функцията gettype() връща типа на дадена променлива. Синтаксисът на функцията е следния:

string gettype( mixed $mixedvar)

Функцията извлича типът на променливата $mixedvar и го превръща като низ. Низът може да съдържа integer, string, boolen, float, null, array, object или resourse. Например:

<?php$myval = "10 pigs" + 2;echo $myval; // Извежда 12echo gettype ( $myval); // Извежда integer

settype ( $myval, "double");echo $myval; // Извежда 12echo gettype ( $myval); // Извежда double

$myval = "10pigs" + 2;echo $myval; // Извежда 12echo gettype ( $myval); // Извежда integer

$myval = "10 pigs" . 2;echo $myval; // Извежда 10echo gettype ( $myval); // Извежда string

settype ( $myval, "integer");echo $myval; // Извежда 10echo gettype ( $myval); // Извежда integer

$myval = "10pigs" . 2;

Page 10: PHP Lessons

echo $myval; // Извежда 10pigs2echo gettype ( $myval); // Извежда string

settype ( $myval, "integer");echo $myval; // Извежда 10echo gettype ( $myval); // Извежда integer

settype ( $myval, "boolen");echo $myval; // Извежда (1/true)echo gettype ( $myval); // Извежда boolen

$myval = "";settype ( $myval, "boolen");echo $myval; // Извежда (NULL/false/blank)echo gettype ( $myval); // Извежда integer?>

В горните примери се извличат типовете на променливите и се показват на екрана. Също така явно се променят типовете на променливите с помоща на функцията settype() и се визуализират типовете с помоща на функцията gettype().

КонстантиДа предположим, че трябва да използвате конкретна стойност в цялото си приложение. Например,

да предположим, че приложението ви намира най-високите резултати, постигнати от учениците на даден тест. За да намерите тази стойност, приложението ви трябва да съхрани тези на статично място, за да може да осъществява достъп до тях при разглеждането на резултатите на всеки ученик. В този случай вместо да създавате множество инстанции на едни и същи данни, можете да използвате константи. Константата е мястото в паметта, къдетоможете да съхранявате стойности, непроменящи се по време на изпълнение на програмата.

Дефиниране на константиКонстантите имат следните характеристики:

Те вземат предвид регистъра на буквите Използват същата конвенция за задаване на имена, както променливите Могат да започват само с буква или символ за подчертаване, следвани от числа и букви По подразбиране имат глобална област на действие

За да дефинирате константа трябва да използвате функцията define(). След като константата е дефинирана, тя не може да се променя. Стойността на константата може да бъде от един от следните типове: string, boolen, double или integer.

За разлика от променливите можете да използвате константата с името й, вместо да добавяте символа $ пред него. Можете да използвате функцията constant(), в случай, че искате динамично да получите стойност на константата. Функцията get_defined_constant() се използва за получаване на списък с дефинираните константи в момента.

Разгледайте следния пример:

<?phpdefine ("CONSTANT", "This cannot be changet");echo &CONSTANT; // Извежда This cannot be changetecho &Constant; // Извежда Constantecho "CONSTANT"; // Извежда CONSTANTecho 'CONSTANT'; // Извежда CONSTANT?>

В горния пример се задава константна стойност с име CONSTANT, която съхранява стойността This cannot be changet. Тъй като при имената на константите се взима предвид регистъра на буквите, името CONSTANT се различава от името Constant. По тази причина по време на изпълнението на втория израз echo, компилаторът първо търси тази константа в предварително зададените константи. След като не открие такава константа, претърсва константите дефинирани от потребителя. След като все още не намери такава константа, отпечатва името.

Page 11: PHP Lessons

Компилаторът на PHP обаче ще изведе забележка за тази операция. PHP приема всички стойности извън кавичките и без знак за долар за константи и отпечатва стойността. С други думи, не може да отпечатва константа в кавички.

Въпреки че при константите по подразбиране се прави разлика в регистъра на буквите, можете да използвате функцията define(), за да забраните тази разлика. Разгледайте примера:

define ("CONSTANT", "This cannot be changet.");// Създава константа, различаваща регистъра на буквите.define ("CONSTANT", "This cannot be changet", 1);// Създава константа, не различаваща регистъра на буквите.

В горния пример, когато добавите като трети параметър единица, функцията define() задава константа, която не прави разлика в регистъра на буквите. Сега да разгледаме някои от предварително дефинираните константи в PHP

Име СтойностPHP_VERSION Версията на PHP използвана в момента._FILE_ Името на файла, който се анализира в момента. Ако тази константа

се използва във вмъкнат файл, тогава тя съдържа името на вмъкнатия файл, а не на родителския.

_LINE_ Броя на редовете във файла, който се анализира в момента.Ако тази константа се използва във вмъкнат файл, тогава тя съдържа редовете на вмъкнатия файл,а не на родителския.

E_EROR Показва грешка, след което не е възможно да продължи изпълнението на скрипта

E_PARSE Показва, че анализаторът е открил синтактична грешка в скрипта и програмата не може да продължи изпълнението си

E_WARNING Показва, че е възникнало предупреждение в PHP, но програмата все още може да продължи изпълнението си.

E_ALL Комбинация от всички E_* константи.Е_NOTICE Показва, че е възникнала ситуация, която трябва да забележите,

но не е грешкаTRUE Стойността TRUEFALSE Стойността FALSENULL Стойността NULL

Условни изрази Условните изрази се състоят от три компоненти : Операнди. Могат да се числа, текст или смесени. Текстът трябва да е заграден с кавички, преди да

се изчисли стойността на израза. Логически връзки. Те опеределят, дали всички, или само едно от условията трябва да върне

стойност True, за да се изпълни кода. Оператори. Те се използват за извършване на изчисления и за сравняване на изрази.

Условни конструкцииПонякога ви се налага да сравните дадено условие и на базата на резултата, върнат от условие, да

извършите определено действие. Можете да използвате условните конструкции за тази цел. В условните конструкции първо се оценява даден израз на базата на това дали условието е върнало стойност True или False, и се изпълнява определен код. В PHP някой от най-често използваните условни конструкции са:

if ... else ... elseif switch ... case

Сега да разгледаме в подробности тези конструкции.

Page 12: PHP Lessons

Конструкцията ifКонструкцията if се използва за оценяване на израз и връщане на булева стойност. Булевите

стойности са True и False. Ако условието върне True, се изпълняват операторите, следващи условието. В противен случай се изпълнява първия ред след блока IF. Ето го и синтаксиса на конструкцията if:

if (израз) оператор1;

В горния пример изразът се оценява и при върната стойност True се изпълнява оператор1 . В противен случай операторът не се изпълнява. Можете обаче да напишите горния оператор по следния начин:

if (израз) { оператор1; }

Ето и няколко примера за използване на конструкцията if:

<?php$Myvalue = 5;if ($Myvalue = = 5 ) { echo "Моята първа програмка"; // Този код ще се изпълни само, ако стойността $Myvalue е равна на 5 } ?>

В горната програма на променливата $Myvalue се задава стойност 5 и след това се проверява дали тойността на променливата $Myvalue е равна на 5. Тъй като условието връща стойност True, текстът се отпечатва на екрана.

<?php$Myvalue = 5;if (!($Myvalue = = 4)) { echo "Погледни, 'Myvalue' не може да е равна на 4 !"; // Горния ред ще се отпечатва, когато $Myvalue не е равно на 4 }?>

В горната програма на променливата $Myvalue се задава стойност 5 и след това се визуализира на екрана, тъй като стойността на променливата не е равна на 4. Можете да използвате оператора за логическо отрицание (!), за да укажете, че операторите, трябва да се изпълняват, само когато условието върне стойност False. В случая на оператора (!), ако изразът върне стойност True, цялото условие връща стойност False, ако изразът върне стойност False, цялото условие връща стойност True. Да разгледаме друг пример.

<?phpIf (TRUE) { echo "I will always run."; // Този ред ще се изпълнява винаги }?>

Можете да оценявате множество условия в една конструкция if, Като използвате оператори. В зависимост от това какъв оператор сте използвали, можете да изпълните операторите, ако всички , или само едно от условията са удолетворени. Следват няколко примера, които използват оператори за оценяване на множество условия.

<?php$varA = 5;$VarB = 6;if (($VarA = = 5) && ($VarB = = 6))

Page 13: PHP Lessons

{ echo "Текстът се показва, само ако стойностите на променливите 'VarА' е 5 и 'VarB' е 6"; }?>

В горния пример променливите $VarА и $VarB имат съответно стойности 5 и 6. Условието се проверява и само, ако условието върне стойност True, текстът ще се покаже на екрана. Ето и друг пример, където се изчисляват множество условия:

<?php$Num1 = 5;$Num2 = 6;$Num3 = 7;$Num4 = 10;$Num5 = 12;$Num6 = 14;if (( (($Num1 + $Num2) = = 11) && (($Num3 + $Num4) = = 17) | | ($Num5 + $Num6 ) < 50 )) { echo " ОК. Ако видите този текст, това означава, че сумата на променливите 'Num1' и 'Num2' е равна на 11, и сумата на променливите 'Num3' и 'Num4' е равна на 17"; echo " ИЛИ сумата на променливите 'Num5' и 'Num6' е по-малка от 50."; }?>

В горния пример се оценяват две главни условия. Първото условие се състои от две подусловия. Първото условия връща стойност True, ако и двете подусловия върнат стойност True. Това означава, че сумата на $Num1 и $Num2 трябва да е 11 и сумата на $Num3 и $Num4 трябва да е 17. Второто условие ще върне стойност True, ако сумата на $Num5 и $Num6 е по-малка от 50. Ако някое от условията върне стойност True , операторите в блока if ще се изпълнят.

Сега да разгледаме как да разширим изоплзването на конструкцията if, ако добавим към нея клаузата else.

Клаузата elseДа разгледаме случая, когато искате да изпълните даден код, когато условието има стойност True. Ако

същото условие има стойност False, трябва да се изпълнят други оператори. В този случай е удобно да се използва клаузата else. Трябва да имате предвид някои факти за клаузата else.

Клаузата else, може да се използва само в комбинация с конструкцията if. Кодът в клаузата else се изпълнява само, ако условието в конструкцията if върне стойност False. Можете да имате само една клауза else и трябва да бъде на последно място в кода на блока. Следващия пример показва използването на клаузата else.

<?php$age = 19;if ($age < 18) { echo "Не сте пълнолетен, годините ви са по-малко от 18"; // Горния ред няма да бъде отпечатан } else { echo "Пълнолетен сте, годините ви са повече от 18"; }?>

В горния код на променливата $age се задава стойност 19 и програмата проверява дали стойността и е по-малка от 18. Тъй като условието връща стойност False, се изпълнява кодът в клаузата else. На екранът се появява текстът "Пълнолетен сте, годините ви са повече от 18".

Page 14: PHP Lessons

Клаузата elseifКлаузата elseif се използва заедно с конструкциите if и else.Можете да имате множество клаузи

elseif в една конструкция if, обаче може да има само една клауза else. Клаузата elseif се изпълнява само когато конструкцията if и на всаички други клаузи elseif са върнали стойност False. Всички клаузи elseif трябва да са декларирани след конструкцията if и преди клаузата else на конструкцията. Например:

<?php$Num = 50;if (($Num > 9 ) && ($Num < 100)) { echo $Num, "e двуцифрено число"; }elseif ($Num >= 100) { echo $Num, "Има три или повече цифри"; }else { echo $Num, "е едноцифрено число"; }?>

В горния пример на променливата $Num се присвоява стойност 50 и се проверяват различни условия. Ако стойността на $Num е между 9 и 100, се извежда съобщението "$Num, e двуцифрено число". Ако стойността е по-голяма от 100, се извежда съобщението "$Num, има три или повече цифри". В противен случай съобщението е "$Num, e едноцифрено число". Както отбелязахме по-рано можете да имате само една клауза else в конструкцията if. Обаче можете да имате множество клаузи else if в една конструкция if. Това е показано в следващия пример:

<?php$Num = 50;if (($Num > 9 ) && ($Num < 100)) { echo $Num, "e двуцифрено число"; }elseif (($Num > 99) && ($Num < 1000 ) { echo $Num, "е трицифрено число"; }elseif (($Num > 9999) && ($Num < 10000)) { echo $Num, "е четирицифрено число"; }elseif ($Num >= 10000) { echo $Num, "Има пет или повече цифри"; }else { echo $Num, "е едноцифрено число"; }?>

Конструкцията switchКогато се използва конструкцията if, условията се оценяват от конструкциите if и elseif. Когато

обаче се използва конструкцията switch, условието се оцянява само веднъж и след това условието се сравнява със списък от предварително зададени стойности. Всяка стойност се съхранява в клаузата case. Когато се открие съответна стойност, се изпълняват командите от съответната клауза case и всички редове след нея. Ако не се открие съвпадаща стойност, тогава се изпълняват командите от клаузата default до края на конструкцията или до оператора break. Ето го и синтаксисът на конструкцията switch.

Page 15: PHP Lessons

switch (променлива){

case стойност 1; оператор; оператор;case стойност 2; оператор; оператор;

.......default;

оператор; оператор;

}

Изразите зададени в клаузите case, трябва да са от тип integer, string или float. Ето и пример за използване на конструкцията switch:

<?php

$val = "first";switch ( $val ){

case "first": echo "Първи случай.";case "second": echo "Втори случай.";case "third": echo "Трети случай.";case "fourth": echo "Четвърти случай.";

break;}

?>В горния пример ако стойността на променливата $val e fourth, ще се изпълни последни израз.

Обаче ако стойността е first, ще се изпълняват всички команди от всички клаузи case. За да се избегне това трябва да поставите оператора break в края на всяка клауза case. Оператора break продължава изпълнението на програмата след конструкцията switch. Можете да препишете горния код по следния начин:

<?php

$val = "first";switch ( $val ){

case "first": echo "Първи случай.";break;

case "second": echo "Втори случай.";break;

case "third": echo "Трети случай.";break;

case "fourth": echo "Четвърти случай.";break;

}

?>

Page 16: PHP Lessons

Условни циклиУсловните цикли се използват за изпълнение на множество от команди, докато дадено условие има

стойност True. За да е сигурно, че цикълът ще се изпълнява правилно, стойността, която се проверява, трябва да се променя при всяко изпълнение на цикъла. Налични условни цикли са :

for while while ... endwhile do ... while foreach

Цикълът forЦикълът for е цикъл, в който броят на изпълненията на цикъла е фиксиран и броят се включва в

самия израз. Цикълът for оценява три различни израза, които представляват различните нива в цикъла. Инициализация на променливите. В израз1 присвоявате стойността на променливата.

Присвоената стойност е начална точкая на цикъла. Oценяване на условието. Условния израз ( израз2) се оценява в началото на всяка интерация на

цикъла. Ако условието има стойност True, операторите във вътрешността на цикъла се изпълняват. Ако условието има стойност False, изпълнението на цикъла приключва и програмата излиза от цикъла.

Реинициализация на променливите след итерация. След края на всеки цикъл се оценява израз3, или по-точно се изпълнява. Израз3 не е условен израз и обикновено включва увеличаване на стойността на променливите, използвани в кода.

Синтаксисът на цикъла for е следния:

for (израз1;израз2;израз3) оператор1, оператор2;

Тъй като всички инструкции са на един ред, е по-лесно да се проследи и разбере изпълнението на кода в цикъла. Можете да имате само един оператор в цикъла for. Но е за предпочитане всеки оператор да е на отделен ред. Това прави кода по-гъвкав. Можете да напишете горния синтаксис по следния начин:

for (израз1;израз2;израз3)

{оператор1;оператор2;

}

Втория синтаксис е за предпочитане, защото е по-гъвкав и можете да изпълнявате множество оператори в една интеренция. Когато кодът се изпълнява всички оператори, намиращи се в скобите, се изпълняват и след това се увеличава стойността на променливата и се оценява условието. Да разгледаме няколко примера за използаването на цикъла for:

<?php

for ($Myval = 1; $Myval <= 10; $Myval++){

echo $Myval ;}

?>Не е задължително да имате стойностти във всички изрази на цикъла for. Можете да оставите

празен който и да е от изразите или всички в цикъла for. Това прави цикъла for, много гъвкав и един от най-популярните цикли в PHP. Например:

<?php

echo "Цикъл 1";

Page 17: PHP Lessons

$Myval = 1;for ( ; $Myval <= 10; $Myval ++)

{echo $Myval ;

}

echo " Цикъл 2";$Myval = 1;for ( ; $Myval <= 10; )

{echo $Myval ;$Myval ++;

}

echo " Цикъл 3";$Myval = 1;for ( ; ; )

{if ($Мyval > 10) {break;}echo $Myval ;$Myval ++;

}

?>

Както може би сте забелязали, първият цикъл има само два параметъра, вторият - само един, а третият няма нито един параметър. Независимо от това, трите цикъла извеждат един и същ резултат. Цикълът for изпълнява код опеределен брой пъти. Да предположим, че не знаете колко пъти трябва да се изпълни кода, или кода трябва да се изпълнява, докато дадено условие върне стойност False. В такива случаи, можете да използвате цикъла while :

Цикълът whileЦикълът while се използва, за да се провери дали дадено условие има стойност True или False.

Операторите в цикъла while се изпълняват, докато условието има стойност True. От друга страна, цикълът може да не се изпълни нито веднъж. Това е така, защото цикъла while проверява израза, преди да започне изпълнението на командите в цикъла. това означава, че ако условието е False, няма да се влезе в цикъла while нито веднъж.

Синтаксисът на цикъла е следния:

while (израз) оператор; илиwhile (израз) { оператор1; опеартор2; }

Ето и няколко примера за използването на цикъла while:

<?php

$Num = 5;while ($Num) { echo "Ще се печата безкрайно!!!"; // Това е така, тъй като променливата $Num не променя стойността си в цикъла. } ?>

Page 18: PHP Lessons

<?php

$Num = 5;while ($Num < 10) { echo "Ще се печата безкрайно!!!"; // Това е така, тъй като променливата $Num не променя стойността си в цикъла. } ?><?php

$Num = 5;while ($Num < 10) { echo "Ще се печата докато стойността на 'Num' е по-малка от 10.!!!"; ++$Num; }echo "Готово! Вече сме извън цикъла и стойността на 'Num' е ,$Num";?>

Цикълът while подържа всички валидни изрази, включително и тези, съдържащи оператори. Можете да използвате операторите && и ||, за да проверявате за две условия. В случая на оператора && и двете условия трябва да върнат стойност True. Цикълът ще свърши, когато едно от условията, върне стойност False. В случая на оператора || кода ще се изпълнява, докато поне едно от условията има стойност True. Например: <?php $Num1 = 1; $Num2 = 35; echo "Цикълът спира изпълнението си, ако променливата 'Num1' е по-голяма или равна на 15 или ако променлиата 'Num1' е по-малка или равна на 18"; while (($Num1 < 15) && ($Num2 > 18)) { ++$Num1; --$Num2; echo " Променливата 'Num1' = ", $Num1," а променливата 'Num2' = ", $Num2,""; // Цикълът ще свърши, дори ако само едно от условията върне стойност False. } echo " Извън цикъла сме."; ?>

В горния пример цикъла while ще продължи, докато $Num1 стане по-голямо или равно на 15 или $Num2 стане по-малко или равно на 18. Сега нека да разгледаме цикъла while ... end while.

Цикълът while ... end whileЦикъла while ... end while много прилича на цикъла while. Единствената разлика, е че при цикъла

while използвате скоби за да маркирате операторите в цикъла. При цикъла while ... endwhile, всички оператори след while (израз) и преди endwhile се считат за оператори от цикъла, и се изпълняват при всяка итерация. Синтаксисът на цикъла while ... end while е следният:

while (израз): оператое1; оператое2;endwile;

Page 19: PHP Lessons

Например:

<?php

$Num1 = 1;while ($Num1 <= 10): echo $Num1; $Num1++;endwhile;

?>В горния пример, цикъла while ще се изпълнява, докато стийността на променливата $Num1 е по-

малка или равна на 10. В момента в който $Num1 стане по-голяма от 10, програмата продължава изпълнението си от реда след цикъла. Третия цикъл от серията while e do ... while, при който кода в цикъла се изпълнява поне веднъж.

Цикълът do ... whileЦикълът do ... while също е сходен с цикъла while, при него обаче, кодът се изпълнява преди да се

оцени условието. Всички оператори след do и преди while (израз) се считат за част от израза и трябва да ги поставите в скоби. Синтаксисът на цикъла do ... while e следният:

do { оператор1; оператор2; }while (израз);

Както може би сте забелязали, при цикъла do ... while израза се изчислява в края на цикъла. Това означава, че дори ако условието има стойност False, кодът в цикъла ще се изпълни поне веднъж. Например:

<?php$Num = 1;do { echo "Нека да увеличим стойността на променливата 'Num' за да излезем от цикъла !"; ++$Num; }while ($Num < 20);echo " Извън цикъла сме !";

?>Горния код ще се изпълни 20 пъти, тъй като началната стойност на $Num е 1. Обаче, ако

инициализираме $Num с 21, кодът ще се изпълни, въпреки че условието има стойност False. Това е така, защото кодът се изпълнява в началото на цилъла, а условието се изпълнява в неговия край.

Цикълът foreachВ случая на цикъла foreach, множество команди се изпълняват върху множество елементи на масив

или обект. Всеки елемент на масив се оценява отделно и цикълът приключва, когато всички елементи от масива са оценени. Синтаксиса на цикъла foreach е следният:

foreach (масив as $currval) оператор;

или

foreach (масив as $sourceval => $currval) оператор;

Page 20: PHP Lessons

В първия синтаксис, всички елементи от масива се обхождат и тогава променливата се увеличава преди следващата интерация. Във втория случай текущата стойност на променливата се съхранява в друга променлива $sourceval, преди да се увеличи $currval. Да разгледаме няколко примера за използването на цикъла foreach. Пример 1:

<?php

$arrayval = array (12, 22, 32, 72);foreach ($arrayval as $currval) { echo "Текущата стойност в масива \$arrayval:$cyrrval"; }

?>

Пример 2:

<?php

$arrayval = array (Jack, Tom, Marry, James);$count = 0;foreach ($arrayval as $currval) { echo "$arrayval [$count] => $currval"; }

?>

Пример 3: <?php

$arrayval = array ( "Sunday " => 1, "Monday " => 2, "Tuestday " => 3, "Wednsday " => 4, "Thursday " => 5, "Friday " => 6, "Saturday " => 7 );foreach ($arrayval as $temval => $currval) { echo "$arrayval[$temval] => $currval"; }

?>

Работа с масиви Вече знаете, че променливата е контейнер за една стойност. Масивът от друга страна е контейнер за

множество стойности. Той също така може да съдържа множество елементи от различни типове. Елементите от масива се адресират или манипулират на базата на тяхния индекс. Индексът на елемент от масив обикновено е цяло число. Има няколко типа масиви в PHP. Да разгледаме в подробности следните типове масиви.

Типове масивиМасивите могат да се класифицират на базата на индексите си и на елементите си. Различните типове

масиви са: Номериран масив

Page 21: PHP Lessons

Асоциативен масив Многомерен масив

Номерирани масивиМасивите, които имат целочислени индекси, са извесни под името номерирани или числово

индексирани масиви. Тези масиви се използват за съхраняване на стойности. Например, можете да имате масив с име Students, в който всеки елемент да съхранява името на студент.

В този масив, всеки елемент, може да бъде адресиран по индекса си. Например, името James може да бъде адресирано от индекс 0. За да визуализирате елемента с индекс 2, можете да използвате следния ред:

echo "$Students [2]";

Асоциативни масивиАко ви се налага да осъществявате достъп до елементите на даден масив по име, тогава трябва да

използвате низове като индекс на масива. Масивите, които използват низове като индекси, се наричат асоциативни масиви.

Ще откриете една съществена разлика при работата с номерираните и асоциативните масиви. При асоциативните масиви масиви не можете да изчислите следващия валиден индекс в масива. Можете да създадете асоциативен масив с име Student_Name, като присвоите стойността на индекса.

$Student_Name["name1"] = "James Patt"; $Student_Name["name2"] = "John Smith";$Student_Name["name3"] = "Susan Carter";

Можете също така да конвертирате съществуващ номериран масив в асоциативен масив. За да конвентирате съществуващ масив Student в асоциативен масив, направете следното:

$Student = array ("name1" =>"James Patt", "name2" =>"John Smith", "name3" => "Susan Carter");

След като сте конвентирали номериран масив в асоциативен, можете да използвате командата echo, за да визуализирате елементите от масива.

echo "$Student["name3"]";

На екрана ще се появи името Susan Carter. Можете също така да използвате функциите list() и each(), за да осъществите достъп до елементите в асоциативен масив. Функцията list() се използва за присвояване стойностите на елементите от масива на променливи. А финкцията each() получава масив като аргумент и връща индекса и стойността на всеки елемент от масива. Например:

$Student = array ("name1" =>"James Patt", "name2" =>"John Smith", "name3" => "Susan Carter"); list($key_name, $val) = each($Student); echo("$key_name"); echo ("$val");

Горния код за всеки елемент от масива присвоява на променливата $key_name индекса на елемента, а на променливата $value - стойността на елемента. След това се визуализират стойностите на променливите $key_name и $val. Така индексите ще са name1, name2, name3. A съответните стойности ще са James Patt, John Smith и Susan Carter.

Многомерни масивиМожете да съхранявате различни променливи, както и цели масиви, в друг масив. Масив, който

съхранява масиви като свои елементи се нарича многомерен масив. Ако елементите на масив са двумерни масиви, тогава той е тримерен масив и т.н. Въпреки, че тези масиви могат да са тримерни, четиримерни и т.н., двумерните масиви са най-популярни. По-долу е даден пример за многомерен масив.

Rool No 1 2 3Name James Patt John Smith Susan Carter

Page 22: PHP Lessons

Горният масив е пример за двумерен масив. Тук масивът Students съдържа друг масив с име Roll No.

Тъй като масивът Students има масиви като свои елементи, Можете да осъществите достъп до втория поделеметн на първия елемент на масива , като използвате два индекса, например:

$Students [0][1]

Можете да помислите за едно изображение като пример за масив. Например трябва да виждате координатите, докато движите показалеца на мишката върху изображението. В този случай трябва да използвате многомерен масив за координатите на x и y, както е показано подолу.

Coordinates [x][y]

Няма ограничение за броя на измеренията на масивите. Освен това можете да имате различни типове измерения. Например, може първият индекс да е целочислен, вторият низов, третият- пак целочислен и т.н. Многомерните масиви са много полезни при представянето на сложни статически данни.

<html><body><?php $Student = array ( "0" => array ("name" => "James", "sex" =>"Male", "age"=>"28"), "1" => array ("name" => "John", "sex" =>"Male", "age"=>"25"), "2" => array ("name" => "Susan", "sex" =>"Female", "age"=>"24") ); Print $Student [2][age]; ?></html></body>

Резултатът от горната програма е 24.

Инициализиране на масивиМасивите могат да се инициализират по два начина. Можете да инициализирате масив, като използвате: Идентификатора на масива Функцията array()

Използване на идентификатора на масивИдентификатора на масив е празно множество от квадратни скоби. Можете да използвате

идентификатора на масив, за да инициализирате масива Student по следния начин:

$Student[] = "James"$Student[] = "John"

Тук присвоихте стойностите James и John на масива Student. Обърнете внимание, че не сте задали индекси. Поради тази причина на индексите 0 и 1 са присвоени съответно стойностите James и John.

Можете също така да зададете индексите явно. Например:

$Student[0] = "James"$Student[1] = "John"$Student[0]

Обикновено се присвояват стойности на последователни стойности в масива. Но можете да присвоите стойности на произволни индекси в масива. Например:

$Student[10] = "James"$Student[3] = "John"

Page 23: PHP Lessons

В горния пример са присвоени стойности на непоследователни индекси в масива. Ако трябва да зададете индекс на нова стойност, новия индекс, ще е с единица по-голям от последния индекс. Например, ако трябва да зададете индекс на нов елемент със стойност Sarah, то новият индекс ще е 11, тъй като последния индекс е 10

Използване на функцията array()Един по-прост начин за инициализиране на масив е използването на функцията array(). Това е

просто, защото чрез използването на функцията array() задавате едновременно множество стойности. Можете да използвате функцията array(), за да дефинирате масива Student по следния начин:

$Student = array("James", "John", "Susan");

Сега, ако използвате командата Print "Student [1]", на екрана ще се появи James. Можете да използвате оператора => по следния начин:

$Student = array("James", 5 => "John", "Susan");

В горния пример на стойността James се присвоява индекс 0, на John -индекс 5, a на Susan - индекс 6.

Операции с масивиИзползвайки вградените функции, можете да извършвате следните операции: Да променяте размера на масви. Да обхождате масив. Да откривате елементи на масив. Да обърнете реда на масив. Да сортирате масив.

Определяне размера на масивМожете да осъществите достъп до елемент, като използвате индекса му. Обаче, за да изчислите броя

на елементите в масив, трябва да използвате функцията count(). За да разберете по-добре действието на финкцията count(), ще разгледаме следния пример:

$Student array ( "Susan", "Betty", "Wiki");$Number = count ($Student); Print $Number;

Горния код инициализира масив Student с три елемента. Функцията count() връща броя на елементите в масива. Той се съхранява в променливата $Number. Когато визуализирате стойността на променливата ще видите, че тя е 3. За да намерите стойността на индекса на последния елемент, трябва да извадите единица от стойността на променливата $Number.

Промяна на размера на масивМожете да намалявате, или увеличавате размера (дължината) на масив, като използвате различните

функции в PHP. Промяната на размера на масив включва: Намаляване на размера на масив. За да намалите размера на масив, трябва да използвате

функцията array_slice(). Функцията array_slice, получава като параметър масив, начална позиция и дължина. Например, ако имате масив от седем елемента и искате да намалите броя му до 4 елемента, използвате функцията array_slice() :

$Student array ("a", "b", "c", "d", "e", "f", "g", "h"); array_slice($Student, 4);

Функцията array_slice намалява броя на елементите от 7 на 4. Видяхте, как можете да намалявате дължината на масив. При това намаляване обаче, се премахват последните елементи от масива. Ако искате да премахнете първите елементи от масива, трябва да използвате функцията array_shift(). Функцията

Page 24: PHP Lessons

array_shift() премахва първият елемент от масив. Елементите се предават на масива като аргумент. Например, нека да инициализираме масив по следния начин:

$Student array ( "Susan", "Betty", "Wiki");

Сега можете да използвате функцията array_shift() и да премахнете резултата в променливата $New

$New = arraay array_shift($Student);

Първият елемент от масива $Student, авоматично ще бъде премахнат от функцията array_shift(). Увеличаване дължината на масив. Да предположим, че е необходимо да се добавят още елементи

в горния масив $Sudent. Можете да направите това, като използвате функцията array_push(). Функцията array_push() приема като параметър масив и връща като резултат новия общ брой на елементите в масива. Да разгледаме следния пример:

$Student array ( "Susan", "Betty", "Wiki"); $Insert = array_push ($Student, a, b, c); ????????????????????????????????????????????????

Тук сме взели масива Student и сме добавлили към него елементите a, b, и c. След това съхраняваме броя на елементите в $Insert, която съдържа 6.

Сега да предположим, че искате да добавите всички стойности от един масив в друг. В този случай, можете да съберете самите масиви, вместо да работите елемет по елемент, защото е по-бързо и по-лесно. Не можете да събирате масиви, като използвате функцията array_push. В PHP има функция с име array_marge(), която ви позволява да слеете два масива.

Функцията array_marge() слива два или повече масива и връща като резултат комбинирания масив. Нпример:

$Student array ( "Susan", "Betty", "Wiki");$Class = array ("4", "5", "6");$Combine = $Student + $Class;

Масива Combine, съдържа копия от всички елементи от масивите Student и Class. Тка масива Combine ще съдържа следните стойности:

"Susan", "Betty", "Wiki", "4", "5", "6"

Сега да предположим, че масивите Student и Class имат няколко общи елемента. Например:

$Student array ( "Susan", "Betty", "5"); $Class = array ("4", "5", "6");

Когато слеете масивите, общият елемент, ще присъства само веднъж в резултатния масив. Обаче, ако не искате да загубите общия елемент в двата масива, можете да използвате функцията array_marge_recursivw(). Можете да използвате тази функция, и ако не искате да загубите индекси по време на сливането на масивите. Функцията array_marge_recursivw() копира всички елементи, които са в масивите.

Намиране на сечението или обединението на масиви. Понякога може да ви се наложи да намерите сечението на два масива. В тези случаи трябва да

използвате функцията array_intersect(). Да разгледаме например следния програмен фрагмент:

$old = array ("a", "b", "c"); $new = array ("c", "d", "e"); $Intersection = array_ intersect ($old, $new);

В горния код първо се инициализират масиви old и new. След това се намира сечението на двата масива и резултатът се съхранява в друг масив.

Ако искате да намерите всички елементи и в двата масива, използвайте функцията union. Функцията union има следния синтаксис:

Union = (масив);

Намиране на уникалните елементи на масив.

Page 25: PHP Lessons

За да намерите уникалните (неповтарящи се ) елементи на масив, трябва да използвате функцията array_unique(). Това е вградена функция в PHP. Функцията array_unique() приема масива като елемент, премахва дублиращите се елементи в него и като резултат връща нов масив. Можете да използвате тази функция, както върху номерирани масиви, така и върху асоциативни масиви. Функцията array_unique() има следния синтаксис:

$unique = array_unique($old);

Обхождане на масивЗа да извършите операции последователно върху елементите на масива, трябва да можете да го

обхождате последователно. Има различни начини за обхождане на всеки елемент на масив. Но най-удобният е използването на цикъла foreach. Ще се разгледаме един пример:

Да предположим, че имаме номериран масив на име Student, който съдържа стойностите "John", "James" и "Susan". Можете да използвате цикъла foreach за да осъществите последователно достъп до всеки елемент в масива, като текущият елемент, се съхранява във временна променлива с име new. Ето как може да стане това:

$Student = array("James", "John", "Susan");foreach ($Student as $new) { print "$new"; }

Горният код ще визуализира всички елементи на масива. Току-що използвахме цикъла foreach за обхождане на номериран масив. За да обходите асоциативен масив и за да осъществите достъп до индексите и стойностите в него, трябва да използвате следната модификация на цикъла foreach:

foreach ($Student as $key_name => $new) { // }

Тук променливата $key_name съхранява текущия индекс, а променливата $new, текущата стойност. Вече видяхте как можете да обхождате масив с помоща на цикъла foreach. Видяхте и как можете да

използвате функциите count() и current(). Има още две функции, с помоща на които, можете да обхождате масив, а именно next() и prev().

Функцията next() получава като аргумент масив. Тази функция обхожда масива от ляво на дясно. Функцията next() връща стойността на следващия елемент. Когато достигне до края на масива, тя връща стойност False. Функцията prev() също получава като аргумент масив, но обхожда масива от края към началото му.

Търсене на елемент в масивPHP предоставя няколко функции за търсене на елемент в масив. В PHP можете да: Намирате елементи, които отговарят на критерий. Да предположим, че искате да намерите

всички елементи от масив, които отговарят на даден критерии. Можете да намерите тези елементи по два начина - или като използвате цикъла foreach(), за да обходите целия масив и да проверите всяка от стойностите, или като използвате функцията preg_grep() за да постигнете същата цел. Функцията preg_grep() претърсва масив за елемети, отговарящи на зададен критерии, и връща откритите елемети като масив.

Да предположим, че искате да претърсите масива Student за да намерите всички студенти имащи Smith в имената си. В този случай можете да използвате функцията preg_grep() по следния начин.

$Student = array ("James Patt", "John Smith", "Susan Carter", "Joe Smith", "Janet Jones"); $array_Smit = preg_grep ("/^Smith", $Student);

В горния код масивът Student се претърсва с функцията preg_grep() за елементи, съдържащи низа Smith. Резултатът ще бъде масив съдържащ John Smith и Joe Smith

Намиране разликата на два масива. До сега научихте, как можете да намирате уникалните елементи в масив. Сега да предположим, че искате да намерите елементите в даден масив, които не се срещат в друг масив. Можете да направите това, като използвате функцията array_diff(), за да намерите разликата на два масива. Функцията array_diff() има следния синтаксис:

Page 26: PHP Lessons

array_diff($Масив_1, $Масив_2);

Функцията array_diff() връща елементите, които се намират в $Масив_1, но не и в $Масив_2. Можете да използвате тази функция, за да претърсите повече от един масив, като разделите масивите със запетая.

Обръщане на реда на елементите в масивДа предположим, че искате да обработвате даден масив в обратен ред. Ако масивът е кратък,

можете да използвате функцията array_reverse(). Функцията array_reverse() приема като параметър масив, чийто ред искате да обърнете. Тя има следния синтаксис:

$array2 = array_reverse($array1);

Ако масивът ви е много голям, функцията array_reverse() ще отнеме много време. Тогава можете да използвате цикъла for(), за да обходите масива в обратен ред. Например, можете да обърнете масива Rate ( разглеждан преди това ), като използвате цикъла for по следния начин:

for (x = count($Rate) -1; Rate >= 0 ; X--) { // оператори }

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

Сортиране на масивиФункцията sort() е проста функция предназначена за сортиране на елементи.

Функцията sort()Можете да използвате функцията sort(), за да сортирате масиви по числовия, или азбучен ред на

елементите им. Тази функция променя индексите в масивите в зависимост от реда на сортиране. Например:

$Student = array("John", "James", "Susan"); sort ($Student);

Когато визуализирате индекса и стойността на елементите в масива, ще получите следния резултат: 0 James1 John2 SusanОбърнете внимание, че индексите са променени след сортирането. Сега да предположим, че имате

асоциативен масив. Например:

$Student = array ("JS" -=> "John Smith", ("JP" -=> "James Patt", ("SC" -=> "Susan Carter");

Ако сортирате масива, използвайки функцията sort(), и след това покажете индекса и стойността на елементите от масива, ще получите следния резултат:

0 James Patt1 John Smith2 Susan Carter

Обърнете внимание, че низовите индекси в асоциативния масив са преобразувани до числови индекси. Tова е големият проблем при използването на функцията sort() за сортирането на асоциативни масиви. Този проблем, може да се избегне, ако се използва функцията asort().

Други функции за сортиранеСъществуват няколко други функции, които ви помагат за сортирането на асоциативен и номериран

масив. Те са: asort(): Функцията asort() се използва за сортирането на масив, без да се променят индексите. Ако

сортирате масива Student с функцията asort(), ще получите следния резултат:

Page 27: PHP Lessons

JP James PattJS John SmithSC Susan Carter

rsort(): Функцията rsort() е подобна на функцията sort(). Единствената разлика е, че сортира елементите в обратен ред. Да разгледаме следния пример:

$Student = array ("John", "James", "Susan"); rsort($Student);

След сортирането на масива, функцията rsort() ще получи следния резултат:

0 Susan1 John2 James

arsort(): Функцията arsort() е подобна на функцията asort(). Единствената разлика е, че сортира елементите в обратен ред. Да предположим, че искате да сортирате елементите на масива Student в обратен ред, като при това индексите остават непроменени. За да извършите това трябва да използвате функцията arsort(). Прилагайки на функцията arsort() за сортиране на масива Student, ще получите следния резултат:

SC Susan CarterJS John JamesJP James Patt

ksort(): За да сортирате индексите на асоциативен масив, трябва да използвате функцията ksort(). Да предположим, че имате масива Student и трябва да го сортирате по индексите му.

$Student = array ("b" =>"Susan", "d" =>"Andrew", "a"=>"John", "c" => "James");

Сортирайки масива Student с помоща на функцията ksort(), ще получите следния резултат:

a Johnb Susanc Jamesd Andrew

krsort(): Функцията krsort() е подобна на функцията ksort(). Единствената разлика е, че тя сортира елементите в обратен ред. Така, че ако използвате функцията krsort() върху масива Student, ще получите следния резултат:

d Andrewc Jamesb Susan

Работа със функции Запознаване с функциите

Функцията е самостоятелен и независим блок от кода, който извършва дадена задача. Обикновенно, задачата трябва да се изпълнява повече от един път. Тъй като функцията е самостоятелен блок, който може да работи независимо, не е необходимо тя да е част от даден скрипт. Това означава, че функцията може да бъде част от самиия скрипт или част от външна библиотека. Ако функцията е част от даден скрипт, кодът във функцията не се изпълнява, докато тя не бъде извикана.

Главните предимства за използването на функции са: Опростяване на кода. Функциите правят кода много лесен за разбиране. Вместо във скрипта да се

повтаря даден код, където се налага да се извърши дадена задача, кодът се задава като функция и тя се извиква, където е необходимо. Като резултат, функциите намаляват размера на скриптовете ви.

Преизползваемост на кода. След като е написана функцията, може да бъде използвана не само от скрипта, в който е създадена, но и то други скриптове. Това ви позволява да спестите дублирането на функционалност в различните скриптове.

Page 28: PHP Lessons

Последната и най-добра възможност на PHP 4 е, че не е необходимо да дефинирате функцията, преди да я извикате. Казано по-просто, можете да извикате функцията в скрипта, и по-късно да я дефинирате.

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

PHP 4 не потдържа функции с неопределен брой аргументи. PHP 4 подържа аргументи по подразбиране

Типове функцииPHP предлага два типа функции, а именно:

Вградени функции Функции, дефинирани от потребителя

Вградени функцииВградените функции са предварително дефинирани функции, които се предоставят от PHP. Има

стотици вградени функции, които можете да използвате. Някой от най-често използваните вградени функции в PHP, с които вече се запознахте по-рано, са count(), echo(), array_diff() и др. За разлика от вградените функции, функциите, дефинирани от потребителя, зависят изцяло от програмиста на конкретния скрипт.

Функции, дефинирани от потребителяФункциите, дефинирани от потребителя, не се предлагат стандартно в PHP. Вместо това те се

задават от програмиста, тоест от вас. След като ги създадете, вие имате пълен контрол над тях. Като резултат, можете да създадете функции, адаптирани към конкретните ви изисквания, и заради това този вид функции са много популярни сред програмистите.

Как можете да създадете своя функция в PHP?

Деклариране на функцииСинтаксисът, който се използва в PHP, e аналогичен на синтаксисът в другите програмни езици. Ето

го и синтаксисът, чрез който можете да декларирате функции в PHP:

function име_на_функцията($аргумент1, $аргумент2,....,$аргумент_n){ // оператори }

В горния синтаксис: function е ключова дума за деклариране на функции. Име_на_функция е името на създаваната функция. Това ще бъде името, с което по-късно ще я

извикате. Името на функцията трябва да е уникално, защото в PHP не се потдържа предеклариране на функции. Когато избирате име на функцията, трябва да спазвате правилата за задаване на име на променливата. Обаче името на функцията не може да започва със символа $, въпреки, че за променливите е допустимо.

Аргумент_n е стойността, която предавате на функцията. както можете да видите от горния синтаксис, една функция може да има множество аргументи, разделени със запетаи. Аргументите не са задължителни. При извикване на функцията, може да не й определяте аргумент.

Оператори е множество от оператори, които се изпълняват при извикване на функцията. Чрез тези оператори се намира резултатът от функцията. Ако операторите са повече от един, трябва да са заградени във фигурни скоби ({}). Но скобите не са необходими, ако операторът е само един.

На базата на горния синтаксис, ще видите, как може да създадавате прости функции без аргументи.

Функции без аргументиЕто един пример за проста функция без аргументи

<?php

Page 29: PHP Lessons

function no_arg // Деклариране на функцията с име no_arg{ //Кодът на функцията echo "Hello";}echo "The funtion has not been called yet";no_arg(); // Извикване на функцията от главния скриптecho "The function has been called";

?>

В горния пример е декларирана функцията no_arg. Tъй като не са зададени аргументи след името на функцията, no_arg е функция без параметри. Когато функцията се извика чрез реда no_arg(), на екрана се появява съобщението "Hello". Резултатът от изпълнението е показан по-долу:

The funtion has not been called yet Hello The function has been called

Предаване на аргументи на функцияВ PHP аргументите могат да се предават на функциите по следните три начина Предаване на стойности по подразбиране Предавне на аргументи по стойности Предаване на аргументи по псевдоним

Предаване на стойнисти по подразбиране

При този метод, функцията трябва да приеме аргумент при извикването си. Ако обаче не се предаде стойност при извикването, на аргумента се присвоява такава по подразбиране. Ето пример за функция, имаща аргументи по подразбиране:

<?php

function counter ( $number = 6 ) // Деклариране на функцията counter{ for(; $number < 10; $number++) { echo $number; }}echo "The function has not been called yet.";// Извикване на функцията със стойност 8 за аргумента на функциятаcounter(8);// Извикване на функцията без аргумент със стойност по подразбиране 6counter();echo "The function has been called yet !";

?>

В горния код функцията counter приема аргумент number, който има стойност по подразбиране 6. Когато функцията се извика и й се предава стойност (counter(8)), стойноста по подразбиране на аргумента не се взема предвид. От друга страна, когато функцията се извика без аргумент (counter()), тя взема стойноста по подразбиране на аргумента и изпълнява тялото си.

Предаване на аргументи по стойност

Това е най-често използваният начин за предаване на стойности към функциите в PHP. При този метод стойноста трябва да се предаде на функцията по време на извикването й от главната програма. Ето пример за функция, която приема аргументите си при извикване:

Page 30: PHP Lessons

<?php

function counter( $number ) // Деклариране на функцията counter// която изисква да бъде подадена стойност на аргумента number{ for (; $number < 10; $number++) { echo $number ; }}echo "The function has not been called yet.";// Извикване на функцията и предаване на стойноста 3 на аргументаcounter(3);echo "The function has been called.";

?>

В горния пример се декларира функция с име counter, която приема аргумент с име number. Когато извикате тази функция, трябва да предадете стойност на аргумента на функцията. В противен случай PHP ще изведе съобщение за грешка. Когато функцията се извика от главния скрипт (counter(3)), й се предава стойност 3 за аргумента number.

Предаване на аргумент по псевдоним

<?

function called_function ( $number ) // Деклариране на функция, която изисква да бъде подадена стойност на аргумента number{ $number = $number + 1; echo $number;}// Извикване на функцията и предаване на num като аргументcalled_function ( $num );echo $num;

?>

В този пример стойноста на променливата num се предава на функцията called_function и се съхранява в локалната за called_function променлива с име number. Стойността, предадена на функцията, се увеличава с единица и се визуализира. След това контролът се връща на главният скрипт и се визуализира оригиналната стойност на променливата. Това означава, че въпреки променливата num да е била предадена на друга функция, нейната стойност остава непроменена в главнят скрипт.

Понякога, например в скрипта за сложни изчисления, може да искате даден параметър да се предаде на функцията и в извикващият скрипт да се върне променената стойност. Както видяхте в горния пример, това не е възможно, ако предавате аргумента по стойност. Обаче, чрез предаването на аргумента по псевдоним можете да накарате извикваната функция да измени стойноста на предадения й аргумент. Аргументите се предават по псевдоним, като се постави знакът & преди аргумента. Разгледайте следващия пример. Той е почти същия като горния. Тук, обаче, аргументът се предава по псевдоним, вместо по стойност.

<?

$num = 10;function called_function ( $number ) // Деклариране на функция, която изисква да бъде подадена стойност на аргумента number{ $number = $number + 1; echo $number;}

Page 31: PHP Lessons

called_function ( &$num ); // Извикване на функцията и предаване на numecho $num;

?>

В горния пример аргументът num се предава по псевдоним. Т.е. вместо копие, на функцията се предава адресът в паметта на аргумента. Като резултат, променливата num бива променена от функцията called_function.

Връщане на стойност от функцияФункциите също могат да връщат стойности към извикващият ги скрипт. В PHP, както и в повечето

програмни езици( например С++ ), операторът return се използва за връщане на стойността на променлива в извикващият скрипт. Разгледайте следващият пример:

<?php

function sum ( $num1, $num2) // Деклариране на функция с име sum{ $result = $num1 + $num2; return $result;}echo sum (233, 19);

?>

В горният код се декларира функция с име sum. Тази функция, която може да се предположи от името й, изчислява сумата на двата си аргумента. Променливата result във функцията се използва за съхраняване на тази сума. С помоща на оператора return резултатът от изчислението се връща в извикващият скрипт и се визуализира на екрана.

Област на действие на променлива във функцияВероятно до сега сте се сблъсквали с термина област на действие. Ако този термин не ви е познат,

сега ще ви го обясня. Терминът област на действие описва достъпността на променлива във функция. С други думи, частите от скрипта, които са извън функцията, нямат достъп до променливите, декларирани във функцията. Да разгледаме следващият пример:

<?php

function sum() // Деклариране на функцията sum{ $result = 117 + 28;}sum();echo $result;

?>

В горния пример няма нищо да се изведе на екрана! Можете ли да се досетите защо? Променливата result е декларирана във функцията sum. По тази причина, областта й на действие е ограничена само до тялото на функцията. По-просто казано, тя може да се използва само във функцията и остава недостъпна в частите от скрипта извън нея. Когато променливата result се използва извън функцията, тя се разглежда като нова променлива, чиято стойност още не е била зададена.

Въпреки че областта на действие на променлива ограничава достъпността й извън конкретната функция, вие можете да осъществите достъп до променлива, дефинирана във функцията. За тази цел PHP предоставя две ключови думи - global и static.

Page 32: PHP Lessons

Ключовата дума global

Ключовата дума global ви позволява да осъществите достъп до променлива, декларирана във функция, от всяко място във скрипта ви. За тази цел при декларирането на променливата трябва да използвате ключовата дума global по следния начин:

global $променлива_1; Ето как трябва да се промени предишния пример, за да бъде променливата result достъпна в

главния скрипт.

<?php

function sum() // Деклариране на функцията sum{ global $result; $result = 117 + 28;}sum();echo $result;

?>

В горния пример, изведеният текст няма да бъде празен. Oператора echo ще изведът на екрана стойност 145, защото сега променливата result е глобална променлива и е достъпна от всяко място в скрипта.

Ключовата дума static "увеличава живота" на променливите и се различава от ключовата дума global.

Ключовата дума static

Животът на променливата, декларирана във функцията, е много кратък. Това означава, че променливата във функцията се инициализира във началото на функцията и се унищожава при излизане от нея. Чрез използването на ключовата дума static можете да увеличавате живота на променливите, декларирани във функциите. Да разгледаме следния пример:

<?php

function sum() // Деклариране на функцията sum(){ $result = 1; echo $result; $result++;}sum();sum();

?>

В горния пример функцията sum се извиква два пъти от главния скрипт. Резултатът е 1, 1. Защо става така? Това е така, защото всеки път, когато извикате функцията, променливата result се инициализира отново, и резултатът от предишните събирания се губи. Но ако искате сумата да се натрупва, тогава можете да направите малка промяна в горния код, за да получите желания ефект. Преди декларацията на променливата result поставете ключовата дума static. Да разгледаме следния пример.

<?php

function sum() // Деклариране на функцията sum(){ static $result = 1; echo $result; $result++;}

Page 33: PHP Lessons

sum();sum();

?>

При изпълнението си горната програма ще изведе първо 1, след което на следващия ред 2, Това е така, защото променливата е декларирана като статична променлива и тя помни стойността си и след края на функцията.

Променливи функции и функции с променлив брой аргументиПроменливите функции са едни от най-добрите възможности на PHP. Ако добавите апострофи

към името на променливата, PHP се опитва да намери функция със същото име и да я изпълни. Нека да разгледаме следния пример:

<?php

function pesho(){ echo "My name is Pesho";}function noname ($name) // Функция изискваща аргумент{ echo "My name is $name";}$show = 'pesho';$show(); // Това е еквивалентно на реда pesho();$show = 'noname';$show(Dylgia); // Това е еквивалентно на реда noname('Dylgia')

?>

В горния пример има две функции pesho и noname. Функцията noname приема като параметър стойността Dylgia при извикването си от главния скрипт. В главния скрипт е декларирана променливата show. Както можете да видите, имената на функциите са присвоени, като стойност на тази променлива. Поради тази причина променливата show се нарича променлива функция.

PHP също така потдържа функции с променлив брой аргументи. Функцията с променлив брой аргументи е функция, при която броят на аргументите не е фиксиран. Например:

<?php

showtitles($Itemcode 1);showtitles($Itemcode 1, $Itemcode 2);showtitles($Itemcode 1, $Itemcode 2, $Itemcode 3);

?>

PHP предоставя три функции за поддръжка на функциите с променлив брой аргументи: func_num_args(): Връща броя на аргументите предадени на функцията. func_get_arg(): Връща стойността на конкретния аргумент. Например, за да получите стойността на

първия аргумент, предаден на функцията, можете да напишете $arg1 = func_get_arg(0). func_get_args(): Връща всички аргументи , предадени на функцията под формата на масив.

Работа с класове Запознаване с класовете

В терминологията на обектно ориентираното програмиране, класът се дефинира като множество от обекти, които имат общи характеристики и поведение. Заедно с това обектът се дефинира като представител на даден клас, който се идентифицира уникално и предоставя функционалност, която е обща за целия клас.

Page 34: PHP Lessons

За да разберете и да свържете с реалния живот концепцията за класове и обекти, ще разгледаме един прост пример. Паунът, врабчето и враната са птици. Защо? Защото имат общи характеристики. Всяка от тях снася яйца и излюпва малките си, всяка от тях е покрита с пера и може да лети. Затова можете да кажете, че паунът, врабчето и враната са уникални обекти, които имат сходство в структурата и поведението и принадлежат към класа, наречен птици.

В PHP, класът представлява набор от променливи и функции. Променливите в класовете съдържат данните, които са необходими за функционалността на класа. Функциите във класа пък обработват тези данни и реализират функционалността на класа. Обектът е инстанция на класа.

В следващите секции ще видите как можете да създадете класове и обекти от тези класове в PHP.

Създаване на класВ PHP можете да дефинирате ( или създадете ) клас, като използвате следния синтаксис:

class име_на клас // Деклариране на класа{ // Деклариране на поле ( променлива на класа ) var $име_на_променлива; // Деклариране на метода ( функция на класа ) function име_на_функция ( $аргумент 1, [...] [...], $аргумент n) { // Код на функцията } // Тук свършва декларацията на метода} // Тук свършва декларацията на класа

Можете да създадете следния прост клас, като използвате горния синтаксис:

<?php

class PrintName{ var $name;

function show_name() { echo "Hi $name"; }}

?>

В горният пример се създава клас с име PrintName. Класът съдържа едно поле с име name. Класът също така съдържа метод show_name. При извикването на този метод ( за това ще видите по-късно ) на екрана се появяват две съобщения, ???? съдържащи стойността на полето name. Обърнете внимание на ключовата дума var преди полето name. Полетата на класовете винаги се декларират с ключовата дума var. Това е така, защото var декларира променливите като част от даден клас и така позволява на полетата да бъдат достъпни (индиректно) извън класа. Ако забравите да сложете ключовата дума var, ще получите съобщение за грешка.

След като видяхте, как можете да създадете клас в PHP, сега ще видите как можете да го използвате. Както в другите езици за обектно-ориентирано програмиране, данните, намиращи се в клас ( полетата характеристики ), и методите не са достъпни извън класа! Ако си спомняте основните концепции на обектно ориентираното програмиране, тази особеност е позната на програмисите, като капсуловане. Капсуловането означава защитаване на неважните данни от външен клас за достъп.

Полетата и методите са скрити в класа и са недостъпни. Но как можете да ги използвате извън класа? За да направите това трябва да инстанцирате класа. В следващата секция ще разгледате инстанциране на класовете.

Инстанциране на класове - Създаване на обектиКласът е просто декларация. Поради тази причина, той не съществува, докато не зададете поне една

негова инстанция. В терминологията на обектно-ориентираното програмиране, тази инстанция на класа се нарича обект. След като създадете обект от даден клас, можете да осъществите достъп до полетата и

Page 35: PHP Lessons

методите, скрити в класа, към който пренадлежи обектът. Да разгледаме следния пример, за да видите как можете да използвате променливата name и метода show_name() на класа PrintName :

<?php

class PrintName{ var $name;

function show_name() { echo ; echo "Hi $name"; }}$obj1 = new PrintName //Инстанциране на класа с име "PrintName" с обект с име "obj1"$obj1 -> name = "George"; // Задаване на стойността "George" на полето "name"$obj1 -> show_name(); // Извикване на метода "show_name()"

?>

В горния пример се създава обект с име obj1 от класа PrintName. Този обект инстанцира класа PrintName. Това означава, че за класа има заделена памет и имате достъп до методите му, чрез обекта obj1. Обектът obj1 използва оператора -> за осъществяване на достъп до полето name и до метода show_name(). На полето name в обекта obj1 се задава стойността Gerge чрез реда $obj1 -> name = "George"; и след това се извиква методът show_name(), който показва съобщението "Hi George!". Видяхте как можете да осъществите достъп до членове на класа с помпща на обекти. Сега ще видите как можете да осъществите достъп до методите, без изобщо да използвате обект!

Извикване на методи от клас без инстанциранеМожете да извикате методи на клас, без да ви се налага преди това инстанцирате класа. За целта

трябва да използвате нотацията ::. Разгледайте следния пример за да видите как става това:

<?php

class area{ function calculate_area( $lenght, $breadth) { return $lenght * $breadth; }}

$result = area :: calculate_area(225, 56);echo "The area Is : $result. ";

В горния пример с използването на нотацията :: се осъществява достъп до метода calculate_area() на класа area. Резултатът се изчислява на базата на стойностите, предоставени по време на извикването на метода, а резултатът се съхранява в променливата result. Резултатът от горния пример е The area Is 12600.

Променливата $thisЕзикът PHP използва специална променлива $this за осъществяване на достъп до даден клас.

Използването на променливата $this в PHP е аналогично на създаването на инстанция на класа в самия клас. Следващия пример е модификация на предишния пример с цел демонстриране на използването на променливата $this.

<?php

Page 36: PHP Lessons

class PrintName { var $name = "George";

function show_name() { echo "Hi $this -> name. } } $obj1 = new PrintName; $obj1 -> show_name();

?>

В горния пример променливата name се използва директно в метода PrintName с помоща на променливта $this. Резултатът от горния код ще бъде : Hi George.

Също така можете да промените стойността на поле в метод, което е демонстрирано от следващия пример:

<?php

class PrintName { var $name = "George";

function show_name() { echo "Hi $this -> name. } function change_name($somename) { $this -> name = $somename; // Промяна на стойността на полето name от "George" на новото име предадено на метода. } } $obj1 = new PrintName; $obj1 -> show_name(); $obj1 -> change_name ("Pesho"); $obj1 -> show_name();

?>

В гоерния пример първо на екрана се появява Hi George. , защото се извиква методът show_name() на обекта obj1, а стойността George е стойност по подразбиране за полето name. С реда $obj1 -> change_name ("Pesho"); се извиква методът change_name(), който задава стойността Pesho на полето name. След това се извиква методът show_name(), който на свой ред показва "Hi Pesho".

Както можеби сте забелязали, методите на класове, като нормални функции, не се извикват, преди да направите това явно. Това означава, че докато не напишете реда $obg1 -> show_name(), методът show_name(), няма да бъде извикан. В следващата секция, ще научите повече за методите, които се изпълняват автоматично при инстанциране на класа ( т.е. когато се създава обект от класа ).

КонструкториКонструкторът е специален метод на класа, който се изпълнява автоматично, когато се създава

обект от класа. Конструкторът, по дефиниция, трябва да има име, еднакво с името на класа. Това означава, че може да имате само един конструктор в даден клас. Следващият пример демонстрира използването на конструктор.

<?php

class PrintName

Page 37: PHP Lessons

{ var $name;

function PrintName() { $this -> name = "Angelica"; echo "Hi $this -> name. } function show_name($somename) { echo "Hi $this ->name !"; } } $obj1 = new PrintName; $obj2 = new PrintName;

?>

Резултатът от горната програма, ще бъде двукратно показване на низа "Hi Angelica !". Това е така, защото методът PrintName се изпълнява при всяко създаване на обект от класа PrintName.

Разширяване на клас - наследяване на класовеНай-добрата черта на създаването и използването на класове е възможността да ги използвате

повторно. Можете да създадете класа веднъж и след това да го използвате и в другите си програми. Това ви помага да си спестите много време. Езикът PHP, както и много други езици за обектно-ориентирано програмиране, разширява преизползваемостта на класовете, чрез реализация на механизма на наследяване. Наследяването ви позволява да създавате нови класове на базата на вече съществуващи. Тази стратегия ви позволява да използвате повторно необходимите методи и променливи в дъщерния клас и същевремено да добавите само допълнителната функционалност, като по този начин пишете по-малко код. Класът, чиито код се използва повторно се нарича родителски клас.

Трябва да използвате ключовата дума extends, за да декларирате, че класът наследява съществуващ клас. Синтаксисът е следния: име_на_класа extends име_на_родителския_клас

Наследяването се прави от родителския към дъщерния клас. То се изразява в това, че даден обект от дъщерния клас има достъп до полетата и методите на радителския клас, но обектите от родителския клас нямат достъп до дъщерния. С други думи, обектът от родителския клас не може да използва методите и полетата на дъщерния клас. Следващият прост пример е за наследяване в PHP.

<?php

class ParentClass{ function show_message() { echo "Hi! This comes from the parent class."; }}class ChildClass extends ParentClass // Наследяваме класа ChildClass от класа Parent{ function show() { echo "Hi This comes from the child class." }}$obj1 = new ParentClass; // Обект от ParentClass.$obj1 -> show_message (); // Правилно - тъй като obj1 е обект от ParentClass и извиква метод от същия клас$obj2 = new ChildClass; // Обект от ChildClass$obj2 = show(); // Правилно - тъй като обект от класа ChildClass има достъп до методите на дъщерния клас.

Page 38: PHP Lessons

$obj2 -> show_message(); // Правилно - тъй като обект от класа ChildClass има достъп до методите на родителския клас.$obj1 -> show(); // Грешно, защото обект от класа ParentClass няма достъп до методите на дъщерния клас ChildClass

?>

В горния пример са декларирани два класа - ParentClass и ChildClass. Както се подразбира от името му, класът ChildClass наследява класа ParentClass с помоща на ключовата дума extends. Обектът obj1 е обект от класа ParentClass, а obj2 е от клас ChildClass. Когато обект obj2 извиква метода show_message() на класа ParentClass, на екрана се появява съобщението Hi ! This comes from the parent class. Това е възможно, защото класът ChildClass е наследник на класа ParentClass и има достъп до полетата и методите му. От друга страна, когато обектът obj1 извика метода show() на дъщерния клас ChildClass, PHP извежда съобщение за грешка. Това е така, защото методите и полетата на наследения клас са недостъпни за родителския клас ParentClass.

Работа с форми в PHP Обработка на форми в PHP

Анализиране на HTML стойности в PHPКакто вече знаете, формите имат различни елементи, а именно: Текстово поле Поле за отметка Радио-бутон Списък Тези елементи се използват за въвеждане на информация в WEB страниците. Освен това тези елементи

ви позволяват да направите Web страниците си по интерактивни. Обаче, не можете да се възползвате напълно от тях, ако не знаете, как да извлечете въведената в тях информация. За това се грижи PHP.

Накратко, PHP приема информацията, предадена чрез елемент на HTML формата, и я присвоява на променлива с име отговарящо на стойността на атрибута NAME на съответния елемент в HTML формата. Да приемем, че в една HTML форма, атрибутът Name на едно текстово поле е "Txtbox". В PHP стойността на това текстово поле автоматично ще се присвои на променливата $Txtbox. В резултат на това можете да използвате стойността на текстовото поле Txtbox в PHP чрез променливата $Txtbox.

Сега да разгледаме, как PHP анализира стоиностите на всеки елемент на формата. Първо ще разгледаме текстово поле, защото е най-просто от всички елементи на формите.

Анализиране на текстово полеТекстовите полета се използват за въвеждане на текстови данни, като имена и адреси. Тези данни

могат да са текстови или числови. В PHP, обаче, типът на данните не е от голямо значение. Да разгледаме следния пример. Както знаете, HTML синтаксиса за текстово поле е : <input type="text" name="name" size="25" maxlength="25">

В горния код атрибутът Name на текстовото поле има стойност "name". Затова можете да използвате стойността на текстовото поле от HTML формата, като използвате променливата $name. За да проверите типа на тази променлива, използвайте следния код:

<?php

echo gettype($name);

?>

В горният код типът на променливата се връща като низ. Така можете да проверите типът на всички въведени стойности.

Анализиране на стойността на радио-бутонРадио-бутоните се използват за избиране на една възможност от няколко предложени. Когато се

използват радио-бутони, PHP взима атрибута Name на радио-бутона и създава променлива със същото име,

Page 39: PHP Lessons

както е при текстовите полета. Да разгледаме следния пример, за да видим как PHP анализира стойностите на радио-бутоните. Както знаете, HTML кода на група от радио бутони е: <input type="radio" name="gender" value="Мъж"><input type="radio" name="gender" value="Жена">

В горния код стойността на атрибута Name за радио-бутона е "gender". Затова в PHP стойността ще се присвои на променливата $gender. Освен това забележете, че имената и на двата бутона са еднакви. Това е така, защото са групирани заедно. Когато изберете даден бутон, неговата стойност ще се присвои на променливата $gender.

Анализиране стойността на полетата за отметкиПолетата за отметки се използват за избор на повече от една от предложените възможности. Докато

атрибутът Name на полетата за отметки са различни. Да разгледаме следният примерен код: <input type"checkbox" name="fiction" value="Фантастика"><input type"checkbox" name="horror" value="Ужаси"><input type"checkbox" name="action" value="Екшън"><input type"checkbox" name="comedy" value="Комедия">

В този код атрибутите Name на всички полета за отметки ("fiction", "horror", "action", "comedy") са различни. В резултат на това PHP присвоява стойностите има на променливи със съответните имена. Например, ако сте поставили отметка в полетата fiction и horror, PHP ще присвои стойности на променливите $fiction и $horror. Останалите без отметка полета няма да съществуват като променливи. Затова, когато изпълните реда if (empty($comedy))

Функцията empty ще върне стойност True, ако в полето не е поставена отметка.

Анализиране на стойностите на списъциСписъците се използват за избиране на една или повече предложени възможности. Списъците имат

само един атрибут Name. Това означава, че PHP създава само по една променлива за списък. Но, ако има само една променлива и множество избрани елементи от списъка, PHP присвоява всички избрани стойностти като масив на съответната променлива. Да разгледаме следния код: <select name="hobbies[]" size="7" multiplace><option value=" Спортове на открито "> Спортове на открито</option><option value=" Екстремни спротове "> Екстремни спортове</option><option value=" Поп музика "> Поп музика</option><option value=" Рок музика "> Рок музика</option><option value=" Агресивна музика "> Агресивна музика</option><option value=" Фотография "> Фотография</option>

В него атрибутът Name на списъка е "hobbies". Затова PHP създава променлива с име $hobbies, която да приеме стойностите от списъка. Но вие можете да изберете произволен брой стойности. Тези стойности се присвояват на променливата като масив. Да предположим, че сте избрали елементите: "Екстремни спортове", "Рок музика", "Фотография". В този случай променливата hobbies ще се инициализира по следния начин: $hobbies - array ( "Екстремни спортове", "Рок музика", "Фотография" );

Валидация на формаЕдин от най-важните аспекти на използването на форми е валидацията на ваведената от

потребителя информация. Да разгледаме следния ред:

<form name="registration" method="post" action="confirm.php" enctype="multipart/form-data"> ????

В него се декларира, че въведената информация ще се предаде на PHP в скрипта confirm.php. Когато изпратите информация, PHP първо трябва да валидира тази информация. Валидациите в PHP се

Page 40: PHP Lessons

извършват, когато натиснете бутона Submit, за да изпратите информацията за обработка от сървара. Сега ще видим, как може да създадете различни валидации в PHP.

Валидиране на стойността на текстово поле с иметоОбикновено първото поле във всяка форма е полето за името. В нашият случай полето Name е

първото поле, в което потребителя въвежда стойност. В резултат на това процесът на валидация на формата започва със стойността, която потребителя е въвел в това текстово поле. Да разгледаме следния код. Този код валидира полето с името във вашата форма:

<?php

if (empty($name)){ die("Не е въведено име");}elseif ((strlen($name) < 5) || (strlen($name) > 20 )){ die("Невалидно име");}else{ echo $name;}

?>

В горния код се използва конструкцията if ... elseif ... ... else за валидиране на въведената информация. Разгледайте следващата извадка от горния код:

if (empty($name)){ die("Не е въведено име");}

Ако не сте въвели име, обработката на формата ще прекъсне и ще се появи съобщение, че не сте въвели име. Обаче, след като сте въвели име, кодът провери неговата дължина. Разгледайте следващата извадка:

elseif ((strlen($name) < 5) || (strlen($name) > 20 )){ die("Невалидно име");}

В нея се появява условието, че името трябва да е поне от 5 символа и да не надвишава 20. Ако това условие не е удовлетворено, тогава ще получите съобщение за грешка "Невалидно име".

Валидиране стойността на текстово поле за адресаСледващото поле във формата е полето address. Разгледайте следващия код, който валидира полето за адрес във формата.

<?php

if (empty($addres)){ die("Не е въведено адрес");}elseif ((strlen($addres) < 5) || (strlen($addres) > 50 )){ die("Невалидно адрес");}

Page 41: PHP Lessons

else{ echo $addres;}

?>

Горният код е сходен с този на валидация на името. Тук PHP кодът проверява дали са ваведени данни в полето addres. Също така се проверява дали полето addres има по-малко от 5 символа или е по-голямо от 50 символа.

Валидиране на E-mail адресНай-често използваната валидация на E-mail адрес е проверката за наличието на символа "@" в

адреса. Разгледайте следващия код, който валидира полето за Е-маил.

<?php

if (empty($email)){ die("Не е въведено e-mail");}elseif ((strlen($addres) < 5) || (strlen($addres) > 20 )){ die("Невалидн e-mail адрес. Много дълъг/къс");}elseif (!ereg("@",$email)){ die ("Невалиден e-mail адрес. Липсва символа @")}else{ echo $addres;}

?>

Както в предишните две валидации, и тук кодът първо проверява дали е въведен e-mail адрес. Ако не е въведен, потребителят получава съобщението "Не е въведен e-mail адрес.". След проверката за наличие на стойност в полето e-mail, кодът проверява дали дължината на полето е между 5 и 20 символа.След тези две проверки, кодът проверява дали в стойността се съдържа символа @. Следващата извадка от горния код проверява за наличието на символа @: elseif (!ereg("@",$email)){ die ("Невалиден e-mail адрес. Липсва символа @")}

В горния код първият ред проверява за наличието на символа @ в e-mail адреса. Ако символът @ не се открие във въведената стойност, потребителя ще получси съобщението : "Невалиден e-mail адрес. Липсва символа @".

Валидация на паролиИмената на потребителите и паролите са основни при идентификацията на потребителите. Паролите

осигуряват защитеност на информацията, предоставена от потребителя. Разгледайте следващия код, който валидира пароли. Освен това този код не извежда истинската стойност на паролата, а замества броя на символите в нея със символа *:

<?php

if (empty($password) || empty($cpassword)){

Page 42: PHP Lessons

die("Не е въведенa парола");}elseif (((strlen($password) < 5) || (strlen($password) > 15 ))){ die("Невалиднa дължина на паролата");}elseif(!(strlen($password) == (strlen($cpassword))){ die("Паролите не съвпадат")}elseif(!($password === $password))// Сравняване на типа на паролите{ die("Паролите не съвпадат")}

else{ for ($i=0; $i < strlen($password); $i++) { echo "*"; }

}

?>

Работа с файлове Ако преди това сте работили с други езици за програмиране, като С или С++, може би си спомняте, че

работата с файлове може да се раздели на следните етапи: Отваряне на файл. Зададения файл се отваря. Ако файла не съществува той се създава. Обработка на файла. След като файла е бил отворен, той е готов за обработка. Може да четете

данните от файла, да записвате в него, като започнете отначало, или да добавите новите данни към вече съществуващите.

Затваряне на файл. След като сте свършили работата си с файлта, трябва да го затворите. PHP предлага множество функции за работа с файлове, които можете да използвате, за да запишете

данни от Web страница във файл, да извлечете данните от файл в Web страница или просто да промените или да добавите данни от вашата Web страница във файл. Някой от най често използваните файлови операции са:

Проверка за съществуването на файл Отваряне на файл Четене от файл Запис във файл Нека да разгледаме тези операции подробно.

Проверка за съществуването на файлПреди да извърщите операция с даден файл, често ще ви се налага да проверите дали файлът

съществува или не. За целта можете да използвате функцията file_exists(). Функцията file_exists() връща стойност True ако зададения файл съществува, или стойност False, ако не съществува. Функцията file_exists() е със следния синтаксис: bool file_exists(string име_на_файл);

Както се вижда от горния синтаксис, функцията file_exists() приема само един аргумент - име_на_файл, който задава името на файла, за чието съществуване се проверява. Разгледайте следния код за да разберете как се използва функцията file_exists().

<?php

if (!(file_exists("data.dat"))){

Page 43: PHP Lessons

echo "Файлът не съществува"}else{ echo "Файлът съществува"}

?>

В горния код наличието на файла data.dat се проверява с реда if (!(file_exists("data.dat"))). Както си спомняте от предишните уроци, оператирът ! обръща резултатът върнат от извикването file_exists("data.dat").

Отваряне на файлЗа да отворите файл в PHP трябва да използвате функцията fopen(). Тази функция може да отоври

или файл или URL адрес. Оттук следва, че файлът може да бъде както локален, така и отдалечен. Функцията fopen() извиква поне два аргумента. Синтаксисът на функцията fopen() е следният: int fopen(string име_на_файл, string режим, int път);

В горния синтаксис аргумента име_на_файл задава името на файла, който трябва да се отвори. Ако стойността на аргумента име_на_файл започва с http://, тогава означава, че файлът се намира на отдалечен Web сървър и за да се отвори файлът трябва да се установи HTTP 1.0 сесия със зададения сървър. Аналогично, ако аргументът име_на_файл започва с FTP:// , зададения файл трябва да се свали от FTP сървър след установяването на FTP сесия със зададения сървър. Ако стойноста на аргумента име_на_файл започва с php://stdin, php://stdout или с php://stderr, се отваря съответния стандартен входно изходен-поток. Обаче, ако стойността на аргумента не започва с никой от тези префикси, се приема, че зададения файл е локален , и PHP го търси във файловата система на текущия компютър.

Вторият аргумент mode(режим) задава, дали файлът се отваря за четене , за запис или за добавяне. Аргументът режим, може да приема една от следните стойности: r Файлът се отваря само за четене

r+ Файлът се отваря за четене и запис, текущата позиция е началото на файла

w Файлът се отваря само за запис. Ако в него е имало някакви данни, те ще бъдат загубени. Ако файлът не съществува, се създава нов файл.

w+ Файлът се отваря за четене и запис. Ако в него е имало някакви данни, те ще бъдат загубени. Ако файлът не съществува, се създава нов файл.

а Файлът се отваря за добавяне на данни към към съществуващите в него. Ако файлът не съществува се създава нов файл.

а+ Файлът се отваря за четене и за добавяне на данни. Ако файлът съдържа данни, новите данни ще се запишат в края му. Ако файлът не съществува, се създава нов файл.

Третият аргумент include_pat (път) не е задължителен и се използва, ако искате да търсите файла в пътя, зададен от този аргумент.

Следващият код демонстрира използването на функцията fopen().

<?php

if (!(file_exists("data.dat"))){ $fp = fopen("data.dat","w+");}else{ // Ако файлът съществува, данните ще се добавят $fp = fopen("data.dat","a");}

Page 44: PHP Lessons

?>

В горния код първо се прави проверка за съществуването на файла data.dat Ако файлът не съществува, се създава нов файл с име data.dat чрез режима w+. Това означава, че файлът е готов, както за четене, така и за запис. От друга страна, ако изразът if (file_exist("data.dat")) върне стойност True ( тоест, ако файлът data.dat съществува), файлът се отваря за добавяне на данни към него.

Можете да използвате знака @ пред функцията fopen(), както и пред всяка друга системна функция в PHP - например, @fopen("data.dat"),"w+");. Използването на символа @ в началото на функцията ще ви помогне да избегнете стандартните предупреждения на компилатора. Обаче трябва да се погрижите за предоставянето на собствени ( при изпълнението на програмиста ) съобщения за грешки, в случай, че функцията не успее да свърши задачата си.

Затваряне на файлЗа да затворите файл, трябва да използвате функцията fclose(). Ако функцията fclose() затвори

файла успешно, тя връща стойност True. Ако се провали затварянето на файла, функцията връща стойност False. Синтаксисът на функцията fclose() е: bool fclose(int файлов_маниполатор);

Функцията fclose() изисква като аргумент файловият маниполатор на файла, който трябва да се затвори. За да се изпълни функцията успешно, стойността на файловият маниполатор трябва да е валиден и да съответства на файла, който преди това е отворен с функцията fopen().

Обработка на файловеЧетене от файл

За да прочетете данни от външен файл трябва да използвате функцията fread(). Синтаксисът на функцията fread() е: string fread(int файлов_маниполатор, int дължина);

Както можете да видите, функцията fread() приема два аргумента: файлов_маниполатор и дължина. Аргументът файлов_маниполатор задава мястото във файла, от където да се чете. Аргументът дължина задава броя на символите, които да се прочетат от това място. Операцията по четене продължава докато се прочетат толкова символи, колкото са зададени от аргумента дължина. Ако се достигне до края на файла преди да се прочетат необходимоя брой символи, ще се върне низ, съдържаш прочетените до момента символи. Разгледайте следния файл:

$fo = @fopen("C:\PHP\Myfiles\data1.dat", r)or die ("Липсва файла!");//-- Прочитат се първите 124 символа от файла data1.dat$fr = fread($fo, 124);

В горния код файла data1.dat се отваря за четене с помоща на функцията fopen(). Изразът or die ("Липсва файла!"); се използва за отпечатване на съобщение, ако функцията fopen() не успее да отвори файла. Резултатът от функцията ( 1 или 0 ) се съхранява в променливата $fo. След това трази променлива се предава на функцията fread() като файлов маниполатор. Стойността 124, предадена на fread(), задава, че трябва да се прочетат първите 124 символа от файла data1.dat .

PHP предоставя множество файлови функции освен функцията fread(). Функциите fgetc(), fgets() и feof() са едни от най често използваните функции.

Функцията filesize()Функцията filesize() връща размера на зададения файл. Ако зададения файл не съществува, се връща

стойност False ( или 0 ). Функцията има следния синтаксис: int filesize(string име_на_файл);

Както се вижда от горния синтаксис, функцията filesize() приема един аргумент - името на файла, чиято дължина трябва да се определи.

Page 45: PHP Lessons

Функцията feof()Можете да използвате функцията feof(), за да определите дали цялото съдържание на зададения

файл е било обработено и дали текущата позиция е в края на файла. Функцията връща стойност True, ако файловият маниполатор в момента сочи в края на файла, и стойност False, ако не е достигнат края на файла.

Функцията feof() приема като аргумент маниполатор на файл, както е показано в следващия синтаксис: int feof(int файлов_маниполатор);

Функциите fgetc() и fgets()Функцията fread() връща низ с определена дължина от текущата позиция във файла. Но как можете

да прочетете един символ? Можете лесно да накарате функцията fread() да прочете един символ, като зададете желаната позиция и дължина 1. Но PHP ви предоставя по-лесен начин да направите това! За целта използвайте функцията fgetc(). Тази функция взема един символ от текущата позиция във файла. Синтаксисът на функцията fgetc() е: string fgetc(int файлов_маниполатор);

Функцията fgets() връща ред (низ) от текущата позиция във файла. За разлика от функцията fread(), дължината на низа върнат от функцията fgets(), е с единица по-малко от зададената като аргумент. Синтаксисът на функцията fgets() е: string fgets(int файлов_маниполатор int дължина);

Операцията по четене се прекратява при едно от следващите условия: Прочетени са дължината -1 байта Достигнат е символа за нов ред - \n Достигнат е края на файла

Разгледайте следния код, който демонстрира използването на функциите:

<?php

$file = "data1.dat";

// Отваряне на файла data1.dat$fo = @fopen($file, "r")or die ("Не може да се намери файла!");

// Намиране размера на файла - data1.dat$file_length = filesize($file);echo "Дължината на файла е : $file_length", "\n";

// Прочитане на файла ред по ред. При всяко срещане на края на ред,// променливата $total_rows се увеличава с 1while (!(feof($fo))){ $tr = fgets($fo, $file_length); $total_rows = $total_rows + 1;}echo "Броят на редовете във файла е: $total_rows ", "\n";

// Затваряне на файла data1.dat за да може да се извърщи следващия цикълfcolse($fo);

// Повторно отваряне на файла data1.dat и текущата позиция е в началото на файла.$fo1 = @fopen($file, "r");

// Прочитане на файла символ по символ. При всяко срещане на символ,// променливата $total_rows се увеличава с 1while (!(feof($fo))){ $tr = fgetc($fo1); $total_rows = $total_rows + 1;

Page 46: PHP Lessons

}echo "Броят на символите във файла е: $total_rows ", "\n";

?>

Функцията fseek()Можете да използвате функцията fseek(), за да зададете текущата позиция във файл. Синтаксисът на

функцията е следният: int fseek(int файлов_маниполатор, int отместване, int база);

В горният синтаксис първият аргумент е файлов маниполатор, който задава файла върху който ще се изпълни функцията. Следващият аргумент отместване, е цяло число, което задава новата текуща позиция във файла. Третия аргумент база, задава как да се извърши изчислението на новата позиция. Стойностите на двата аргумента оместване и база представляват брой байтове. Аргументът база има следните три стандартни стойности:

SEEK_SET - Текущата позиция се премества от началото на файла на зададения брой байтове от параметъра отместване.

SEEK_CUR - Текущата позиция се изчислява, като към текущата позиция във файла се добавят броят байтове, зададени в параметъра отместване.

SEEK_END Текущата позиция се изчислява като сума от дължината на файла и броя байтове, зададени в параметъра отместване.

За да разберете по-добре как действа функцията fseek(), разгледайте следния пример:

<?php

$file = "data1.dat";

// Отваряне на файла data1.dat$fo = $fopen($file, "r")or die ("Не може да се намери файла");

// Определяне на дължината на data1.dat$file_length = filesize($file);

echo "\n";echo "Рамерът на файла: $file_length.", "\n";

// Позициониране на 22 байт във файла$fs = fseek($fo, 22, SEEK_CUR);

// Прочитане на 6 символа от текущата позиция във файла$current_char = fread($fo, 6);

echo "В момента текущата позиция е върху символа $current_char";

?>

Запис във файл

PHP предоставя функцията fwrite() за запис на данни във външен файл. Тази функция приема три аргумента. Синтаксисът на функцията е следния: int fwrite(int файлов_маниполатор string низ, int дължина);

Първият аргумент е файлов маниполатор, в който искате да запишете данните. Вторият аргумент string (низ), е информацията, която искате да запишете. Последният аргумент, дължина, не е задължителен. Той задава броят байтове, които да се запишат във файла. За да разберете по-добре действието на функцията fwrite(), разгледайте следния програмен фрагмент:

dataformat = "A20A50A200A4A2A10A6";$line = pack ($dataformat, $name, $addres, $email, $gander, $birth_mounth, $comedy, $hobies[0]);

Page 47: PHP Lessons

echo $line,"<br>",strlen($line);$fp = @fopen("data.dat","w+")or die ("Не може да се отвори файла");

// Запис във файла$result = @fwrite($fp, $line)or die ("Не може да се запишат данните във файла");

fclose($fp);

В горния код файлът data.dat се отваря в режим w+, което позволява операции за четене и запис във файла. След като файлът е отворен успешно, низът, съхранен в променливата $line, се записва във файла. Накрая, отворения файл се се затваря със помоща на функцията fclose().

Форматиране на данните

Да разгледаме следния ред: dataformat = "A20A50A200A4A1A10A6";

Горния ред позволява съхраняването на информацията въведена в HTML формата, в променливата $dataformat в определен формат. Променливата $dataformat съхранява данните в едноредова структора, в която всяко поле има фиксирана дължина, запазена за него. Символът А предшества числата (20, 200, 50, 6, 10, 2, 4, 1), представлява променливите, като например $наме, #аддрес, $емаил в реда, който са получили от формата. Така:

A20 Дефинира по едно поле от 20 символа, за стойността $name А200 Дефинира поле от 200 символа, за стойността $email А4 Дефинира поле от 4 символа, за стойността $ganger А50 Дефинира поле от 50 символа, за стойността $addres А6 Дефинира поле от 6 символа, за стойността $hobies[0] А10 Дефинира поле от 10 символа, за стойността $comedy А2 Дефинира поле от 2 символа, за стойността $birth_mounth

Използване на MySQL Свързване с базата данни(MySQL)

Основната идея на един WEB сайт базиран на база данни е, че информацията, която се визуализира в Web сайта, се съхранява на сървър за база данни. Тази информация след това се извлича динамично от сървъра и се показва в Web страницата. Тези динамични Web страници после могат да се разглеждат със всеки браузър. Потребителите въвеждат адреса на Web страницата във техните браузъри. Тази информация се изпраща към Web сървъра, която я представя на сървъра за база данни под формата на заявка. Сървъра за база данни връща резултата отново към Web сървъра, който форматира информацията в HTML формат и я визуализира в браузъра.

Преди обаче да можете да осъществите връзка между база данни на MySQL и Web страница, трябва да се научите как да се свързвате с MySQL. PHP представя вградени функции за извършване на тази връзка. Функцията се нарича mysql_connect(). Функцията mysql_connect() се използва за осъществяване на връзка с база данни на MySQL. Тази функция също така приема определени параметри, които определят кой може да се свърже с базата данни и коя е базата. Функцията връща резултат, който указва, дали връзката е била осъществена. Тази стойност се съхранява в променлива, позната под името идентификатор на връзката. Този идентификатор се използва вътрешно от PHP за проверка дали връзката е била осъществена. Ако се извършат множество връзки към една база данни чрез функцията mysql_connect(), само първото извикване на функцията осъществява физическа връзка. Синтаксисът на функцията е следния: $connect = mysql_connect(<адрес>, <идентификатор на потребител>, <парола>);

Функцията приема три параметъра. Те имат следното значение: Адрес. Параметърът адрес съдържа IP адреса или името на хоста, на който е инсталиран сървърът.

Можете да зададете като адрес localhost, ако MySQLсе намира на същия компютър, на който е Web сървъра.

Page 48: PHP Lessons

Идентификатор на потребител. Този параметър съдържа потребителското име на потребител, който има право на достъп до базата данни. Този идентидикатор трябва да съществува на сървара MySQL и трябва да има подходящите права.

Парола. Този параметър задава паролата, съответстваща на идентификатора на портебителя. Паролата се използва за да осигури, че само оторизирани личности ще имат достъп до базата. Когато този параметър не е зададен, се приема, че паролата е празна.

$Connect Променливата $connect е идентификаторът на връзката. Тази променлива съдържа стойност True, ако връзката е осъществена.

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

echo "Идентификацията е Успешна";

?>

В горния код се осъществява връзка към сървара MySQL, като се използва идентификаторът root. Адресът е localhost, защото Web сървърът и MySQL се намират на един компютър. Потвърждение за това, че връзката е била осъществена успешно, се съхранява в променливата $connection.

Създаване на база данни в MySQLФункцията mysql_create_db() се използва за създаване на база данни в MySQL. Тя има следния

синтаксис: $createtable = mysql_create_db($dbname);

Променливата $dbname съдържа името на базата данни, която трябва да се създаде, а променливата $createtable съдържа резултатът от опита за създаване на база. Следващият код създава база с името Mytestbd:

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$createdb = mysql_create_db("Mytestbd")or die ("Не може да се създаде база данни");

echo "Базата данни е създадена успешно";

?>

В горноя код се осъществява връзка с MySQL чрез функцията mysql_connect(). След това се задава базата данни Mytestbd на сървара MySQL с помоща на функцията mysql_create_db(). Потвърждение за това дали базада е създадена успешно се съхранява в променливата $createdb.

Избиране на база данниСлед като сте създали база данни с PHP, или, ако базата вече съществува в MySQL, можете да добавите

таблици и да вмъкнете запис в базата данни. Преди да започнете работа с нея, трябва да я изберете или да осъществите достъп до нея. PHP предоставя функцията mysql_select_db() за избиране на база в MySQL Функцията има следния синтаксис: $connect = mysql_select_db($dbname);

В горния код името на базата данни се предава като аргумент на функцията. Функцията връща стойност в променливата $connect, потвърждаваща дали базата данни е избрана успешно. Ако стойността е True, то базата е била успешно избрана. Някой от случайте, в който е върната стойност False, са:

Базата данни не съществува на сървъра Базата данни е заключена от друг разработчик. Ако множество потребители се опитват да

осъществят достъп до една база данни и ако някой от тях вече заключи достъпа до нея, тогава другите потребители ще получат съобщение за грешка.

Page 49: PHP Lessons

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Mytestbd")or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

?>

Създаване на таблица в база данниПри базата данни, за разлика от текстовия файл, трябва да създадете първо таблица, в която да

вмъквате запис. Не може да се записва в базата данни, ако няма нито една таблица. Чрез следния код ще създадете таблица Maildata ( Адресанти ). После ще вмъкнете запис в нея.

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

$sqlquery = "create table if not exist Maildata ( Name varchar (50) Not NULL, Email varchar (50) Not NULL Primary key, Secondaryemail varchar (50) Not NULL ");

$queryresult = mysql_query($sqlquery)or die ("Заявката не може да се изпълни");

echo "Таблицата Maildata в базата данни Mailinglist е създадена успешно.";

?>

След свързването с MySQL, се осъществява достъп до базата данни Mailinlist, в горния код се създава таблица с име Maildata чрез функцията create table(). Таблицата има три полета: Name, Email, Secondaryemail. Типът на всички полета е varchar и ви позволява да съхраните до 50 символа във всяко поле. Нито едно от полетата не може да бъде празно, и първичният ключ в таблицата е полето Email. Това означава, че полетата ще съдържат уникални стойности. Поради тази причина двама човека, имащи едни и същи email адреси не могат да се включат в базата едновременно. Индикацията за това дали заявката е била успешна се съхранява в променливата $queryresult.

Вмъкване на запис в таблицаДо сега видяхте как можете да се свържете с MySQL и да осъществите достъп до БД. Видяхте как

можете да създадете БД и таблица в нея. Информацията, която ще се съхранява в БД, ще се въвежда чрез HTML страница.

Сега само на бързо ще ви покажа, как да направите HTML страницата.

<html><body>

<form name="Пощенски списък" method="post" action="addrow.php"> ?????

Page 50: PHP Lessons

Име<input type="text" name="name" size=25">

Email<input type="text" name="email" size=25">

Secondaryemail<input type="text" name="secondaryemail" size=25">

<input stype="submit" name="Submit" value="Изпрати">

</form>

</body></html>

В горния код се създава Web страница, която приема името, Email-а и алтернативния Email на потребител. След като потребителя въведе необходимата информация, той трябва да натисне бутона "Изпрати". След като е натиснал бутона, цялата информация се изпраща към сървара MySQL. Както можете да видите, цялата информация от горния скрипт се изпраща чрез метода POST.

Сега информацията се изпраща към сървара MySQL, за да я вмъкнете в таблицата Maildata под формата на запис. За да вмъкнете информацията трябва да:

Използвате функцията mysql_connect(), за да осъществите връзка с MySQL. Използвате функцията mysql_select(), за да изберете БД Mailinglist. Използвате функцията mysql_query(), за да пратите информацията към MySQL. Информацията се

предава под формата на заявка insert, която се съхранява в променлива под формата на низ. Тази променлива се предава като параметър на функцията mysql_query(). Сега ще създадем същинския скрипт на PHP, който ще изпълнява задачата по вмъкване на информацията в таблицата. Запишете следния скрипт под името addrow.php

<html><body>

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

$sqlquery = "INSERT into Maildata VALUES ('$name', '$Email', $Secondaryemail')";

$queryresult = mysql_query ($sqlquery)or die ("Не може да се изпълни заявката");

echo "Информацията за потребителя е записана успешно";

?>

</body></html>

В горния код се осъществява връзка с MySQL. А след това се осъществява достъп до БД. Тя съдържа таблица с име Maildata. Ще вмъкнем запис в таблицата.След това създаваме заявка и тя се съхранява в променливата $sqlquery. Низът съдържа името, Email и алтернативния Email на потребителя. В заявката insert, може да видите, че всяко парче от информацията се свързва, с определено поле в таблицата. Ако заявката се изпълни успешно, информацията се вмъква в таблицата.

Page 51: PHP Lessons

Извличане на информация от таблицаСлед като сте установили връзка с базата данни и сте записали информация в нея, можете да извлечете

тази информация от базата. За да получите информацията от базата, трябва да създадете заявка на езика SQL ( Structured Query Language ). Тези заявки извличат информация от базата и я връщат като записи.

PHP предоставя функцията mysql_query() за извличане на данни от сървара MySQL. Функцията приема като параметър заявка и я предава на сървъра MySQL. Сървърът след това обработва заявката и връща изисканата информация. Синтаксисът на функцията mysql_query() е : $queryres = mysql_query($query_string);

В горния синтаксис функцията mysql_query() приема като параметър заявката $query_string и съхранява резултата в променливата $queryres. Променливата $query_string трябва да съдържа заявка на езика SQL. Променливата $queryres съдържа стойност Flase само в следните три случея:

Потребителя няма право на достъп до търсената информация Грешка в синтаксиса на заявката Търсената информация не може да бъде намерена За да извлечете информация от таблица на MySQL, трябва да направите следното: 1. Трябва да се свържете с MySQL чрез функцията mysql_connect(). 2. След това трябва да изберете базата, в която се намира информацията, чрез функцията

mysql_select_db(). 3. След това трябва да създадете заявка за извличане на нужната информация от таблицата. Низът се

предава като параметър на функцията mysql_query(), която от своя страна я препраща към MySQL.4. Накрая заявката се изпълнява от MySQL и се връща стойност, която се съхранява в променлива.

Ако стойността е True, значи заявката е била изпълнена успешно. Ако заявката не е изпълнена, трябва да се покаже съобщение за грешка.

Следващият код съдържа заявка която извлича всички записи от таблицата Maildata (Ако се чудите защо от тази таблица, върнете се на предишния урок и вижте защо! ).

<html><body>

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from MAildata";

$queryresult = mysql_query($sqlquery)or die ("Заявката не се изпълни");

echo "Всички записи от таблицата са извлечени успешно";

?>

</body></html>

Кодът се свързва с MySQL, чрез функцията mysq_connect() и избира базата Mailiglist чрез функцията mysql_select_db(). След като връзката е осъществена се задава SQL заявка и се съхранява в променливата $sqlquery. Този низ се предава на сървъра чрез функцията mysql_query(). Ако заявката е извършена успешно, променливата $queryresult има стойност True.

PHP предоставя няколко функции за извличане на информацията при успешна заявка. Тези функции обработват всеки ред от информацията. Поради тази причина трябва да извикате функцията толкова пъти, колкото реда има в резултата. Например, ако заявката върне 20 реда от данни, ще трябва да извикате функцията 20 пъти. Можете да използвате функцията mysql_affected_rows(), за да разберете колко реда са върнати и да съхраните това число в променлива. След това можете да използвате променливата, за да следите броя на обработените редове спрямо броя на върнатите редове. Можете да използвате цикъла while,

Page 52: PHP Lessons

който да се изпълнява, докато всеки запис се обработи и покаже в Web страницата. Следващите две функции се използват за извличане на информацията от резултата.

Функцията mysql_fetch_row(). Тази функция връща резултата като номериран масив. Когато използвате номериран масив, информацията се извлича от резултата под формата на индексиран масив. Масивът съхранява първото поле от резултата на пъров място, второто поле на второ място и т.н

Функцията mysql_fetch_array(). Тази функция съдържа резултата като асоцииран масив. В този случай полетата се индексират на базата на имената си. Ако възникне грешка или не е извлечена стойност, функцията връща стойност NULL.

Сега да разгледаме тези две функции по отделно :

Функцията mysql_fetch_row()Функцията mysql_fetch_row() обработва резултата запис по запис. Информацията се съхранява в

номериран масив и всяко поле в записа се съхранява като елемент на масив. Синтаксисът на функцията mysql_fetch_row() е следния: $resrow = mysql_fetch_row( $result );

Както обясних по-рано, променливата $resrow показва и дали функцията е изпълнена успешно, Променливата $resrow съдържа стойностите в реда, в който е била получена информацията. Така стойността на първото поле е достъпна като първи елемент на масива. Броя на елементите в масива е равен на броя на колоните в резултатите. Когато използвате функцията mysql_fetch_row() за да извличате резултати трябва да направите следното:

1. Да се свържете с базата данни. 2. Да изберете базата данни Mailinglist. 3. Да създадете SQL заявка за извличане на информацията от базата. 4. Когато заявката се изпълни, всички записи от таблицата Maildata са извлечени. 5. Да създадете променлива ( примерно $br_row ) и да съхраните броя на записите, върнати от

функцията mysql_affected_rows()6. Да използвате цикъла while, който да се изпълнява, докато свърши редовете в резултата. 7. Променливата $resrow е едномерен масив, в който ще се намират редовете от таблицата Maildata. 8. В тялото на цилъла while да извлечете ред по ред информацията от таблицата Maildata и да

визуализирате информацията в Web страницата.

Функцията mysql_fetch_array()Когато използвате функцията mysql_fetch_array() записите се извличат под формата на асоциативен

масив. В случая на асоциативен масив, всеки елемент на масива съдържа поле от ред в резултата. Всеки елемент има име на съответстващото поле в резултата. Синтаксисът на функцията mysql_fetch_array() е : $resrow = mysql_fetch_array($result);

В горния синтаксис: Променливата $result позната под името идентификатор на резултата, съдържа резултата, върнат от

функцията mysql_query(). Променливата $resrow е асоциативен масив, съдържащ ред от резултата, върнат от функцията

mysql_fetch_array(). Първият елемент на масива $resrow съдържа стойност на първото поле на резултата.. Етикетът на

елемента съвпада с името на първото поле в таблицата. Другите елементи на масива са съответни на другите полета в таблицата.

Предимството на използването на функцията mysql_fetch_array() пред функцията mysql_fetch_row() e, че не ви се налага да помните реда в полетата на таблицата.

Когато се използва функцията mysql_fetch_array() за извличане на информацията, трябва да извършите следното:

1. Да се свържете с базата данни. 2. Да изберете базата данни Mailinglist. 3. Да създадете SQL заявка за извличане на информацията от базата. 4. Заявката се записва в променливата напримерно $MySQLQuery. 5. Променливата $MySQLQuery се подава като параметър на функцията mysql_query(), която

изпълнява заявката и връща резултата в променливата $result. 6. Да създадете променлива ( примерно $br_row ) и да съхраните броя на записите, върнати от

функцията mysql_affected_rows()7. Да използвате цикъла while, който да се изпълнява, докато свърши редовете в резултата. 8. Променливата $resrow е едномерен масив и неговият първи елемент съхранява стойността на

първото поле на таблицата Maildata. Името на полето е присвоено като етикет на елемента.

Page 53: PHP Lessons

9. В тялото на цилъла while да извлечете ред по ред информацията от таблицата Maildata чрез използване на функцията mysql_fetch_array() и да визуализирате информацията в Web страницата.

Обновяване на информацията в таблицаВидяхте как може да вмъквате информация в таблица, по същия начин можете и да я обновявате

информацията, съхранена в таблица. За целта се използват командите update на MySQL. Когато се обновява информация в таблица, е добра идея да се визуализира информацията, преди да се промени. Извършването на обновяването на информация в таблица обикновено се извършва по-следния начин.

Първо трябва да приемете информацията в HTML страница кой запис трябва да се обнови. Тази страница обикновено включва уникално поле, което обикновено е първичен ключ.

Когато потребителя натисне бутона Submit, се изпълнява PHP скрипт. Скриптът осъществява връзка с MySQL и избира база данни След това заявката се предава на MySQL. Заявката се специфира с помоща на клаузата where.

Условието използвано в клаузата where, осигурява, че само един запис ще се върне от заявката. След това върнатата информация се препраща към браузъра След това информацията се визуализира в HTML форма, създадена с PHP скрипт. Контролите в HTML страницата показват стойностите от върнатия резултат. Формата се

визуализира в браузъра. Потребителя прави необходимите промени в информацията и натиска бутона Submit, за да покаже,

че информацията трябва да се обнови. Друг PHP скрипт осъществява нова връзка с базата и обновява информацията в таблицата, която

използва командата update. Заявката се изпълнява чрез функцията mysql_quert(). Върнатата стойност показва дали информацията е била обновена успешно. Следващия код създава HTML, която показва всички записи, намиращи се в таблицата Maildata. Всеки

запис съдържа препратката редактиране. Когато потребителят избере тази препратка, той може да промени информацията в записа. При избиране на препратката информацията в полето Email на съответния запис се предава на следващата HTML страница. Новата HTML страница ще визуализира запис за редактиране. Запишете следващия код.

<html><body>

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from Maildata";

$queryresult = mysql_query($sqlquery)or die ("Заявката не може да се изпълни");

while ($row = mysql_fetch_array($queryresult)){

echo "ИМЕ: ";echo .row["Name"].;echo <br>";

echo "e-mail: ";echo .row["Email"].;echo <br>";

echo "Втори e-mail: ";echo .row["Secondaryemail"].;

Page 54: PHP Lessons

echo <br>";

<a href=\"displayform.php?email=".row["Email"]."\">Редактиране</a>

}

?>

</body></html>

Web страницата създадена чрез горния код, ще показва информацията на записа за редактиране. След като потребителя натиска бутона Редактиране, информацията се изпраща към сървара. Запишете следващия код под името displayform.php

<html><body><form name="Maildata" method="Post" action="update.php"><?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from Maildata WHERE Email='$email'";

$queryresult = mysql_query($sqlquery)or die ("Заявката не може да се изпълни");

If($row = mysql_fetch_array($queryresult)){ echo "ИМЕ: "; echo .row["Name"].; echo <br>";

echo "e-mail: "; echo .row["Email"].; echo <br>";

echo "Втори e-mail: "; echo "<input type=\"text\" name=\"Secondary\" value=\".row["Secondaryemail"]\">"; echo <br>";

<input type=\"hiden\" name=\"email\" value=\".row["Email"]\">

<input type=\"submit\" name=\"Submit\" value=\"Изпрати\">}

?>

</body></html>

След това обновената информация се извлича от базата данни и се показва в нова HTML страница. Запишете следващия код под името update.php

Page 55: PHP Lessons

<html><body>

<?php

$connection = mysql_connect ("localhost", "root", "")or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "Update Maildata SET Secondaryemail='$secondaryemail' Where Email='$email'";

echo $sqlquery;

result="mysql_quert($sqlquery)or die ("Не може да се изпълни заявката");

echo "Записът е обновен успешно";?>

</body></html>

Изпращане и получаване на електронна пощаИзпращане на електрона поща

Командата mail()За да изпратите просто текстово съобщение в електроната поща, трябва да използвате вградената

команда mail(). За доставката на съобщенията, тази команда разчита на локалната система за електрона поща. Синтаксисът на функцията е: boll mail(string to, string subject, string message[,string additional_headers]);

Функцията връща стойност True, ако съобщението е изпратено правилно до локалната система за електронна поща. Това обаче, не означава, че самото съобщение е доставено до получателя. Четвъртия параметър не е засължителен:

Ето и обяснение на параметрите: -------------------------------------------------------------|Параметър | Значение | Пример ||------------------------------------------------------------||To Адрес на получателя, [email protected] или || ако е повече от един [email protected], || трябва да се отделят [email protected] || със запетая || ||Subject Тема на съобщението "user registration" || ||Message Тяло на съобщението "Hi, \n this is my || message ! " || ||additional_ Този низ се добавя "From: ||headers (не- в края на заглавието [email protected] ||задължите- на съобщението. Ако \r\n Realy-to: ||лен) заглавието заема ня [email protected] || колко реда, може да || ги разделите с "\r || \n" |

Page 56: PHP Lessons

| |-------------------------------------------------------------Следващият пример изпраща e-mail до един единствен получател:

<?php

mail ("[email protected]", "Това е темата", "Тялото на съобщението");

?>

Третия параметър съдържа тялото на съобщението. Ако искате да вградите е-маил текст в PHP код, текстът може да се запише на няколко реда:

<?php

mail ("[email protected]", "Това е темата", "Hello, welcome to our server. To access our site, you need the following data:

username: $username password: $password

If you should have problems with our service, plese contact");

?>

Ако искате да изпратите дадено съобщение до няколко получателя, трябва да разделите адресите им със запетайки.

<?php

mail ("[email protected], [email protected], [email protected]", "Темата темата", "Тялото на съобщението");

?>

Със функцията implode(), можете да създадете масив със списък на получателите.

<?php

$recipients = array("[email protected]", "[email protected]");$recipient_list = implode(",",$recipients);

?>

Получаване на електрона пощаПортоколът IMAP (Internet Message Access Protocol) вече навлезе в комерсиалния пазар, след като

беше използван години напред като програмно средство, поддържано от самите потребители. IMAP прави няколко основни подобрения на POP, като основното е надеждната доставка на електроната поща, независимо от връзката и условията за таймаут. За разлика от единствената мисия на POP -да изпрати всички съобщения на изпращащия заявките клиент с удостоверена самоличност - IMAP предава управлението на електроната поща, включително съхранението и извличането на сървъра.

Стандара за IMAP портокола се поддържа добре от PHP и при комбинирането им използване, се получават доста подходящи, надежни и лесни за използване програмни среди за създаване на средства за работа с електрона поща. Като комбинирате PHP и IMAP функциите, можете да получите за кратко време мощни и разнообразни резултати. Някои от тях са разгледани по-долу:

Page 57: PHP Lessons

imap_openPHP функцията imap_open() отваря IMAP поток към пощенската кутия.

int imap_open(string пощенска_кутия, string потребител, string парола, int флагове); В горния код връща при успех IMAP поток или False при грешка. Ако искате да се свържете към

IMAP сървър на порт 143 на локалната машина, разгледайте следващия код.

$mbox = imap_open("{localhost:143)INBOX","user_id","password");

За да се свържете към POP3 сървър на 110 порт на локалната машина, използвайте:

$mbox = imap_open("{localhost/pop3:110)INBOX","user_id","password");

За да се свържете с отдалечен сървър, просто заменяте localhost с името или IP адреса на сървъра. В резултат на imap_open се получава IMAP поток от данни, който може да бъде използван от други IMAP PHP функции.

Кодиране и хеширане на данни Може би се чудите, как възниква въпросът за кодирането на данните при разглеждането на метода

за осигуряване на автентичност чрез парола и високата степен на сигурност, която базите данни предлагат при съхраняването на пароли. Базите данни са сигурни, но не може да се разчита само на едно ниво на сигурност. За да разберете това, разгледайте следния пример:

Да предположим, че хакер е успял да влезе в базата ви данни за няколко часа. Този хакер, може да свали целият списък и да използва тази информация по-късно. Можете ли да поискате всеки потребител на сайта да променя паролата си, или да блокирате всички потребители?

Нито една от тези възможностии не е добра. Тези действия, ще доведат до негативни отзиви за вашият сайт и потребителите няма да са сигурни за вашата услуга.Така че, освен сигурността, предлагана от базите данни, трябва да се предприеме стъпка за кодиране на всяка парола. Но как кодирането или хеширането може да подобри сигурността?

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

Кодиране на данниКодирането ( или криптирането ) е наука за защита на данните от неоторизиран достъп. Кодирането е

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

Даните се кодират на базата на два компонента - ключ и кодиращ алгоритъм. Ключът трябва да е число или ключова фраза, която да се използва за кодирането на информацията. Следващият компонент е алгоритъма за кодиране, който е познат под името кодиращ алгоритъм. Кодиращият алгоритъм е логическа поредица от стъпки, която се използва за конвентиране на оригиналния текст до неразгадаем формат.

Следващият логически въпрос е как се кодират данните ? Процесът на кодиране може да се раздели на следните стъпки:

1. Текст, например пароли, които трябва да се кодират. 2. Ключът и алгоритъмът се използват за конвентиране на този текст в случайни битове. В

терминологията на кодирането, текстът, който трябва да се кодира, се нарича чист текст. Полученият текс, който сте получили след кодирането се нарича шифриран текст.

3. В зависимост от нуждите, шифрираният текст след това може да бъде или съхранен (в базата данни), или предаден на получателя.

4. Когато шифрираният текст, трябва да се конвентира обратно до чистия текст, трябва да се използват същите алгоритми и същия ключ, които са били използвани за кодиране на информацията, за да може тя да се декодира.

На базата на броя използвани ключове, техниките на кодиране могат да се разделят на две: Кодиране с единичен ключ. Кодиране с публичен ключ.

Page 58: PHP Lessons

Кодиране с единичен ключПри тази техника се използва един и същи ключ за кодиране и декодиране на данните. Като резултат от

това, човек който има достъп до кодираните данни, но не и до ключа, не може да дешифрира съобщението.Въпреки че е проста, при тази техника има няколко проблема. Ако тайния ключ стане известен на хакер,

всички кодирани данни с този ключ са изложени на риск. Също така, ако има голям поток от секретни комуникации, се изисква голям брой ключове.

Освен от ключа, успехът на кодирането с единичен ключ зависи и от кодиращия алгоритъм. Някой от по-извесните алгоритми са:

DES Това е алгоритъм с 56-битов ключ, който разделя данните на блокове с фиксиран размер. Всеки един от тези блокове се кодира независимо от другите. Но кодирането на даден блок, влияе на кодирането на следващия блок.

3DES Това е подобрена и по-сигурна версия на DES, където всеки блок се кодира три пъти, като се използват поне два различни ключа.

IDEA Това е симетричен блоков механизъм за шифриране, който използва 128 битов ключ за кодиране на данните в блокове по 64-бита. Тъй като дължината на ключа в алгоритъма е доста голяма, дори пълното изброяване на ключовете, може да не доведе до резултат. Освен това IDEA премахва статистическата зависимост между шифрираният текс и чистият текст. Тези факти правят алгоритъма IDEA един от най-сигурните алгоритми.

RC4 Това е блоков механизъм за шифриране, при който дължината на ключа може да бъде до 2048 бита. Това е бърз, ефективен и сигурен алгоритъм.

CAST-128 Това е блоков механизъм за шифриране, при който се използва ключ с променлива дължина и който генерира 64-битови блокове. Дължината на ключа може да варира от 40 до 128 бита.

АЕС Този алгоритъм успешно измести алгоритъма DES и различните му версии. Това е блоков механизъм за шифриране, при който ключът може да е с променлива дължина- 128, 192 и 256 бита. Освен това е много бърз алгоритъм.

Кодирането с единичен ключ е обект на различни атаки, които все още успяват д разкрият оригиналните данни. Тези атаки са:

Атаки с груба сила (Broute Force). При този тип атаки е наличен шифрираният текст. След това се генерират случайни ключове и се прилагат към шифрираният текст, дакато се открие валиден ключ. Този ключ се използва за декодиране на данните. Успехът на тази атака зависи от дължината на ключа.Колкото по-дълъг е ключа, толкова по-трудно може да се декодира текстът.

Атаки с деференциален анализ на кода. При този тип атаки, вероятния ключ се генерира, като се сравняват двоики от шифрираният текст, за които разликите в чистите текстове са извесни. Атаки с линеен анализ на кода. При този вид атаки върху битовете от шифрираният текст се прилага операция XOR, която е за битове от чистият текст. След това върху резултат от тези две операции отново се прилага операцията XOR и се получава бит, който е резултат от прилагането на операцията XOR върху някой битове от ключа.

Кодиране с публичен ключТова е техника за кодиране, която използва два ключа вместо един. Един от тези ключове се нарича

публичен. Другият ключ е секретният ключ, който не е разпространен и е лична собственост на едната страна. Този ключ е познат под името частен ( личен ) ключ. Данните се кодират с помоща на публичен ключ. От друга страна, данните се декодират с частен ключ.

Кодирането с публичен ключ се реализира с помоща на RSA алгоритъма, който носи името си от първите букви на създателите си - Rivest, Shamir и Adelman. Този алгоритъм изисква единичният ключ на комуникацията да знае публичния ключ на другия член. Личният ключ е известен само на потребителя си, но не и за другия участник в комуникацията. В резултат на това, за глобална комуникация са нужни 2n ключа. където n е номерът на потребителя.

Процедурата за кодиране на публичен ключ е следната: Текст, например пароли, трябва да бъде кодиран. Изпращача получава публичния ключ на получателя от проверена публично достъпна независима

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

личният си ключ. Кодирането с публичен ключ предлага подобрена сигурност. Това е така, защото ключовете не трябва да

се предават между подателя и получателя. Всички комуникации използват публичния ключ, а личният ключ остава скрит за любопитните, тъй като не се предава по никакъв начин.

Page 59: PHP Lessons

Въпреки силния механизъм за кодиране, кодирането с публичен ключ е обект на циклични атаки, при които шифрираният текс се декодира многократно, докато се достигне оригиналният текст. Това обаче е изключително бавна и несигурна атака, тъй като изисква голям брой цикли. Освен това тя пропада, ако дължината на ключа е голям.

PHP поддържа различни механизми за кодиране, като използва популярната библиотека Mycryp. Освен това MySQL също предлага функции, като encode() и decode(), за целите на кодирането.

Кодиране в PHPОт предишните уроци се научихте да работите с MySQL, в тази секция ще ви покажа, как можете да

използвате кодиращите функции, предоставени от MySQL. Един от най-лесните методи за кодиране в PHP е използването на функциите encode() и decode(),

предоставени от MySQL. Тези функции се използват съответно за кодиране и декодиране на текстови данни, като например пароли.

Синтаксисът на функцията encode() e : string encode ( string низ, string парола )

Функцията encode() приема два параметъра. Първият е низът, който трябва да се кодира, а вторият параметърът на паролата.

Синтаксисът на функцията decode() e : string decode ( string низ, string парола )

Функцията decode() също приема два параметъра. Първият аргумент е низът, който трябва да се декодира, като за парола се използва вторият аргумент. Първият низ, трябва да е низ, върнат от функцията encode().

Разгледайте следния код:

// Използване на функцията encode на MySQl за кодиране на пароли$mingle = "encode('$password', '$password')";$sqlquery = "INSERT INTO login VALUES ('$id', '$mingle' )";

В горния код се използва функцията encode за кодиране на въведената парола. След това кодиранаа парола се съхранява в базата данни, която която съдържа ID и паролите на потребителите.

ХеширанеВъпреки, че кодирането подсигурява данните ви в значителна степен, хеширането подсигурява

максимална сигурност за данните ви, особено в случаите на пароли. При хеширането се генерира хеш стойност за данните, които трябва да се подсигурят. За целта се използва хеш функция. Данните след това се кодират и хеш стойността се съхранява ( или изпраща на получателя ) заедно с кодираните данни. Когато данните трябва да се декодират, освен тях, трябва да се декодира и хеш стойността. Освен това се генерира друга хеш стойност и двете стойности трябва да съвпадат. Ако съвпадат, е сигурно, че данните не са променени.

Разгледайте израза „ A mod B = C“. В този случай стойността С се получава, като се раздели A на B. Ако просто имате стойността C, не можете да направите предложение за оригиналните стойности A и B, защото има безброй много комбинации от числа, които ще дадат същия резултат!

Да разгледаме друг пример. Да предположим, че трябва да хеширате низа „SECRET“. Решавате, че ще използвате съответните ASCII стойности на символите в низа. S = 83 E = 69C = 67R = 82E = 69T = 84-------454

След събирането се получава числото 454, което е хеш стойността. Ако ви се даде числото 454, не може да се разгадае оригиналния текст от това число, дори и да знаете, че това число се е получило от събирането на ASCII стойностите. Много други низове ще доведат до същата стойност. Например TECRES, CESTER, или всяка друга пермутация на буквите ще даде хеш стойност 454. Виждате, че дори и да промените позицията на буквите, хеш кода ще е същия. За да избегнете това, можете да умножите ASCII стойността на всеки символ с позицията му в низа. В този случай, позициите на всеки символ са:

Позиция : 123456

Page 60: PHP Lessons

Текст : SECRETСега да умножим позицията на всеки символ в низа с неговата ASCII стойност:

( 83 * 1 ) + ( 69 * 2 ) + ( 67 * 3 ) + ( 82 * 4 ) + ( 69 * 5 ) + ( 84 * 6 )Сега нека да съберем стойностите, за да получим новата хеш стойност. Ще получите следния

резултат:83138201328345504-----1599

Сега новата хеш стойност е 1599 и е трудно да се разбере, как е била генерирана!Нека да видим как хеширането е полезно при съхраняване на пароли. Да предположим, че генерирате хеш стойност за всяка парола и я съхранявате в базата данни. Дори и ако хакерът успее да получи достъп до базата данни и свали всички хеширани пароли, няма начин да открие оригиналната стойност от хеш стойността!

Но как можете да извличате оригиналната парола от хеш стойността при нужда, или пък, как ще се идентифицират потребителите на базата на хешираните пароли в базата данни? Отговорът е, че ще сравнявате хеш стойностите. Хеширането работи по различен начин от кодирането, при което паролите, съхранени в базата данни, трябва да се декодират явно и да се сравняват с въведената от потребителя парола. При хеширането, първо се прочита хеш стойността и се сравнява хеш стойността, генерирана от паролата на потребителя. След това, ако двете пароли съвпадат, това означава, че потребителя е въвел правилна парола.

За нашия пример за дума SECRET получихме стойността 1599, която може да се получи за много други думи. Много трудно може да се намери алгоритъм, който да генерира уникални стойности – или поне стойности, които много рядко да съвпадат и да не може да се декодират. Един такъв алгоритъм е MD5.

Използване на MD5 хеширане в PHPРазработен от RSA Data Security, Inc., Message Digest 5 ( MD5 ) е хеширащ алгоритъм, който

генерира 128 битова уникална стойност. MD5 също така осигурява, че много трудно може да се генерира еднаква хеш стойност за различни данни. Когато използвате MD5, паролите се съхраняват като хеш стойност.Във вашите PHP скриптове може да използвате МД5 хеширане чрез функцията md5(). Синтаксиса на функцията е следния :string md5( string низ )

Както можете да видите, функцията приема един аргумент – низ – чиято MD5 хеш стойност искате да намерите.

Тъй като кодирането и хеширането предлагат сигурност на различни нива, честа практика сред Web разработчиците е да реализират както кодиране, така и хеширане, за да постигнат по-висока степен на сигурност.

Създаване на изображения в PHP Графичните форми са неделима част от всеки Web сайт. Графиките могат да се използват

подходящо, за да илюстрират текста. PHP предоставя много функции, които може да използвате, за да създадете и да използвате графики в Web страницата си. Използването им предлага огромно количество възможности. Можете да използвате прости изображения, а може и да използвате и динамични изображения които да се променят, когато потребителя постави курсора на мишката си върху тях, или пък да използвате анимации, за да подобрите изгледа на Web страницата си. Въпреки, че всичко това е възможно чрез HTML, можете да постигнете този ефект и още много други с помощта на PHP.

Ето и няколко идеи за използването на динамични изображения в Web: Илюстриране на информацията на чужди езици и някои формуляри, които не може да се изобразят

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

потребител в изображения, така че да не могат да бъдат прихванати по време на предаване. Динамично създаване на заглавия за информация, извлечена от централна база данни. Динамично създаване на графики и отчети на базата на заявка от потребителя.

Page 61: PHP Lessons

Динамично показване на реклами и препратки към информация и персонализирането на тази препратка на базата на потребителските извиквания.

PHP предоставя много начини, по които можете да реализирате горната функционалност. Процесът е прост. Ще използвате един и същи етикет IMG с този, който се използва в HTML за създаване на изображения. В този случай, вместо да използвате статично изображение, ще предоставите връзка към PHP функция. Изображението, ще се създава по време на изпълнението на скрипта. Формата на изображенията, които можете да променяте, зависи от версията на библиотеката GD, която е инсталирана на сървъра. Освен библиотеката GD, трябва да инсталирате още няколко библиотеки, за да можете да създавате изображения в PHP. Нека да видим как се инсталира библиотека GD и всичките други необходими библиотеки.

Инсталиране на необходимите графични библиотекиБиблиотеката GD е най-важния компонент, който трябва да се инсталира преди да можете да

създадете изображения в PHP. Ако вече сте инсталирали тази библиотека на компютъра си, можете да мините към следващата секция.

Можете да проверите, дали тя е инсталирана, като отворите файла phpinfo.php и проверете дали съществува частта gd. Ако тази секция съществува в Web страницата, тогава може да сте сигурни, че библиотеката е инсталирана на системата. В противен случай, трябва да я свалите от Web сайта на PHP. На сайта ще намерите подробни инструкции за инсталацията й.

Процедурата за инсталиране на библиотека GD е проста. Трябва да изпълните следните команди, след като сте свалили файла от Интернет. ./configuremakemake install

Библиотеката GD, предоставя множество функции, който можете да използвате в PHP, за да генерирате графични обекти, да променяте цветовете и да създавате обекти, запълнени с цветове. Библиотеката zlib и PNG, също могат да се свалят от Web сайта на PHP, а библиотеката FreeType е достъпна на адрес http://freetype.sourceforge.net

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

Създаване на заглавна информация.По подразбиране всеки код, написан на PHP, ще съдържа заглавен файл, който ще предоставя

информация за изображението, което ще се създава с помощта на кода. Заглавния файл съдържа заглавието Content-type, което съхранява тази информация. Можете да изпратите информацията за изображението във HTML стараница, като зададете това в заглавието. Следния код задава, че резултата трябва да се покаже във Web стараница. header ( „Content-type: text/html“);

Можете да използвате функцията header(), за да укажете, че резултататния файл трябва да бъде JPG, GIF или PNG в зависимост от желанието ви. Така можете да използвате различни заглавни части, за да зададете разлизните типове изображения, които ще създавате с програмата си. Следващия код показва как можете да зададете тези инструкции във кода си.header („Content-type: text/html“ );header („Content-type: text/html“ ); ?????????????

Стъпки при създаването на изображенияПреди да започнете процеса на създаване на изображения, трябва да се запознаете със стъпките за

създаване на изображения в PHP и показването му в браузъра. Създаването на изображения включва първо създаването на изображението в паметта на компютъра, преди да се покаже в браузъра.

Ето стъпките, които трябва да направите за да създадете изображение.1. Първо трябва да създадете платно ( canvas ) за изображението, в което ще създадете истинското

изображение. Платното на изображението е област в паметта на компютъра, където изображението ще се изчертае, преди да се покаже в браузъра или да се запише във файл.

2. Следващата стъпка е да създадете самото изображение в платното. Можете да създадете изображението, като използвате различните функции, предоставени от PHP. Ще се запознаете накратко с тези функции.

3. След конструирането на изображението, трябва да изпратите изображението към браузъра, за да се покаже на потребителя.

4. Последното действие е да освободите ресурсите. Не е необходимо изображението да се съхранява в платното, след изпращането му към браузъра. Поради тази причина трябва да освободите паметта, като изтриете платното.

Page 62: PHP Lessons

Деклариране на координатите за изображениеМоже би си спомняте как са ви учили да чертаете. Първо се учи, че всяка картинка се състои от

обекти. Всеки обект съдържа определен брой линии. Линията се създава между две точки или координати. Това е основата на чертането и същата теория се използва при създаването на изображението. Координатите са комбинация от две стойности x и y. Стойността x задава хоризонталната позиция, а стойността y задава вертикалната позиция. При чертане в PHP, тези координати започват от горния ляв ъгъл на платното.След като сте създали платното на изображението и сте решили, какви цветове ще използвате в него, следващата стъпка е да започнете с функциите, с които да създадете подходяща среда, за създаване на желаното от вас изображение.

Използване на основните функции за създаване на изображениеКакто споменах по-рано PHP предоставя множество функции за създаване на изображения.

Повечето от тези функции изискват като параметър платно, в което ще се създава изображението. Нека първо ви запозная с основните функции за създаване на изображение.

Създаване на платно на изображениеКакто споменах по-рано първата стъпка е да създадете празно платно, в което да се създаде

изображението. Можете да създадете платно, като използвате функцията ImageCreate(). Тази функция приема два параметъра височина и ширина на изображението. Функцията връща стойност, известна под името идентификатор на изображение, което може да се използва в остатъка от кода, за да се адресира областта в паметта, заделено за изображението. Ето един пример за използването на функциията.$imgcord = ImageCreate( 250, 500 ) ;

Горния код ще създаде в паметта платно, което ще е широко 250 пиксела и високо 500 пиксела. Идентификатора на изображение, върнат от функцията, се запазва в променлива $imgcord. Можете или да покажете изображението, или да го съхраните във файл. Нека видим как можете да го запишете във файл.

Записване на изображение във файлЕдинствената информация, която ви е необходима за записване на изображението във файл, е

идентификаторът на изображението. Това е така, защото идентификатора съдържа местоположението на платното в паметта. Можете да използвате една от функциите ImageJPEG(), ImageGIF или ImagePNG(), в зависимост от това във какъв формат искате да съхраните изображението. Можете да зададете още два параметъра на тези функции. Първият от тях е името на файла, а вторият е нивото на качеството на изображението. Тази стойност може да бъде от -1 до 100. Стойността 0 ще доведе до запазване на изображението с възможно най-ниска стойност.

От друга страна файла, създаден със стойност 100, ще има страхотно качество, но няма да е подходящо за използване в Web поради големите си размери. Поради тази причина определянето на качеството на едно изображение е балансиране между размера на файла и качеството на изображението.

Функцията ImageGIF()Тази функция, може да покаже изображение във браузъра, или да го запише в gif файл. Функцията

има следния синтаксис:$intvar = ImageGIF( int изображение [, string име на файл ] )

В горния синтаксис параметърът изображение е върната стойност от функцията /идентификатора на изображение/. Функцията записва изображението, като използва името, предадено, чрез незадължителния параметър име на файл . Ако този параметър не е зададен, GIF изображението, се изобразява направо в браузъра.

Форматът по подразбиране на изображението е GIF87a, освен, ако сте направили изображението прозрачно чрез функцията ImageColorTransparent(), в който случай, изображението ще се запише във формата GIF89a.

Функцията ImagePNG() Тази функция, може да покаже изображение във браузъра, или да го запише в png файл. Функцията

има следния синтаксис:$intvar = ImagePNG( int изображение [, string име на файл ] )

Подобно на функцията ImageGIF(), тази функция създава PNG изображение от идентификатора на изображение, предадено като първи параметър. Функцията записва изображението във файл с име, предадено, чрез незадължителния параметър име на файл. Ако този параметър не е зададен, PNG изображението, се изобразява направо в браузъра.

Page 63: PHP Lessons

Функцията ImageJPG() Тази функция, може да покаже изображение във браузъра, или да го запише в jpg файл. Функцията

има следния синтаксис:$intvar = ImageJPG( int изображение [, string име на файл ] )

В горния синтаксис параметърът изображение е върната стойност от функцията. Функцията записва изображението, като използва името, предадено, чрез незадължителния параметър име на файл . Ако този параметър не е зададен, jpg изображението, се изобразява направо в браузъра. След като сте показали изображението във браузъра, или сте го запаметили във файл, трябва да освободите паметта, използвана за съхраняване на информацията за изображението. За целта трябва да използвате функция ImgeDestroy().

Унищожаване на изображениеСлед като свършите работата си с изображението и сте го запазили във файл, или сте го изобразили

във браузъра, можете да го унищожите. Функцията ImageDestroy() премахва от паметта информацията, свързана с иозбражението. Функцията има следния синтаксис:$intvar = ImageDestroy( int изображение )

Параметърът изображение е идентификатор на изображение, върнат от функцията ImageCreate().

Функцията ImageCopy()Тази функция се изоплзва за копиране на част от изображението. Функцията има следния

синтаксис:$intvar = ImageCopy ( resource изображение цел, resource изображение източник, int цел x, int цел y, int източник х, int източник у, int източник ширина, int източник височина )

Параметърът изображение източник, задава оригиналното изображение, следващите два параметъра източник х и източник у, са координатите, от където трябва да започне копирането на изображението. Изображението се копира в изображението, зададено от параметъра изображение цел на координати цел х, цел у. Можете да зададете ширината и височината на новото изображение, като използвате параметрите източник ширина и източник височина.

Функцията GetImageSize()Можете да използвате тази функция за да определите размера на изображението във файл.

Функцията, също така връща типа на файла, който може да е JPEG, GIF, SWF или PNG. Можете също така да извлечете ширината и височината на изображението, който могат да бъдат използвани по-късно в HTML етикета IMG. Синтаксисът на функцията е:$arrvariable = getimagesize ( string име на файл [, array информация ] )

Функцията връща информацията под формата на масив с четири елемента. Елементите съдържат информация в следната последователност: ширина, височина, тип на изображението и низ. Ширината и височината се изчисляват в пиксели. Типът на изображението е 1 за GIF, 2 – за JPG, 3 – за PNG и 4 – за SWF. Низът съдържа ширина и височина, форматирани подходящо за използване на етикета IMG.

SWF е формата, използван за Flash файлове.

Работа с пикселиПикселът е единица за измерване на разделителната способност на изображението. Той също така е

най-малкото парче от изображението, което може да бъде обработено. Можете да променяте цвета на конкретен пиксел.

Функцията imageSetPixel()Тази функция се използва за задаване на цвета на конкретен пиксел. Функцията приема четири

аргумента. Параметърът изображение е идентификаторът на изображението. Следващите два параметъра, x и у, задават координатите на пиксела, които трябва да бъдат променени. Последния параметър, цвят, е цветът, в който трябва да бъде този пиксел.$intvar = ImageSetPixel ( int изображение, int X, Int Y, int цвят)

Нека да създадем един простичък скрипт и да използваме горната функция, за да променим цвета на един пиксел.

<html><body><?php $img = ImageCreate ( 200, 200 );

Page 64: PHP Lessons

$bgcolor = ImageColorAllocate ( $img, 200, 200, 200 ) ; $pixelcolor = ImagecolorAllocate ( $img, 255, 0, 0); ImagePng ( $img, „ pic.png „ ); ImageDestroy ( $img ) ;?><img src=“pic.png“ border=“0“ ></body></html>

Функцията ImageColorAt()Тази функция се използва за получаване на индекса на цвета на даден пиксел. Синтаксисът на

функцията е следния:$intvar = ImageColorAt ( int изображение, int X, int Y )

Трябва да използвате функцията ImageColorAt(), ако искате да разберете индекса на цвета за пиксела с координати X и Y в изображението с идентификатор изображение.

Преди да започнете да създавате изображение, трябва първо да зададете цвета на изображението.

Задаване на цветове на изображенияМожете да създавате изображения от различни типове цветове в PHP. Но тези цветове не

съществуват по подразбиране в PHP. Това, което имам предвид, е, че тези цветове не са предварително дефинирани, вместо това трябва да създадете цвета, преди да можете да го използвате. За целта трябва да използвате функцията ImageColorAllocate(). В следващите редове, ще видите как може да създадете основните цветове – червен, зелен и син. Тези цветове са основни в цветовия модел RGB и всички други цветове са техни комбинации.// Червено$red = ImageColorAllocate($imgcord, 255, 0, 0);// Зелено$green= ImageColorAllocate($imgcord, 0, 255, 0);// Синьо$blue = ImageColorAllocate($imgcord, 0, 0, 255);// Бяло$blue = ImageColorAllocate($imgcord, 255, 255, 255);// Черно$blue = ImageColorAllocate($imgcord, 0, 0, 0);

RGB моделът е стандарт за създаване на цветове. Цветът се състои от комбинация на трите основни цвята- червено, зелено и синьо. Всеки от тези цветове съдържа стойности в интервала от 0 до 255.

Първият параметър на функцията е идентификатор на изображението. Следващите три параметъра са цветовата комбинация. Ако всички три параметъра имат стойности 255, създавате бял цвят, а ако всички стойности са 0 – черен. Както можете да видите, всеки създаден цвят се съхранява в отделна променлива. Можете да използвате тези променливи, за да създадете изображение с конкретен цвят.

Функцията ImageFill()До сега използвахме най-основните обекти като празни изображения без цвят. Но вие може да

запълвате изображение с даден цвят с помоща на функцията ImageFill(). Тази функция има четери параметъра: идентификатора на изображение, двете координати, от където да започва запълването и цвета. Синтаксисът на функцията е следния:$intvar = ImageFill( int изображение, int X, int Y, int цвят)

Например, ако координатите са 0, 0 запълването ще започне от горния ляв ъгъл на платното. По-долу можете да видите пример, как можете да запълните изображение с даден цвят.

<?php$imgcord = imagecreate ( 255, 255 );$blue = ImageColorAllocate($imgcord, 255, 255, 255);$red = ImageColorAllocate($imgcord, 255, 0, 0);ImageRectangle ( $imgcord, 175, 165, 200, 255, $blue );ImageFill( $imgcord, 0, 0, $red );Imagestring ( $imgcord, 3, 170, 220, „Добре дошли вwww4u.search.bg „, $blue);

Page 65: PHP Lessons

$imagePng ( $imgcord );ImageDestroy ($imgcord);?>

Функцията ImageColorDeAllocate()Можете да използвате тази функция за премахване на цвета на изображение. Синтаксисът на

функцията е следния.$intvar = ImageColorDeAllocate( int изображение, int индекс );

Тази функция се използва, ако искате да унищожите създаден преди това цвят.

Функцията ImageSet()Можете да използвате тази функция, за да зададете цвета на определен индекс в палитрата.

Синтаксисът на тази функция е следния:$boolvar = ImageSet ( int изображение, int индекс, int червено, int синьо );

Функцията ImageColorsForlndex()Можете да използвате тази функция, за да получите цвета, съответстващ на индекс в палитрата.

Синтаксисът на тази функция е следният :$arrvar = ImageColorsForlndex( int изображение, int индекс);

Функцията върща като стойност асоциативен масив с RGB комбинацията на цвета.

Функцията ImageFillToBorder()Функцията ImageFillToBorder() се използва за задаване на цвета на рамката. Синтаксисът на тази

функция е следния:$intvar = ImageFillToBorder(int изображение, int X, int Y, int рамка, int цвят );

Вече видяхте, как можете да създавате платно и да създавате цветове за него. Освен графика, платното може да включва и текст. В следващата секция ще ви покажа как става.

Рисуване на текстPHP не предоставя само функции за създаване на изображение – можете също така да покажете

текст в изображението. Можете да използвате функцията ImageString(), за да покажете текст на зададено място в изображението. Функцията има шест параметъра. Първият параметър е идентификаторът на изображението, след който са номерът на шрифта, координатите на текста, самият текст и накрая цвета, с който да се изчертае текста. Шрифтът, който се използва за изчертаване на текста, може да е един от пете предврително дефинирани шрифта в PHP. Нека да създадем скрипт, който използва функцията ImageString().

<html><body>

<?php$img = ImageCreate ( 300, 300 );$bgcolor = ImageColorAllocate ( $img, 200, 200, 200 );$red = ImageColorAllocate ( $img, 255, 0, 0 );$green = ImageColorAllocate ( $img, 0, 255, 0 );$blue = ImageColorAllocate ( $img, 0, 0, 255 );$grey = ImageColorAllocate ( $img, 50, 50, 50 );$black = ImageColorAllocate ( $img, 0, 0, 0 );

ImageString = ( $img, 0, 20, 20, „ Line 1“, $red );

ImageString = ( $img, 0, 20, 40, „ Line 2“, $green );

ImageString = ( $img, 0, 20, 60, „ Line 3“, $blue );

ImageString = ( $img, 0, 20, 80, „ Line 4“, $grey );

ImageString = ( $img, 0, 20, 100, „ Line 5“, $black );

Page 66: PHP Lessons

ImageString = ( $img, 0, 20, 120, „ Line 6“, $red );

ImageStringUp = ( $img, 0, 50, 200, „ Line 1“, $red );

ImageStringUp = ( $img, 1, 100, 200, „ Line 2“, $green);

ImageStringUp = ( $img, 2, 150, 200, „ Line 3“, $blue);

ImageStringUp = ( $img, 3, 200, 200, „ Line 4“, $grey);

ImageStringUp = ( $img, 4, 250, 200, „ Line 5“, $black);

ImageStringUp = ( $img, 5, 300, 200, „ Line 6“, $red);

ImageSetPixel ( $img, 50, 50, $pixelcolor );ImagePNG ( $img, „pic.png“ );ImageDestroy ( $img );?>

<img src=“pic.png“ border=“0“></body></html>

Нека да видим, как можете да манипулирате символите чрез код.

Функцията ImageChar()Тази функция се използва за хоризонтално изчертаване на символ. Функцията има шест параметъра.

Първият е идентификаторът на изображението, вторият е номерът на шрифта. Следващите два параметъра са координатите, където трябва да се изчертае символът. Следващият параметър е символът, а последният е цветът, в който да се изчертае символът. Синтаксисът на функцията е следният:$intvar = ImageChar ( int изображение, int шрифт, int X, int Y, string символ, int цвят );

Функцията ImageLoadFont()Тази функция се използва за зареждане на нов шрифт. Функцията има един параметър, който е

името на файла, в който се съхранява шрифтът. Синтаксисът на функцията е следният:$intvar = ImageLoadFont ( string име на файл );

Ако искате да заредите дефиниран от вас битмап шрифт, може да използвате функцията ImageLoadFont(). Функцията връща уникален идентификатор, който може да се използва от програмата като номер на шрифт. Този идентификатор, трябва да е по-голям от 5, тъй като номерата от 1 до 5 са резервирани за стандартните шрифтове.

Функцията ImageFontHeight()Можете да използвате тази функция, за да узнаете височината на шрифта. След това можете да я

използвате в програмата си. Височината се измерва в пиксели. Синтаксисът на функцията е следния:$intvar = ImageFontHeight( int шрифт );

Функцията ImageFontWidth()Можете да използвате тази функция за да узнаете ширината на шрифта. След това можете да я

използвате в програмата си. Ширината се измерва в пиксели. Синтаксисът на функцията е следния.$intvar = ImageFontWidth ( int шрифт ) ;

Нека да видим един пример за използването на функциите ImageFontHeight() и ImageFontWidth() в програма, която извлича стойностите им и ги показва на екрана.

<html><body><?php$img = ImageCerate ( 300, 300 );

Page 67: PHP Lessons

$bgcolor = ImageColorAllocate ( $img, 200, 200, 020 );$red = ImageColorAllocate ( $img, 255, 0, 0);$green = ImageColorAllocate ( $img, 0, 255, 0);$blue= ImageColorAllocate ( $img, 0, 0, 255);$grey= ImageColorAllocate ( $img, 50, 50, 50);$black = ImageColorAllocate ( $img, 0, 0, 0);for ( $i = 0; $i < 6; $i ++ ){ImageChar ( $img, 20, 20 + ($i * 20 ), „ S “ , $red);$height[] = ImageFontHeight ( $i );$width[] = ImageFontWidth ( $i );}ImageSetPixel ( $img, 50, 50, $pixelcolor );ImagePNG ( $img, „pic.png“ );ImageDestroy ( $img );for ( $i = 0; $i < 6; $i ++ ){echo „Шрифт „.$i.“ височина =„.$height[$i].“<br>“;}?><img src=“pic.png“ border=“0“></body></html>

Функцията ImageCharUp()Можете да използвате тази функция, ако искате да покажете вертикален текст в платното.

Функцията е сходна с функцията ImageChar(). Първият параметър е идентификаторът на изображение, вторият е номерът на шрифта. Следващите два параметъра са координатите, на които да се изрисува символът, следвани от символа и накрая от цвета на символа. $intvar = ImageCharUp ( int изображение, int шрифт, int X, int Y, string символ, int цвят );

До сега ви показах шест функции за работа с текст. Нека да направим една програма за работа и със шестте.

<html><body><?php$img = ImageCerate ( 300, 300 );$bgcolor = ImageColorAllocate ( $img, 200, 200, 020 );$red = ImageColorAllocate ( $img, 255, 0, 0);$green = ImageColorAllocate ( $img, 0, 255, 0);$blue= ImageColorAllocate ( $img, 0, 0, 255);$grey= ImageColorAllocate ( $img, 50, 50, 50);$black = ImageColorAllocate ( $img, 0, 0, 0);

ImageChar ( $img, 0, 20, 20, „S“, $red );ImageChar ( $img, 1, 20, 40, „S“, $green );ImageChar ( $img, 2, 20, 60, „S“, $rblue );ImageChar ( $img, 3, 20, 80, „S“, $grey);ImageChar ( $img, 4, 20, 100, „S“, $black );ImageChar ( $img, 5, 20, 120, „S“, $red );

ImageCharUp ( $img, 0, 20, 160, „S“, $red );ImageCharUp ( $img, 1, 40, 160, „S“, $green );ImageCharUp ( $img, 2, 60, 160, „S“, $rblue );ImageCharUp ( $img, 3, 80, 160, „S“, $grey);ImageCharUp( $img, 4, 100, 160, „S“, $black );ImageCharUp ( $img, 5, 120, 160, „S“, $red );

ImageSetPixel ( $img, 50, 50, $pixelcolor );

Page 68: PHP Lessons

ImagePNG ($img „pic.png“);ImageDestroy ( $img );?><img src=“pic.png“ border=“0“></body></html>

Рисуване на сложни обектиКакто можете да създавате прости обекти, така можете да създавате и сложни обекти като

окръжности и дъги. Вече споменах по-рано, че дъгата е част от окръжност. За да създадете окръжност или дъга, използвайте функцията ImageArc(). Функцията приема осем параметъра. Първият е идентификаторът на изображението, следващите два са координатите на центъра на окръжността. Следващите два параметъра задават височината и ширината на окръжността. Параметрите начало и край се използват при рисуването на дъга, за да се зададат точките, в които започва и свършва дъгата., те представляват градуси. Точките начало и край се обхождат по посока на часовниковата стрелка. Последният параметър е цветът, с който трябва да се изрисува дъгата. Нека сега да изрисуваме окръжност и да я запазим като PNG файл.

<?php$imgcord = ImageCreate ( 250, 500 );$red = ImageColorAllocate ( $imgcord, 255, 0, 0 );$green = ImageColorAllocate ( $imgcord, 0, 255, 0 );$blue = ImageColorAllocate ( $imgcord, 0, 0, 255 );ImageLine ( $imgcord, 5, 5, 125, 50, $red );ImageArc ( $imgcord, 100, 25, 120, 125, 0, 180, $green );ImagePNG ( $imagecord );ImageDestroy ( $imgcord );?>

В горния код първо се създава платно с размери 250х500 пиксела. След това се създават трите цвята – червен, зелен и син – и се присвояват на три променливи. След това се изрисува линия, започваща от координати 5, 5 до координати 125,150. Накрая се рисува полуокръжност, свързваща двата края на линията. Центърът на дъгата е с координати 100, 25. Ширината и височината на дъгата са съответно 120 и 125.Можете да създавате сложни обекти само ако използвате GD версия 2.0 или по-голяма.

Функцията ImageFilledArc()Можете да използвате тази функция за да изрисувате сектор от елипса и да го запълните с цвят.

Синтаксисът на функцията е :$intvar = imageFilledArc ( int изображение, int C1, int C2, int ширина, int височина, int начало, int край, int цвят, int стил );

Изображението се центрира в точката C1, C2. Параметърът изображение е идентификаторът на изображението. Параметрите ширина и височина задават ширината и височината на изображението, координатите на началната и крайната точка се задават от параметрите начало и край. Параметърът стил, може да бъде комбинация от следните стойности:

IMG_ARC_PIE IMG_ARC_CHORD IMG_ARC_NOFILL IMG_ARC_EDGEDСтиловете IMG_ARC_PIE и IMG_ARC_CHORD се използват за различни цели. Стилът

IMG_ARC_CHORD се използва, ако искате да свържете началния и крайния ъгъл с права линия, докато IMG_ARC_PIE рисува сектор. Ако просто искате да изчертаете контур на дъга, без да я запълвате, използвайте стила IMG_ARC_NOFILL. Накрая стила IMG_ARC_EDGED се използва със комбинация със стила IMG_ARC_NOFILL, за да се свържат началната и крайната точка на центъра.

Нека сега да разгледаме скрипт, който ще създава дъги и ще ги записва във файл в PNG формат, а файлът ще се показва в браузъра.

<htrml><body>

<?php$img = ImageCreate ( 500, 500 );

Page 69: PHP Lessons

$bgcolor = ImageColorAllcotes ( $img, 200, 200, 200 );$red = ImageColorAllocate ( $imgcord, 255, 0, 0 );

for ( $=0; $i<20; $i++ ){ImageArc ( $img, 50, 50, 20 + ($i*5), 50, 180, 270, $red );}

for ( $=0; $i<20; $i++ ){ImageFilledArc ( $img, 50, 200, 50, 50, $i*2, $i*2+40, $red );ImageFilledArc ( $img, 50, 250, 50, 50, 180, 270, $red, IMG_PIE);ImageFilledArc ( $img, 100, 300, 50, 50, 180, 270, $red, IMG_NOFIL);ImageFilledArc ( $img, 150, 350, 50, 50, $180, 270 , $red, IMG_CHORD);ImageFilledArc ( $img, 200, 400, 50, 50, 180, 270, $red, IMG_EDGED);ImagePNG ( $img, „pic.png“ );ImageDestroy ( $img );}?>

<img src=“pic.png“ borer=“0“ ></body></html>

Освен дъги, можете да рисувате полигони и да ги запълвате с избран цвят.

Функцията ImagePloygon()Тази функция се използва за рисуване на полигони. Тя има следния синтаксис:

$intvar = ImagePolygon ( int изображение, array точки, int брой точки, int цвят );Тази функция е сходна с функцията ImageRectangle(). Горния код създава полигон в

изображението, като масивът точки съдържа върховете на полигиона. Например, елементът точки [0] ще съдържа стойността х0, точки [1] = у0, точки [2] = x1, точки [3] = y1, и т.н. Общия брой върхове на полигона е зададен с параметъра брой точки.

Функцията ImageFilledPolygon()Тази функция се използва за рисуването на запълнен полигон. Тя има следния синтаксис:

$intvar = ImageFillPolygon ( int изображение, array точки, int брой точки, int цвят );

Рисуване на вече съществуващи изображенияМожете също така да създавате нови изображения, като използвате функции за промяна на

съществуващи изображения. Тези функции се използват във случаите, когато изображенията са достъпни във вид на файлове. Можете да създавате копия на изображенията и да ги използвате на друго място. Можете да създадете копия на изображения, съхранени в JPG или PNG формат.

Функцията ImageCreateFromJPЕG()Тази функция се използва за създаване на ново изображение от JPG файл. Функцията има следния

синтаксиси.$intvar = ImageCreateFromJPЕG ( string име на файл ) ;

В горния код функцията ImageCreateFromJPЕG() създава JPEG изображение, от изображението, съхранено във файла име на файл.

Функцията ImageCreateFromPNG()Тази функция се използва за създаване на ново изображение от PNG файл. Функцията има следния

синтаксиси.$intvar = ImageCreateFromPNG ( string име на файл ) ;

Page 70: PHP Lessons

В горния код функцията ImageCreateFromPNG() създава PNG изображение, от изображението, съхранено във файла име на файл. Нека сега да създадем правоъгълници и ги запишем като PNG файл.

<html><body><?php$pic = ImagesCreate ( 600, 600 );$col1 = ImageColorAllocate ( $pic, 200, 200, 200 );$col2 = ImageColorAllocate ( $pic, 0, 0, 255 );ImageFilledRectangle ( $pic, 1, 1, 100, 100, $col2 );ImagePNG ( $pic, „pic.png“);ImageDestroy( $pic );?><img src=“pic.png“ border=“0“ ></body></html>

Други полезни функцииИма още няколко полезни функции, които можете да използвате в PHP за обработване на

приложения. Нека да разгледаме всяка от тях в подробности.

Функцията ImageInterlace()Можете да използвате тази функция за активирате или деактивирате преплитането на

изображенията. Преплитането на изображенията, означава, че изображението ще се смеси с фона. Синтаксисът на функцията е следният:$intvar = ImageInterlace ( int изображение, [, int преплитане] );

Ако искате да включите или изключите преплитането, трябва да използвате параметъра преплитане. Този параметър не е задължителен. Ако стойността на параметъра е 1, тогава изображението ще бъде преплетено с фона.

Функцията ImageColorClosest()Тази функция се използва за получаване на индекса на най-близкия цвят до зададения. Синтаксисът

на функцията е следния:$intvar = ImageColorClosest ( int изображение, int червено, int зелено, int синьо);

Можете да използвате тази функция за да получите индекса на най-близкия цвят до зададения цвят. Таи стойност се получава, когато се вземе предвид дистанцията между цвета и зададената комбинация.

Функцията ImageColorClosestAlpha()Тази функция се използва за получаване на индекса на даден цвят, като се вземе предвид алфа

каналът или неговата най-близка алтернатива.

Функцията ImageColorExact()Тази функция се използва за получаване на точния индекс на зададен цвят.

Функцията ImageColorExactAlpha()Тази функция се използва за получаване на индекса на цвета, като се взема предвид и алфа каналът.

Синтаксисът на функцията е следният:$intvar = ImageColorExactAlpha ( int изображение, int червено, int зелено, int соньо );

Функцията връща стойност -1, ако цвета не съществува.

Функцията ImageColorResolve()Тази функция се използва за намирането на индекса на даден цвят или на най-близката му

алтернатива. Синтаксисът на функцията е следният.$intvar = ImageColorResolve ( int изображение, int червено, int зелено, int синьо );

Ако искате сигурен резултат за индекса на цвета, трябва да използвате функцията$intvar = ImageColorResovle () Тази функция ще върне или индекса на точния цвят, или индекса на най-доброто му преложение.

Page 71: PHP Lessons

Функцията ImageColorResolveAlpha()Тази функция се използва за намирането на индекса на даден цвят или на най-близката му

алтернатива, като се взема предвид алфа каналът. Синтаксисът на функцията е следният.$intvar = ImageColorResolveAlpha ( int изображение, int червено, int зелено, int синьо );

COOKIE Какво е cookie ?

Както вече знаете, Интернет се базира на Hypertext Transfer Protocol ( HTTP ), който е протокол без запазване на състоянието. Това означава, че след транзакцията между клиента и Web машината завърши, Web сървърът изтрива цялата информация за транзакцията.

Нека да ви обясня тези концепции на прост език. Да предположим, че потребител посещава комерсиален сайт, добавя три книги в потребителската си кошница и преди да заплати книгите, преминава в друг сайт. Трябва ли той отново да добавя трите книги в потребителската си кошница? Отговорът е ДА, тъй като споменах по-рано, че HTTP не запазва състоянието и за по-ранни действия. Това означава, че потребителя ще трябва отново да открие книгите, да ги постави в потребителската си кошница и да ги плати, преди да премине към следващия сайт. Обаче отговорът на същия въпрос може и да е НЕ, ако сайтът поддържа cookie. И така, какво представляват cookies ?

Cookies са малки парчета от информация ( или съобщение, ако предпочитате ), които Web сървърът чрез Web браузърът може да съхрани на вашият диска по време на посещението ви на сайта. Web сървърът може да извлече тази информация по време на следващата ви визита на същият сайт. Когато посещавате Web сайт, поддържащ cookies, може да ви се наложи да се регистрирате или идентифицирате в сайта, като използвате парола и друга информация. Тази информация се съхранява в малък текстов файл, чийто големина е 4 KB. Този файл съдържа информация, свързана с потребителя, като потребителско име, парола, списък със страниците, които потребителя е посетил, и датата, на която потребителя е посетил сайта за последен път.

Да кажем че търсите книга в известната онлайн книжарница Amazon. Това е сайт поддържащ cookies. Сега ще ви покажа cookie, което се съхранява на диска ви:

Ubid-main 058-3955710-9452444 amazon.com/ 0 2916341376 31961269 1377043424 29456181 * x-main hQFiTxHUFj8mCscT@Yb5z7xsVsOFQjBf amazon.com/0 291641376 31961269 13771432424 29456181 * session-id 058-3442978-4900108 amazon.com/ 0 1257717760 29466815 2871432720 29465430 * session-id-time 1011427200 amazon.com/

Page 72: PHP Lessons

0 1257717730 26547852 41228853 *

058-3955710-9452444 това е уникален идентификатор, който ви е бил присвоен при първото ви посещение на сайта. Сайта също така съхранява идентификатор на сесия, в случая 058-3442978-4900108, който уникално идентифицира дадена сесия по време на започването й. Както е показано на идентификатор, hQFiTxHUFj8mCscT@Yb5z7xsVsOFQjBf , също се съхранява за вътрешна обработка на сайта. Останалата част от информацията се отнася за вашият браузър.

Както можете да видите от cookie-то, информацията в него се съхранява под формата на име и стойност. Разгледайте следния ред:Ubid-main 058-3955710-9452444 В горния код Ubid-main е името, а 058-3955710-9452444 е съответната стойност.

За какво служат cookies След като имате вече представа какво представляват бисквитките, нека да видим каква роля играят

те и как ви помагат. Нека да продължим примера, който започнахме по-рано и в който предположихме, че сте посетили онлайн книжарница и сте добавили три кники в потребителската си кошница. Списъкът от всички елементи, които сте избрали, се съхранява в cookie, което е било създадено автоматично. Можете да продължите разглеждането на сайта, след като сте добавили книги в кошницата си. Когато сте свършили с разглеждането, ще искате да платите всички елементи които сте избрали. Когато отворите потребителската си кошница, всичко ще бъде там. Правите плащането и транзакцията приключва. Просто, нали ? :)

Повечето от сайтовете, които се създават сега, използват cookies. Тяхното използване е много популярно поради следните причини:

За определяне колко посетители посещават даден Web сайт и колко често. За съхраняване на подробности за потребителите. За помощ на сайтове при съхраняване на предпочитанията на потребителите. За помощ на сайтове при съхраняване на предпочитанията на потребителите. За проследяване на пътя и активността на потребителя в даден Web сайт За съхранение на елементите избрани от клиентите на сайта.

Как работят cookies ?Cookies работят по следния начин:Когато напишете адреса на Web сайта в браузъра си, адреса се търси, и ако се открие успешно, заявката

се изпраща към Web сървъра, съхраняващ този сайт. Ако Web сървъра приеме заявката, Web браузъра проверява за наличието на cookies за този сайт.Ако се открие cookie, браузъра изпраща всички двойки име-стойност към сървъра като HTTP заявка.

Освен това се изпраща срока на валидност на cookie, ако има такова и пътят. Датата показва, датата и часа, до който cookie ще бъде валидно. Пътят помага на Web сървъра да асоциира различните стойности в cookie в различните страници, които са били посетени. След като тази информация се получи от сървъра, тя се използва вътрешно от него.

Ако не се открие cookie, сървъра се уведомява за отсъствието й. В този случай сървъра генерира нов идентификатор за клиента, който инициира връзката и изпраща cookie, съдържаща двойки име-стойност, към Web браузъра на клиента. След това браузъра съхранява cookie на вашата машина.

Област на действие на cookieКакто вече знаете, cookie са двойка име-стойност. Освен името и стойността има още няколко

параметъра, които ви дават по-голям контрол над тях. Например, можете да контролирате периода от време, през които cookie се счита за валидни. Освен това можете да контролирате типа на информацията и параметрите на сигурността, които ще поддържа. С други думи, тези параметри дефинират областа на действие на cookie.

Параметрите определящи областта на действие на cookie са :Дата на валидност: Този параметър дефинира валидността и времетраенето на cookie. Датата се задава

в GMT формат. След като една cookie премине датата си на валидност, тя не може вече да бъде изпращана на клиента.

Page 73: PHP Lessons

Стойността по подразбиране на този параметър е докато браузъра се затвори. Това означава, че cookie е валидна само докато страницата е отворена в прозореца на браузъра. В момента, когато потребителя затвори страницата, cookie става неизползваема.

Път: Този параметър се използва за да се ограничи областта на действие на cookie до определена част от сървъра. С други думи, този параметър задава всички файлове и директории на Web сървъра, за които cookie е валидна.

Стойността по подразбиране на този параметър е /, което означава, че cookie ще е достъпна до всички страници,

Домейн: Този параметър се използва за да се зададе домейна, за който е валидна cookie. Сookies могат да бъдат ограничени до определен хост, като се зададе името на хоста, например www4u.search.bg. Сookies могат да се направят валидни за цял домейн, като се зададе като стойност името на домейна, например .search.bg.

Стойността по подразбиране на параметъра домейн е името на сървъра, който е създал cookie на диска на клиента. Тази стойност се генерира автоматично.

Сигурност: Този параметър подсигурява, че конфиденциалните данни, съхранени в cookie, ще са защитени по време на предаването от Web сървъра към клиентската машина. Чрез активирането на този метод се използва подсигурен канал, например Secure Hypertext Transfer Protocol ( SHTTP ), за обмяна на cookie.

По подразбиране параметъра сигурност има стойност disabled. При това всички данни и cookie се обменят при комуникацията, без значение, дали каналът е подсигурен или не.

Трябва да запомните, че името и стойността на cookie са задължителни при тяхната дефиниция. Останалите параметри, дата на валидност, домейн, сигурност и път – са незадължителни.

Ограничения при използването на cookieТъй като cookie могат да съдържат поверителна информация, като потребителско име и парола, има

определени ограничения при използването им. Тези ограничения са: Максимален размер на cookie е 4 KB. Това е така, защото cookie се съхранява на диска на

потребителя. Ако размерът на cookie е голям е възможно cookie от различните сайтове, които потребителя посещава да запълнят диска му.

Един сървър не може да съхранява повече от 20 cookie на клиентския компютър. Това е отново застраховка, че Web сървъра няма да запълни диска на потребителя.

Браузърът на клиента може да съхранява максимум 300 cookieс. Само Web сървър, който е изпратил cookie, може да чете данните, съхранени в нея. Въпреки, че

всички cookie са съхранени в една и съща папка, един Web сървър не може да прочете cookies, които са създадени на друг Web сървър или домейн.

Реализиране не cookie чрез PHPРеализацията на cookie в PHP е много проста. Това е, защото поддръжката им е напълно вградена в PHP.

Например cookie се разглеждат като глобални променливи и са достъпни навсякъде в скрипта. Също така, те са достъпни и като обикновени променливи. В тази секция ще се запознаете с различни аспекти на използването на cookie. Тези аспекти са:

Създаване на cookie Използване на cookie Използване на cookie с множество стойности Изтриване на cookie

Създаване на cookieЗа да създадете cookie, трябва да използвате следните три функции: setcookie() time() mktime()

Функцията setcookie()Можете да използвате cookie в PHP, като използвате функцията setcookie(). Web сървърът използва

тази функция, за да създаде cookie и да я изпрати към клиентската машина.Ако използвате функцията setcookie() за да създадете cookie, ще трябва да я извикате преди

етикета <html> и <head>. В противен случай ще получите съобщение за грешка. Това е така, защото cookie трябва да бъдат изпратени преди HTTP заглавието по време на връзката. Логиката в това е, че

Page 74: PHP Lessons

cookie се изпращат като част от HTTP заглавието. Така че не могат да бъдат зададени, след като заглавието е вече изпратено.

Функцията има следния синтаксис:setcookie ( string име, string стойност, int валидност, string път, string домейн, int сигурност );

Както виждате от горния синтаксис, функцията setcookie() приема шест параметъра. Те са: Име: Този аргумент задава името на променливата, която ще съдържа съответната стойност в

двойката име-стойност. Това е глобална променлива. Като резултат, тази променлива е достъпна в следващите скриптове на PHP

Стойност: Този аргумент автоматично задава стойността на променливата, зададена от аргумента име.

Валидност: Този аргумент задава времето, след което cookie ще се разглежда като неизползваемо. Стойността на този аргумент се задава в Гринуичко време. Както споменах по-рано, ако не се зададе стойност на този параметър, една cookie се счита за валидна, докато прозореца на браузъра на клиента е отворен. При затваряне на прозореца на браузъра cookie става невалидно.

Път: Този аргумент, както разбрахте по-рано, задава йерархията на файлове и директории на Web сървъра, за които важи cookie. Стойността по подразбиране на този аргумент е /. В резултат на това, ако не зададете стойност на параметъра път на функцията setcookie(), cookie се счита за валидна на всички файлове и директории на Web сървъра. Но ако зададете път, cookie ще е валидно само за тези файлове и поддиректории, които се намират в зададената директория.

Домейн: Този аргумент се използва за задаване на името на хоста или домейна, за които cookie е валидна. Ако не се зададе стойност на този аргумент, хостът, който е създал cookie, се счита за стойност по подразбиране на аргумента.

Сигурност: Този аргумент определя, дали cookie ще се предава по подсигурен канал. Ако не е зададена стойност за този аргумент, се използва обикновен канал за предаване на cookies. Но ако стойността на този аргумент е 1, cookie се предават с помоща на портокола HTTPS, който реализира сигурността на транзакцията в Интернет.

Всички аргументи с изключение име на функцията setcookie() са незадължителни. Освен параметрите валидност и сигурност, които са целочислени, всички други аргументи могат да се предадът чрез задаване на „“ ( празен низ ). За да пропуснете аргумента валидност и сигурност, задайте стойност 0.

За да създадем cookie, ще трябва да използваме още две функции – time() и mktime().

Функцията time() и mktime()Можете да използвате функцията time() и mktime(), за да зададете валидност на cookie. Функцията

time() се използва за намиране на текущото време. Тя връща времето в секунди. Функцията има следния синтаксис:int time();

Функцията mktime() от друга страна, приема съставните части на времето като часове, минути, секунди, месец и година като параметри и превръща тази информация в секунди. Функцията има следния синтаксис:int mktime ( int час, int минути, int секунди, int месец, int година );

В горния синтаксис, както можете да се досетите от имената на променливите, час приема целочислена стойност, която задава броя на часовете. Аналогично, минутата и секундата задават съответно броя на минутите и секундите. Аргумента месец, задава съответния месец, а аргумента година задава годината.

След като се запознахте със всички функции, които се използва за създаване на cookie, разгледайте следния код:

<?php$name = „MyCookie“;$value = „This is my first cookie“;$expiry = mktime(0, 0, 0, 7, 1, 2005);$domain = „localhost, localdomain“;$setcookie ( $name, $value, $expiry, /, $domain, 0 ) ;?><html><head><title> Проверка на cookie </title></head><body><br> <br> <br><h1 align= center> Cookie е създаден успешно ! </h1>

Page 75: PHP Lessons

</body></html>

В горния код се създава cookie с име MyCookie. Тъй като стойността на аргумента $value е This is my first cookie ! , този текс ще бъде съхранен в cookie. Валидността на cookie се определя от променливата $expiry, която е mktime(0, 0, 0, 7, 1, 2005), koeто означава, ще cookie ще е валидна до полунощ на 1.07.2005. Сookie има достъп до цялата йерархия на от файлове и папки на Web сървъра, тъй като пътят на cookie е зададен като / във функцията set cookie ().

Използване на cookiesПри работата с cookies в PHP, след като сте създали cookies, най-важният факт, който трябва да

запомните, е че не можете едновременно да създавате и използвате cookies. След като създадете , cookies, трябва да презаредите Web страницата, преди да можете да я използвате. Разгледайте следния код:

<?phpif (!(isset($kookies))){$pagecount = 0;setcookie („kookies“, $pagecount );echo „ <center> За първи път посещавате страницататази сесия </center>“;echo „<center> Cookie е създадена и съхранена навашия компютър </center>“;}else{$pagecount = ++ $кookies;setcookie („kookies“, $pagecount, time() - 10 );setcookie ( „kookies“, $pagecount );echo „<center>Брои посещения : <b>“ .$kookies. “</b></center>“;?><html><body><center>Бутона Refresh ще опресни страницата и ще увеличиброяча! :-) </center></body></html>

В горния код функцията isset() се използва, за да се определи дали cookie с име kookies е създадено или не. Ако такова не е било създадено на променливата $pagecounter се присвоява стойност 0. Същата променлива се използва и за създаване на стойността на cookie. Също така се появяват и съобщенията За първи път посещавате страницата тази сесия и Cookie е създадена и съхранена на вашия компютър. От друга страна, ако това не е първият път, който посещавате страницата, променливата $pagecount се увеличава с помощта на реда $pagecount = ++ $кookies;. След това стойността на cookie се запазва отново и показва съобщение, указващо броя на посещенията на страницата. При всяко опресняване на страницата, броя се увеличава с 1.

Можете да използвате вградената в PHP функция header() за да намалите количеството на горния код. Разгледайте следния фрагмент. Той се използва за създаване на cookie и за презареждане на страницата.

<?phpif (!(isset($kookie_new)))setcookie („kookie_new“, „A short Cut“);header ( „Location : $PHP_SELF?kookie_new = 1“ );?>

В горния код функцията header() се използва, за да се изпрати низ string като част от HTTP заглавието. Низът Location който е използван горе, пренасочва браузъра към HTTP страница. Чрез задаването на адреса PHP_SELF текущата страница автоматично ще се отвори повторно.

Можете също така да използвате функцията header() и низа Location за да пренасочите браузъра към друга HTML страница. Разгледайте долния код за да разберете това.

Page 76: PHP Lessons

<?phpif (!(isset($kookie_new)))setcookie(„kookie_new“, „A short Cut“);header ( „Location : test.html“ );exit;?>

След като успешно сте създали cookies, вие можете да ги използвате чрез следните методи: Като използвате името на cookie като име на променлива. Когато се опитвате да използвате

cookie в PHP, се създава променлива с името на cookie. След това името на променливата може да се използва в скриптовете. Като резултат от това, можете или да презаредите цялата страница, или да заредите друга страница, която да използва cookie с име My_cookie. Тогава можете да използвате името на cookie като име на променлива в скриптовете последния начин:

echo „My_cookie“; Използвайки $HTTP_COOKIE_VARS [„име_на_cookie“]. Отново променливата се създава по

подразбиране в PHP, като се използва името на cookie и се съхранява в глобален масив като HTTP_COOKIE_VARS [„име_на_cookie“]. Едно предимство на използването на глобалния масив e, че той помага да се направи разлика между различните cookies на база на техния източник на създаване, дори, ако те имат еднакви имена. Можете да използвате глобалния масив във вашите скриптове по следния начин:

echo „HTTP_COOKIE_VARS [„My_cookie“]“;

Cookies с множество стойностиКакто можете да предположите от името, cookies, които могат да съхраняват повече от една

стойност, се наричат cookies с множество стойности. Тези cookies могат да са ви много полезни. Ако си спомните от по-рано, броят на cookies, които могат да се съхраняват от Web сървъра на клиентския компютър, може да са максимум 20 ! Затова, вместо да се създават множество cookies, когато потребителя пазарува, и ненужно да се заема диска на компютъра, можете да използвате cookies с множество стойности.За да използвате cookies с множество стойности, трябва да зададете, че cookies е масив. Като резултат, всяка информация, която трябва да съхраните в една cookie, ще бъде съхранена като елемент на този масив. Разгледайте следващия код, за да видите, как можете да работите с cookies с множество стойности.

<?php$gmtseconds = time();if ( isset ($kookie ) ) { $pagecount = ++ $kookie [0]; setcookie („kookie[0]“, $pagecount, $gmtseconds + 60); setcookie („kookie“, $kookie, $gmtseconds + 60 ); // ??? setcookie („kookie“, $gmtseconds, $gmtseconds + 60 ); echo „Здравей „ . $kookie . „! <br>“; // ??? if ($kookie == 1) { echo „За първи път посещавате тази страница! <br>“; } else { echo „Посещавали сте тази страница „ . $kookie[0] . „пъти <br>“; echo „За последен път сте разглеждали тази страница преди“.( $gmtseconds - $kookie). „секунди“; } exit; } else { if ( isset ( $name )) { $pagecount = 0 ; setcookie („kookie[0]“, $pagecount, $gmtseconds + 60); setcookie („kookie“, $kookie, $gmtseconds + 60 ); // не трябва ли да е $name ? setcookie („kookie“, $gmtseconds, $gmtseconds + 60 ); echo „Cookies са създадени. Опреснете страницата, за да видите какво ще стане.“;

Page 77: PHP Lessons

exit; } }?>

В горния код cookie наречено kookie е с множество стойности. Първият елемент kookie[0] на тази cookie съдържа броя посещения на страницата с помоща на променливата $pagecount. Следващия елемент на тази cookie се нарича kookie и съдържа името на потребителя. Третия елемент, kookie, съдържа времето на последното посещение на страницата.

Когато посетите за първи път страницата, скриптът проверява дали cookie е била създадена. След като посещавате страницата за първи път, cookie няма да е създадена. В резултат на това скриптът ще създаде cookie ( kookie[0] ) и ще запише името ви в cookie kookie и времето на посещението ви в kookie. След това ще се изведе съобщението Cookie са създадени ! Опреснете страницата за да видите какво ще стане.

След като опресните страницата скриптът се изпълнява отново. Броячът се увеличава с помоща на реда $pagecount = ++ $kookie [0]; и новите стойности се записват в масив. Тъй като сега стойността на променливата $pagecount = 1, ще се изведе съобщението За първи път посещавате тази страница. В случай че сте посетили страницата няколко пъти, ще се изведе съобщението Посещавате тази страница < число > пъти., където < число > е стойността съхранена в kookie[0] . Показва се и друго съобщение, За полседен път сте разгледали тази страница преди < време > секунди. Тук < секунди > е стойността, съхранена в kookie.

Съответния HTML код, който извиква скрипта cookie2.php, е следният:

<html><body><form name=“nameform“ method=“Get“ action=“cookie2.php“><b>Име</b><input type=“text“ name=“name“><input type=“submit“ name=“Submit“ value=“ Влез „></body></html>

Горния HTML код генерира една много проста HTML форма, която съдържа етикета Име, текстово поле за въвеждане и бутон Влез. Когато въведете име в полето Име и натиснете бутона Влез, се изпълнява скриптът cookie2.php. Този скрипт, както обясних по-рано, обработва информацията от формата

Остава една подробност при работата с cookies - изтриването на cookies. В следващата секция ще видите как можете да направите това.

Изтриване на cookiesСлед като cookie е изиграла ролята си и вече не се нуждаете от нея, можете да я изтриете. PHP не

предоставя отделна функция за тази цел. Извикайте функцията setcookie само с името на cookie, за да я изтриете. Синтаксисът за изтриване е:setcookie ( „име_на_cookie“ );

Така, че ако искате да изтрието cookie с име kookie, можете да я изтриете чрез следния ред:setcookie ( „kookie“ );

Едно много важно нещо за изтриването на cookies в PHP, което трябва да знаете и да помните. Ако искате да създадете cookie с име, което вече съществува, първо трябва да я създадете с новата стойност и едва тогава да изтриете старата cookie. Това означава, че ако трябва да създадете cookie с име kookie, която вече съществува, първо ще трябва да напишете следни редsetcookie („kookie“, „ New cookie“);

Едва тогава след като сте променили стойността на cookie, можете да изтриете cookie чрез:setcookie („kookie“);

Работа с директории Стандартни операции с директории

Стандартните операции, които може да ви се наложи да извършите, докато работите с директории, са: Прочитане на файловете в директория. Копиране на файлове от една директория в друга

Page 78: PHP Lessons

Преместване на файловете от една директория в друга Изтриване на файлове Изтриване на директорииВ следващите секции ще разгледаме всяка една от тези операции по отделно

Прочитане на файловеТрябва да използвате функцията opendir(), readdir(), и closedir(), за да осъществите достъп до

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

Функцията opendir() има следния синтаксисresource opendir ( string път );

Функцията opendir() връща маниполатор на директория, която може да се използва в следващи извиквания на функции, работещи с директории. Функцията има един аргумент, който задава пътя на желаната директория. Функцията opendir() връща стойност True, ако зададения път е валиден и директорията е била отворена успешно. От друга страна, ако пътят е невалиден или директорията не може да се отвори поради липса на права, функцията връща стойност False.

Ключовата дума resource се използва за манипулатори на директории. Функцията closedir() се използва за затваряне на директория. Ако функцията затвори директория, тя

връща стойност True. В противен случай се връща стойност False. Функцията има следния синтаксис:vaoid closedir ( resource манипулатор_на_директория );

За да успее функцията closedir(), директорията, зададена от манипулатора, трябва да е била отворена с функцията opendir().

Функцията readdir() се използва за прочитане на съдържанието на определена директория. Тя има следния синтаксис:string readdir( resource манипулатор_на_директория );

Функцията readdir() приема като свой единствен аргумент манипулатор_на_директория, чието съдържание трябва да прочете, и връща името на следващия файл в директорията. Имайте предвид, че имената се връщат в случаен ред.

Разгледайте следния код, за да разберете действието на горните три функции.

<?php$dir opendir('/home/meeta/new');while ($read_file = readdir( $dir ) ){echo read_file“, \n“;}

closedir( $dir );?>

В горния код се отваря директория с име new, която се намира в директорията home/meeta/. След като се прочетат всички файлове в директорията, директорията се затваря.

В следващата секция, ще видите как можете да копирате файлове чрез прост скрипт на PHP.

Копиране на файловеЗа да копирате файл от една директория в друга, трябва да използвате функцията copy(). Функцията

има следния синтаксис:int copy ( string източник, string цел );

Както можете да видите, функцията copy() има два аргумента Първият аргумент е оригиналният файл, който трябва да се копира, вторият аргумент представлява целевия файл, който трябва да се създаде. Функцията връща стойност True, ако копирането е извършено успешно. В противен случай връща стойност False.

Ако целевия файл съществува, копирането ще бъде извършено. Но ако не съществува, ще се създаде нов файл със зададеното име и изходния файл ще се копира в него.

Разгледайте следния код за да разберете действието на функцията copy().

<?php$source = '/home/meeta/hello.php';$destination = '/home/meeta/new/h1.php';

Page 79: PHP Lessons

if ( copy ( $source, $destination )){echo „ Файлът е копиран успешно.“;}else{echo „Зададения файл не може да се копира.“;}?>

В горния код файлът с име hello.php намиращ се в директорията /home/meeta, се копира в директорията /home/meeta/new под името h1.php. Ако файлът се копира успешно, се извежда съобщението Файлът е копиран успешно. От друга страна, ако операцията е неуспешна, се извежда съобщението Зададения файл не може да се копира

Можете да получите съобщение за грешка по време на копирането на файл от една директория в друга, ако нямате достатъчно права, за да направите това. Поради тази причина, преди да копирате файл, проверете дали имате права за това.

Преместване на файловеЗа да можете да преместите файл от една директория в друга чрез PHP, използвайте функцията

rename() .Както можете да предположите от функцията тя служи за преименуване на файла. Но ако

зададете различни директории за новото и старото име, тази функция ще премести файла.Функцията има следния синтаксис:

int rename(string източник, string цел);Както функцията copy(), функцията rename() приема два аргумента. Първият аргумент е името на

файла, който ще се премества, а вторият параметър, представлява целевия файл, който трябва да се създаде. Функцията връща стойност True, ако операцията е била извършена успешно. В противен случай връща стойност False.

Можете да получите съобщение за грешка по време на преместването на файл от една директория в друга, ако нямате достатъчно права, за да направите това. Поради тази причина, преди да местите файлове, проверете дали имате права.

Разгледайте следния пример, за да разберете употребата на функцията rename() за преместване на файлове.

<?php$source ='/home/meeta/hello.php';$distantion ='/home/meeta/figures';if (rename ( $source, $distantion)){echo = „Файлът е преместен успешно“;}else {echo „Зададения файл не може да бъде преместен.“;}?>

В горния пример се прави опит да се измести файла hello.php от директорията /home/meeta/ в директорията /home/meeta/figures. Ако файлът е преместен успешно, се извежда съобщението Файлът е преместен успешно. Но, ако операцията по преместване не е успяла, ще се изведе съобщението Зададения файл не може да бъде преместен.

Използването на функцията rename() забавя значително изпълнението на програмата, тъй като функцията rename() трябва да се обърне към операционната система, която да стартира програмата rename. Поради тази причина е по-добре да създадете свой скрипт, за да премествате файлове от едно място на друго.

Знаем, че операцията по присвояване на файл се състои от две независими операции: копиране на файла на ново място и изтриването му от старото място. Така, че можем да напишем следната функцията за преместване на файл.

Function move ( $source, $destination )

Page 80: PHP Lessons

{copy ($source, $destination);or die („Не мога да копирам файла!“);unlink ( $\source )or die („Не мога да изтрия файла“);}

В следващата секция, ще видите, как можете да изтриете един или повече файлове от директория, като използвате функцията unlink().

Изтриване на файловеДопълнителните и ненужните файлове внасят хаос в системата ви. За да се оправи този хаос, трябва

периодично да изтривате ненужните файлове. PHP предоставя функцията unlink() за изтриване на файл.Функцията има следния синтаксисint unlink( string име_на_файл);

Функцията unlink() приема един аргумент, задаващ името на файла, който трябва да се изтрие. Функцията връща стойност 1, ако файлът е изтрит успешно, и стойност 0, ако не е изтрит. Разгледайте следния пример:

<?php$file_delete = '/home/meeta/my.php';if ( unlink( $file_delete)){echo „Файлът е изтрит успешно“;}else{echo „Файлът не може да се изтрие“;}?>

В горния код се изтрива файлът my.php от директорията / home/meeta/. Ако изтриването на файла е успешно, се показва съобщението Файлът е изтрит успешно. Ако файлът не може да бъде изтрит, се извежда съобщението Зададения файл не може да се изтрие.

Както и при предишните операции трябва да имате необходимите права, за да изтриете файла.

Функцията unlink() е предназначена за Unix и Linux и може да не работи под Windows.

Работа с множество файлове в директорияВ предишния урок, видяхте как можете да изтривате отделни файлове, Сега да предположим, че

трябва да изтриете всички файлове в дадена директория, които са 245 файла и поддиректории. Вместо да изтривате отделните файлове в директорията, можете да изтриете всички файлове и директории на веднъж. PHP не предоставя вградена функция за тази цел. Но можете да използвате методите mapdir() и maptree() на класа File_Find от PEAR

В следващите две секции, ще ви запозная с функциите mapdir() и maptree() и как можете да ги използвате в скриптовете си на PHP.

Функцията mapdir()Тъй като функцията mapdir() е метод на класа File_Find от PEAR, ще трябва да включите класа в

скрипта си. За да направите това, трябва да добавите следния ред, преди да използвате функцията mapdir()include_once 'File_Find.php';

Функцията mapdir() има следния синтаксис:resource mapdir( resource манипулатор_на_директория );

Методът mapdir() връща масив, съдържащ всички поддиректории на дадена директория заедно с файловете в зададената директория и поддиректориите й.

Разгледайте следния пример, който показва имената на всички файлове в дадена директория.

<?phpinclude 'File_Find.php';$file_read = File_Find :: mapdir ( '/home.meeta/new' );

Page 81: PHP Lessons

foreach ( $file_read as $fr ){echo „$fr“, „\n“;}?>

Чрез горния код се отпечатват имената на всички файлове в директорията /home/meeta/new с помоща на метода mapdir().

Функцията maptree()Можете да използвате метода maptree(), за да обработите всички файлове и поддиректории в

дадена директория. Това също е метод на класа File_Find в PEAR. Методът maptree() е по-мощен от метода mapdir(), тъй като метода, зарежда цялото съдържание на директорията в масив. Методът има следния синтаксис:resource maptree( resource манипулатор_на_директория);

Методът maptree() връща масив. Резултатния масив, на практика се състои от два различни масива. Първият масив съдържа всички поддиректории на зададената директория. Вторият масив връща всички файлове в зададената директория и нейните поддиректории. Следващия ред илюстрира тази концепция.dir_tree ( $dirs, $files ) = File_Find :: maptree( '/var/www/html/meeta' );

Функцията maptree(), както можете да видите от горния код, връща масив dir_tree, който от своя страна съдържа два отделни масива: $dirs и $files. Масивът $dirs съдържа всички поддиректории, а масивът $files съдържа всички файлове в зададената директория и нейните поддиректории.

Разгледайте следния пример, за да разберете как можете да използвате функцията maptree(), за да изтриете множество файлове от дадена директория:

<?phpinclude 'File_Find.php';dir_tree ( $dir_delete, $file_delete ) = File_Find :: maptree( '/home/meeta/figures2' );foreach ( $files_delete as $fd ){ if ( ! ( unlink ($fd))) { echo „Не мога да изтрия файла!“; } else { echo „Файлът е изтрит успешно!“; }}?>

В горния код, цялото съдържание на директорията /home/meeta/figures2 се получава в масива dir_tree. Този масив от своя страна, съдържа всички поддиректории в масив с име dir_delete и файловете в масива file_delete. Всички файлове намиращи се в масива file_delete, се изтриват чрез цикъла foreach.

Изтриване на директорииМожете да използвате функцията rmdir(), за да изтривате директории. За да изтриете директории,

трябва да имате необходимите права върху директорията. Друг много важен факт, който трябва да запомните, е, че за да можете да изтриете директория, тя трябва да е празна. Ако директорията не е празна, няма да можете да я изтриете.

Функцията rmdir() има следния синтаксис:int rmdir( string име_на_директория );

Както се вижда от горния синтаксис, функцията приема като свой аргумент името или пътя на директорията, която трябва да изтрие. Разгледайте следния прост пример, който се използва за изтриване на празна директория dir1.

<?php$dir_delete = '/home/meeta/dir1';if ( rmdir( $dir_delete)){echo „Директорията е изтрита успешно“;

Page 82: PHP Lessons

}else{echo „Директорията не може да се изтрие.“:}?>

Горния код е прост и нереалистичен. Разгледайте следващия пример, който изтрива директория със цялото и съдържание.

<?phpinclude 'File_Find.php';dir_tree ( $dir_delete, $file_delete ) = File_Find :: maptree('/home/meeta/figures2' );foreach ( $files_delete as $fd ){if ( ! ( unlink ($fd))){echo „Не мога да изтрия файла!“;}else{echo „Файлът е изтрит успешно!“;}}foreach ( dir_delete as $dd )if ( ! ( unlink ($fd))){echo „Не мога да изтрия Директорията!“;}else{echo „Директорията е изтрита успешно!“;}}?>

В горния код всички файлове в директорията се съхраняват в масив file_delte, а всички поддиректории – в масива dir_delete. Първият цикъл foreach се използва за изтриване на всички файлове в директорията. Вторият цикъл foreach изтрива всички поддиректории.

http://www4u.search.bg/index2.php?ph&c=1

http://bg.php.net/manual/ru/index.functions.php