Мова 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 ( "Я адміністратор"); Else Document.write ( "Я користувач"); </ 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, їх підтримка браузерами, формат даних, кодування і т.п.
Артем'єв Сергій Ігорович
Передача змінних з JavaScript в PHP
Розглянемо особливості роботи зі скриптами JavaScript у PHP. На відміну від PHP, скрипти JavaScript виконуються на машині клієнта, в той час як PHP серверний мова програмування. На відміну, від технології Java або ASP.NET він не має в своєму складі засобів для роботи на стороні клієнта. Тому для створення ефективних Web-додатків необхідно комбінувати PHP і JavaScript скрипти. Існує дві можливості такої взаємодії: передача змінних з JavaScript в PHP і динамічне формування скриптів JavaScript засобами PHP.
Однією з поширеною задачею є визначення дозвіл екрану і глибину кольору монітора відвідувача сторінки засобами JavaScript з подальшою передачею цих дані в PHP-скрипт.
Це досить часто зустрічається завдання, особливо при написанні лічильників відвідувань і створення "динамічного дизайну".
Скрипт JavaScript, що виконує необхідні дії, розміщений файлі index.html, вміст якого наведено в наступному лістингу:
файл index.html
<Script Language = "JavaScript"> var height = 0; var width = 0; colorDepth = screen.colorDepth; if (self.screen) {width = screen.width height = screen.height} else if (self.java) {var jToolKit = java.awt.Toolkit.getDefaultToolkit (); var scrsize = jToolKit.getScreenSize (); width = scrsize.width; height = scrsize.height; } If (width> 0 && height> 0) {// Виробляємо перенаправлення на скрипт counter.php, передаючи в // змінної scrsize рядок, що містить значення width, // height і colorDepth. window.location.href = "http: //localhost/view.php? width =" + width + "& height =" + height + "& color =" + colorDepth; } Else exit (); </ Script>
Після виконання цього коду відбувається автоматичний перехід на сторінку view.php, в якому відбувається висновок дозволу екрану і глибини кольору у вікно браузера (див. Лістинг нижче).
Отриману інформацію можна поміщати в базу даних для набору статистики про найбільш поширених дозволах екранів, відвідувачів сайтів.
файл view.php
<? Php echo "Ширина:". $ _GET [ 'width']; echo "Висота:". $ _GET [ 'height']; echo "Кольорове <sup> дозвіл </ sup>:". $ _GET [ 'color']; ?>
Як видно, робота з даними з JavaScript, аналогічна роботі з даними, що відправляються методом GET.
Чи знаєте Ви, що спостерігачі - це операції, які використовують в якості аргументу об'єкти відповідного їм типу і повертають елемент іншого типу, вони використовуються для отримання інформації про об'єкт. Сюди відносяться, наприклад, операції типу size.
НОВИНИ ФОРУМУ
Лицарі теорії ефіру 13.06.2019 - 5:11: ЕКОЛОГІЯ - Ecology -> ПРОБЛЕМА ГЛОБАЛЬНОЇ ЗАГИБЕЛІ бджіл ТА ІНШИХ запилювачів РОСЛИН - Карім_Хайдаров.
12.06.2019 - 9:05: ВІЙНА, ПОЛІТИКА І НАУКА - War, Politics and Science -> Проблема державного тероризму - Карім_Хайдаров.
11.06.2019 - 18:05: ЕКСПЕРИМЕНТАЛЬНА ФІЗИКА - Experimental Physics -> Експерименти Серлі і його послідовників з магнітами - Карім_Хайдаров.
11.06.2019 - 18:03: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітництво від Андрія Маклакова - Карім_Хайдаров.
11.06.2019 - 13:23: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітництво від В'ячеслава Осієвського - Карім_Хайдаров.
11.06.2019 - 13:18: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітництво від Світлани Віслобоковой - Карім_Хайдаров.
11.06.2019 - 6:28: Астрофізики - Astrophysics -> До 110 річчя Тунгускою катастрофи - Карім_Хайдаров.
10.06.2019 - 21:23: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітництво від Володимира Васильовича Квачкова - Карім_Хайдаров.
10.06.2019 - 19:27: СОВІСТЬ - Conscience -> Вищий розум - Карім_Хайдаров.
10.06.2019 - 19:24: ВІЙНА, ПОЛІТИКА І НАУКА - War, Politics and Science -> ЗА НАМИ страви - Карім_Хайдаров.
10.06.2019 - 19:14: СОВІСТЬ - Conscience -> РОСІЙСЬКИЙ СВІТ - Карім_Хайдаров.
10.06.2019 - 8:40: ЕКОНОМІКА І ФІНАНСИ - Economy and Finances -> КОЛЛАПС СВІТОВОЇ ФІНАНСОВОЇ СИСТЕМИ - Карім_Хайдаров.
Php If ($ login == "admin") echo "var isAdmin = true" else echo "var isAdmin = false"?
Php // при виконанні скрипта на сервері зберігаємо // дані в cookie setcookie (...); ?
Php?
GET [ 'color']; ?