PHP-Fusion Mods
Регистрация или вход Главная | Архив новостей | Файловый архив | Статьи | Форум | Веб ссылки | Заказ плагина
Language
Select language:
English
Russian
Навигация
Главная
Архив новостей
Файловый архив
Статьи
Форум
Темы для php-fusion
FAQ
Веб ссылки
Поиск
Обратная связь
Учебник по php
Наши баннеры
Пожертвование

Заказ плагина
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 447
Посетитель: aligovs
Недавние визиты:
AlexALX 14 недель
aligovs 90 недель
Kolesilo 140 недель
aussietop... 166 недель
Tomax 179 недель
Kalqkwm 196 недель
mrcredoz 211 недель
Vveb--ws 288 недель
jikaka 400 недель
nui 417 недель

Наша кнопка
Последние статьи
Область применения CMS
Описание ядра PHP-Fu...
Как работает PHP
Основы на PHP
Устройство тем в PHP...
Загрузок
Новые загрузки
Theme_2
Theme_1
Theme_3
GeO
Stability Lite ...

Топ 5 загрузок
База игр [14735]
Errors Mod [12232]
Мод "index.php ... [11006]
Мод "проверочны... [8182]
PHP-Fusion Core... [7094]
Рекомендуем посетить

Как работает PHP

Отличие веб-приложения от обычной программы
Начиная писать программы для веба, многие начинающие программисты сталкиваются с такой ошибкой. Они рассматривают систему браузер-сервер, как обычное приложение. Интерактивное. Нажал кнопку - система среагировала. Провел мышкой - среагировала. Вся информация, которая доступна клиенту - доступна и программе, программа все время находится в памяти.
Так вот, в веб-программировании это не так!.
В момент, когда пользователь видит перед собой страницу и начинает совершать какие-то действия с ней, PHP уже завершил работу! И пользователь взаимодействует не с PHP скриптом, а со своей страницей HTML, которую он получил в браузер. Результатом работы скрипта на PHP в большинстве случаев является обычный текст. Текст HTML страницы. Которая отдается браузеру и показывается им, как обычный HTML. Вы сами можете в этом убедиться, написав в скрипте
echo "Привет, Вася!";
А потом просмотрев в браузере исходный текст полученной страницы. Никаких тегов PHP там нет! Только
Привет, Вася!

Потому, что PHP исполняется на сервере!

Сервер и браузер общаются, посылая друг другу запросы по особому протоколу - HTTP. Соединение может инициировать только браузер. Он посылает серверу запрос - показать такой-то файл. Сервер клиенту файл посылает.
Только так и происходит. Клиент запросил - сервер отдал. И забыл сразу о клиенте. Отсюда становится понятным ответ на вопрос, можно ли точно узнать, сколько юзеров сечас на сайте. Нельзя. потому, что "на сайте" нету ни одного. Они соединяются, запрашивают страницу, и отсоединяются. Не имеют постоянного cоединения с сервером, как, например, игроки в Кваку. Узнать можно только примерно, записывая время каждого соединения и выбирая записи за определенный промежуток времени.

Так же, отсюда становится ясно, что сервер может узнать о клиенте очень мало. Только то, что клиент пришлет в HTTP-запросе. Разрешения экрана там нет ;-)
Все, что сервер может знать о клиенте, можно посмотреть командой phpinfo()

Пример общения браузера с сревером:
Пользователь нажимает на ссылку, браузер посылает запрос серверу и ждет ответа:

Браузер -> PHP

PHP выполняет скрипт, отдает результат в браузер и завершает работу:

PHP -> браузер

Браузер отображает страницу, "просматривая" её на предмет ссылок, которые надо запросить у сервера (теги img src, script src и так далее) и посылает соответствующие запросы. Их можно увидеть, просматривая обмен заголовками, о чем речь будет чуть ниже:

Браузер -> сервер, Браузер -> сервер, Браузер -> сервер...

Пользователь заполняет форму и нажимает на кнопку:

Браузер -> PHP

PHP обрабатывает форму, записывает данные в базу и посылает браузеру заголовок
Location:

PHP -> браузер

Браузер, получив этот заголовок, запрашивает указанную страницу

Браузер -> PHP

PHP выполняет ее... и так далее.

Как работает РНР, где он выполняется?
РНР выполняется на сервере. Браузер посылает серверу запрос на страницу с php кодом. Сервер отдает эту страницу на исполнение интерпретатору PHP, интерпретатор генерирует HTML код, отдает серверу, а сервер посылает клиенту. Никакого РНР кода в браузер не попадает (это важно! Это значит, что увидеть исходный код PHP скрипта невозможно!). Единственный способ отправить что-то скрипту - это кликнуть по ссылке или нажать на кнопку в форме. Так, чтобы РНР обрабатывал какие-то действия пользователя в браузере - невозможно. РНР остался на сервере, ждать новых запросов с данными для обработки. PHP, но не скрипт! Скрипт, который выполнялся, отдавая пользователю страницу, завершил работу. Все данные, которые были в нем - пропали. Именно поэтому, если какая-то переменная нужна при последующих вызовах скрипта, ее надо этому скрипту передать снова.

Очень хорошая статья об основах веб-программирования находится на сайте PHP5.RU. Обязательно прочитайте её.

Как передать переменную из PHP в JavaScript и обратно?
Начнем с того, что никакую переменную передать, конечно же, невозможно. Поскольку переменная - это часть программы. И из одной в другую передать её нальзя. Передать можно только значение переменной. Т.е. текст. То есть, различия между "передачей переменной в яваскрипт" и формированием html таблицы НЕТ НИКАКОГО!
Отсюда вывод - "Передать переменную" в Javascript очень легко. Особенно, повторюсь, если учесть, что никакой "передачи" не происходит. PHP просто напросто генерирует яваскрипт точно так же, как и всю остальную страницу, вместе со всеми переменными.
Точно так же, как вы выводите в браузер строку "Hello World, это Вася Пупкин!", выводится и любой яваскрипт, со всеми своими переменными.
Единственное условие - вы должны представлять себе тот яваскрипт, который хотите получить.
К примеру в PHP есть переменная $name="Вася", значение которой надо передать в яваскрипт, чтобы получить
< script>name="Вася";
Мы просто пишем
$name="Вася";


То есть, фактически, мы просто сформировали нашим PHP скриптом некий текст, который выглядит, как нужный нам код на яваскрипте. Или, с другой стороны, мы писали свой яваскрипт, в нужных местах вставляя вывод переменных из PHP.
Чтобы не сойти с ума от разнообразных кавычек, настоятельно рекомендуется яваскрипт выводить не весь с помощью echo, а именно так, как написано здесь - закрыв тег PHP и открывая их только там, где нужно вывести переменную.

Как передать переменную из яваскрипта в PHP?
Точно так же, как и любые другие данные - послав запрос на сервер. Как посылать запросы - написано ниже.
Но надо четко понимать, что смысла в использовании яваскрипт переменных в PHP очень немного. Потому, что в том же самом php скриптнте получить значение из яваскрипта НЕЛЬЗЯ! Только при следующем запросе! Потому, что РНР на сервере, а яваскрипт - в браузере у клиента. И пхп остался на сервере.
Поэтому единственное осмылсенное действие, которое можно сделать на пхп с переменными яваскрипта - это передать их запросом картинки для статистики, как это делает, например, счетчик спайлог.
И база данных тоже осталась на сервере. Поэтому, если надо к ней обратиться по событию onClick, то по этому событию надо запрашивать сервер, который запустит PHP скрипт, который обратится к базе, сформирует новую HTML страницу и отдаст ее браузеру.
Или заранее загружать в массив яваскрипта все данные, которые могут понадобиться.

Способы общения браузера с сервером.
Способов, предоставляемых протоколом HTTP, немного. Это важная информация. Никаких других способов нет.
Способ общения мы рассматриваем с точки зрения нашего скрипта, формирующего страницу, отправляемую клиенту. Сам браузер, теоретически, может посылать, любые заголвки и любое их содержимое.
Но скриптом мы можем заставить браузер отправлять информацю серверу следующими способами:
Во-первых, это два стандартных метода запроса:
GET - это когда данные передаются в адресной строке, например, когда пользователь жмет ссылку.
POST - когда он нажимает кнопку в форме.
Сформировали страницу со ссылкой или с формой методом GET - запрос придет GET-ом. Сформировали с формой, в которой указан метод POST - придет POST-ом.
Определить, какой способ следует применять, очень просто. Если форма служит для запроса некой информации, напримр - при поиске, то ее следует отправлять методом GET. Чтобы можно было обновлять страницу, можно было поставить закладку и или послать ссылку другу.
Если же в результате отправки формы данные записываются или изменяются на сервере, то следует их отправлять методом POST, причем обязательно после обработки формы надо перенаправить браузер методом GET
На какую-нибудь страницу, пусть ту же самую, но уже без данных формы, чтобы при обновлении страницы они на записывались повторно. Например:
header("Location: ".$_SERVER['PHP_SELF']);
exit;

Во-вторых, мы можем управлять с сервера некоторыми HTTP заголовками. Это:
Cookie - если сервер поставил куку, и она не устарела, то браузер отсылает ее вместе с каждым запросом.
HTTP authentication - если сервер запрашивал HTTP авторизацию, то браузер при каждом обращении шлет введенные логин и пароль.
Все остальное - лишь использование этих методов. Например, когда запрос посылает яваскрипт, или когда по ссылке запрашивается PHP скрипт.

РНР может посылать HTTP заголовки двумя командами - header и setcookie.

Просмотр обмена HTTP заголовками
Я очень рекомендую попрактиковаться с HTTP заголовками, посмотреть, как ими обмениваются сервер и клиент.
Для этого есть множество разных способов. Если у вас стоит популярный download manager FlashGet, то можно использовать его. Так же заголовки показывает популярная программа Proxomitron, можно скачать какие-нибудь специальные утилиты.
Для IE можно предложить плагин http://www.blunck.info/iehttpheaders.html
Для браузера Mozilla есть удобный плагинhttp://livehttpheaders.mozdev.org/
Так же, существует много других утилит, легко находимых в сети по запросу HTTP sniffer.
Обязательно воспользуйтесь любым способом посмотреть HTTP заголовки, которыми обменивается браузер с сервером. Это очень хорошая практика, а так же проверка - что шлет твой скрипт. Удобно при отладке установки кук или проблемах с сессиями.

ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ
Из того факта, что PHP исполняется на сервере, и посылает результат своей работы браузеру, следует один простой, но очень важный вывод. Что PHP в принципе НЕ МОЖЕТ отобразить в браузере ничего такого, что невозможно было бы сделать средствами html.
ПРЕЖДЕ, чем что-то писать на PHP - попробуйте это сделать чистым HTML.
"Нажатие на Энтер" не переводит строку? А в html вы не пробовали таким образом строки переводить? Не получилось? Какая досада. Прочитайте, как в html сделать перевод строки и приходите снова.

PHP в результате своей работы формирует не картинку с текстами, как вы ее видите на экране монитора! PHP формирует HTML код! И этот код ЗНАЧИТЕЛЬНО отличается от того изображения, которое вы видите на экране. Если у вас что-то не получается, то надо всегда смотреть именно ИСХОДНЫЙ код страницы, а не то, как вам ее рисует браузер. В браузере Internet Explorer исходный код можно посмотреть, выбрав в меню Вид - Просмотр HTML-кода.
Если у вас не работает яваскрипт, сформированный PHP скриптом, или html показывает не то, что вы хотите, то исправить эту проблему очень просто.
1. Сначала пишете нужный яваскрипт или html руками. Если у вас с этим проблемы - обратитесь в соотвествующий форум - по яваскрипту или html. PHP тут не при чём.
2. Сравниваете с тем, что получено из PHP
3. Вносите исправления в PHP скрипт, чтобы текст, отдаваемый им, не отличался от написанного руками.

Браузер не умеет показывать файлы, в которые напихан одновременно и html картинки. Браузер умеет показывать только известные ему типы данных. В частности, это ИЛИ html ИЛИ картинка. Но не вместе. Если картинка - то ОДНА. Несколько картинок подряд браузер показывать не умеет. Браузер умеет показывать HTML, в котором прописаны ССЫЛКИ на несколько картинок.
Пожалуйста, прежде, чем изучать PHP - изучите хотя бы основы HTML! Прежде, чем что-то требовать от PHP - попробуйте сделать это на html.

Источник: phpclub.ru
Опубликовал AlexALX 10.02.2008 17:42 0 Комментариев · 24628 Прочтений · Для печати

Комментарии

Нет комментариев.

© 2007-2008 by AlexALX

Добавить комментарий

Пожалуйста залогиньтесь для добавления комментария.

Рейтинги

Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Голосование
Конвертировать мой мини-чат для php-fusion v7?

148 70% Да!
Да!

62 30% Нет.
Нет.

Проголосовало: 210
Открылся: 22/08/2009 18:52:10
Закрылся: 26/03/2010 23:22:44

Архив опросов

Мини-чат
Вам необходимо залогиниться.

Связь
Счётчики и топы
Счётчики
Главная | Архив новостей | Файловый архив | Статьи | Форум | Веб ссылки | Заказ плагина
© 2008-2011 by AlexALX
Powered by php-fusion v6 copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.
Designed by Alex Unknown © 2008.
10,524,554 уникальных посетителей