Серверные скрипты. Введение PHP


Оглавление (нажмите, чтобы открыть):

Серверные скрипты для начинающих

HTML-файл может содержать текст, html-теги и скрипты (сценарии).

Скрипты в html-файле могут выполняться на сервере.

Серверные скрипты

Серверное скриптование называют программированием поведения сервера.

Клиентское скриптование называют программированием поведения браузера.

Что такое серверные скрипты?

Обычно, когда браузер запрашивает html-файл, сервер возвращает (передает) готовый html-файл, но если файл содержит серверные скрипты, они сначал выполняются на сервере, лишь затем результат передается браузеру в виде простого html-кода.

Что могут сделать серверные скрипты?

  • Динамически изменить, добавить или изменить любую информацию на веб-страницу
  • Реагировать на запросы пользователей или отправку данных из форм HTML
  • Доступ к любым данным или базам данных и возвращение (передача) результата в браузер
  • Настройка веб-страницы в соответствии с предпочтениями пользователей
  • Обеспечение безопасности, так как код серверных скриптов не может быть просмотрен с помощью браузера

Внимание: Так как скрипты выполняются на сервере, вам не требуется браузер с поддержкой чтения ASP/PHP файлов (файлы серверных скриптов). В этом важное отличие серверных скриптов от клиентских, потому что оборудование пользователя может не поддерживать клиентские скрипты.

ASP и PHP

На нашем сайте есть учебники по серверным скриптам ASP и PHP.

Вы не можете увидеть код серверного скрипта через обычный веб-браузер, вы можете увидеть только результат выполнения скрипта, который представлен в виде обычного html-кода. Это связано с тем, что скрипты выполняются на сервере, а в браузер отправляется результат выполнения скрипта.

Заметка: Для обучения серверному программированю надо установить сервер на свой компьютер. Ну об этом в соответсвующих разделах учебника.

СТАТИСТИКА

ССЫЛКИ

Вопросы и пожелания вы можете отправить на почту: superxxx83@mail.ru или tokamame@gmail.com

На сайте установлена система отлова ошибок. Выделите ошибку и нажмите Ctrl+Enter. Сделаем Рунет грамотнее вместе!

Технология серверного скриптового языка PHP

Основы технологии PHP

Новые технологии PHP

Новостные протоколы

Учебно-справочный материал

Прикладные пакеты для web-разработки

Что такое PHP?

В 1995 году датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf) создал набор скриптов на основе Perl/CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl — интерпретатора скриптов — перестало хватать, и в 1996 году Лердорф разработал с использованием языка C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter — «Личная Домашняя Страница / Интерпретатор форм»). PHP/FI включал базовую функциональность современного PHP: оформление переменных в стиле Perl ($имя_переменной для вывода значения), автоматическую обработку форм и встраиваемость в HTML-текст и многое другое. Новорождённый язык отличался от своего прародителя более простым и ограниченным синтаксисом.

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на языке C — PHP/FI 2.0. Её использовали около 1 % (приблизительно 50 тысяч) всех интернет-доменов мира.

PHP (рекурсивный акроним для «PHP: Hypertext Preprocessor«) это широко распространённый Открытый ресурс — язык скриптинга (сценариев) общего назначения, который создан специально для Web и который можно внедрять в HTML.

Простой ответ, но что это означает? Вот пример:

Пример 1-1. Вводный пример

Заметьте, как это отличается от скриптов, написанных на языке Perl или языке C — вместо написания программы с большим количеством команд для вывода HTML, вы пишете HTML-разметку с некоторым количеством встроенного кода (скриптами) для выполнения каких-либо действий (в данном случае — для вывода некоторого текста). Код PHP заключён в специальные начальный и конечный тэги, что позволяет вам входить в и выходить из «режима PHP».

PHP отличается от других подобных языков, типа клиентского JavaScript, тем, что код выполняется на сервере. Если вы имеете скрипт, аналогичный вышеприведённому на сервере, то клиент получит результат работы этого скрипта, не имея возможности определить, каков был исходный код. Вы также можете сконфигурировать ваш web-сервер таким образом, чтобы он обрабатывал все ваши HTML-файлы с помощью PHP, и реально пользователь не будет иметь способа определить, что у вас «в рукаве». Мало того, есть серверная ZIP-программа Zend Guard, которая может скрыть текст РНР-скрипта даже от хакеров, вскрывших сайт и хозяев хостинга, распаковывая зашифрованный скрипт только для передачи РНР-процессору во время выполнения скрипта на сайте.

PHP позволяет расположить клиента базы данных на сервере, тем самым защищая ее от посягательств, то есть реализует многоуровневую клиент-серверную технологию с так называемыми «толстым» и «тонким» клиентами.

Наилучшим качеством PHP является то, что он предельно прост для новичка в программировании, но предлагает много продвинутых возможностей для программиста-профессионала. Не пугайтесь, увидев длинный список возможностей PHP. Вы скоро освоитесь и через несколько часов начнёте писать код.

Хотя разработка на PHP сконцентрирована вокруг серверного скриптинга, вы можете сделать с помощью РНР ещё много чего.

скрипты pHP

Сервер Apache.

Данный раздел сайта создан, отлажен и протестирован на домашнем компьютере с установленным сервером Apache, Perl, PHP, SendMail, MySQL, phpMyAdmin. Подробную информацию об установке и проверке работоспособности этих программных продуктов вы можете найти на страницах сайта.

В этом разделе вы можете также узнать (на работающих примерах) — как правильно включать в страницы сайта:

Директивы SSI

SSI — Server-Side Includes, включения на стороне сервера — набор команд, позволяющий значительно дополнить содержимое вашего ресурса необходимой информацией.

Perl скрипты.

Скрипты написанные на языке- интерпретаторе Perl не являются исполняемыми программами, содержащими описания данных и алгоритмы решения задачи, переведенные в инструкции на машинных кодах. Поэтому, для его выполнения, требуется интерпретатор, переводящий инструкции Perl из текстового формата в двоичный и, затем, выполняющих их на стороне сервера.

PHP скрипты.

PHP (PHP: Hypertext Preprocessor) — интерпретируемый язык программирования веб-приложений, код которого непосредственно включается в текст HTML- документов. Исполняется как модуль Apache (SAPI) или CGI-программа на стороне сервера. После обработки интерпретатором PHP, сервер заменяет код PHP результатом его выполнения и передает на браузер. Клиент получает сгенерированную PHP-скриптом страницу HTML (PDF, Flash, XML, PNG и др.).

Переписав или создав самостоятельно страницы сайта, аналогичные приведенным в этом разделе и разместив их в каталоге —

C:/httpserver.ru/www/

(если устанавливали сервер Apache по приведенным здесь рекомендациям), вы получите главный сайт сервера Apache. Он будет установлен на последних, доступных в настоящее время версиях серверных программных продуктов:
Apache 2.2.14,
ActivePerl-5.8.8.824,
PHP 5.2.8,
MySQL 6.0,
phpMyAdmin 2.11.6
Таким образом, вы будете иметь самое современное серверное программное обеспечение, какое не сможет вам предоставить ни один хостинг-провайдер.

Ниже вы видите календарь. Это результат выполнения Perl скрипта, вызванного директивой:

Главный сайт сервера Apache — скрипты php.

Так как, механизма SSI (Server Side Include — включения на стороне сервера) бывает недостаточно, то для сложных задач рекомендуется использование PHP.
PHP (PHP: Hypertext Preprocessor) — интерпретируемый язык программирования веб-приложений, код которого непосредственно включается в текст HTML- документов и имеющий много общего с C, Java и Perl. Исполняется как модуль Apache (SAPI) или CGI-программа на стороне сервера. После обработки интерпретатором PHP, сервер заменяет код PHP результатом его выполнения и передает на браузер. Клиент получает сгенерированную PHP-скриптом страницу HTML (PDF, Flash, XML, PNG и др.). PHP был создан специально для разработки Web-приложений. Начиная с пятой версии, PHP наряду с процедурным, включает некоторые механизмы поддерживающие философию объектно-ориентированного программирования (ООП), которая в предыдущих версиях была только обозначена.
Возможности PHP не ограничиваются только генерацией HTML-страниц. Имеется механизмы для формирования изображений, PDF и Flash (используя libswf и Ming) файлов, выдачи любых текстовых данных. PHP также способен автоматически генерировать и сохранять их в файловой системе сервера, организуя кеш динамического содержания, расположенный на сервере.

Чтобы отлаживать созданные вами или готовые php скрипты, на локальном (домашнем) компьютере, необходимо установить:

Apache HTTP Server 2.2.14

Следуя, приведенным рекомендациям, вы получите
рабочий сервер Apache 2.2.14

Подробная информация по установке, на страницах: Apache — этапы установки и Apache 2.2.14 — установка.

и интерпретатор PHP из PHP 5.2.8 zip package

Следуя, приведенным рекомендациям, вы установите
интерпретатор PHP

Подробная информация по установке, на страницах: установка PHP 5.2.8 zip и установка PHP 5.2.8 installer.

После установки и проверки работоспособности сервера Apache и интерпретатора PHP,
можно приступать к созданию и тестированию скриптов php.

Создайте страницу с расширением .php, например — index.php
и включите в неё строку:

echo ‘ Вы уже используете скрипты на языке PHP ‘ ; ?>

echo ‘Вы уже используете скрипты на языке PHP’; ?>

PHP, как основной инструмент разработки

Введение в PHP

PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом.

Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере.

Аббревиатура PHP означает «Hypertext Preprocessor (Препроцессор Гипертекста)». Синтаксис языка берет начало из C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц.

Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP.

Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Вы даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта.

PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем.

PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов.

Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминирование в области языков web -программирования, по крайней мере, в ближайшее время.

Возможности PHP

Возможности PHP очень большие. Главным образом, область применения PHP сфокусирована на написание скриптов, работающих на стороне сервера; таким образом, PHP способен выполнять всё то, что выполняет любая другая программа CGI. Например, обрабатывать данных форм, генерировать динамические страницы, отсылать и приниматьcookies. Но PHP способен выполнять и множество других задач.

Существуют три основных области, где используется PHP.

· Создание скриптов для выполнения на стороне сервера. PHP наиболее широко используется именно таким образом. Все, что вам понадобится, это парсер PHP (в виде программы CGI или серверного модуля), вебсервер и браузер. Чтобы Вы могли просматривать результаты выполнения PHP-скриптов в браузере, вам нужен работающий вебсервер и установленный PHP.

· Создание скриптов для выполнения в командной строке. Вы можете создать PHP-скрипт, способный запускаться вне зависимости от вебсервера и браузера. Все, что вам потребуется — парсер PHP. Такой способ использования PHP идеально подходит для скриптов, которые должны выполняться регулярно, например, с помощью cron (на платформах *nix или Linux) или с помощью планировщика задач (Task Scheduler) на платформах Windows. Эти скрипты также могут быть использованы в задачах простой обработки текстов.

· Создание приложений GUI, выполняющихся на стороне клиента. Возможно, PHP является не самым лучшим языком для создания подобных приложений, но, если вы очень хорошо знаете PHP и хотели бы использовать некоторые его возможности в своих клиент-приложениях, вы можете использовать PHP-GTK для создания таких приложений. Подобным образом Вы можете создавать и кросс-платформенные приложения. PHP-GTK является расширением PHP и не поставляется вместе с дистрибутивом PHP.

PHP доступен для большинства операционных систем, включая Linux, многие модификации Unix (такие, как HP-UX, Solaris и OpenBSD), Microsoft Windows, Mac OS X, RISC OS, и многих других. (Существует даже версия PHP для OS/2. Неизвестно, правда, насколько соответствующая нынешним реалиям). Также в PHP включена поддержка большинства современных вебсерверов, таких, как Apache, Microsoft Internet Information Server, Personal Web Server, серверов Netscape и iPlanet, сервера Oreilly Website Pro, Caudium, Xitami, OmniHTTPd и многих других. Для большинства серверов PHP поставляется в качестве модуля, для других, поддерживающих стандарт CGI, PHP может функционировать в качестве процессора CGI.

Таким образом, выбирая PHP, вы получаете свободу выбора операционной системы и вебсервера. Кроме того, у вас появляется выбор между использованием процедурного или объектно-ориентированного программирования или же их сочетания.

PHP способен не только выдавать HTML. Возможности PHP включают формирование изображений, файлов PDF и даже роликов Flash (с использованием libswf и Ming), создаваемых «на лету». PHP также способен выдавать любые текстовые данные, такие, как XHTML и другие XML-файлы. PHP способен осуществлять автоматическую генерацию таких файлов и сохранять их в файловой системе вашего сервера, вместо того, чтобы отдавать клиенту, организуя, таким образом, кеш динамического содержания, расположенный на стороне сервера.

Одним из значительных преимуществ PHP является поддержка широкого круга баз данных. Создание скрипта, использующего базы данных, — очень просто.

Также в PHP включена поддержка DBX для работы на абстрактном уровне, так что вы можете работать с любой базой данных, использующих DBX. Кроме того, PHP поддерживает ODBC (Open Database Connection standard), таким образом, вы можете работать с любой базой данных, поддерживающей этот всемирно признанный стандарт.

PHP также поддерживает «общение» с другими сервисами с использованием таких протоколов, как LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (на платформах Windows) и многих других. Кроме того, вы получаете возможность работать с сетевыми сокетами «напрямую». PHP поддерживает стандарт обмена сложными структурами данных WDDX. Обращая внимание на взаимодействие между различными языками, следует упомянуть о поддержке объектов Java и возможности их использования в качестве объектов PHP. Для доступа к удаленным объектам вы можете использовать расширение CORBA.

PHP включает средства обработки текстовой информации, начиная с регулярных выражений Perl или POSIX Extended и заканчивая парсером документов XML. Для парсинга XML используются стандарты SAX и DOM. Для преобразования документов XML вы можете использовать расширение XSLT.

Последним по порядку, но не по значению, является поддержка многих других расширений, таких, как функции поисковой машины mnoGoSearch, функции IRC Gateway, функции для работы со сжатыми файлами (gzip, bz2), функции календарных вычислений, функции перевода и многое другое.

Словом, PHP может предложить вам очень многое!

Введение в PHP

История PHP

Язык PHP был разработан как инструмент для решения чисто практических задач. Его создатель, Расмус Лердорф , хотел знать, сколько человек читают его online-резюме, и написал для этого простенькую CGI -оболочку на языке Perl, т.е. это был набор Perl- скриптов , предназначенных исключительно для определенной цели – сбора статистики посещений.

Для справки. CGI ( Common Gateway Interface – общий интерфейс шлюзов) является стандартом, который предназначен для создания серверных приложений, работающих по протоколу HTTP. Такие приложения (их называют шлюзами или CGI — программами ) запускаются сервером в режиме реального времени. Сервер передает запросы пользователя CGI — программе , которая их обрабатывает и возвращает результат своей работы на экран пользователя. Таким образом, посетитель получает динамическую информацию, которая может изменяться в результате влияния различных факторов. Сам шлюз ( скрипт CGI ) может быть написан на различных языках программирования – Cи/C++, Fortran, Perl, TCL , UNIX Shell, Visual Basic, Python и др.

Вскоре выяснилось, что оболочка обладает небольшой производительностью, и пришлось переписать ее заново, но уже на языке Си . После этого исходники были выложены на всеобщее обозрение для исправления ошибок и дополнения. Пользователи сервера , где располагался сайт с первой версией PHP , заинтересовались инструментом, появились желающие его использовать. Так что скоро PHP превратился в самостоятельный проект, и в начале 1995 года вышла первая известная версия продукта, называвшаяся Personal Home Page Tools (средства для персональной домашней страницы). Средства эти были более чем скромными: анализатор кода, понимающий всего лишь несколько специальных команд, и набор утилит, полезных для создания гостевой книги, счетчика посещений, чата и т.п.

К середине 1995 года после основательной переработки появилась вторая версия продукта, названная PHP/FI (Personal Home Page / Forms Interpreter – персональная домашняя страница/ интерпретатор форм). Она включала набор базовых возможностей сегодняшнего PHP , возможность автоматически обрабатывать html-формы и встраиваться в html-коды . Синтаксис PHP/FI сильно напоминал синтаксис Perl, но был более простым.

В 1997 вышла вторая версия Cи-реализации PHP – PHP/FI 2.0 . К тому моменту PHP использовали уже несколько тысяч человек по всему миру, примерно с 50 тыс. доменов, что составляло около 1% всего числа доменов Internet . Число разработчиков PHP увеличилось до нескольких человек, но, несмотря на это, PHP/FI 2.0 все еще оставался крупным проектом одного человека. Официально PHP/FI 2.0 вышел только в ноябре 1997 года, просуществовав до этого в основном в бета-версиях. Вскоре после выхода его заменили альфа-версии PHP 3.0 .

PHP 3.0 была первой версией, напоминающей PHP , каким мы знаем его сегодня. Он очень сильно отличался от PHP/FI 2.0 и появился опять же как инструмент для решения конкретной прикладной задачи. Его создатели, Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski) , в 1997 году переписали заново код PHP/FI , поскольку он показался им непригодным для разработки приложения электронной коммерции , над которым они работали. Для того чтобы получить помощь в реализации проекта от разработчиков PHP/FI , Гутманс и Сураски решили объединиться с ними и объявить PHP3 официальным преемником PHP/FI . После объединения разработка PHP/FI была полностью прекращена.

Одной из сильных сторон PHP 3.0 была возможность расширения ядра. Именно свойство расширяемости PHP 3.0 привлекло внимание множества разработчиков, желающих добавить свой модуль расширения. Кроме того, PHP 3.0 предоставляла широкие возможности для взаимодействия с базами данных, различными протоколами и API . Немаловажным шагом к успеху оказалась разработка нового, намного более мощного и полного синтаксиса с поддержкой ООП . С момента появления PHP 3.0 изменилась не только функциональность и внутреннее устройство языка, но и его название. В аббревиатуре PHP больше не было упоминания о персональном использовании, PHP стало сокращением (рекурсивным акронимом) от PHP : Hypertext Preprocessor , что значит » PHP : препроцессор гипертекста «.

К концу 1998 года число пользователей PHP возросло до десятков тысяч. Сотни тысяч web-сайтов сообщали о том, что они работают с использованием этого языка. Почти на 10% серверов Internet был установлен PHP 3.0 .

Официально PHP 3.0 вышел в июне 1998 года, после 9 месяцев публичного тестирования. А уже к зиме Энди Гутманс и Зив Сураски начали переработку ядра PHP . В их задачи входило увеличение производительности работы сложных приложений и улучшение модульности кода, лежащего в основе PHP .

Новое ядро было названо » Zend Engine » (от имен создателей: Zeev и Andi) и впервые представлено в середине 1999 года. PHP 4.0 , основанный на этом ядре и принесший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после своего предшественника, PHP 3.0 . Помимо улучшения производительности, PHP 4.0 имел еще несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

Мастер Йода рекомендует:  Лучшие материалы и инструменты для Front-end разработчика

В настоящее время ведутся работы по улучшению Zend Engine и внедрению нововведений в PHP 5.0, первые бета-версии которого уже вышли в свет. Одно из существенных изменений произошло в объектной модели языка, ее основательно подлатали и добавили много новых возможностей. (Комментарий пользователя: Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML . Полностью переработаны функции ООП , которые стали во многом схожи с моделью, используемой в Java . В частности, введён деструктор , открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0. Шестая версия PHP разрабатывалась с октября 2006 года. Было сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php .ini. Одним из основных новшеств должна была стать поддержка Юникода. Однако в марте 2010 года разработка PHP6 была признана бесперспективной из-за сложностей с поддержкой Юникода. Исходный код PHP6 перемещён на ветвь , а основной линией разработки стала версия 5.4.)

Сегодня PHP используется сотнями тысяч разработчиков. Несколько миллионов сайтов написаны на PHP , что составляет более 20% доменов Internet .

Возможности PHP

» PHP может все», – заявляют его создатели. В первую очередь PHP используется для создания скриптов , работающих на стороне сервера , для этого его, собственно, и придумали. PHP способен решать те же задачи, что и любые другие CGI — скрипты , в том числе обрабатывать данные html-форм, динамически генерировать html страницы и т.п. Но есть и другие области, где может использоваться PHP . Всего выделяют три основные области применения PHP .

  • Первая область, как уже говорилось, – это создание приложений ( скриптов ), которые исполняются на стороне сервера . PHP наиболее широко используется именно для создания такого рода скриптов . Для того чтобы работать таким образом, понадобится PHP — парсер (т.е. обработчик php — скриптов ) и web-сервер для обработки скрипта , браузер для просмотра результатов работы скрипта , ну, и, конечно, какой-либо текстовый редактор для написания самого php -кода. Парсер PHP распространяется в виде CGI — программы или серверного модуля. Как установить его и web-сервер на свой компьютер, мы рассмотрим немного позднее. В этом курсе мы будем обсуждать, как правило, создание именно серверных приложений, как пример использования языка PHP .
  • Вторая область – это создание скриптов , выполняющихся в командной строке . То есть с помощью PHP можно создавать такие скрипты , которые будут исполняться, вне зависимости от web-сервера и браузера, на конкретной машине. Для такой работы потребуется лишь парсер PHP (в этом случае его называют интерпретатором командной строки ( cli , command line interpreter )). Этот способ работы подходит, например, для скриптов , которые должны выполняться регулярно с помощью различных планировщиков задач или для решения задач простой обработки текста.
  • И последняя область – это создание GUI -приложений (графических интерфейсов), выполняющихся на стороне клиента. В принципе это не самый лучший способ использовать PHP , особенно для начинающих, но если вы уже досконально изучили PHP , то такие возможности языка могут оказаться весьма полезны. Для применения PHP в этой области потребуется специальный инструмент – PHP-GTK , который является расширением PHP .

Итак, область применения PHP достаточно обширна и разнообразна. Тем не менее существует множество других языков программирования, способных решать похожие задачи. Почему стоит изучать PHP ? Что это нам дает? Во-первых, PHP очень прост в изучении. Достаточно ознакомиться лишь с основными правилами синтаксиса и принципами его работы, и можно начинать писать собственные программы , причем браться за такие задачи, решение которых на другом языке требовало бы серьезной подготовки.

Во-вторых, PHP поддерживается почти на всех известных платформах, почти во всех операционных системах и на самых разных серверах . Это тоже очень важно. Вряд ли кому-то захочется переходить, например, от работы под Windows к работе под Linux или от сервера IIS к серверу Apache только для того, чтобы изучить еще один язык программирования .

В PHP сочетаются две самые популярные парадигмы программирования – объектная и процедурная. В PHP4 более полно поддерживается процедурное программирование , но есть возможность писать программы и в объектном стиле. Уже в первых пробных версиях PHP5 большинство недочетов в реализации объектно-ориентированной модели языка, существующих в PHP4 , устранены. Таким образом, можно выбрать наиболее привычный стиль работы.

Если говорить о возможностях сегодняшнего PHP , то они выходят далеко за рамки тех, что были реализованы в его первых версиях. С помощью PHP можно создавать изображения, PDF -файлы, флэш-ролики, в него включена поддержка большого числа современных баз данных, встроены функции для работы с текстовыми данными любых форматов, включая XML , и функции для работы с файловой системой. PHP поддерживает взаимодействие с различными сервисами посредством соответствующих протоколов, таких как протокол управления доступом к директориям LDAP , протокол работы с сетевым оборудованием SNMP , протоколы передачи сообщений IMAP , NNTP и POP3 , протокол передачи гипертекста HTTP и т.д.

Обращая внимание на взаимодействие между различными языками, следует упомянуть о поддержке объектов Java и возможности их использования в качестве объектов PHP . Для доступа к удаленным объектам можно использовать расширение CORBA .

Для работы с текстовой информацией PHP унаследовал (с небольшими изменениями) механизмы работы с регулярными выражениями из языка Perl и UNIX -систем. Для обработки XML -документов можно использовать как стандарты DOM и SAX , так и API для XSLT -трансформаций.

Для создания приложений электронной коммерции существует ряд полезных функций, таких как функции осуществления платежей Cybercash , CyberMUT , VeriSign Payflow Pro и CCVS .

Обработка запросов с помощью PHP


Обработка запросов с помощью PHP

Основы клиент-серверных технологий

В самом начале курса мы уже говорили о том, что PHP – это скриптовый язык, обрабатываемый сервером. Сейчас мы хотим уточнить, что же такое сервер, какие функции он выполняет и какие вообще бывают серверы. Если речь идет о сервере, невольно всплывает в памяти понятие клиента. Все потому, что эти два понятия неразрывно связаны. Объединяет их компьютерная архитектура клиент-сервер. Обычно, когда говорят «сервер», имеют в виду сервер в архитектуре клиент-сервер, а когда говорят «клиент» – имеют в виду клиент в этой же архитектуре. Так что же это за архитектура? Суть ее в том, чтобы разделить функции между двумя подсистемами: клиентом, который отправляет запрос на выполнение каких-либо действий, и сервером, который выполняет этот запрос. Взаимодействие между клиентом и сервером происходит посредством стандартных специальных протоколов, таких как TCP/IP и z39.50. На самом деле протоколов очень много, они различаются по уровням. Мы рассмотрим только протокол прикладного уровня HTTP (чуть позднее), поскольку для решения наших программистских задач нужен только он. А пока вернемся к клиент-серверной архитектуре и разберемся, что же такое клиент и что такое сервер.

Сервер представляет собой набор программ, которые контролируют выполнение различных процессов. Соответственно, этот набор программ установлен на каком-то компьютере. Часто компьютер, на котором установлен сервер, и называют сервером. Основная функция компьютера-сервера – по запросу клиента запустить какой-либо определенный процесс и отправить клиенту результаты его работы.

Клиентом называют любой процесс, который пользуется услугами сервера. Клиентом может быть как пользователь, так и программа. Основная задача клиента – выполнение приложения и осуществление связи с сервером, когда этого требует приложение. То есть клиент должен предоставлять пользователю интерфейс для работы с приложением, реализовывать логику его работы и при необходимости отправлять задания серверу.

Взаимодействие между клиентом и сервером начинается по инициативе клиента. Клиент запрашивает вид обслуживания, устанавливает сеанс, получает нужные ему результаты и сообщает об окончании работы.

Услугами одного сервера чаще всего пользуется несколько клиентов одновременно. Поэтому каждый сервер должен иметь достаточно большую производительность и обеспечивать безопасность данных.

Логичнее всего устанавливать сервер на компьютере, входящем в какую-либо сеть, локальную или глобальную. Однако можно устанавливать сервер и на отдельно стоящий компьютер (тогда он будет являться одновременно и клиентом и сервером).

Существует множество типов серверов. Вот лишь некоторые из них.

Такой сервер специально приспособлен к обработке изображений, хранению видеоматериалов, видеоигр и т.п. В связи с этим компьютер, на котором установлен видеосервер, должен иметь высокую производительность и большую память.

Поисковый сервер предназначен для поиска информации в Internet.

Почтовый сервер предоставляет услуги в ответ на запросы, присланные по электронной почте.

Сервер WWW предназначен для работы в Internet.

Сервер баз данных выполняет обработку запросов к базам данных.

— Сервер защиты данных предназначен для обеспечения безопасности данных (содержит, например, средства для идентификации паролей).

Сервер приложений предназначен для выполнения прикладных процессов. С одной стороны взаимодействует с клиентами, получая задания, а с другой – работает с базами данных, подбирая необходимые для обработки данные.

Сервер удаленного доступа обеспечивает коллективный удаленный доступ к данным.

Файловый сервер обеспечивает функционирование распределенных ресурсов, предоставляет услуги поиска, хранения, архивирования данных и возможность одновременного доступа к ним нескольких пользователей.

Обычно на компьютере-сервере работает сразу несколько программ-серверов. Одна занимается электронной почтой, другая распределением файлов, третья предоставляет web-страницы.

Из всех типов серверов нас в основном интересует сервер WWW. Часто его называют web-сервером, http-сервером или даже просто сервером. Что представляет собой web-сервер? Во-первых, это хранилище информационных ресурсов. Во-вторых, эти ресурсы хранятся и предоставляются пользователям в соответствии со стандартами Internet (такими, как протокол передачи данных HTTP). Как предоставляются данные в соответствии с этим протоколом, мы рассмотрим чуть позже. Работа с документами web-сервера осуществляется при помощи браузера (например, IE, Opera или Mozilla), который отсылает серверу запросы, созданные в соответствии с протоколом HTTP. В процессе выполнения задания сервер может связываться с другими серверами.

Далее в ходе лекции, говоря «сервер», мы будем подразумевать web-сервер.

В качестве примеров web-серверов можно привести сервер Apache группы Apache, Internet Information Server (IIS) компании Microsoft, SunOne фирмы Sun Microsystems,WebLogic фирмы BEA Systems, IAS (Inprise Application Server) фирмы Borland, WebSphere фирмы IBM, OAS (Oracle Application Server).

На рис. 4.1 и в таблице 4.1 приведена статистика использования различных серверов среди всех доменов Internet от NetCraft https://news.netcraft.com/.

Рис. 4.1. Статистика использования ведущих web-серверов

Как видно из приведенной таблицы, сервер Apache занимает лидирующие позиции. Все, что мы когда-либо будем говорить о web-серверах, ориентировано на Apache, если не указано иное. О том, как установить его на свой компьютер, мы уже рассказывали в самой первой лекции. А теперь, как было обещано, обратимся к протоколу HTTP.

Протокол HTTP и способы передачи данных на сервер

Internet построен по многоуровневому принципу, от физического уровня, связанного с физическими аспектами передачи двоичной информации, и до прикладного уровня, обеспечивающего интерфейс между пользователем и сетью.

HTTP (HyperText Transfer Protocol, протокол передачи гипертекста) – это протокол прикладного уровня, разработанный для обмена гипертекстовой информацией в Internet.

HTTP предоставляет набор методов для указания целей запроса, отправляемого серверу. Эти методы основаны на дисциплине ссылок, где для указания ресурса, к которому должен быть применен данный метод, используется универсальный идентификатор ресурсов (Universal Resource Identifier) в виде местонахождения ресурса (Universal Resource Locator, URL) или в виде его универсального имени (Universal Resource Name, URN).

Сообщения по сети при использовании протокола HTTP передаются в формате, схожем с форматом почтового сообщения Internet (RFC-822) или с форматом сообщений MIME (Multipurpose Internet Mail Exchange).

HTTP используется для коммуникаций между различными пользовательскими программами и программами-шлюзами, предоставляющими доступ к существующим Internet-протоколам, таким как SMTP (протокол электронной почты), NNTP (протокол передачи новостей), FTP (протокол передачи файлов), Gopher и WAIS. HTTP разработан для того, чтобы позволять таким шлюзам через промежуточные программы-серверы (proxy) передавать данные без потерь.

Протокол реализует принцип запрос/ответ. Запрашивающая программа – клиент инициирует взаимодействие с отвечающей программой – сервером и посылает запрос, содержащий:

— сообщение (похожее по форме на MIME) с информацией о типе передаваемых данных, информацией о клиенте, пославшем запрос, и, возможно, с содержательной частью (телом) сообщения.

Ответ сервера содержит:

— строку состояния, в которую входит версия протокола и код возврата (успех или ошибка);

— сообщение (в форме, похожей на MIME), в которое входит информация сервера, метаинформация (т.е. информация о содержании сообщения) и тело сообщения.

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

Давайте рассмотрим более подробно, в какой форме отправляются запросы на сервер.

Форма запроса клиента

Клиент отсылает серверу запрос в одной из двух форм: в полной или сокращенной. Запрос в первой форме называется соответственно полным запросом, а во второй форме – простым запросом.

Простой запрос содержит метод доступа и адрес ресурса. Формально это можно записать так:

В качестве метода могут быть указаны GET, POST, HEAD, PUT, DELETE и другие. О наиболее распространенных из них мы поговорим немного позже. В качестве запрашиваемого URI чаще всего используется URL-адрес ресурса.

Пример простого запроса:

Здесь GET – это метод доступа, т.е. метод, который должен быть применен к запрашиваемому ресурсу, а https://phpbook.info/ – это URL-адрес запрашиваемого ресурса.

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

Квадратные скобки здесь обозначают необязательные элементы заголовка, через вертикальную черту перечислены альтернативные варианты. Элемент содержит метод запроса и URI ресурса (как и простой запрос) и, кроме того, используемую версию протокола HTTP. Например, для вызова внешней программы можно задействовать следующую строку состояния:

POST https://phpbook.info/cgi-bin/test HTTP/1.0

В данном случае используется метод POST и протокол HTTP версии 1.0.

В обеих формах запроса важное место занимает URI запрашиваемого ресурса. Чаще всего URI используется в виде URL-адреса ресурса. При обращении к серверу можно применять как полную форму URL, так и упрощенную.

Полная форма содержит тип протокола доступа, адрес сервера ресурса и адрес ресурса на сервере (рисунок 4.2).

В сокращенной форме опускают протокол и адрес сервера, указывая только местоположение ресурса от корня сервера. Полную форму используют, если возможна пересылка запроса другому серверу. Если же работа происходит только с одним сервером, то чаще применяют сокращенную форму.

Рис. 4.2. Полная форма URL

Далее мы рассмотрим наиболее распространенные методы отправки запросов.

Как уже говорилось, любой запрос клиента к серверу должен начинаться с указания метода. Метод сообщает о цели запроса клиента. Протокол HTTP поддерживает достаточно много методов, но реально используются только три: POST, GET и HEAD. Метод GET позволяет получить любые данные, идентифицированные с помощью URI в запросе ресурса. Если URI указывает на программу, то возвращается результат работы программы, а не ее текст (если, конечно, текст не есть результат ее работы). Дополнительная информация, необходимая для обработки запроса, встраивается в сам запрос (в строку статуса). При использовании метода GET в поле тела ресурса возвращается собственно затребованная информация (текст HTML-документа, например).

Существует разновидность метода GET – условный GET. Этот метод сообщает серверу о том, что на запрос нужно ответить, только если выполнено условие, содержащееся в поле if-Modified-Since заголовка запроса. Если говорить более точно, то тело ресурса передается в ответ на запрос, если этот ресурс изменялся после даты, указанной в if-Modified-Since.

Метод HEAD аналогичен методу GET, только не возвращает тело ресурса и не имеет условного аналога. Метод HEAD используют для получения информации о ресурсе. Это может пригодиться, например, при решении задачи тестирования гипертекстовых ссылок.

Метод POST разработан для передачи на сервер такой информации, как аннотации ресурсов, новостные и почтовые сообщения, данные для добавления в базу данных, т.е. для передачи информации большого объема и достаточно важной. В отличие от методов GET и HEAD, в POST передается тело ресурса, которое и является информацией, получаемой из полей форм или других источников ввода.

До сих пор мы только теоретизировали, знакомились с основными понятиями. Теперь пора научиться использовать все это на практике. Далее в лекции мы рассмотрим, как посылать запросы серверу и как обрабатывать его ответы.

Использование HTML-форм для передачи данных на сервер

Как передавать данные серверу? Для этого в языке HTML есть специальная конструкция – формы. Формы предназначены для того чтобы получать от пользователя информацию. Например, вам нужно знать логин и пароль пользователя для того, чтобы определить, на какие страницы сайта его можно допускать. Или вам необходимы личные данные пользователя, чтобы была возможность с ним связаться. Формы как раз и применяются для ввода такой информации. В них можно вводить текст или выбирать подходящие варианты из списка. Данные, записанные в форму, отправляются для обработки специальной программе (например, скрипту на PHP) на сервере. В зависимости от введенных пользователем данных эта программа может формировать различные web-страницы, отправлять запросы к базе данных, запускать различные приложения и т.п.

Разберемся с синтаксисом HTML-форм. Возможно, многие с ним знакомы, но мы все же повторим основные моменты, поскольку это важно.

Итак, для создания формы в языке HTML используется тег FORM. Внутри него находится одна или несколько команд INPUT. С помощью атрибутов action и method тега FORM задаются имя программы, которая будет обрабатывать данные формы, и метод запроса, соответственно. Команда INPUT определяет тип и различные характеристики запрашиваемой информации. Отправка данных формы происходит после нажатия кнопки input типа submit. Создадим форму для регистрации участников заочной школы программирования.

После обработки браузером этот файл будет выглядеть примерно так:

Рис. 4.3. Пример html-формы

Вот так создаются и выглядят HTML-формы. Будем считать, что мы научились или вспомнили, как их создавать. Как мы видим, в форме можно указывать метод передачи данных. Посмотрим, что будет происходить, если указать метод GET или POST, и в чем будет разница.

При отправке данных формы с помощью метода GET содержимое формы добавляется к URL после знака вопроса в виде пар имя=значения, объединенных с помощью амперсанта &:

Здесь action – это URL-адрес программы, которая должна обрабатывать форму (это либо программа, заданная в атрибуте action тега form, либо сама текущая программа, если этот атрибут опущен). Имена name1, name2, name3 соответствуют именам элементов формы, а value1, value2, value3 – значениям этих элементов. Все специальные символы, включая = и &, в именах или значениях этих параметров будут опущены. Поэтому не стоит использовать в названиях или значениях элементов формы эти символы и символы кириллицы в идентификаторах.

Если в поле для ввода ввести какой-нибудь служебный символ, то он будет передан в его шестнадцатеричном коде, например, символ $ заменится на %24. Так же передаются и русские буквы.

Для полей ввода текста и пароля (это элементы input с атрибутом type=text и type=password), значением будет то, что введет пользователь. Если пользователь ничего не вводит в такое поле, то в строке запроса будет присутствовать элемент name=, где name соответствует имени этого элемента формы.

Для кнопок типа checkbox и radio button значение value определяется атрибутом VALUE в том случае, когда кнопка отмечена. Не отмеченные кнопки при составлении строки запроса игнорируются целиком. Несколько кнопок типа checkbox могут иметь один атрибут NAME (и различные VALUE), если это необходимо. Кнопки типа radio button предназначены для одного из всех предложенных вариантов и поэтому должны иметь одинаковый атрибут NAME и различные атрибуты VALUE.

Мастер Йода рекомендует:  Опубликован свободный релиз библиотеки jQuery

В принципе создавать HTML-форму для передачи данных методом GET не обязательно. Можно просто добавить в строку URL нужные переменные и их значения.

В связи с этим у передачи данных методом GET есть один существенный недостаток – любой может подделать значения параметров. Поэтому не советуем использовать этот метод для доступа к защищенным паролем страницам, для передачи информации, влияющей на безопасность работы программы или сервера. Кроме того, не стоит применять метод GET для передачи информации, которую не разрешено изменять пользователю.

Несмотря на все эти недостатки, использовать метод GET достаточно удобно при отладке скриптов (тогда можно видеть значения и имена передаваемых переменных) и для передачи параметров, не влияющих на безопасность.

Для метода POST

Содержимое формы кодируется точно так же, как для метода GET (см. выше), но вместо добавления строки к URL содержимое запроса посылается блоком данных как часть операции POST. Если присутствует атрибут ACTION, то значение URL, которое там находится, определяет, куда посылать этот блок данных. Этот метод, как уже отмечалось, рекомендуется для передачи больших по объему блоков данных.

Информация, введенная пользователем и отправленная серверу с помощью метода POST, подается на стандартный ввод программе, указанной в атрибуте action, или текущему скрипту, если этот атрибут опущен. Длина посылаемого файла передается в переменной окружения CONTENT_LENGTH, а тип данных – в переменной CONTENT_TYPE.

Передать данные методом POST можно только с помощью HTML-формы, поскольку данные передаются в теле запроса, а не в заголовке, как в GET. Соответственно и изменить значение параметров можно, только изменив значение, введенное в форму. При использовании POST пользователь не видит передаваемые серверу данные.

Основное преимущество POST запросов – это их большая безопасность и функциональность по сравнению с GET-запросами. Поэтому метод POST чаще используют для передачи важной информации, а также информации большого объема. Тем не менее не стоит целиком полагаться на безопасность этого механизма, поскольку данные POST запроса также можно подделать, например создав html-файл на своей машине и заполнив его нужными данными. Кроме того, не все клиенты могут применять метод POST, что ограничивает варианты его использования.

При отправке данных на сервер любым методом передаются не только сами данные, введенные пользователем, но и ряд переменных, называемых переменными окружения, характеризующих клиента, историю его работы, пути к файлам и т.п. Вот некоторые из переменных окружения:

— REMOTE_ADDR – IP-адрес хоста (компьютера), отправляющего запрос;

— REMOTE_HOST – имя хоста, с которого отправлен запрос;

— HTTP_REFERER – адрес страницы, ссылающейся на текущий скрипт;

— REQUEST_METHOD – метод, который был использован при отправке запроса;

— QUERY_STRING – информация, находящаяся в URL после знака вопроса;

— SCRIPT_NAME – виртуальный путь к программе, которая должна выполняться;

— HTTP_USER_AGENT – информация о браузере, который использует клиент

Обработка запросов с помощью PHP

До сих пор мы упоминали только, что запросы клиента обрабатываются на сервере с помощью специальной программы. На самом деле эту программу мы можем написать сами, в том числе и на языке PHP, и она будет делать с полученными данными все, что мы захотим. Для того чтобы написать эту программу, необходимо познакомиться с некоторыми правилами и инструментами, предлагаемыми для этих целей PHP.

Внутри PHP-скрипта имеется несколько способов получения доступа к данным, переданным клиентом по протоколу HTTP. До версии PHP 4.1.0 доступ к таким данным осуществлялся по именам переданных переменных (напомним, что данные передаются в виде пар «имя переменной, символ «=», значение переменной»). Таким образом, если, например, было передано first_name=Nina, то внутри скрипта появлялась переменная $first_name со значением Nina. Если требовалось различать, каким методом были переданы данные, то использовались ассоциативные массивы $HTTP_POST_VARS и $HTTP_GET_VARS, ключами которых являлись имена переданных переменных, а значениями – соответственно значения этих переменных. Таким образом, если пара first_name=Nina передана методом GET, то $HTTP_GET_VARS[«first_name»]=»Nina».

Использовать в программе имена переданных переменных напрямую небезопасно. Поэтому было решено начиная с PHP 4.1.0 задействовать для обращения к переменным, переданным с помощью HTTP-запросов, специальный массив – $_REQUEST. Этот массив содержит данные, переданные методами POST и GET, а также с помощью HTTP cookies. Это суперглобальный ассоциативный массив, т.е. его значения можно получить в любом месте программы, используя в качестве ключа имя соответствующей переменной (элемента формы).

Пример 4.2. Допустим, мы создали форму для регистрации участников заочной школы программирования, как в приведенном выше примере. Тогда в файле 1.php, обрабатывающем эту форму, можно написать следующее:

$str .=»Вы выбрали для изучения курс по

Тогда, если в форму мы ввели имя «Вася», фамилию «Петров» и выбрали среди всех курсов курс по PHP, на экране браузера получим такое сообщение:

Здравствуйте, Вася Петров!

Вы выбрали для изучения курс по PHP

После введения массива $_REQUEST массивы $HTTP_POST_VARS и $HTTP_GET_VARS для однородности были переименованы в $_POST и $_GET соответственно, но сами они из обихода не исчезли из соображений совместимости с предыдущими версиями PHP. В отличие от своих предшественников, массивы $_POST и $_GET стали суперглобальными, т.е. доступными напрямую и внутри функций и методов.

Приведем пример использования этих массивов. Допустим, нам нужно обработать форму, содержащую элементы ввода с именами first_name, last_name, kurs (например, форму form.html, приведенную выше). Данные были переданы методом POST, и данные, переданные другими методами, мы обрабатывать не хотим. Это можно сделать следующим образом:

$str .= «Вы выбрали для изучения курс по «.

Тогда на экране браузера, если мы ввели имя «Вася», фамилию «Петров» и выбрали среди всех курсов курс по PHP, увидим сообщение, как в предыдущем примере:

Здравствуйте, Вася Петров!

Вы выбрали для изучения курс по PHP

Для того чтобы сохранить возможность обработки скриптов более ранних версий, чем PHP 4.1.0, была введена директива register_globals, разрешающая или запрещающая доступ к переменным непосредственно по их именам. Если в файле настроек PHP параметр register_globals=On, то к переменным, переданным серверу методами GET и POST, можно обращаться просто по их именам (т.е. можно писать $first_name). Если же register_globals=Off, то нужно писать $_REQUEST[«first_name»] или $_POST[«first_name»], $_GET[«first_name»], $HTTP_POST_VARS[«first_name»], $HTTP_GET_VARS[«first_name»]. С точки зрения безопасности эту директиву лучше отключать (т.е. register_globals=Off). При включенной директиве register_globals перечисленные выше массивы также будут содержать данные, переданные клиентом.

Иногда возникает необходимость узнать значение какой-либо переменной окружения, например метод, использовавшийся при передаче запроса или IP-адрес компьютера, отправившего запрос. Получить такую информацию можно с помощью функции getenv(). Она возвращает значение переменной окружения, имя которой передано ей в качестве параметра.

// возвратит использованный метод

echo getenv («REMOTE_ADDR»);

// выведет IP-адрес пользователя,

Как мы уже говорили, если используется метод GET, то данные передаются добавлением строки запроса в виде пар «имя_переменной=значение к URL-адресу ресурса». Все, что записано в URL после знака вопроса, можно получить с помощью команды

Благодаря этому можно по методу GET передавать данные в каком-нибудь другом виде. Например, указывать только значения нескольких параметров через знак плюс, а в скрипте разбирать строку запроса на части или можно передавать значение всего одного параметра. В этом случае в массиве $_GET появится пустой элемент с ключом, равным этому значению (всей строке запроса), причем символ «+», встретившийся в строке запроса, будет заменен на подчеркивание «_».

Методом POST данные передаются только с помощью форм, и пользователь (клиент) не видит, какие именно данные отправляются серверу. Чтобы их увидеть, хакер должен подменить нашу форму своей. Тогда сервер отправит результаты обработки неправильной формы не туда, куда нужно. Чтобы этого избежать, можно проверять адрес страницы, с которой были посланы данные. Это можно сделать опять же с помощью функции getenv():

Теперь самое время решить задачу, сформулированную в начале лекции.

Пример обработки запроса с помощью PHP

Напомним, в чем состояла задача, и уточним ее формулировку. Нужно написать форму для регистрации участников заочной школы программирования и после регистрации отправить участнику сообщение. Мы назвали это сообщение универсальным письмом, но оно будет немного отличаться от того письма, которое мы составили на предыдущей лекции. Здесь мы также не будем отправлять что-либо по электронной почте, дабы не уподобляться спамерам, а просто сгенерируем это сообщение и выведем его на экран браузера. Начальный вариант формы регистрации мы уже приводили выше. Изменим его таким образом, чтобы каждый регистрирующийся мог выбрать сколько угодно курсов для посещения, и не будем подтверждать получение регистрационной формы.

Здесь все достаточно просто и понятно. Единственное, что можно отметить, – это способ передачи значений элемента checkbox. Когда мы пишем в имени элемента kurs[], это значит, что первый отмеченный элемент checkbox будет записан в первый элемент массива kurs, второй отмеченный checkbox – во второй элемент массива и т.д. Можно, конечно, просто дать разные имена элементам checkbox, но это усложнит обработку данных, если курсов будет много.

Скрипт, который все это будет разбирать и обрабатывать, называется 1.php (форма ссылается именно на этот файл, что записано в ее атрибуте action). По умолчанию используется для передачи метод GET, но мы указали POST. По полученным сведениям от зарегистрировавшегося человека, скрипт генерирует соответствующее сообщение. Если человек выбрал какие-то курсы, то ему выводится сообщение о времени их проведения и о лекторах, которые их читают. Если человек ничего не выбрал, то выводится сообщение о следующем собрании заочной школы программистов (ЗШП).

Заключение

Подведем итоги. Мы научились отличать клиента от сервера и компьютер-сервер от программы-сервера, познакомились с основными методами, используемыми для передачи данных на сервер, изучили средства, предлагаемые языком PHP для обработки клиентских запросов, и испробовали их на практике. В принципе этого достаточно для того, чтобы создавать клиент-серверные приложения.

Серверные скрипты. Введение

Серверные скрипты. Введение

Этим «опытом» я хочу начать новый большой раздел. В свое время перед любым вебмастером встают вопросы такого типа: «как сохранить информацию на сервере», «как отправить результаты заполнения формы на емэйл».

Сразу скажу, что сделать это невозможно только средствами браузера. Для реализации подобных вещей существует множество специальных языков. Самой большой популярностью пользуются perl и PHP. В чем их сходство и различие?

Часто путают понятие CGI и perl. CGI (Common Gateway Interface) — протокол обмена данными с программами. А perl — специальный язык высокого уровня, на котором и реализуются необходимые фукции взаимодействия с операционной системой на сервере. В общем случае с помощью CGI можно запустить любое приложение на сервере и все, что будет из него (приложения) выведено на стандартный поток вывода, попадет в браузер. Параллельно приложение может произвести вывод данных в файл на сервере, послать на емэйл или поместить (извлечь) что-то в базу данных.

Коренное отличие PHP от CGI заключается в том, что PHP является препроцессором HTML. Т.е. его работа построена по следующей схеме:

.phtml(.php3) php.exe броузер

Т.е. до того, как сервер «отдаст» файл браузеру, его просматривает препроцессор-интерпретатор. Что это значит? Файлы, которые подвергаются обработке препроцессором, должны иметь определенное расширение (обычно это .phtml или .php3, но эти значения можно поменять) и содержать (хотя это не обязательное требование) код для препроцессора. Код этот может быть оформлен следующими способами:


Лекции по веб-программированию

PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом.

Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на веб-сервере.

Аббревиатура PHP означает “Hypertext Preprocessor (Препроцессор Гипертекста)». Синтаксис языка берет начало от C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление веб-разработчикам возможности быстрого создания динамически генерируемых web-страниц.

Возможности PHP

Существуют три основных области, где используется PHP.

• Создание скриптов для выполнения на стороне сервера. PHP наиболее широко используется именно таким образом. Все, что для этого понадобится, это парсер PHP (в виде программы CGI или серверного модуля), веб-сервер и браузер. Чтобы просматривать результаты выполнения PHP-скриптов в браузере, необходим работающий веб-сервер и установленный PHP.

• Создание скриптов для выполнения в командной строке. Вы можете создать PHP-скрипт, способный запускаться вне зависимости от веб-сервера и браузера. Все, что потребуется — парсер PHP. Такой способ использования PHP идеально подходит для скриптов, которые должны выполняться регулярно, например, с помощью cron (на платформах *nix или Linux) или с помощью планировщика задач (Task Scheduler) на платформах Windows. Эти скрипты также могут быть использованы в задачах простой обработки текстов. Дополнительная информация находится здесь.

• Создание приложений GUI, выполняющихся на стороне клиента. Возможно, PHP является не самым лучшим языком для создания подобных приложений, но, если PHP хорошо известен и есть желание использовать некоторые его возможности в своих клиент-приложениях, то можно использовать PHP-GTK для создания таких приложений. Подобным образом можно создавать и кросс-платформенные приложения. PHP-GTK является расширением PHP и не поставляется вместе с дистрибутивом PHP.

История PHP

Истоки PHP лежат в старом продукте, имевшем название PHP/FI. PHP/FI был создан Расмусом Лердорфом в 1995 году и представлял собой набор Perl-скриптов для ведения статистики посещений его резюме.

Расмус Лердорф (англ. Rasmus Lerdorf; р. 22 ноября 1968) — датский программист (ныне живущий в Канаде), написавший в 1994 году набор скриптов на Perl/CGI.

Развитие web еще только начиналось, никаких специальных средств для решения таких задач не было, и к автору хлынул поток сообщений с вопросами. Лердорф начал бесплатно раздавать свой инструментарий, названный «Personal Homepages Tools» — («Инструменты для персональных домашних страниц»). Очень скоро потребовалась большая функциональность и Расмус пишет новую, намного более обширную версию на C, работающую с базами данных и позволяющую пользователям разрабатывать простейшие web-приложения. Расмус Лердорф решил выложить исходный код PHP/FI на всеобщее обозрение, исправление ошибок и дополнение.

PHP/FI (Personal Home Page / Forms Interpreter — Персональная Домашняя страница / Интерпретатор Форм) включал в себя базовую функциональность сегодняшнего PHP. Он имел переменные в стиле Perl, автоматическую интерпретацию форм и возможность встраиваться в html-код. Собственно синтаксис языка имел много общего с Perl, хотя и был намного проще и ограниченнее.

В 1997 выходит PHP/FI 2.0. Вторая версия C-имплементации обозначила группу пользователей: несколько тысяч людей по всему миру, с примерно 50 000 доменами, что составляло около 1% всего числа доменов Интернета. Несмотря на то, что разработкой занималось уже несколько людей, PHP/FI 2.0 все еще оставался крупным проектом одного человека.

Официально PHP/FI 2.0 вышел только в ноябре 1997 года, после проведения большей части своей жизни в бета-версиях. Вскоре после выхода его заменили альфа-версии PHP 3.0.

PHP 3.0 была первой версией, напоминающей PHP, каким мы знаем его сегодня. В 1997 году Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski) переписали код с начала: разработчики сочли PHP/FI 2.0 не пригодным для разработки приложения электронной коммерции, над которым они работали для проекта Университета. Для совместной работы над PHP 3.0 с помощью базы разработчиков PHP/FI 2.0 Энди, Расмус и Зив решили объединиться и объявить PHP 3.0 официальным преемником PHP/FI, разработка же PHP/FI была практически полностью прекращена.

К концу 1998, PHP использовался десятками тысяч пользователей. Сотни тысяч web-сайтов сообщали о том, что они работают с использованием языка. В то время PHP 3.0 был установлен приблизительно на 10% серверах Интернета!

PHP 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичного тестирования.

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Расширения дали PHP 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работали не эффективно.

Новый движок, названный ‘Zend Engine’ (www.zend.com) (от имен создателей: Zeev и Andi), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принесший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника PHP 3.0. В дополнение к улучшению производительности, PHP 4.0 имел еще несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0.

Шестая версия PHP 6.0 разрабатывалась с октября 2006 года. Было сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini. Одним из основных новшеств должна была стать поддержка Юникода. Однако в марте 2010 года разработка PHP6 была признана бесперспективной из-за сложностей с поддержкой Юникода. Исходный код PHP6 перемещён на ветвь, а основной линией разработки стала версия 5.4.

В 2014 году было проведено голосование, по результатам которого следующая версия получила название PHP 7. Выход новой версии планировался в середине октября 2015 года. В марте 2015 года Zend представили инфографику в которой описаны основные нововведения PHP 7.

3 декабря 2015 года было объявлено о выходе PHP версии 7.0.0.

Архитектура PHP

PHP является интерпретатором с встроенным блоком трансляции, оптимизирующим ход интерпретации.

Использование интерпретатора (а значит и PHP) имеет свои неоспоримые преимущества:

1. Нет необходимости заботится об освобождении выделенной памяти, не нужно закрывать файлы по окончании работы с ними – всю рутинную работу сделает интерпретатор, поскольку программа выполняется под его бдительным контролем;

2. Не нужно думать о типах переменных, а также не нужно объявлять переменную до его первого использования;

3. Отладка программ и обнаружение ошибок существенно упрощаются – интерпретатор полностью контролирует этот процесс;

4. В контексте веб-приложений, интерпретатор также имеет еще очень важное преимущество – нет опасности «зависания» сервера при неправильной работе программы.

Синтаксис PHP

Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach , заимствованы из Perl.

Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п. Любая программа может начинаться непосредственно с оператора PHP.

Простейшая программа на PHP выглядит следующим образом:

Помимо ограничителей ?> , допускается использование дополнительных вариантов, таких как ?> и .

Переменные и типы данных

PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных, равно как и самого объявления переменных. Преобразования между скалярными типами зачастую осуществляются неявно без дополнительных усилий (впрочем, PHP предоставляет широкие возможности и для явного преобразования типов).

К скалярным типам данных относятся:

Мастер Йода рекомендует:  Облачные технологии — всё по этой теме для программистов

целый тип (integer),
вещественный тип данных (float, double),
логический тип (boolean),
строковый тип (string),
и специальный тип NULL.

К нескалярным типам относятся:

«ресурс» (resource),
массив (array),
объект (object),

К псевдотипам относятся:

mixed любой тип
number число (integer либо float)
callback (string или анонимная функция)
void отсутствие параметров

Диапазон целых чисел (integer) в PHP зависит от платформы (обычно, это диапазон 32-битных знаковых целых чисел, то есть, от −2 147 483 648 до 2 147 483 647). Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления.

Диапазон вещественных чисел (double) также зависит от платформы (для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7×10−308 до ±1.7×10+308).

PHP предоставляет разработчикам логический тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»). При преобразовании в логический тип число 0, пустая строка, ноль в строке «0», NULL и пустой массив считаются равными FALSE. Все остальные значения автоматически преобразуются в TRUE.

Строка может быть определена тремя различными способами.

  • одинарными кавычками
  • двойными кавычками
  • heredoc-синтаксисом

Простейший способ определить строку — это заключить ее в одинарные кавычки (символ ‘). Чтобы использовать одинарную кавычку внутри строки ее необходимо предварить символом обратной косой черты (\), т. е. экранировать. Если обратная косая черта должна идти перед одинарной кавычкой либо быть в конце строки, необходимо продублировать ее. Нет необходимости экранировать саму обратную косую черту.

Если строка заключена в двойные кавычки («), PHP распознает большее количество управляющих последовательностей для специальных символов:

Последовательность Значение
\n новая строка (LF или 0x0A (10) в ASCII)
\r возврат каретки (CR или 0x0D (13) в ASCII)
\t горизонтальная табуляция (HT или 0x09 (9) в ASCII)
\\ обратная косая черта
\$ знак доллара
двойная кавычка
\[0-7] последовательность символов, соответствующая регулярному выражению, символ в восьмеричной системе счисления
\x[0-9A-Fa-f] последовательность символов, соответствующая регулярному выражению, символ в шестнадцатеричной системе счисления

heredoc-определение (PHP):

Переменные внутри heredoc интерпретируются. Если вы хотите точно определить конец имени, заключайте имя переменной в фигурные скобки.

В PHP 5.3+ появилась версия heredoc, в которой переменные не интерпретируются. Для этого идентификатор нужно окружить одинарными кавычками. Это называется nowdoc.

Также в PHP 5.3+ идентификатор можно окружить двойными кавычками. Это соответствует варианту без кавычек.

Специальный тип NULL предназначен для переменных без определённого значения. Единственным значением данного типа является константа NULL. Тип NULL принимают неинициализированные переменные, переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().

Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.

Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, на самом деле это, скорее всего, упорядоченный хеш. Возможно неожиданное поведение при использовании цикла for со счетчиком вместо foreach. Так, например, при сортировке массива с численными индексами функциями из стандартной библиотеки, сортируются и ключи тоже.

Указатель на функцию в PHP может быть представлен замыканием или псевдотипом callback. Замыкание доступно с версии 5.3 и в коде выглядит как простое определение функции, в которую явно можно утянуть значения из контекста, например:

function($args, $argsN) use ($ctxVar, $ctxVar1) < . >
callback тип может быть представлен:

строкой (интерпретируется как название функции);
массивом где нулевой и первый элемент — строки (интерпретируется как название статической функции класса);
массивом где нулевой элемент — объект, а первый — строка (интерпретируется как метод у объекта).
Для проверки является ли значение вызываемым следует использовать is_callable($var)

Серверные скрипты. Введение PHP

Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

Этим «опытом» я хочу начать новый большой раздел. В свое время перед любым вебмастером встают вопросы такого типа: «как сохранить информацию на сервере», «как отправить результаты заполнения формы на емэйл».

Сразу скажу, что сделать это невозможно только средствами браузера. Для реализации подобных вещей существует множество специальных языков. Самой большой популярностью пользуются perl и PHP. В чем их сходство и различие?

Часто путают понятие CGI и perl. CGI (Common Gateway Interface) — протокол обмена данными с программами. А perl — специальный язык высокого уровня, на котором и реализуются необходимые фукции взаимодействия с операционной системой на сервере. В общем случае с помощью CGI можно запустить любое приложение на сервере и все, что будет из него (приложения) выведено на стандартный поток вывода, попадет в браузер. Параллельно приложение может произвести вывод данных в файл на сервере, послать на емэйл или поместить (извлечь) что-то в базу данных.

Коренное отличие PHP от CGI заключается в том, что PHP является препроцессором HTML. Т.е. его работа построена по следующей схеме:

.phtml(.php3) php.exe броузер

Т.е. до того, как сервер «отдаст» файл браузеру, его просматривает препроцессор-интерпретатор. Что это значит? Файлы, которые подвергаются обработке препроцессором, должны иметь определенное расширение (обычно это .phtml или .php3, но эти значения можно поменять) и содержать (хотя это не обязательное требование) код для препроцессора. Код этот может быть оформлен следующими способами:

Или:

Серверные скрипты. Введение
Комментарии
Нет комментариев.
Добавить комментарий

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

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

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

Забыли пароль?
Запросите новый здесь .

Серверные скрипты. Введение PHP

Полное содержание серии — в конце статьи.

Когда-то давно я услышал от знакомого кодера фразу «PHP – легкий язык программирования«. В то время я отнесся к этим словам скептически, но теперь полностью согласен. Этот язык гораздо легче изучить, чем многие другие, потому что, в первую очередь, он ограничен в возможностях. Это неплохо, просто от заточен под определенные функции и отлично справляется с ними. Грубо говоря от него требуется только собирать текст.

Вторым агрументом является документированность и популярность PHP. В инете чуть больше, чем дофига толковой информации по теме. Если вы ничего не знаете о создании кода, то начать именно с PHP – удачный выбор. И начать знакомство рекомендую в Викидепии.

Небольшое отступление. Зачем вообще изучать PHP в плане сайтостроя? Элементарно, чтобы сделать сайт динамическим. Т.е. не писать в ручную до байта каждую страницу своего творения, а создать программки (скрипты), которые сами будут собирать ответ браузеру. Самый простой пример, на котором я почувствовал необходимость использования PHP: нумерация страниц с контентом (перейдите на главную страницу сайта и посмотрите внизу). Вести такую нумерацию вручную несколько утомительно, а на PHP — 15 строк кода :). Возвращаемся к теме..

Важный момент, упускаемый новичками: PHP-скрипты выполняются на стороне сервера. Поэтому на PHP нельзя выполнить код в браузере посетителя в отличие от JavaScript. PHP-cкрипты так же не знают, дошла страница до бродилки или нет, их дело – только генерировать html-код. А вот если по какой-то причине препроцессор не отработает назначенный скрипт или завершит его с ошибкой, то юзер ничего толкового не получит

С другой стороны, именно из-за серверной стороны действия через ваш дырявый php-скрипт хакер может положить сайт. Поэтому всегда проверяйте в скрипте, что именно получили от пользователя. Нельзя доверять любой входящей информации, будь то переданный логин или загруженная картинка. Как проверять, вы скорее всего узнаете из книг по этой теме. Одна из наиболее удачных — Фленов М. «PHP глазами Хакера« (2005). Сейчас читать ее рано, вернетесь к ней, когда более-менее освоите php-программирование.

Я хочу, чтобы вы понимали, как много у вас свободы выбора в сайтостроении. Писать серверные скрипты на PHP – это не единственный выбор. Есть еще Perl, ASP, Python, Ruby и др. языки, способные собрать страницу для браузера. Просто я их не знаю :-), поэтому говорим только о PHP.

Если будете разворачивать свой веб-сервер с поддержкой PHP, то нужно скачать какую-нибудь сборку с оф.сайта. Их там много, кое-что о выборе версии я писал здесь. PHP без проблем интегрируется в Apache. Нужные настройки спросите у Гугля, по этому вопросу тоже очень много написано.

Я учил PHP по двум книгам сразу, Колисниченко Д.Н. «Самоучитель PHP 5« (2007) и Котеров Д.В. «Самоучитель PHP4« (2001). Вторая книга сильно устарела, но в ней все еще много полезного для начинающего кодера. Читайте их параллельно, иногда сказанное другими словами помогает в понимании материала. Вдобавок очень полезный сайт – php.su. Пошарьтесь, поищите для себя что-то ценное.

На том сайте есть русская справка PHP, кривая и старая. Более новая и полностью рабочая здесь. Вообще можете ознакомиться со всем, что я писал по теме, может будет полезно.

На оф.сайте PHP появилась русская справка online. Это самая актуальная версия 😉 Но что более важно, так это комментарии к справочным статьям. Иногда в них есть полезная информация, решающая проблему. Здесь вам потребуется знание еще одного языка – английского.

PHP работает не только в подчинении веб-сервера и для непосредственного взаимодействия с пользователем может использовать консоль. Этого достаточно, но неудобно, особенно при разработке и отладке именно веб-приложений. Нужен IDE редактор, коего у PHP нет 🙁 Ищем сторонний, желательно со встраеваемым отладчиком. Я перепробовал 6-7 штук разных редакторов, платных и бесплатных, и остановился на Blumentals Rapid PHP, оф.сайт. Программа платная, версия 2010 года была не без косяков, но этот редактор значительно превосходит аналоги по удобству. В нем можно подключить chm-справочник, после чего будет работать контекстная справка. Одной кнопой запускается синтаксическая проверка, есть подсветка кода и предиктивный ввод текста с подсказкой параметров функций.

Все, детство в серии статей закончилось. Далее говорим на полупрофессиональном уровне

Форматирование кода

Если вы никогда ни на чем не программировали, коротко поясню: форматирование — это написание кода в удобочитаемом виде. Используем отступы для каждого вложенного блока, пустые строки и пробелы для разбиения кода на части и т.д. Убодочитаемость — это весьма субъективное понятие. Вот два примера:

Код, созданный года четыре назад, на заре моего web-развития

А это мое видение красиво оформленного кода сейчас

Оба варианта я считаю приемлемыми. Кроме комментариев в первом, раньше для них работали переносы. Но второй вариант читается легче, имхо. Если у вас еще нет своих предпочтений, предлагаю взять за основу стиль кодирования Zend FW.

Отладчик XDebug

RapidPHP может работать с отладчиком XDebug. Вообще php-отладчики не привязаны к редакторам, это редакторы понимают только определенные отладчики. В частности XDebug — это сторонняя (3rd party soft) бесплатная программа, debugger+profiler в одной библиотеке. Ставится, как расширение PHP, нужная версия отладчика зависит от установленной версии PHP. Если есть проблемы выбора версии, то сюда скопируйте результат функции phpinfo() (html-код результата), получете инструкции по скачиванию и настройке дебагера. Инфу по теме профайлера ищите на их сайте, в документации где-то.

Установка XDebug. Cкопируйте *.dll в каталог с расширениями PHP — PECL. В php.ini пропишете секцию:

[Zend]
zend_extension=»D:\Apache2.2\PHP\PECL\php_xdebug.dll»
xdebug.remote_enable = on

Перезапустите web-сервер и Rap >Main menu > View > Debug tools

Альтернативный синтаксис и PHP-теги

Не могу спрогнозировать, когда вы об этом узнаете, но чем раньше, тем лучше. В PHP можно писать блоки условий и циклов в альтернативном синтаксисе. Это очень удобно при вставке php-кода в html-шаблон.

Рейтинги

Пример вырван из контекста, поэтому не пытайтесь понять значение переменных. Он нужен только для демонстрации использования альтернативного синтаксиса. Обратите внимание на запись php-тегов, ибо..

.. существует четыре набора тегов, которые могут быть использованы для обозначения PHP-кода. Из них только два, — и , всегда доступны. Другими двумя являются короткие теги и теги в стиле ASP , которые управляются в конфигурационном файле php.ini параметрами short_open_tag и asp_tags соответственно.

Важное замечание. Если в настройках PHP запрещены короткие теги (short_open_tag = false), тогда такие вставки будут проигнорированы, т.е. пойдут простым текстом. Но! Вставка типа при этом все равно будет работать. А все потому, что такая запись — это сокращение, а не короткие теги. Т.е. при парсинге она превращается в и работает независимо от разрешения коротких тегов.

Crontab (aka Cron) – это линуксовый планировщик. Применительно к сайтострою его удобно использовать для запуска служебных скриптов по таймеру. Например, раз в неделю проводить очистку БД пользователей, или раз в сутки парсить чужой сайт на предмет новостей 😉 Скрипты для Cron необязательно писать на PHP, пойдет любой скиптовый язык (bash, perl, python и т.д.).

Чтобы постичь все тонкости Crontab, нужно переехать на Linux =-) Я расскажу только об одной проблеме, возникшей у меня с этим планировщиком. Поскольку у меня на localhost стоит Windows, то окончания строк в моих скриптах были виндовские – \r\n. Поэтому Cron хостера игнорировал мои указания к действию, описанные в скрипте.

Потратив много часов на тесты и переписку с поддержкой, мы в итоге разобрались, что к чему. Итак, в ваших скриптах для Cron должны быть линусковые окончания – \n. Первой строкой таких скриптов добавляйте директиву «#!/usr/bin/php«. Это указание планировщику, каким обработчиком разбирать скрипт. Естественно, путь и обработчик могут быть другими, это только пример. Если дополнительно требуются какие-то ключи в директиве, то об этом можно узнать на конкретном хостинге.

Практика

Если будете сохранять php-скрипты в кодировке UTF-8, тогда обязательно указывайте без BOM, иначе наступите на грабли. Если в файле будут присутствовать эти самые 3 байта порядка, тогда при загрузке скрипта они сразу передаются в ответ браузеру. При этом уже нельзя работать с header/session/cookie в PHP, будет ошибка «Cannot modify header information . (output started at script.php:1)«. Так же, по непроверенным данным, появление этих байтиков перед DOCTYPE влечет к разрыву шаблона под IE и глюкам в других бродилках.

[UPD] «Eсть и другие миры» кроме Windows и поэтому я вам настоятельно рекомендую писать сайт именно в кодировке . Это касается любых файлов и базы данных (если будете ее использовать). Например, редакторы под Linux работают с из коробки, и бывает очень сложно включить в них поддержку win-1251. Возможно вы никогда не пересядете на другую ОС или редактор, но лучше подготовиться заранее, чем потом придумывать, как все переделать.

Текст в кодировке UTF-8 приводит в увеличению объема файлов, хотя с текущими объемами винтов — не критично. С UTF-8 немного сложнее работать, т.к. текст в мультибайтной кодировке получается переменной длины. Поясню: латинские буквы в нем занимают 1 байт, кириллица — 2 байта, другие языки — до 8 байт. Поэтому в скриптах нужны особые функции и флаги при обработке текстов. Функции есть, просто нужно вовремя вспоминать про их использование. Все эти минусы — ерунда по сравнении с деревянностью, которую получает сайт в кодировке win-1251 🙁

Где-то очень далеко от начала в самоучителях вам скажут, что нужно разделять код скриптов и html-страницы. Расскажут, как вставлять данные из скрипта в страницу (кстати, см. пример выше). С этого момента ваши html-страницы станут больше походить на заготовки, шаблоны для заполнения данными. Потом будет мутная глава про библиотекаря. Лично мне кажется неоправданным его использование на небольшом проекте. Главная мысль, которую нужно уловить: «мухи отдельно, котлеты отдельно» =) Я это не сразу постиг, т.к. читал книги от начала. Пришлось переделывать часть проекта. Совсем разделить код скриптов и html-разметку не получится, но этого правила нужно придерживаться.

Возможно у вас тоже возникнет вопрос, что считать главным – скрипт или шаблон? В книгах сказано, что шаблон – главный, и на него работает скрипт, как генератор данных. Так вот я вам скажу: главный это сам кодер 🙂 и он решает, кто на кого работает. Это зависит от ситуации, иногда скрипт подчиняет себе шаблон, если так логичнее.

Когда-то вы узнаете про GET и POST и начнете путаться, что где использовать. Когда не знаете, что выбрать, придерживайтесть схемы: GET (англ. «получать») для запроса данных у сервера, POST (англ. «посылать») для передачи данных на сервер. Жестких требований нет, это для определенности.

Для контроля полученных от юзера данных можно использовать:

  • функции, возвращающие значение заданного типа: intval(), strval() и т.д. (справка PHP, раздел «Функции для работы с переменными«)
  • приведение типов (ищите в справочнике раздел «Манипуляции с типами«) $var0=(float)$_GET[‘degree‘]; //в скобках – явное указание типа
  • регулярные выражения. Например, ожидаем от юзера значение типа «25.4-37.0«. Тогда для проверки корректности данных подойдет условие: if (preg_match (‘#^([0-9.]+) -([0-9.]+)$#‘, $_GET[‘complex‘], $match)==0) die (‘Неправильный параметр‘);

Такое условие срезает любые «левые» данные и сразу же разбирает числа в массив. Не проверяется только введение нескольких разделителей в одном числе. Это меньшая из проблем, можно либо уточнить шаблон регулярки либо потом использовать приведение типов над элементами массива. Почему бы сразу не использовать приведение типов? Тогда сначала вам нужно разобрать, что вообще юзер передал, попытаться найти в этом что-то похожее на числа и только потом приводить их к типу.

Не всегда удобно и возможно использовать дебагер. Для просмотра значений переменных можно использовать print_r() или var_dump(). Мне больше нравится вторая функция, она под Windows более читабельную инфу выдает. Пример:

Еще один вариант, var_export(). Использую ее, когда нельзя получить данные в браузер, не нарушив при этом работу скрипта. Например, ajax-запрос или обращение c другого сервера. Пример использования:

В результате в файле debug.log окажется содержимое переменной $someVar.

Если PHP запущен на nix-сервере, то могут быть загадочные глюки с кириллицей в некоторых функциях. Глюки были замечены с preg-* функциями и, как следствие, fgetcsv(). В первом случае у меня шаблон типа «#(\w)+#» не видел русские буквы. А парсер csv-файлов, работающий на fgetcsv(), разбирал не весь русский текст. Я не знаю точно, откуда «ноги растут», лечится трабла явным определением локали в скрипте, использующем эти функции с русскими текстами:

setlocale(LC_ALL, ‘ru_RU.CP1251’, ‘rus_RUS.CP1251’, ‘Russian_Russia.1251’);

Кодировка может быть другая, но суть та же.

PHP (как и JavaScript) поддерживает следующий синтакис цикла for:

for ($i=0, $arr_cnt=count($arr); $i

такая запись по времени выполняется быстрее, чем:

Думаю, пояснения не нужны. Или нужны? 🙂 Во втором примере размер массива будет вычисляться на каждом шаге цикла перед проверкой условия, а в первом – только при инициализации переменных.

Для передачи значений переменных из PHP в JavaScript можно использовать cookies, явные вставки в шаблон документа или аттрибуты HTML-тегов. Про печеньки нечего рассказывать, все просто. Поясню про вставку:

В шаблоне инициализируются глобальные js-переменные recid и golast, которые в потом будут использоваться в подключаемом script.js. Прошу не кидаться булыжниками, в свое время такой подход мне виделся приемлемым. С тех пор я стал немного умнее 🙂

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

Здесь тегу div#cmntWrapper назначаются два аттрибута, data-golast и data-recid. В подключаемом скрипте получить эти аттрибуты можно так:

Здесь есть хорошая статья по теме использования аттрибутов в JavaScript, рекомендую почитать.

Добавить комментарий
Основной синтаксис Альтернатива
if (condition) else

if (condition): statments0; else: statments1; endif;
for|foreach (condition)

for|foreach (condition):
.
statments;
.
endfor|endforeach;