Red Hat Linux и другие RPM-based дистрибутивы (ASP, Mandrake.)
Стр 1 из 2Следующая ⇒ Telnet www.php5.ru 80 GET /php/php5ru.png HTTP/1.0 \r\n По экрану пробежит то, что вы увидите, если просмотрите этот png-файл в текстовом редакторе. I-2. HTML-формы. Методы отправки данных на сервер С HTML-формами вы наверняка уже встречались:
Сохранив данный код в HTML-файле и просмотрев его с помощью вашего любимого браузера, вы увидите привычную HTML-форму: Введите Ваше имя: Рассмотрим используемые в этом небольшом примере тэги подробнее. Тэг <form>, имеющий парный завершающий тэг </form>, собственно и задает форму. Его атрибуты - оба необязательные:
Если этот атрибут не указать, большинство браузеров (точнее говоря, все известные мне браузеры) отправляют форму на текущий документ, то есть "саму на себя". Это удобное сокращение, но по стандарту HTML атрибут action обязателен.
Если атрибут method не указан - подразумевается "GET".
Тэг <input> - задает элемент формы, определяемый атрибутом type:
Возможны и другие значения (да и <input> - не единственный тэг, задающий элемент формы), но их мы рассмотрим в следующих главах. Итак, что же происходит, когда мы нажимаем кнопку "OK"?
Отправка того же запроса вручную (с помошью telnet) выглядит следующим образом (предположим, что доменное имя сайта - www.example.com): telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0 \r\n Как вы, скорее всего, уже догадались, нажатие submit-кнопки в форме с методом отправки "GET" аналогично вводу соответствующего URL (со знаком вопроса и данными формы в конце) в адресной строке браузера: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK На самом деле, метод GET используется всегда, когда вы запрашиваете с сервера какой-либо документ, просто введя его URL, или щелкнув по ссылке. При использовании <form method="GET"... >, к URL просто добавляются знак вопроса и данные формы.
Возможно, все эти технические подробности и упражнения с telnet-ом кажутся вам невероятно скучными и даже ненужными ("а при чем тут PHP?"). А зря.:) Это основы работы по протоколу HTTP, которые необходимо знать назубок каждому Web-программисту, и это не теоретические знания - все это пригодится на практике. Теперь заменим первую строку нашей формы на следующую:
Мы указали метод отправки "POST". В этом случае данные отправляются на сервер несколько другим способом: telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0 \r\n При использовании метода POST данные формы отправляются уже после "двух Enter-ов" - в теле запроса. Все, что выше - на самом деле заголовок запроса (и когда мы использовали метод GET, данные формы отправлялись в заголовке). Для того, чтобы сервер знал, на каком байте закончить чтение тела запроса, в заголовке присутствует строка Content-Length; о том же, что данные формы будут переданы виде параметр1=значение1&параметр2=значение2..., причем значения передаются в виде urlencode - то есть, точно так же, как и с помощью метода GET, но в теле запроса, - серверу сообщает заголовок "Content-Type: application/x-www-form-urlencoded". О том, что такое urlencode - чуть ниже. Преимущество метода POST - отсутствие ограничения на длину строки с данными формы. При использовании метода POST невозможно отправить форму, просто "зайдя по ссылке", как было с GET. Для краткости изложения, введем термины "GET-форма" и "POST-форма", где префикс соответствует значению атрибута method тэга <form>. При использовании POST-формы, в ее атрибуте action можно указать после знака вопроса и параметры GET-формы. Таким образом, метод POST включает в себя и метод GET. I-3. Технология CGI В предыдущей главе мы с вами разобрались, как создать HTML-форму, и как браузер отправляет введенные в нее данные на сервер. Но пока что непонятно, что будет сервер делать с этими данными. Сам по себе веб-сервер умеет просто отдавать запрошенную страницу, и ничего более того, и ему все переданные данные формы, в общем-то, совершенно безразличны. Для того, чтобы можно было обработать эти данные с помощью какой-либо программы и динамически сформировать ответ броузеру, и была изобретена технология CGI (Common Gateway Interface).
Взглянем на этот URL: http://www.example.com/cgi-bin/form_handler.cgi. Первое предположение, которое можно сделать на его счет, обычно такое: сервер отдает содержимое файла form_handler.cgi из каталога cgi-bin. Однако, в случае с технологией CGI дело обстоит по-другому. Сервер запускает программу form_handler.cgi и передает ей данные формы. Программа же формирует текст, который передается браузеру в качестве ответа на запрос. Программу form_handler.cgi можно написать на любом языке программирования, главное - соблюдать в программе стандарт CGI. Можно использовать, например, популярный скриптовый язык Perl. А можно написать все и на Си. Или на shell-скриптах... Но мы, для примера, напишем эту программу на Си. Но сначала разберемся, как происходит обмен данными между веб-сервером и CGI-программой.
Это простейшая CGI-программа на Си, выводящая содержимое полученных от веб-сервера параметров форм. Браузер в результате получит примерно следующий код (если "засабмитить" на эту программу POST-форму из последнего примера):
<h1>Здравствуйте!</h1> Что при этом отобразится на экране пользователя, думаю, понятно без комментариев.:) Как видите, даже простейшая программа вывода параметров не так-то проста. Более того, по стандарту HTTP почти все не алфавитно-цифровые символы (в т.ч. и русские буквы) передаются в так называемом UrlEncoded-виде (%XX, где XX - шестнадцатеричный код символа), и, если добавить в приведенную Си-программу код расшифровки UrlEncode, она уже не поместится на экран. А это - всего лишь базовые операции. А как вырастет программа на Си, если необходимо работать с базой данных? Впрочем, написание CGI-программ на Си - довольно редкое извращение.:) Чаще всего это делают на Perl - языке, разработанном специально для обработки текстовых данных, а наличие модуля CGI делает написание CGI-скриптов намного более простой задачей. Здесь я не буду вас знакомить с Perl, отмечу лишь, что проблем остается достаточно: все же Perl не предназначен для Web, это язык универсальный. Да и сама технология CGI несовершенна: при каждом обращении происходит запуск программы (в случае с Perl - интерпретатор языка), а эта операция довольно ресурсоемкая: для домашней странички Васи Пупкина производительности, конечно, достаточно, но серьезный портал с десятками и сотнями тысяч хитов в сутки потребует уже огромных аппаратных мощностей. А теперь взглянем на веб-сервер Apache. По своей природе он модульный, и позволяет подключать расширения добавлением одной строки в конфигурационный файл. (Ну, хорошо, хорошо, двух строк.:)). Было бы прекрасно, если бы существовал скриптовый язык, заточенный именно под Web, подключаемый модулем к Апачу, не так ли? Ну, вы уже поняли, к чему я клоню:) - это и есть PHP.
В принципе, PHP можно скомпилировать и как CGI-приложение, и использовать так же, как и Perl - но это для нестандартных веб-серверов или особых извращенцев.:) II. PHP: Препроцессор Гипертекста В 1994-м году, один программист, по имени Rasmus Lerdorf, намучавшись с классическим перловым модулем CGI, решил написать несколько собственных Perl-скриптов, дабы было попроще создавать собственную домашнюю страницу, и назвал все это дело Personal Home Page (PHP). Через некоторое время ему понадобилось обрабатывать формы, ну и для увеличения производительности все было переписано на C - так появился Personal Home Page/Forms Interpreter (PHP/FI) 2.0. Труды свои Расмус, следуя принципам Open Source, выложил на всеобщее обозрение, и, в принципе, на некоторм количестве сайтов PHP/FI вполне успешно использовался, хотя был довольно примитивен. В 1997-м на PHP/FI - в поисках инструмента для удобного Веб-скриптинга - наткнулись два других программера - Andi Gutmans и Zeev Suraski. Сама идея им понравилась, но функциональность и скорость работы PHP/FI оставляли желать лучшего, и Andi и Zeev решились переписать PHP с нуля. Язык получился универсальный и мощный, и вскоре привлек внимание множества веб-разработчиков: к концу 1998 года PHP3 использовался на ~10% веб-серверов. Скромное название "Personal Home Page" уже не очень-то соответствовало реальности, и название было изменено на - в лучших Unix-традициях - рекурсивное: P HP: H ypertext P reprocessor. "Движок" PHP 4, названный Zend Engine, разрабатывался усилиями уже сформировавшегося и с тех пор непрерывно расрастающегося PHP community, и в 2000-м году вышла 4-я версия PHP, ставшая менее чем через полгода стандартом для Веб-разработки под Unix (и не только): каждый уважающий себя хостер предоставлял поддержку PHP. Сейчас подходит к концу разработка PHP5, основанного на новом Zend Engine 2... Впрочем, хватит лирики. Давайте посмотрим на простой PHP-скрипт. Сначала немного изменим HTML-форму из предыдущего раздела:
А теперь - form_handler.php:
В отличие от Си или Perl, php-скрипт представляет собой обычную, в общем-то, HTML-страницу: "просто так" написанные тэги передаются "как есть", будто бы это обычный html-ник. Сам скрипт заключается в специальные тэги <? и ?>, внутри которых мы используем для вывода текста оператор echo. Таких блоков может быть сколько угодно, все, что между ними, интерпретируется как обычный html. Переменные GET-запроса попадают в массив $_GET, переменные POST-запроса - в массив $_POST, серверные переменные (типа IP-адреса, имени скрипта и т.д.) - в $_SERVER, оператор "точка" (.) - объединение строк... Причем все служебные операции (чтение stdin и переменных среды, Url-декодирование) уже произвел сам PHP. Удобно, не так ли? Далее. Зачем нам два файла - HTML с формой и PHP-скрипт? Вполне достаточно одного скрипта:
Мы убрали из тэга form атрибут action - это значит, что форма отправляется "сама на себя", т.е. на текущий URL. Это иногда называют "postback form". В строке 4 с помощью оператора if проверяется, использовался ли для загрузки документа метод POST (аналог строки 13 примера на Си), и - если это так - в следующей строке выводится приветствие. На этой простой программе - своего рода Web-варианте "Hello World" - мы и завершим вводную главу. Самоучитель PHP: Глава 2. Установка и настройка Apache+PHP Содержание главы Версия для печати I. Установка Apache 1. - в ОС Windows 2. - в ОС семейства Unix II. Установка PHP 1. - в ОС Windows 2. - в ОС семейства Unix III. Настройка Apache+PHP IV. Установка PHP5 Прежде, чем приступить к изучению PHP, неплохо бы его установить. И, конечно же, понадобится веб-сервер - остановимся на Apache 1.3 как на самом популярном и стабильном в связке с PHP. Если вы решили использовать Apache 2, настоятельно рекомендуется собирать его с prefork MPM - см. документацию. Мы рассмотрим установку Apache+PHP в ОС Windows (рассматривая только "настоящие" ОС - NT/2000/XP/2003) и Unix (в частности, Linux и FreeBSD). Apache+PHP... "А как же MySQL?" - спросит продвинутый пользователь... А MySQL мы установим попозже - пока он нам не нужен. I. Установка Apache I-1. Установка Apache в ОС семейства Windows 1. Скачайте Windows-дистрибутив - Apache 1.3.xx Win32 Binary (Self extracting) - с ближайшего к вам зеркала: 2. Убедитесь, что логин, под которым вы работаете, входит в группу Administrators 3. Убедитесь, что 80-й TCP-порт не занят каким-либо другим сервисом или приложением, например, Microsoft IIS. Если 80-й порт занят, измените порт в настройках IIS-a (или другого сервиса) на другой, или же отключите или деинсталлируйте данное приложение. При желании, вы можете самостоятельно установить PHP под Microsoft IIS (следуя инструкции в install.txt), запустить простой скрипт, посмотреть, как это все тормозит, после чего снести IIS и установить Apache.:) 4. Запустите скачанный файл... Ну под винду-то вы софт ставить, надеюсь, умеете?:) Когда спросит, запускать ли Apache сервисом (для всех пользователей) - выбирайте "сервисом" (это настройка по умолчанию). I-2. Установка Apache в ОС семейства Unix Классически, в Unix программное обеспечение устанавливается путем сборки из исходников: · Скачиваем и распаковываем дистрибутив с httpd.apache.org с помощью броузера типа lynx/links или команды fetch/wget, например: $ fetch http://apache.rin.ru/dist/httpd/apache_1.3.31.tar.gz · Конфигурируем Apache: $ cd apache_1.3.31 Для тонкой настройки Apache, следует изучить файл INSTALL и указать необходимые параметры в строке./configure. Впрочем, как правило, настройки по умолчанию вполне подходят. · Компилируем Apache: $ make · Устанавливаем Apache: $ su - заходим под суперпользователем (root), если все предыдущие операции производили из-под своего обычного логина) На этапе configure, вероятно, вы увидите ошибки, связанные с отсутствием в системе необходимых библиотек. Их необходимо скачать и установить в соответствии с инструкциями, находящимися в файлах INSTALL дистрибутивов (обычно - это та же последовательность./configure && make && make install). Это дело довольно долгое и занудное, посему уже давно большинство Unix-систем включают в себя то или иное более удобное средство установки программного обеспечения. FreeBSD FreeBSD включает специальное средство для установки программного обеспечения - порты (ports), представляющие собой набор скриптов, автоматически скачивающих, настраивающих, компилирующих и устанавливающих программные продукты, включая необходимые для запуска библиотеки (dependences - зависимости). Я здесь не буду расписывать подробно, как в FreeBSD работать с портами - это описано в FreeBSD Handbook и множестве книг. Предположим, что в вашей системе библиотека портов установлена и обновлена. · Переходим в каталог порта Apache: · Запускаем из-под root'а команду сборки и установки Apache (дистрибутив скачается автоматически): · Если нужно автоматически запускать Apache при загрузке - прописываем в /etc/rc.conf: Собственно, вот и всё.;) При необходимости тонкой настройки изучите Makefile и добавьте необходимые параметры после команды make install (например, make install WITH_APACHE_SUEXEC=yes - для поддержки suexec). Red Hat Linux и другие RPM-based дистрибутивы (ASP, Mandrake...) Red Hat Linux включает менеджер пакетов RPM. Подход к установке из RPM принципиально другой -.rpm-пакеты содержат уже скомпилированные бинарники. Это дает выигрыш во времени (компилировать ничего не нужно), однако, лишает возможности собрать программу так, как вы хотите. Для установки Apache из rpm необходимо загрузить.rpm-файл Apache 1.3 (откуда - ищите сами гуглем: Apache Software Foundation (apache.org) не распространяет RPM-ки) и запустите: rpm -Uvh apache* Gentoo Linux Gentoo Linux - являющийся по сути своей "BSD-style Linux" - содержит portages - систему портов, похожую на используемую в FreeBSD. Установка производится с помощью команды emerge, например: $ cd /usr/portage/net-www/apache Не запускайте просто emerge apache - это приведет к установке Apache 2. Для автоматического запуска Apache при загрузке, введите # rc-update add apache default Другие дистрибутивы Linux Другие дистрибутивы Linux (Debian, Slackware,...) содержат собственные менеджеры пакетов - обратитесь к документации. В любом случае (даже в случае другой Unix OS) вы можете скомпилировать и установить Apache вручную - как описано выше. II. Установка PHP II-1. Установка PHP в ОС семейства Windows Скачайте со страницы www.php.net/downloads.php ZIP-архив Windows Binaries (PHP 4.x.x Zip package). Не качайте "PHP 4.x.x installer" - там отсутствуют многие необходимые файлы! Распакуйте архив в C:\PHP (или в любое другое место - но в дальнейшем будет предполагаться, что вы выбрали именно C:\PHP). Скопируйте файл php4ts.dll в каталог C:\WINDOWS\SYSTEM32 (или соответствующий). Скопируйте файл php.ini-dist в каталог C:\WINDOWS и переименуйте его в php.ini. II-2. Установка PHP в ОС семейства Unix Процесс установки PHP аналогичен установке Apache, за исключением того, что при сборке PHP вам понадобится указать гораздо больше конфигурационных опций. При ручной сборке из исходников - для этого необходимо скачать и распаковать исходный код с www.php.net/downloads.php - сначала запустите ./configure --help и изучите список параметров сборки (весьма внушительный). В любом случае, понадобится параметр --with-apxs=/путь/к/apxs - это необходимо для сборки модуля Апача mod_php. Например, если Apache установлен в /usr/local, то параметр будет выглядеть следующим образом: --with-apxs=/usr/local/sbin/apxs. После конфигурирования, запустите make, и make install. Чем больше вы используете опций, подключающих различные расширения, тем больше понадобится вручную скачивать и устанавливать необходимые библиотеки. Лучше, конечно, воспользоваться менеджером пакетов или портов вашей ОС. Независимо от выбранного способа, после успешной установки, скопируйте php.ini-dist в php.ini: FreeBSD PHP удобно устанавливать из портов FreeBSD. Воспользовавшись командой su для получения прав суперпользователя, перейдем в каталог /usr/ports/lang/php4. Есть два варианта сборки PHP из портов - интерактивный и с помощью параметров команды make. В первом случае, просто запустим команду make install. После того, как make скачает и распакует дистрибутив php, на экране появится окно со списком возможных опций конфигурирования - просто поставьте "крестики" против нужных. У интерактивного способа, при всем его удобстве, есть недостаток - выбранные однажды параметры нельзя сохранить для использования той же конфигурации повторно. Можно указать все нужные параметры в командной строке, например make install WITH_MYSQL=YES WITH_GD=YES. Список возможных опций находится в файле /usr/ports/lang/php4/scripts/php4_options (этим файлом, кстати, и пользуется скрипт, выводящий окно в интерактивном режиме). Update: недавно (видимо, с большого похмела) мейнтенер порта PHP решил все переделать. И не только решил (увы). Теперь сборка PHP со статической линковкой расширений (т.е. компиляция PHP и выбранных расширений в один so-файл) из портов невозможна. Либо ручками, либо - если динамические (shared) расширения устраивают - cd /usr/ports/lang/php4, make install, cd /usr/ports/lang/php4_extensions, make install. Для php5 - аналогично. Соответствующие строки extension=.. в php.ini пропишутся автоматически. Впрочем, при использовании PHP как Apache-модуля, динамические расширения ничуть не медленнее статических, так что не стоит особо расстраиваться по этому поводу.:)
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|