HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Âçàèìîäåéñòâèå PHP è JavaScript

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript



Âçàèìîäåéñòâèå PHP è JavaScript


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

ßçûê PHP ïðåäíàçíà÷åí äëÿ íàïèñàíèÿ ñêðèïòîâ, êîòîðûå âûïîëíÿþòñÿ íà ñòîðîíå ñåðâåðà, à â áðàóçåð êëèåíòà îòïðàâëÿåòñÿ íå ñàì ñêðèïò, à òîëüêî ðåçóëüòàòû åãî ðàáîòû.  Ýòî îçíà÷àåò, ÷òî ïîëüçîâàòåëü, çàãðóçèâøèé ñòðàíèöó âàøåãî ñàéòà, íèêîãäà íå óâèäèò èñõîäíûé êîä ñêðèïòà è ìîæåò äàæå íå äîãàäûâàòüñÿ, ÷òî ñòðàíèöà ñîçäàíà äèíàìè÷åñêè.

 ñâîþ î÷åðåäü, íà ÿçûêå JavaScript ñîçäàþòñÿ èñêëþ÷èòåëüíî êëèåíòñêèå ñêðèïòû, êîòîðûå èñïîëíÿþòñÿ â áðàóçåðå êëèåíòà. Äëÿ ñåðâåðà ñêðèïòû JavaScript – ýòî îáû÷íûå òåêñòîâûå äàííûå, íè÷åì íå îòëè÷àþùèåñÿ îò ïðî÷åãî ñîäåðæèìîãî ñòðàíèöû.


Ðàçëè÷àþòñÿ ÿçûêè è ïî óðîâíþ áåçîïàñíîñòè. Ïðè âûïîëíåíèè PHP-ñêðèïòà âû ìîæåòå îáðàùàòüñÿ ê ôàéëîâîé ñèñòåìå ñåðâåðà, áàçàì äàííûõ è äðóãèì âíåøíèì îáúåêòàì, íà êîòîðûå âàì ïðåäîñòàâèëè ïðàâà àäìèíèñòðàòîðû. À âîò JavaScript îãðàíè÷åí òîëüêî âñòðîåííûìè îáúåêòàìè áðàóçåðà è ñ èõ ïîìîùüþ âû íå ñìîæåòå ÷èòàòü èëè ïèñàòü íåïîñðåäñòâåííî íà äèñê. Ñäåëàíî ýòî â ïåðâóþ î÷åðåäü äëÿ çàùèòû îò çëîóìûøëåííèêîâ, ò.ê. åñëè ðàçðåøèòü äîñòóï ñêðèïòàì ê ñèñòåìíîé èíôîðìàöèè è ôàéëàì – îáÿçàòåëüíî íàéä¸òñÿ óìåëåö, êîòîðûé íàïèøåò êîä, ñêðûòíî îòñûëàþùèé âàøè ôàéëû êîøåëüêîâ,  ëîãèíû, ïàðîëè è äðóãóþ çàêðûòóþ èíôîðìàöèþ íà àäðåñ óìåëüöà.


Ïîìèìî ïðî÷åãî, ïðîòîêîë HTTP, ïî êîòîðîìó ïåðåäàþòñÿ âñå âåá-ñòðàíèöû, íå ïîääåðæèâàåò ïîñòîÿííûõ ñîåäèíåíèé, ò.å. áðàóçåð ïîäêëþ÷àåòñÿ ê ñåðâåðó, çàïðàøèâàåò ñòðàíèöó, ïîëó÷àåò äàííûå è íåìåäëåííî îòêëþ÷àåòñÿ. Ýòî îçíà÷àåò, ÷òî âñå ñêðèïòû PHP çàâåðøàþòñÿ åù¸ ÄÎ òîãî, êàê íà÷íóòñÿ âûïîëíÿòüñÿ ñêðèïòû JavaScript.

Òàêèì îáðàçîì, ñàì ñîáîé íàïðàøèâàåòñÿ âûâîä: ïðÿìîå âçàèìîäåéñòâèå ñêðèïòîâ íà PHP è JavaScript ïîïðîñòó íåâîçìîæíî.

Íî íå âñ¸ òàê ôàòàëüíî, êîñâåííîå âçàèìîäåéñòâèå ìû îáåñïå÷èòü âñ¸-òàêè ìîæåì. Äëÿ ïåðåäà÷è äàííûõ ìåæäó êëèåíòñêîé è ñåðâåðíîé ñòîðîíîé ìîæíî èñïîëüçîâàòü îäèí èç òð¸õ âàðèàíòîâ:

  1. Âíåñåíèå èçìåíåíèé â òåêñò ñòðàíèöû (â ñêðèïò);
  2. Èñïîëüçîâàíèå Cookies;
  3. Èñïîëüçîâàíèå 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>
  …
  

 ýòîì ïðèìåðå ìû íà ýòàïå ôîðìèðîâàíèÿ ñòðàíèöû âïèñûâàåì â íå¸ çàäàííóþ ïåðåìåííóþ ñ íóæíûì íàì çíà÷åíèåì. Ðàáîòàåò ýòî òàê:

  1. Îò ïîëüçîâàòåëÿ ïîñòóïàåò çàïðîñ íà ïîëó÷åíèå ñòðàíèöû.
  2. Çàïóñêàåòñÿ PHP è íà÷èíàåò âûïîëíÿòü ñîîòâåòñòâóþùèé ñêðèïò.
  3.  ïðîöåññå âûïîëíåíèÿ ñêðèïò ñîçäà¸ò HTML-ñòðàíèöó, ñîäåðæàùóþ ñêðèïò JavaScript. Êàê ÿ óæå óïîìèíàë ðàíüøå, ñîçäàâàåìàÿ âåá-ñòðàíèöà ñ òî÷êè çðåíèÿ ñåðâåðà – îáû÷íûé òåêñò, êîòîðûé ìîæíî ïåðåä îòïðàâêîé ïîëüçîâàòåëþ ïðàâèòü êàê óãîäíî.
  4. Ãîòîâàÿ ñòðàíèöà ïåðåäà¸òñÿ â áðàóçåð ïîëüçîâàòåëÿ.
  5. Ïî îêîí÷àíèè çàãðóçêè ñòðàíèöû â áðàóçåð íà÷í¸ò âûïîëíåíèå íàø JavaScript. Ïðè ýòîì ñêðèïò íå áóäåò «çíàòü», êàêèì îáðàçîì îí ñîñòàâëåí – âðó÷íóþ ïðîãðàììèñòîì èëè àâòîìàòè÷åñêè ñêðèïòîì. Ãëàâíîå – ñêðèïò äîëæåí áûòü ñèíòàêñè÷åñêè âåðåí è ðàáîòîñïîñîáåí.

Âòîðîé ñïîñîá íåñêîëüêî ñëîæíåå, íî ïîçâîëÿåò ïåðåäàâàòü ïàðàìåòðû êàê ñî ñòîðîíû ñåðâåðà, òàê è ñî ñòîðîíû êëèåíòà. Ñóòü â òîì, ÷òî è PHP è JavaScript ïîçâîëÿþò ÷èòàòü è ñîõðàíÿòü cookies (ïîäðîáíåå ïðî cookies ðàññêàçûâàëîñü â îäíîì èç ïðåäûäóùèõ óðîêîâ). Íàïðèìåð (óñëîâíûé):

<html>

<?php // ïðè âûïîëíåíèè ñêðèïòà íà ñåðâåðå ñîõðàíÿåì // äàííûå â cookie setcookie(…); ?> <script> // à ýòîò ôðàãìåíò áóäåò âûïîëíåí ïîñëå // çàãðóçêè ñòðàíèöû // íàäî ëèøü ñ÷èòàòü cookie getcookie(…); </script>

Çäåñü ìû íà ñòîðîíå ñåðâåðà óñòàíàâëèâàåì cookie ñ íåîáõîäèìûìè íàì ïàðàìåòðàìè. Ïðè ýòîì êëèåíòó ïîñûëàåòñÿ ñïåöèàëüíûì îáðàçîì ñôîðìèðîâàííàÿ êîìàíäà è äàííûå, ò.å. âñå cookie ïåðåäàþòñÿ ÄÎ ïåðåäà÷è îñíîâíîé ñòðàíèöû. Ýòî çíà÷èò, ÷òî âñå óñòàíîâëåííûå ñåðâåðîì cookie áóäóò äîñòóïíû ïîñëå çàãðóçêè ñòðàíèöû, à çíà÷èò è ïðè âûïîëíåíèè ñêðèïòîâ JavaScript.

Àíàëîãè÷íî è äëÿ îáðàòíîé ïåðåäà÷è: âñå cookies, óñòàíîâëåííûå èç JavaScript, áóäóò ïåðåäàíû íà ñåðâåð ïðè ïåðâîì æå îáíîâëåíèè ñòðàíèöû.

Îñíîâíîé íåäîñòàòîê ýòîãî ìåòîäà – îãðàíè÷åíèå íà ðàçìåð ïåðåäàâàåìûõ äàííûõ. Ìàêñèìàëüíûé ðàçìåð îäíîãî cookie íå ìîæåò ïðåâûøàòü 4Êá, à ó íåêòîðûõ ïîëüçîâàòåëåé âîçìîæíîñòü óñòàíîâêè cookies âîîáùå îòêëþ÷åíà. Òàê æå ýòîò ñïîñîá ñîçäà¸ò áîëüøîé äîïîëíèòåëüíûé òðàôèê, ò.ê. âñå cookies àâòîìàòè÷åñêè îòïðàâëÿþòñÿ íà ñåðâåð ïðè êàæäîì îáíîâëåíèè ñòðàíèöû.

Ó îáîèõ ìåòîäîâ âçàèìîäåéñòâèÿ åñòü äâà îáùèõ íåäîñòàòêà:

  1. Âñå îáíîâëåíèÿ è èçìåíåíèÿ ïðîèñõîäÿò òîëüêî ïðè çàãðóçêå/îáíîâëåíèè ñòðàíèöû. Ýòî î÷åíü íåóäîáíî, îñîáåííî êîãäà ïðèõîäèòñÿ çàïîëíÿòü ãðîìîçäêèå è ñëîæíûå ôîðìû ñ äèíàìè÷åñêèì ñîäåðæèìûì, êîãäà ñîñòàâ è ñîäåðæèìîå ïîëåé èçìåíÿåòñÿ â çàâèñèìîñòè îò óæå ââåä¸ííûõ äàííûõ.
  2. Ïðîãðàììèñò äîëæåí äîñòàòî÷íî õîðîøî ðàçáèðàòüñÿ êàê â PHP, òàê è â JavaScript, ÷òîáû ãðàìîòíî íàïèñàòü êëèåíòñêèå è ñåðâåðíûå ñêðèïòû.

Ïîñëåäíèé ñïîñîá âçàèìîäåéñòâèÿ – AJAX. Ýòî íàèëó÷øèé, ïóñòü è íå ñàìûé ïðîñòîé ñïîñîá. Ajax – ýòî êîìáèíèðîâàííàÿ òåõíîëîãèÿ, èñïîëüçóþùàÿ âñå ïðåèìóùåñòâà PHP è JavaScript, ïîçâîëÿÿ èçìåíÿòü è îáíîâëÿòü äàííûå íà ñòðàíèöàõ âàøåãî ñàéòà «íà ëåòó», ò.å. áåç ïåðåçàãðóçêè ñòðàíèöû.

Äëÿ èñïîëüçîâàíèÿ Ajax îáû÷íî ñîçäà¸òñÿ òàê íàçûâàåìûå "frontend" è "backend". Backend – ýòî PHP-ñêðèïòû, âûïîëíÿþùèåñÿ íà ñåðâåðå. Îáû÷íî òàêèå ñêðèïòû âîçâðàùàþò ñòðóêòóðèðîâàííûå áëîêè äàííûõ (ìàññèâû), íå ñîäåðæàùèå íèêàêîãî îôîðìëåíèÿ.

Frontend – ýòî ñêðèïòû JavaScript, âûïîëíÿþùèåñÿ â áðàóçåðå ïîëüçîâàòåëÿ.  Îñíîâíîå èõ íàçíà÷åíèå – âûçâàòü òðåáóåìûé ñêðèïò backend`a, ïîëó÷èòü äàííûå è ïðàâèëüíî èõ âûâåñòè íà ñòðàíèöå, äîáàâèâ ïðè íåîáõîäèìîñòè îáðàìëåíèå èç òåãîâ è ñòèëåé.

Ïîäðîáíåå îá èñïîëüçîâàíèè Ajax âû ìîæåòå ïðî÷èòàòü â ñîîòâåòñòâóþùåì óðîêå ïî JavaScript íà ýòîì ñàéòå.

Òàêèì îáðàçîì, âçàèìîäåéñòâèå PHP è JavaScript íàëàäèòü âñ¸-òàêè ìîæíî, íî äëÿ ýòîãî íàäî õîðîøî ðàçáèðàòüñÿ â îáîèõ ÿçûêàõ. Èç ñîáñòâåííîãî îïûòà ìîãó ñêàçàòü, ÷òî äëÿ äîìàøíèõ ñòðàíè÷åê è íåáîëüøèõ ñàéòîâ ïðîùå âñåãî ïðèìåíÿòü ïåðâûé ñïîñîá (ïðÿìóþ çàïèñü òåêñòà ñêðèïòà). Äëÿ ïðîåêòîâ ïîêðóïíåå èëè äèíàìè÷íåå – Ajax. À âîò îò òðåòüåãî ñïîñîáà ÿ áû ðåêîìåíäîâàë âàì âîçäåðæàòüñÿ, ò.ê òàì ñëèøêîì ìíîãî ïîäâîäíûõ êàìíåé è óñëîâíîñòåé, òàêèõ êàê ðàçìåð cookie, èõ ïîääåðæêà áðàóçåðàìè, ôîðìàò äàííûõ, êîäèðîâêà è ò.ï.



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû