12.04.2014 Views

БОЕВЫЕ РОБОТЫ:

БОЕВЫЕ РОБОТЫ:

БОЕВЫЕ РОБОТЫ:

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Êîäèíã<br />

PHP: ÎÑÍÎÂÛ ÎÑÍÎÂ<br />

Íèêèòà «Nikitos» Êèñëèöèí<br />

(nikitoz@realxakepru)<br />

Äàâàé ðàññìîòðèì âçàèìîäåéñòâèå âåá-ñåðâåðà è êëèåíòà â òðèâèàëüíîì<br />

ñëó÷àå - ïðè èñïîëüçîâàíèè ñòàòè÷íîãî html’à Êëèåíò, íàïðèìåð IE, îòïðàâëÿåò<br />

ñåðâåðó çàïðîñ Òîò, ÷èòàÿ åãî, âûïîëíÿåò íåêîòîðóþ îïåðàöèþ - â<br />

ðàññìàòðèâàåìîì ñëó÷àå òóïî ÷èòàåò çàêà÷àííûé ðàíåå ôàéë è ïåðåäàåò åãî<br />

ñîäåðæèìîå áðàóçåðó Âñå ýòî, êîíå÷íî, çäîðîâî, íî âîò ïðîáëåìêà - î÷åíü óæ<br />

ãåìîðíî ðó÷êàìè ïðàâèòü õòìë-ôàéëû, ÷òîáû îáíîâèòü ñàéò - îñîáåííî åñëè<br />

ñàéòîâ ýòèõ ìíîãî Äëÿ ðåøåíèÿ èìåííî ýòîé ïðîáëåìû áûë ðàçðàáîòàí â 1994<br />

ãîäó ÿçûê PHP - çàìå÷àòåëüíàÿ òåõíîëîãèÿ, âïîñëåäñòâèè èçáàâèâøàÿ webðàçðàáîò÷èêîâ<br />

îò öåëîé êó÷è îäíîîáðàçíîé ìåõàíè÷åñêîé ðàáîòû<br />

Âåñü ñìàê ýòîé òåõíîëîãèè çàêëþ÷àåòñÿ â òîì, ÷òî êàê òàêîâîãî html-ôàéëà íà<br />

ñåðâåðå íåò, åñòü ëèøü íåêîòîðîå ïðàâèëî, ïî êîòîðîìó ôîðìèðóåòñÿ ïîòîê<br />

âûâîäà áðàóçåðó Ýòè ïðàâèëà è íàçûâàþòñÿ ñêðèïòàìè (script - «ñöåíàðèé»)<br />

Êîíöåïöèè PHPïðîãðàììèðîâàíèÿ<br />

PHP:<br />

îñíîâû îñíîâ<br />

«Ó òåáÿ åñòü ñàéò?» Êòî-òî, óñëûøàâ â ñâîé àäðåñ ïîäîáíûé âîïðîñ, îòâåòèò<br />

ñëîâàìè «íàôèã íàäî?» Êòî-òî äàñò ëèíê íà îäèíîêóþ html-ñòðàíèöó, íà<br />

êîòîðîé óæå íå ïåðâûé ãîä ïîñòèòñÿ óáîãîå «äîáðî ïîæàëîâàòü» È òîëüêî òû<br />

÷åðåç ïàðó ëåò ñìîæåøü ãîðäî ñêàçàòü: «ß ñîäåðæó âîñåìü íîâîñòíûõ<br />

ïîðòàëîâ ñóììàðíîé ïîñåùàåìîñòüþ ìèëëèîí ÷åëîâåê â ñóòêè» Êðóòî? ß<br />

òîæå òàê äóìàþ Íî html òóò òåáå íå ïîìîùíèê - ãëóïî äåëàòü ñàéò ñòàòè÷íûì,<br />

îáíîâëÿÿ åãî ïî ftp :) Ìû ïîéäåì áîëåå ïðîãðåññèâíûì ïóòåì<br />

Íèêèòà «Nikitos» Êèñëèöèí (nikitoz@realxakepru)<br />

PHP - èíòåðïðåòèðóåìûé ÿçûê, òå ñöåíàðèè òðàíñëèðóþòñÿ â ìàøèííûå êîäû<br />

êàæäûé ðàç ïðè èõ âûïîëíåíèè Ôàéëû ñ php-êîäîì ìîãóò, â çàâèñèìîñòè îò<br />

íàñòðîåê web-ñåðâåðà, èìåòü ðàçëè÷íûå ðàñøèðåíèÿ Íåêîòîðûå àäìèíû äàæå<br />

ïðàêòèêóþò äàâàòü php-ñêðèïòàì íåñâîéñòâåííûå ÿçûêó ðàñøèðåíèÿ òèïà «htnl»,<br />

«www» è òä - äåëàþò âñå, ÷òîáû äàòü áðàòó-õàêåðó êàê ìîæíî ìåíüøå<br />

èíôîðìàöèè î ñêðèïòå Íó, îíî è âåðíî, ÿ áû, ÷åñ ñëîâî, óâèäåâ ñêðèïò<br />

indexhtnl, íå ñðàçó áû äîãàäàëñÿ, íà êàêîì îí ÿçûêå íàïèñàí: òî ëè perl, òî ëè<br />

php, à ìîæåò è âîâñå python :) Íî îáû÷íî âñå æå ñêðèïòàì äàþòñÿ âïîëíå<br />

îïðåäåëåííûå ðàñøèðåíèÿ - php, php3/4, phtml è òï<br />

PHP ìîæåò áûòü óñòàíîâëåí ëèáî êàê ìîäóëü äëÿ web-ñåðâåðà, ëèáî - ýòî<br />

ïðàêòèêóåòñÿ ðåæå - â âèäå ñàìîñòîÿòåëüíîãî èíòåðïðåòàòîðà CGI (Common<br />

Gateway Interface) Ïðè èñïîëüçîâàíèè CGI âåðñèè âîçíèêàþò íåêîòîðûå íþàíñû<br />

ñ áåçîïàñíîñòüþ, íåñêîëüêî ñíèæàåòñÿ ñêîðîñòü âûïîëíåíèÿ ñöåíàðèÿ, íî åñòü<br />

è ïëþñ - ñóùåñòâóåò âîçìîæíîñòü ñîçäàâàòü php-ïðîöåññû ñ ïðàâàìè ðàçëè÷íûõ<br />

ïîëüçîâàòåëåé Ïðè èñïîëüçîâàíèè æå ìîäóëÿ âåáñåðâåðà âñå ïðîöåññû<br />

çàïóñêàþòñÿ ñ ïðàâàìè ñàìîãî âåáñåðâåðà - êàê ïðàâèëî, nobody<br />

PHP-êîä âñåãäà íà÷èíàåòñÿ ñî ñòðîêè Ñëåäóåò<br />

çàìåòèòü, ÷òî PHP-êîä ìîæíî âñòàâëÿòü â ïðîèçâîëüíîì ìåñòå html-äîêóìåíòà:<br />

êàê â ñàìîì åãî íà÷àëå, òàê è â ñåðåäèíå, â îáùåì, ãäå óãîäíî Êàê ñêàçàë êòîòî<br />

èç ðàçðàáîò÷èêîâ ÿçûêà: «PHP èñïîëüçóåòñÿ ëèøü òàì, ãäå îí äåéñòâèòåëüíî<br />

íåîáõîäèì» Ïðåäâèæó ãíåâ ïåðëîâùèêîâ è ïðîñòî íåäàëüíîâèäíûõ ëþäåé:<br />

«Ìåøàòü êîä ñ äèçàéíîì - òóïîñòü!» - âîñêëèêíóò îíè è áóäóò, êîíå÷íî æå, ïðàâû<br />

:) Íî âåäü äåëàòü ýòî òåáÿ íèêòî íå çàñòàâëÿåò - ýòî âñåãî ëèøü î÷åíü óäîáíàÿ<br />

äëÿ íåáîëüøèõ ñàéòîâ âîçìîæíîñòü Â php åñòü ôóíêöèÿ include(), êîòîðàÿ ïðè<br />

ãðàìîòíîì èñïîëüçîâàíèè ïîçâîëÿåò ñîçäàâàòü ñëîæíåéøèå ïî ñâîåé ñòðóêòóðå<br />

ïðîåêòû, íå ìåøàÿ õòìë-òåãè ñ ïõï-êîäîì Ê ýòîìó ìû åùå âåðíåìñÿ â áóäóùèõ<br />

ìàòåðèàëàõ<br />

Âî âñåõ ïîñëåäóþùèõ ïðèìåðàõ ÿ áóäó îðèåíòèðîâàòüñÿ íà ìîäóëüíóþ óñòàíîâêó<br />

PHP - èáî âñòðå÷àåòñÿ îíà â 9999% ñëó÷àÿõ Îäíàêî äàæå åñëè òû íàòêíóëñÿ íà<br />

ñåðâåð, ãäå php ñòîèò òîëüêî êàê CGI èíòåðïðåòàòîð, òåáå áóäåò äîñòàòî÷íî<br />

ïîìåíÿòü ïåðâóþ ñòðîêó ñöåíàðèÿ íà ÷òî-íèáóäü òèïà #!/usr/bin/php, è ñöåíàðèé<br />

çàðàáîòàåò<br />

À òåïåðü ïåðåéäåì ê ðàññìîòðåíèþ îñíîâíûõ ôóíêöèé PHP<br />

Îñíîâíûå ôóíêöèè<br />

 ñòàðûõ âåðñèÿõ php ïåðåäàííûå ñêðèïòó ïåðåìåííûå èç html-ôîðìû (êàê<br />

âàðèàíò - ÷åðåç url) äîñòóïíû â ñöåíàðèè ñ èìåíàìè, êîòîðûå èìåëè<br />

ñîîòâåòñòâóþùèå ïîëÿ â ôîðìå Òå åñëè áûëî ïîëå name, òî îáðàòèòüñÿ ê<br />

ââåäåííûì â íåãî äàííûì ìîæíî ÷åðåç ïåðåìåííóþ $name  áîëåå ïîçäíèõ<br />

âåðñèÿõ, íà÷èíàÿ ñ 41, ñèòóàöèÿ íåñêîëüêî èçìåíèëàñü  äåôîëòíîé íàñòðîéêå<br />

PHP òåïåðü íå íàçíà÷àåò àâòîìàòè÷åñêè ïåðåìåííûå êàæäîìó èç ïîëó÷åííûõ<br />

ïîëåé, à ïîìåùàåò âñå ïîëó÷åííûå äàííûå â àññîöèàòèâíûå ìàññèâû:<br />

$_GET - ñîäåðæèò äàííûå, ïîëó÷åííûå ìåòîäîì GET<br />

$_POST - ñîäåðæèò äàííûå, ïîëó÷åííûå ìåòîäîì POST<br />

$_COOKIE - ñîäåðæèò äàííûå èç cookies<br />

$_REQUEST - ñîäåðæèò äàííûå, ïîëó÷åííûå èç âñåõ âîçìîæíûõ èñòî÷íèêîâ -<br />

GET, POST è cookies<br />

Ñëåäóåò, âèäèìî, ïîÿñíèòü, ÷òî ìàññèâ - ýòî, â îáùåì ñëó÷àå, ìíîæåñòâî<br />

íåêîòîðûõ ýëåìåíòîâ, êàæäûé èç êîòîðûõ èìååò ñâîé ñîáñòâåííûé óíèêàëüíûé<br />

èäåíòèôèêàòîð Âèçóàëüíî ìàññèâ ìîæíî ïðåäñòàâèòü ñåáå â âèäå øêàôà ñ<br />

êó÷åé ÿùè÷êîâ, íà äâåðöå êàæäîãî èç êîòîðûõ íàïèñàí íîìåð Îáðàòèòüñÿ ê<br />

ñîäåðæèìîìó êàêîé-òî ÿ÷åéêè ìîæíî, çíàÿ íîìåð äâåðöû è íàçâàíèå øêàôà<br />

Ïðåäïîëîæèì, ñóùåñòâóåò íåêèé ìàññèâ $array Òîãäà ññûëàòüñÿ íà åãî<br />

ýëåìåíòû ìîæíî ïóòåì óêàçàíèÿ èäåíòèôèêàòîðà ýëåìåíòà â êâàäðàòíûõ<br />

ñêîáêàõ, ó÷èòûâàÿ, ÷òî íóìåðàöèÿ ýëåìåíòîâ íà÷èíàåòñÿ ñ íóëÿ, òå íà ïåðâûé<br />

ýëåìåíò óêàæåò ïåðåìåííàÿ $array[0], íà âòîðîé - $array[1] Ñóùåñòâóþò òàêæå<br />

àññîöèàòèâíûå ìàññèâû, èäåíòèôèêàòîðîì ýëåìåíòîâ êîòîðûõ âûñòóïàåò íå<br />

öèôðà, à êàêîå-òî ñëîâî â àëôàâèòå [a-zA-Z0-9] Òåïåðü âåðíåìñÿ ê htmlôîðìàì<br />

Ïîñëå ïîëó÷åíèÿ íåêîòîðûõ äàííûõ ñðàçó ñîçäàåòñÿ ìàññèâ<br />

$_REQUEST, ýëåìåíòàìè êîòîðîãî ñëóæàò ââåäåííûå ïîëüçîâàòåëåì äàííûå<br />

Îáðàùàòüñÿ ê íèì ìîæíî, óêàçûâàÿ â êà÷åñòâå èäåíòèôèêàòîðîâ èìÿ<br />

ñîîòâåòñòâóþùåãî ïîëÿ â html-ôîðìå Íàïðèìåð, åñëè ïîëüçîâàòåëü îòïðàâèë<br />

ôîðìó ñ äâóìÿ ïîëÿìè: name è email, îáðàòèòüñÿ ê ñîäåðæèìîìó ýòèõ ïîëåé<br />

ìîæíî ÷åðåç ïåðåìåííûå $_REQUEST[name] è $_REQUEST[email]<br />

ñîîòâåòñòâåííî<br />

 PHP åñòü ÷åòûðå îñíîâíûõ òèïà äàííûõ: öåëîå ÷èñëî - integer, âåùåñòâåííîå<br />

÷èñëî - double, ñòðîêà - string è áóëåâñêèé òèï - boolean Ïîñëåäíèé, ïî<br />

îïðåäåëåíèþ, ìîæåò ïðèíèìàòü òîëüêî äâà ëîãè÷åñêèõ çíà÷åíèÿ TRUE èëè<br />

FALSE Òèï äàííûõ â áîëüøèíñòâå ñëó÷àåâ ÿâíî óêàçûâàòü íå òðåáóåòñÿ - îí<br />

îïðåäåëÿåòñÿ â çàâèñèìîñòè îò çíà÷åíèÿ ïåðåìåííîé Òàê, $a = 1 - ýòî öåëûé<br />

òèï, $a = 032 - âåùåñòâåííûé, à $a = «Hey, nigga» - ñòðîêîâîé Ê ñòðîêàì<br />

ïðèìåíèìû âñå îïåðàöèè, ïðèìåíèìûå ê öåëûì è äåéñòâèòåëüíûì ÷èñëàì Â<br />

PHP ìîæíî ñêëàäûâàòü, âû÷èòàòü, äåëèòü è óìíîæàòü ñòðîêó ñ äåéñòâèòåëüíûì<br />

÷èñëîì Íàïðèìåð, åñëè óìíîæèòü $b=»It is 5 o’clock» íà $c=2, òî ïîëó÷èòñÿ<br />

5*2=10<br />

Ìîæíî, íî î÷åíü ðåäêî íóæíî, ÿâíûì îáðàçîì óêàçàòü òèï äàííûõ ïåðåìåííîé:<br />

Ïóñòü áûëà ïåðåìåííàÿ $var=314 - äåéñòâèòåëüíî ÷èñëî<br />

$var=(int) $var - öåëîå ÷èñëî, ðàâíîå òðåì<br />

$var=(string) $var - óæå ñòðîêà «3»<br />

Ôóíêöèÿ isset($var) ïîçâîëÿåò ïðîâåðèòü, ïðèñâîåíî ëè ïåðåìåííîé $var êàêîåëèáî<br />

çíà÷åíèå Åñëè ïðèñâîåíî, òî ôóíêöèÿ âîçâðàùàåò ëîãè÷åñêîå TRUE, â<br />

ïðîòèâíîì ñëó÷àå - FALSE<br />

 PHP åñòü óñëîâíûé îïåðàòîð IF, ïîçâîëÿþùèé âûïîëíÿòü ðàçëè÷íûå áëîêè<br />

êîäà â çàâèñèìîñòè îò íåêîòîðûõ óñëîâèé IF âû÷èñëÿåò áóëåâñêîå çíà÷åíèå<br />

90

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!