Âçàèìîäåéñòâèå PHP è JavaScript
Àâòîð: | Àðòåìüåâ Ñåðãåé Èãîðåâè÷ |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
ßçûê PHP ïðåäíàçíà÷åí äëÿ íàïèñàíèÿ ñêðèïòîâ, êîòîðûå âûïîëíÿþòñÿ íà ñòîðîíå ñåðâåðà, à â áðàóçåð êëèåíòà îòïðàâëÿåòñÿ íå ñàì ñêðèïò, à òîëüêî ðåçóëüòàòû åãî ðàáîòû. Ýòî îçíà÷àåò, ÷òî ïîëüçîâàòåëü, çàãðóçèâøèé ñòðàíèöó âàøåãî ñàéòà, íèêîãäà íå óâèäèò èñõîäíûé êîä ñêðèïòà è ìîæåò äàæå íå äîãàäûâàòüñÿ, ÷òî ñòðàíèöà ñîçäàíà äèíàìè÷åñêè.
 ñâîþ î÷åðåäü, íà ÿçûêå JavaScript ñîçäàþòñÿ èñêëþ÷èòåëüíî êëèåíòñêèå ñêðèïòû, êîòîðûå èñïîëíÿþòñÿ â áðàóçåðå êëèåíòà. Äëÿ ñåðâåðà ñêðèïòû JavaScript – ýòî îáû÷íûå òåêñòîâûå äàííûå, íè÷åì íå îòëè÷àþùèåñÿ îò ïðî÷åãî ñîäåðæèìîãî ñòðàíèöû.
Ðàçëè÷àþòñÿ ÿçûêè è ïî óðîâíþ áåçîïàñíîñòè. Ïðè âûïîëíåíèè PHP-ñêðèïòà âû ìîæåòå îáðàùàòüñÿ ê ôàéëîâîé ñèñòåìå ñåðâåðà, áàçàì äàííûõ è äðóãèì âíåøíèì îáúåêòàì, íà êîòîðûå âàì ïðåäîñòàâèëè ïðàâà àäìèíèñòðàòîðû. À âîò JavaScript îãðàíè÷åí òîëüêî âñòðîåííûìè îáúåêòàìè áðàóçåðà è ñ èõ ïîìîùüþ âû íå ñìîæåòå ÷èòàòü èëè ïèñàòü íåïîñðåäñòâåííî íà äèñê. Ñäåëàíî ýòî â ïåðâóþ î÷åðåäü äëÿ çàùèòû îò çëîóìûøëåííèêîâ, ò.ê. åñëè ðàçðåøèòü äîñòóï ñêðèïòàì ê ñèñòåìíîé èíôîðìàöèè è ôàéëàì – îáÿçàòåëüíî íàéä¸òñÿ óìåëåö, êîòîðûé íàïèøåò êîä, ñêðûòíî îòñûëàþùèé âàøè ôàéëû êîøåëüêîâ, ëîãèíû, ïàðîëè è äðóãóþ çàêðûòóþ èíôîðìàöèþ íà àäðåñ óìåëüöà.
Ïîìèìî ïðî÷åãî, ïðîòîêîë HTTP, ïî êîòîðîìó ïåðåäàþòñÿ âñå âåá-ñòðàíèöû, íå ïîääåðæèâàåò ïîñòîÿííûõ ñîåäèíåíèé, ò.å. áðàóçåð ïîäêëþ÷àåòñÿ ê ñåðâåðó, çàïðàøèâàåò ñòðàíèöó, ïîëó÷àåò äàííûå è íåìåäëåííî îòêëþ÷àåòñÿ. Ýòî îçíà÷àåò, ÷òî âñå ñêðèïòû PHP çàâåðøàþòñÿ åù¸ ÄÎ òîãî, êàê íà÷íóòñÿ âûïîëíÿòüñÿ ñêðèïòû JavaScript.
Òàêèì îáðàçîì, ñàì ñîáîé íàïðàøèâàåòñÿ âûâîä: ïðÿìîå âçàèìîäåéñòâèå ñêðèïòîâ íà PHP è JavaScript ïîïðîñòó íåâîçìîæíî.
Íî íå âñ¸ òàê ôàòàëüíî, êîñâåííîå âçàèìîäåéñòâèå ìû îáåñïå÷èòü âñ¸-òàêè ìîæåì. Äëÿ ïåðåäà÷è äàííûõ ìåæäó êëèåíòñêîé è ñåðâåðíîé ñòîðîíîé ìîæíî èñïîëüçîâàòü îäèí èç òð¸õ âàðèàíòîâ:
- Âíåñåíèå èçìåíåíèé â òåêñò ñòðàíèöû (â ñêðèïò);
- Èñïîëüçîâàíèå Cookies;
- Èñïîëüçîâàíèå Ajax;
Ïåðâûé ñïîñîá ïðèãîäåí òîëüêî äëÿ ïåðåäà÷è äàííûõ è ïàðàìåòðîâ ñ ñåðâåðà íà êëèåíò. Ñóòü ìåòîäà ïðîñòà: ïðè ãåíåðàöèè ñòðàíèöû íåîáõîäèìûå ïàðàìåòðû çàøèâàþòñÿ ïðÿìî â òåêñò ñêðèïòà.
<html> … <script type=”text/javascript”> <?php If ( $login == ”admin” ) echo “var isAdmin=true” else echo ”var isAdmin=false” ?> If(isAdmin) Document.write(“Im Administrator”); Else Document.write(“Im user”); </script> …
 ýòîì ïðèìåðå ìû íà ýòàïå ôîðìèðîâàíèÿ ñòðàíèöû âïèñûâàåì â íå¸ çàäàííóþ ïåðåìåííóþ ñ íóæíûì íàì çíà÷åíèåì. Ðàáîòàåò ýòî òàê:
- Îò ïîëüçîâàòåëÿ ïîñòóïàåò çàïðîñ íà ïîëó÷åíèå ñòðàíèöû.
- Çàïóñêàåòñÿ PHP è íà÷èíàåò âûïîëíÿòü ñîîòâåòñòâóþùèé ñêðèïò.
-  ïðîöåññå âûïîëíåíèÿ ñêðèïò ñîçäà¸ò HTML-ñòðàíèöó, ñîäåðæàùóþ ñêðèïò JavaScript. Êàê ÿ óæå óïîìèíàë ðàíüøå, ñîçäàâàåìàÿ âåá-ñòðàíèöà ñ òî÷êè çðåíèÿ ñåðâåðà – îáû÷íûé òåêñò, êîòîðûé ìîæíî ïåðåä îòïðàâêîé ïîëüçîâàòåëþ ïðàâèòü êàê óãîäíî.
- Ãîòîâàÿ ñòðàíèöà ïåðåäà¸òñÿ â áðàóçåð ïîëüçîâàòåëÿ.
- Ïî îêîí÷àíèè çàãðóçêè ñòðàíèöû â áðàóçåð íà÷í¸ò âûïîëíåíèå íàø JavaScript. Ïðè ýòîì ñêðèïò íå áóäåò «çíàòü», êàêèì îáðàçîì îí ñîñòàâëåí – âðó÷íóþ ïðîãðàììèñòîì èëè àâòîìàòè÷åñêè ñêðèïòîì. Ãëàâíîå – ñêðèïò äîëæåí áûòü ñèíòàêñè÷åñêè âåðåí è ðàáîòîñïîñîáåí.
Âòîðîé ñïîñîá íåñêîëüêî ñëîæíåå, íî ïîçâîëÿåò ïåðåäàâàòü ïàðàìåòðû êàê ñî ñòîðîíû ñåðâåðà, òàê è ñî ñòîðîíû êëèåíòà. Ñóòü â òîì, ÷òî è PHP è JavaScript ïîçâîëÿþò ÷èòàòü è ñîõðàíÿòü cookies (ïîäðîáíåå ïðî cookies ðàññêàçûâàëîñü â îäíîì èç ïðåäûäóùèõ óðîêîâ). Íàïðèìåð (óñëîâíûé):
<html><?php // ïðè âûïîëíåíèè ñêðèïòà íà ñåðâåðå ñîõðàíÿåì // äàííûå â cookie setcookie(…); ?> <script> // à ýòîò ôðàãìåíò áóäåò âûïîëíåí ïîñëå // çàãðóçêè ñòðàíèöû // íàäî ëèøü ñ÷èòàòü cookie getcookie(…); </script>
Çäåñü ìû íà ñòîðîíå ñåðâåðà óñòàíàâëèâàåì cookie ñ íåîáõîäèìûìè íàì ïàðàìåòðàìè. Ïðè ýòîì êëèåíòó ïîñûëàåòñÿ ñïåöèàëüíûì îáðàçîì ñôîðìèðîâàííàÿ êîìàíäà è äàííûå, ò.å. âñå cookie ïåðåäàþòñÿ ÄÎ ïåðåäà÷è îñíîâíîé ñòðàíèöû. Ýòî çíà÷èò, ÷òî âñå óñòàíîâëåííûå ñåðâåðîì cookie áóäóò äîñòóïíû ïîñëå çàãðóçêè ñòðàíèöû, à çíà÷èò è ïðè âûïîëíåíèè ñêðèïòîâ JavaScript.
Àíàëîãè÷íî è äëÿ îáðàòíîé ïåðåäà÷è: âñå cookies, óñòàíîâëåííûå èç JavaScript, áóäóò ïåðåäàíû íà ñåðâåð ïðè ïåðâîì æå îáíîâëåíèè ñòðàíèöû.
Îñíîâíîé íåäîñòàòîê ýòîãî ìåòîäà – îãðàíè÷åíèå íà ðàçìåð ïåðåäàâàåìûõ äàííûõ. Ìàêñèìàëüíûé ðàçìåð îäíîãî cookie íå ìîæåò ïðåâûøàòü 4Êá, à ó íåêòîðûõ ïîëüçîâàòåëåé âîçìîæíîñòü óñòàíîâêè cookies âîîáùå îòêëþ÷åíà. Òàê æå ýòîò ñïîñîá ñîçäà¸ò áîëüøîé äîïîëíèòåëüíûé òðàôèê, ò.ê. âñå cookies àâòîìàòè÷åñêè îòïðàâëÿþòñÿ íà ñåðâåð ïðè êàæäîì îáíîâëåíèè ñòðàíèöû.
Ó îáîèõ ìåòîäîâ âçàèìîäåéñòâèÿ åñòü äâà îáùèõ íåäîñòàòêà:
- Âñå îáíîâëåíèÿ è èçìåíåíèÿ ïðîèñõîäÿò òîëüêî ïðè çàãðóçêå/îáíîâëåíèè ñòðàíèöû. Ýòî î÷åíü íåóäîáíî, îñîáåííî êîãäà ïðèõîäèòñÿ çàïîëíÿòü ãðîìîçäêèå è ñëîæíûå ôîðìû ñ äèíàìè÷åñêèì ñîäåðæèìûì, êîãäà ñîñòàâ è ñîäåðæèìîå ïîëåé èçìåíÿåòñÿ â çàâèñèìîñòè îò óæå ââåä¸ííûõ äàííûõ.
- Ïðîãðàììèñò äîëæåí äîñòàòî÷íî õîðîøî ðàçáèðàòüñÿ êàê â PHP, òàê è â JavaScript, ÷òîáû ãðàìîòíî íàïèñàòü êëèåíòñêèå è ñåðâåðíûå ñêðèïòû.
Ïîñëåäíèé ñïîñîá âçàèìîäåéñòâèÿ – AJAX. Ýòî íàèëó÷øèé, ïóñòü è íå ñàìûé ïðîñòîé ñïîñîá. Ajax – ýòî êîìáèíèðîâàííàÿ òåõíîëîãèÿ, èñïîëüçóþùàÿ âñå ïðåèìóùåñòâà PHP è JavaScript, ïîçâîëÿÿ èçìåíÿòü è îáíîâëÿòü äàííûå íà ñòðàíèöàõ âàøåãî ñàéòà «íà ëåòó», ò.å. áåç ïåðåçàãðóçêè ñòðàíèöû.
Äëÿ èñïîëüçîâàíèÿ Ajax îáû÷íî ñîçäà¸òñÿ òàê íàçûâàåìûå "frontend" è "backend". Backend – ýòî PHP-ñêðèïòû, âûïîëíÿþùèåñÿ íà ñåðâåðå. Îáû÷íî òàêèå ñêðèïòû âîçâðàùàþò ñòðóêòóðèðîâàííûå áëîêè äàííûõ (ìàññèâû), íå ñîäåðæàùèå íèêàêîãî îôîðìëåíèÿ.
Frontend – ýòî ñêðèïòû JavaScript, âûïîëíÿþùèåñÿ â áðàóçåðå ïîëüçîâàòåëÿ. Îñíîâíîå èõ íàçíà÷åíèå – âûçâàòü òðåáóåìûé ñêðèïò backend`a, ïîëó÷èòü äàííûå è ïðàâèëüíî èõ âûâåñòè íà ñòðàíèöå, äîáàâèâ ïðè íåîáõîäèìîñòè îáðàìëåíèå èç òåãîâ è ñòèëåé.
Ïîäðîáíåå îá èñïîëüçîâàíèè Ajax âû ìîæåòå ïðî÷èòàòü â ñîîòâåòñòâóþùåì óðîêå ïî JavaScript íà ýòîì ñàéòå.
Òàêèì îáðàçîì, âçàèìîäåéñòâèå PHP è JavaScript íàëàäèòü âñ¸-òàêè ìîæíî, íî äëÿ ýòîãî íàäî õîðîøî ðàçáèðàòüñÿ â îáîèõ ÿçûêàõ. Èç ñîáñòâåííîãî îïûòà ìîãó ñêàçàòü, ÷òî äëÿ äîìàøíèõ ñòðàíè÷åê è íåáîëüøèõ ñàéòîâ ïðîùå âñåãî ïðèìåíÿòü ïåðâûé ñïîñîá (ïðÿìóþ çàïèñü òåêñòà ñêðèïòà). Äëÿ ïðîåêòîâ ïîêðóïíåå èëè äèíàìè÷íåå – Ajax. À âîò îò òðåòüåãî ñïîñîáà ÿ áû ðåêîìåíäîâàë âàì âîçäåðæàòüñÿ, ò.ê òàì ñëèøêîì ìíîãî ïîäâîäíûõ êàìíåé è óñëîâíîñòåé, òàêèõ êàê ðàçìåð cookie, èõ ïîääåðæêà áðàóçåðàìè, ôîðìàò äàííûõ, êîäèðîâêà è ò.ï.