LoginRegistration
dtfstudiobg
Visitors
Calendar
<
November 2009
>
MTWTFSS
      1
2345678
9101112131415
16171819202122
23242526272829
30
Subscription
E-mail: 
Top commentators
randomiz Randomiz Randomiz
Comments: 1
dtfstudiobg Стоян Стоянов
Comments: 1
Other sites
nadee000000 nadee shadee
nikon133 Nesa N.
sutek Sutek
asateer abo asateer
paneznam paneznam paneznam

Увод в PHP

0.00 (0)

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


Най-популярният език за създаване на интерактивни и динамични web сайтове е PHP. Това е не просто твърдение, а реален факт според изследователските фирми. Причините са много - гъвкав, компактен, лесен за изучаване и използване, предлагащ всички възможности за създаване на динамичен, съвременен сайт, задоволяващ и най-големите капризи... Създаден като личен проект, той бива преработен от група разработчици и бързо намира приложението си в Интернет. За да улесни грижите си за собствения си личен сайт, през 1994 година Размус Лердорф създава скриптов език, наричайки го Personal Home Page Tools. От това наименование по-късно излиза и съкращението PHP.

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

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

Програмни езици

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


За да може машината да изпълни желанието ни, което в случая беше да изпише на екрана "Здравейте", тази инструкция трябва да се преведе на нейния език. Това може да стане чрез така наречените интерпретатори, които "смилат" инструкциите в кода и ги подават на компютъра в разбираем за него вид или чрез предварително превеждане на кода в такъв вид - компилация. От тази гледна точка програмните езици се делят на скриптови и компилируеми. Кодът, написан на скриптов език, се обработва от междинна програма - интерпретатор, в момента на изпълнението си. А кодът, написан на компилируем език трябва да се приведе предварително във вид, разбираем за машината. Затова във втория случай имаме два вида код - изходен (source code) и изпълним (executable). За пример можем да посочим Java и Java Script, които в съзнанието на повечето хора са почти едно и също. Разбира се, това не е вярно. Въпреки че имат сходен синтаксис, двата езика са доста различни по начина си за използване. Java е компиулируем език. Файловете, съдържащи изходния код на Java, имат разширения .java. Ако ги отворим, в тях ще видим всички инструкции, които програмистът е написал, във вид, разбираем за човека. Но тези файлове не могат да бъдат изпълнени в този си вид. Те трябва да бъдат компилирани - приведени в двоичен вид. Изпълнимите файлове на Java имат разширение .class и ако ги отворим с текстов редадактор ще видим поредица от символи, която няма да означава нищо за нас. От друга страна Java Script е език, който се интерпретира в момента на изпълнението си. Когато отворите web страница, съдържаща в себе си Java Script код, той се обработва в реално време от интерпретатор, вграден в браузъра, и след това се подава за изпълнение. По - старите браузъри, които нямат вграден такъв интерпретатор, няма да се справят със задачата. PHP е скриптов език. Когато потърсите с браузъра си PHP страница в Интернет, кодът се обработва в момента, в който сървърът изпълнява заявката ви, от програма, намираща се на него. От тази гледна точка, разликата между двата скриптови езика - Java Script и PHP е в това, че кодът на първия се интерпретира от браузъра ви(web клиента), а на втория - от програма на сървъра. Затова се казва, че JS е клиентски език (client side), а PHP - сървърен (server side).


Основата

Голямата популярност на PHP се дължи главно на гъвкавостта му при включване в HTML документи. Възприето е мнението, че концепцията на езика е смесица от Perl, Java и C, но най-голяма е близостта с C. Така PHP предлага лесни възможности за изпълняване на сложни математически изчисления, изпълняване на мрежови функции, възможностти за обработка на електронна поща, работа с обикновени изрази и множество други. Но безспорно най-голямата сила на езика е във взъможностите му за работа с бази данни. Осигурена е поддръжка на най-разпостранените бд, като MySQL, PostgreSQL, Oracle, Sybase, mSQL и други. Връзката с базата данни и работата с нея са облекчени и позволяват лесното създаване на ефективни динамични сайтове.

От начало

След толкова уводни думи вече е крайно време да направим първия си PHP скрипт. Макар и банално, ще накараме компютъра да изпише "Здравей свят!"


Здравей, свят!


Първият ми PHP скрипт



Когато запишете този файл и го сложите на сървър, поддържащ PHP, след като го извикате в браузъра си ще видите изписано там поздравлението. Разбира се, полза от такъв скрипт няма, но той ще ни помогне да посочим основните положения. За разлика от cgi файловете, не е необходимо да променяте разрешенията на файла с PHP код. Необходимо е просто да го сложите на сървъра. Няма значение и дали ще използвате бинарен трансфер или ascii, въпреки че е препоръчително да използвате втория метод. PHP кодът се поставя между . Така сървърът разбира, че трябва да подаде това съдържание на интерпретатора за PHP. Може да се използва и друг вариант - . Изборът е ваш. Всяка инструкция трябва да завършва с точка и запетая. За да изпишете текст на екрана можете да използвате вградените функции echo или print. В горния пример можехме да постигнем идентичен резултат използвайки инструкцията print ("Здравей, свят!"); Изразите в PHP се ограждат с единични или двойни кавички. Примерът демонстрира как може да се вгради скриптовия код в HTML. Нека сега направим обратното, имайки предвид, че всичко, което подадем като аргумент на echo ще бъде изведено на екрана.


Резултатът от този код ще бъде абсолютно същия. Но може би забелязахте обратната наклонена черта, поставена преди кавичките в реда, където се указва енкодинга на страницата. По този начин указваме на интерпретатора, че трябва да изобрази кавички на екрана, а не че низът завършва. Много грешки в PHP скриптовете се дължат на неправилно боравене с тях.

Кавичките

Както вече стана дума, един израз може да се огради с единични или с двойни кавички. Двата начина на запис

echo ("Здравей, свят!");

и

echo ('Здравей, свят!');

ще доведат до един и същ резултат. Но това важи само за изразите. Разлика между двата записа има, когато използвате променливи, но за това ще стане дума по-късно. Нека сега включим кавички в самия израз. Примерно за да изпишем "Този скрипт се казва "Здравей, свят!". Ако използваме единични кавички, за да укажем на интерпретатора, че това изречение е един низ, то проблеми няма.

echo ('Този скрипт се казва "Здравей, свят!"');

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

echo ("Този скрипт се казва "Здравей, свят!"");

След като запишем и видим скрипта така, ще получим съобщение за грешка - "Parse error". Причината е, че интерпретаторът очаква да види затварящ двойни кавички, за да отбележи край на низа. Тоест в случая това е "Този скрипт се казва ". Останалият текст, обаче, не може да се впише по никакъв начин в синатаксиса на PHP и интерпретаторът не може да го разбере. Затова и дава грешка при обработването (парсването). За да решим проблема, трябва да използваме обратно наклонената черта. Така ще укажем, че става дума за символ, който трябва да се изобрази, а не да се интерпретира :

echo ("Този скрипт се казва "Здравей, свят!"");

Сега вече всичко ще бъде наред. Обратно наклонената черта може да ни послужи и за вкарване на нов ред (n ), на табулация (t) и така нататък.

Коментари

Поставянето на коментари в кода е полезно, не само когато работите с големи файлове. Понякога, когато се връщате към скрипт, който сте писали преди по-дълго време, може да се окаже, че коментарите са полезни и на самите вас. Друга полезно приложение е, когато имате нужда временно да отстраните известно количество код. Вместо да го изтривате и слeд това възстановявате, можете просто да го коментирате. В PHP имате възможност да коментирате съдържанието на 1 ред или на цял блок редове. За да поставите коментар на 1 ред можете да използвате символа # или две наклонени черти (//). А за да коментирате блок от редове, оградете го с /* и */. Ето и един пример:

"

Усложняване на примера

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


Примерен резултат от този скрипт виждате на изображението. Използвахме функцията date() за да разберем колко е часът и коя е датата според сървъра, а така наречените "променливи на срадата" за да изясним от къде е дошъл посетителя и с какъв браузър (в случая IE 5.5).


Променливите

Една от най-големите сили на PHP е възможността му да работи с променливи. Няма да се впускаме в теоретични подробности за същността и концепцията им, а ще демонстрираме основните правила при използването им. Най-общо, променливата се състои от две "части" - име и стойност. Обръщайки се към името на променливата можем да й присвоим нова стойност или да получим достъп до текущата. Има две основни неща, които трябва да имате предвид, работейки с променливи в PHP. За разлика от повечето програмни езици, тук те не се декларират предварително. Създаването на променливата става в момента, в който и присвоявате стойност. В PHP името на променливата винаги е предшествано от знак за долар - $. Без значение дали и присвоявате стойност или използвайте стойността и по някакъв начин.


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

Видове променливи

PHP предлага големи облекчения при работат с променливите, което в началото би ви се сторило странно ако сте се занимавали с други програмни езици. Стана вече дума, че не е необходимо да декларирате променивата преди да й присвоите стойност. Друга важна особеност е, че не е необходимо да указвате какъв тип информация се съдържа в нея - дали е низ (string), цяло число (int), число с плаваща запетая (float) и т.н. PHP сам определя типа на променливата в зависимост от съдържанието й. Според някои напреднали програмисти това е по-скоро вредно, но както скоро ще се убедите, освен улеснението, гъвкавостта на PHP в това отношение има и множество други плюсове. Съществуват няколко вградени функции с чиято помощ можете да разберете какъв тип е дадена променлива. Това са is_bool() - връща истина ако променливата е булева (истина/лъжа); is_float() - връща истина ако променливата съдържа число с плаваща запетая; is_integer() - връща истина ако променливата е цяло число; is_string() - връща истина ако променливата е низ от символи; is_array() - връща истина ако променливата е масив; is_object() - връща истина ако променливата е обект;


Enviroment variables

Съществува един особен вид променливи, наричани "променливи на обкръжението". Най-общо казано, това са променливи, поддържани от сървъра и PHP интерпретатора, описващи текущото състояние на връзката и характеристиките на двете страни в нея - клиент и сървър. В предната част на този материал използвахме две от тези промливи - $HTTP_USER_AGENT и $HTTP_REFERER, с чиято помощ открихме с какъв браузър посетителят разглежда страницата и от къде е дошъл на нея. Събирането и анализирането на подобни данни е безкрайно полезно за всеки web разработчик. Така можете да научите кой сайт ви праща най-много посетители и да организирате рекламната си стратегия, наблягайки на него. Полезно е също и да следите кои от страниците в сайта ви се посещават повече и предизвикват по-голям интерес, така че да наблегнете на тях и на подобен вид съдържание в по-нататъчното изграждане на сайта. Пълен преглед на променливите на средадата може да видите, използвайки вградената в PHP функция - phpinfo(). Напишете в текстов файл следните редове :



Запишете го на сървъра с име info.php, примерно, и го отворете в браузъра си. Ще видите най-важната информация за PHP инсталацията, както и всички създадени в текущата връзка променливи на средата на PHP и сървъра. Изписаното в левите полета на таблицата представляват имената на променливите, а в дясната част - стойностите им. Нека сега разширим примера и добавим още малко информация в него.



Здравей свят!





Нека сега обясним отделните редове в него. Нямаше нужда да използвам променливите $browser, $ref, $user_ip, $forw, $serv и $rem_host, но ги включих за по-голяма прегледност. Всяка от тях получи за стойност стойността на някоя от променливите на средата. На променливата с име "browser" бе присвоена стойността на $HTTP_USER_AGENT, която винаги съдържа идентификационната информация на браузъра. В случая "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)". Браузърът Opera позволява на потребителите си да променят идентификацията й, така че тя може да се представя като IE или Netscape. Причината е в рестрикциите, които някои сайтове налагат на използващите браузър, различен от Internet Expolorer. Обикновено това също става с помощтта на $HTTP_USER_AGENT. Имайки предвид особеностите на различните браузъри, можете да покажете на посетителя на сайта си страница, оптимизирана за неговата програма, съдейки по съдържанието на тази променлива на средата. В скоби казано, възможността на Opera да се представя по различен начин може да ви изправи пред куриозната информация, че посетителят използва IE под операционна система Linux. На променливата с име "ref" бе присвоена стойността на $HTTP_REFERER, съдържаща URL на мястото, от което идва посетителят. Вече обяснихме по-подрбоно тази променлива, но трябва да имате предвид, че тя не винаги дава полезна информация. В конкретния случай едва ли мога да очаквам, че Yahoo са поставили на началната си страница линк към моя тестов файл. Променливата, наименувана "user_ip" получи стойността на променливата на средата $REMOTE_ADDR. Тя винаги съдържа в себе си IP адреса на посетителя. Тук много рядко може да се получи разминаване на стойността с истинската. Защото сървърът използва стойността й за да определи на кого да изпрати поискания файл. Много често се случва множество потребители да се намират зад едно или повече прокси сървъри. Няма да коментираме сега защо и как се получва това. В случая трябва да имаме предвид, че ако посетителят е зад прокси, то $REMOTE_ADDR ще покаже IP адреса на проксито. За адреса на клиентската машина се създава нова променлива - $HTTP_X_FORWARDED_FOR. Повечето прокси сървъри осигуряват тази информация, особено ако администраторите им не желаят да изкарат живота си по съдебните зали. Използването на последните две описани променливи на средата е полезно, когато давате достъп до чувствителна информация или по една или друга причина е важно да знаете кой точно е отсреща. Така можете да ограничите достъпа до сайта си на хора, които нарушават добрия тон в него или да подсигурите сигурността му при e-commerce приложения. Тук използвахме и още една променлива на средата - $SERVER_SOFTWARE, която съдържа в себе си информация за сървърния софтуер - версия на сървъра и операционна система. В горния пример използвахме това, като "подпис" на съобщението.

Видове променливи

PHP предлага големи облекчения при работата с променливите, което в началото би ви се сторило странно ако сте се занимавали с други програмни езици. Стана вече дума, че не е необходимо да декларирате променивата преди да й присвоите стойност. Друга важна особеност е, че не е необходимо да указвате такъв тип информация се съдържа в нея - дали е низ (string), цяло число (int), число с плаваща запетая (float) и т.н. PHP сам определя типа на променливата в зависимост от съдържанието й. Според някои напреднали програмисти това е по-скоро вредно, но както скоро ще се убедите, освен улеснението, гъвкавостта на PHP в това отношение има и множество други плюсове. Съществуват няколко вградени функции с чиято помощ можете да разберете какъв тип е дадена променлива. Това са is_bool() - връща истина ако променливата е булева (истина/лъжа); is_float() - връща истина ако променливата съдържа число с плаваща запетая; is_integer() - връща истина ако променливата е цяло число; is_string() - връща истина ако променливата е низ от символи; is_array() - връща истина ако променливата е масив; is_object() - връща истина ако променливата е обект;


Изпращане на променлива

Съществуват три начина по които можете да изпратите стойността на променлива към един PHP скрипт. Това са методите POST, GET и чрез cookies. Нека ги илюстрираме чрез прост пример. Ще създадем две страници - първата ще съдържа форма, в която потребителите ще напишат името и възрастта си, а втората ще изпише тези данни на екрана. Ще наречем първия файл index.html, а втория - show.php. Нека напишем HTML формата, в която посетителите ще попълнят данните си :


Здравейте! Моля попълнете следната информация :

Вашето име :
Възраст :

Когато посетителят въведе даните и натисне бутона "Изпрати!", тези данни ще достигнат до файла show.php във вид на променливи. Можете да ги използвате веднага. Тук е мястото да уточним, че за разлика от други езици, PHP не ви кара да проверявате дали информацията е изпратена чрез GET или POST. Не е необходимо и да правите нищо, за да получите достъп до съхраняваната в променливите данни. PHP се грижи за това и сам създава променливите. Затова можем направо да ги използваме, например - да ги изпишем:


Очевидно това не е най-смисления ред код, който можете да напишете, но по-късно ще разгледаме възможностите, които ни дава информацията за възрастта на посетителя, за да го пренасочим към съответното място в сайта. Най-често няма значение кой от двата метода - POST или GET използвате, с изключение на случаите когато трябва да изпратите файл или по-дълга информация. Най-просто казано, GET използва така нареченото URL кодиране, тоест така данните се дописват след името на файла в неговия URL. Ако промените значението на "action" във формата в index.html от POST на GET и изпратите информация, ще видите в адресното поле на браузъра си нещо като show.php?ime=Ivan&godini=25. При изпращане на данните чрез POST, те се предават в тялото на заявката. Много често информацията се задава на скрипта не чрез HTML форми, а пряко чрез URL. Това е така, защото в съвременните динамични сайтове един PHP файл би могъл да генерира множество web страници в зависимост параметрите, които му се подадат.

URL кодиране

За да постигнете това, трябва да зададете необходимите параметри в адреса, с който викате файла. Данните се поставят след името му, като за разделяне се използва въпросителния знак (?). Той указва края на URL и началото на допълнителните данни, известни още като "query string". Там данните се описват по двойки (име=стойност), като всяка двойка се разделя със знака "&" (амперсанд):

файл.php?име1=стойност1&име2=стойност2&име3=стойност3

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

show.php?ime=Иван Петров&godini=25.

Очевидно е, че в този случай няма да получим желания резултат, тъй като интервалът след името ще се възприеме като край на URL и всичко последващо ще се игнорира. Неточни резулати биха се получили и при използване на занака амперсанд (&), %, + и някоии други. Затова информацията трябва да се пригоди преди да бъде изпратена чрез така нареченото URL кодиране. В най-общи линии интервалите се заместват със знак плюс (+), а някои от символите с "%xx", където xx са ascii кодовете на съответните символи в шестнадесетичен вид. Така ако посетителят (в примера - Иван Петров) напише като възраст 26&7 (за 26 години и 7 месеца), то това ще се предаде така :

show.php?ime=Иван+Петров&godini=26%267 (& се представя чрез %26)

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

низ urlencode (низ)

Така можехме да извикаме спокойно show.php без да се притесняваме за интервалите и специалните символи. Например

echo '

Този код ще върне грешка, зашото се опитвате да изпратите "бисквитка" след като вече сте пуснали някакво съдържание. HTTP хедърите нямат нищо общо с хедърите на HTML сттраниците, ограниавани между таговете и . Цялото съдържание на уеб страницата влиза в тялото на HTTP пакета. Когато се опитате да изпълните този код, PHP ще ви съобщи, че хедърите вече са изпратени, като ще ви каже на кой ред в скрипта е завършило изпращането и на кой ред вие се опитвате да пуснете cookie. Това е наистина полезно, но бих искал да обърна внимание на един случай, когато е много трудно да откриете от къде идва грешката.


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



За да изчистим нещата, ето как изглежда синтаксиса на конструкцията:

if (условие) { действие } else { друго действие }

Възможно е да се добавят множество алтернативни проверки с помощтта на elseif :

if (условие) { действие } elseif { второ действие } else { друго действие }

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


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

== - проверява за равенство; != - проверява за неравенство; > - проверява дали първият параметър е по-голям от втория; < - проверява дали първият параметър е по-малък от втория; >= - проверява дали първият параметър е по-голям или равен от втория;




image Comments: 0 Views: 406 [History of changes] Size:117296 byte
Last changes are made by: dtfstudiobg Стоян Стоянов 1267 days ago 04.06.2006 08:43:20
Posted byText

Enter the code shown on the image
Your name
E-mail
(visible only to owner of site)
WWW

Subject

In the text you can use Wiki or HTML tags.



Who is active on the site?
Anonymous: 1 Registered: 0 (?)
Abuse | Hosted by MyLivePage | | © Kolobok smiles, Aiwan