Php руководство по рнр 3 0 специфичные функции apache


Содержание

Бесплатные уроки программирования на PHP. Интерпретируемый язык программирования PHP. Уроки для начинающих разработчиков сайтов и веб-страниц.

Где скачать и как установить PHP? Инструкция по установке PHP 5.6 на Windows без использования Apache на встроенный в PHP сервер

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем рубрику Веб-программирование и ее раздел PHP. Эта запись является своеобразной вводной инструкцией для новичка по установке PHP 5.6 на Winodws 10. Причем устанавливать PHP на Windows мы будем без использования Apache, вместо него мы будем использовать встроенный в PHP веб-сервер. Сразу оговорюсь, что устанавливать PHP без Apache на Windows даже в ознакомительных целях я бы не рекомендовал, о причинах мы поговорим в конце данной записи, поэтому считайте данную статью ознакомительной.

Где скачать и как установить PHP? Инструкция по установке PHP 5.6 на Windows без использования Apache на встроенный в PHP сервер

Итак, аннотация к нашей инструкции для новичка по установки PHP на Windows без Apache:

  1. Мы поговорим о том откуда скачать PHP.
  2. Научимся выбирать версию PHP для установки под наши нужды и технические особенности компьютера: семейство, к которому принадлежит ОС и ее разрядность, заодно посмотрим на разницу между Thread Safe и Non Thread Safe в PHP.
  3. Также мы поговорим про особенности использования PHP для различных целях, а также о базовых принципах работы серверной технологии PHP.
  4. И в заключении мы установим PHP 5.6 на Windows 10 и запустим наши скрипты, написанные на PHP, без использования сервера Apache, воспользовавшись встроенным в PHP веб-сервером и узнаем почему данный подход не самый правильный и удобный даже для знакомства с PHP.

Где скачать PHP 5.6?

Итак, давайте разберемся сперва с вопросом: где скачать PHP 5.6. Отметим, что PHP – это бесплатная программная среда, поэтому если вы найдете в сети Интернет ресурс, который предлагает скачать PHP за деньги, знайте, что это мошенники. Скачать PHP, как и многие программные продукты можно с официального сайта. Причем абсолютно бесплатно. Ниже вы можете увидеть скрин страницы, сделанный с официального сайта, с которой можно скачать PHP различных версий.

Страница выбора версии PHP для скачивания и последующей установки

В данном случае нас интересует версия PHP 5.6 и ее реализация для компьютеров с операционной системой Windows на борту, нажав на кнопку «Download Windows», вы перейдете на страницу, в которой сможете выбрать версию PHP, соответствующую версии вашей ОС и ее разрядности, смотрите скрин ниже.

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

Я буду скачивать PHP VC11 x64 Thread Safe, так как у меня 64 битная Windows 10. Отмечу: если вы счастливый обладатель Windows XP, то, скорее всего, вы не сможете установить PHP версий 5.5 или 5.6. Скачивать нужно zip архив с файлами PHP, ведь мы же не хотим заниматься еще и компиляцией PHP из исходных файлов.

Разница между Thread Safe и Non Thread Safe в PHP

Итак, когда мы скачивали PHP, то видели, что выбор версии PHP, которую необходимо скачать зависит не только от операционной системы и ее разрядности, но и от какого-то непонятного Thread Safe и Non Thread Safe. Давайте разберемся в чем разница между Thread Safe и Non Thread Safe в PHP. Хотя предыдущая фраза звучит не совсем корректно, так как Thread Safe скорее относится к операционной системе, нежели к языку PHP.

На самом деле – это исторический момент для языка PHP. С октября 2000 года, а именно тогда появился PHP 3.0.17, именно эта версия PHP стала работать на машинах под управлением операционных систем семейства Windows. Появилось разделение версий PHP на Thread Safe и Non Thread Safe. Раньше все версии PHP были Thread Safe.

А теперь о том в чем разница между этими версиями сборки PHP. Вся соль в том, что ОС Windows использует мульти-поточную архитектуру работы, а операционные системы семейства UNIX поддерживают мульти-процессовую архитектуру. Если вы выберете версию PHP, скомпилированную, как мульти-процессовое CGI-приложения, то у вас возникнет много проблем в работе ваших PHP приложений в том случае, если вы будете устанавливать PHP как модуль веб-сервера Apache или IIS.

Всё дело в том, что HTTP сервер в Windows, в частности веб-сервер Apache работает в несколько потоков и PHP, установленный как модуль сервера Apache, будет являться одним из его потоков. Следовательно, PHP для правильной работы с Apache, как его модуль, должен быть скомпилирован именно в режиме Thread Safe.

Немного полезной информации о PHP перед его установкой

Итак, мы не только определились с тем какую версию PHP скачать, но и посмотрели на разницу между версиями Thread Safe и Non Thread Safe. Для начала вспомним публикацию о том, что такое PHP, в которой мы говорили о возможностях данного интерпретируемого языка:

  1. С помощью PHP мы можем создавать различные веб-сайты и веб-приложения.
  2. PHP дает возможность писать скрипты командной строки.
  3. При помощи PHP мы можем создавать приложения с графическим интерфейсом.

Нас интересует больше всего первая функция данного языка программирования. Для этого нам потребуется:

  • веб-сервер, который, кстати, с недавних пор встроен в PHP и подходит для целей изучения PHP и его возможностей, но никак не подойдет для реальных проектов;
  • браузер, чтобы просматривать результаты наших трудов;
  • СУБД или система управления базами данных, это может быть сервер MySQL, библиотека SQLite, СУБД PostgreSQL;
  • и непосредственно интерпретатор PHP.

Кстати, вместо установки всех этих компонентов (за исключением браузера) по отдельности, вы можете использовать готовые сборки такие как Денвер или локальный веб-сервер AMPPS. Веб-сервер в данном случае нам нужен для того, чтобы реализовать архитектуру клиент-сервер, так как PHP в данном случае выступает как серверная технология.

Таким образом происходит деление функций на функции клиента и функции сервера. В данном случае происходит взаимодействие по протоколу HTTP, который относится к седьмому уровню семиуровневой модели сетевого взаимодействия OSI. Функции клиента выполняет браузер, который посылает запросы серверу. Сервер понимает, что и в каком виде от него хочет клиент по специальным HTTP заголовкам и методам HTTP протокола. Результаты своей работы сервер отправляет клиенту специальным HTTP сообщением, которое получило название ответ сервера. Ответы сервера снабжены так же заголовками, но еще у них есть особые коды состояния, по которым браузер видит, как его понял сервер и что еще нужно сделать, чтобы достичь желаемого результата.

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

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

Ранее мы разобрались с тем, что PHP может работать как модуль сервера, а может быть собран и установлен как обработчик CGI или FastCGI, во втором случае ваш веб-сервер должен исполнять PHP скрипты как CGI-скрипты. Если вы хотите использовать PHP в командной строке вашей ОС, то вам понадобится PHP CLI. Это не входит в рамки данной публикации, поэтому подробно не будем останавливаться, лишь скажем, что в этом случае нам не потребуется ни браузер, ни веб-сервер.

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

Краткая инструкция по установке PHP на Windows 10 без Apache на встроенный сервер

Мы разобрались с версиями PHP их особенностями и поговорили о принципах работы серверных технологий, также мы выбрали версию PHP, которую скачали. Самое время поговорить о том, как установить PHP 5.6 на Windows 10. Заметим, что устанавливать PHP мы будем без использования отдельного веб-сервера, так как начиная с PHP 5.4 в PHP есть свой собственный веб-сервер, который подходит для демонстрационных целей и изучения основ интерпретируемого языка PHP. В отдельной публикации мы поговорим про установку PHP как модуль сервера Apache 2.4. В этой же публикации мы установим PHP без Apache на Windows.

Надеемся, что вы уже скачали нужную вам версию PHP и мы можем начать установку. Установку PHP на Windows мы будем делать по шагам.

Шаг первый. Нам необходимо распаковать скаченный архив в любое удобное место на диске. В нашем случае это будет: c:\PHP\.

Шаг второй. Теперь нам нужно добавить путь к корневому каталогу PHP в переменную PATH. Мы уже подробно рассматривали добавления значения переменной PATH на Windows 7, когда говорили про установку библиотеки SQLite на Windows, а про добавления значения переменной PATH на Windows 10 мы говорили тогда, когда рассматривали установку SASS на Windows. В связи с этим здесь мы этот вопрос рассматривать не будем.

Шаг третий. На самом деле мы уже закончили установку PHP 5.6 на Windows 10. Но нам нужно убедиться в том, что установка была выполнена правильно и PHP, как и его встроенный сервер, работают. Для этого нам нужно открыть командную строку от имени администратора и написать несколько команд: cd c:\php и php -S localhost:8000. Первая позволит нам перейти в папку, в которую мы установили PHP, вторая запускает веб-сервер встроенный в PHP. Дело всё в том, что веб-сервер, который встроен в PHP, будет считать корневым каталогом тот каталог, из которого вы его запустили.

Шаг четвертый. После запуска сервера, встроенного в PHP вы увидите следующее сообщение в командой строке:

Php руководство по рнр 3 0 специфичные функции apache

Хотелось бы поблагодарить коллектив студии RealDesign, проверивший «на своей шкуре» все описываемые действия. Если у Вас возникнут вопросы в процессе выполнения инструкций в статье, буду рад ответить. Мой адрес электронной почты /redir?http://forum.dklab.ru/users/DmitryKoterov/email/ . Пожалуйста, описывайте свою проблему подробнее! Комментарии бесплатные, но весьма краткие. Компьютерная революция не ждет никого, в том числе и меня.

1. Дистрибутивы и ссылки
2. Введение — зачем нужен домашний виртуальный сервер?
3. От слов к делу — установка Apache
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspЭтап первый — установка
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspЭтап второй — настройка файла конфигурации Apache mime.types
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspЭтап третий — настройка файла httpd.conf
4. Виртуальные хосты Apache — как это настроить?
5. Установка PHP версии 3
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspУстановка PHP
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspНастройка Apache
6. Установка Perl
7. Установка MySQL
8. Часто задаваемые вопросы

1. Дистрибутивы и ссылки

«А не послать ли нам гонца. »
Кинорежиссер

Вот программы, на которые ссылается данная статья:

  1. Apache версии 1.3.6
  2. PHP версии 3.0.13
  3. Perl версии 5.004.02
  4. MySQL версии 9.13

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

  1. Официальный сайт Apache: http://www.apache.com
  2. Официальный сайт PHP: http://ru.php.net
  3. Официальный сайт Active Perl: www.activestate.com
  4. Официальный сайт MySQL: http://www.mysql.com

И еще несколько ссылок:

  1. Полезная информация об Apache: http://www.apache.ru
  2. Всероссийский клуб вебмастеров: http://www.webclub.ru
  3. Клуб разработчиков PHP: http://www.phpclub.net
  4. Ну и, конечно, Лаборатория dk: http://dklab.ru

2. Введение — зачем нужен домашний виртуальный сервер?

«Ну к чему все это, лучше бы водки выпили»
Из писем Белинского Гоголю

Если Вы читаете этот документ, а также если у Вас установлен Windows 95/98 (а наше личное мнение такое, что эта операционная система наиболее сбалансирована с точки зрения интерфейса и удобства работы), значит, Вы уже столкнулись с проблемой виртуального домашнего сервера, а точнее, с проблемой его отсутствия! Эта небольшая статья поможет Вам скачать и установить один из лучших серверов — Apache, а также те приложения, из-за отсутствия которых народ в бешенстве сметает все остальные сервера (например, Sambar Server) со своего многострадального жесткого диска и устанавливает Apache для Windows 95/98. Имеются в виду, конечно, Perl, PHP3 и MySQL, также работающие под Windows. Прочитав эту статью и скачав дистрибутивы, Вы будете вооружены всеми инструментами, которые так необходимы для профессиональной работы в Web!

Обращаем Ваше внимание: бытует мнение, что MySQL (а тем более для Windows 95/98) нельзя получить бесплатно, а можно только купить. Так вот, можете вздохнуть с облегчением: MySQL для Windows 95/98 существует, и ее установка не будет стоить Вам и копейки!

Если Вы — профессиональный Web-программист, то после внимательного ознакомления с этой (увы, ставшей некоторое время назад довольно объемистой) статьей Вы сможете на порядок упростить себе жизнь — точнее, ее часть, касающуюся написания и отладки скриптов. И это благодаря тому, что все описанное здесь почти на 100% совместимо с тем ПО, которое скорее всего установлено у Вашего хостера (а больше половины современных хостеров работают с Unix). Именно для этих, и никаких других, целей и была написана эта статья — помочь разработчику скриптов. Однако, если Вы собераетесь всерьез заняться хостингом на платформе Win32, то лучше будет использовать на Apache и PHP, а Microsoft IIS и ASP, и про это, я уверен, написано множество других статей.

Поговорим теперь с теми пользователями Windows 95/98, которые заглянули сюда из простого любопытства. Часто возникает ситуация, когда необходимо проверить полный вид html-страницы. Однако чаще всего это невозможно при работе дома — технологии SSI, CGI и, конечно, PHP, например, точно требуют сервера. Как же быть? Не стоит впадать в апатию — нужно просто установить на Ваш домашний компьютер (пусть даже и не подключенный к Интернет) специальную программу — Web-сервер. Вообще-то серверов существует множество — плохие и хорошие, медленные и быстрые. Мы же выбрали сервер, подходящий под последние две категории, — Apache. Самое главное то, что это чуть ли не единственный сервер, который позволяет работать в Windows 95/98 с технологиями PHP, CGI и Perl-скриптами одновременно так же просто и непринужденно, как будто у Вас стоит Unix.

3. От слов к делу — установка Apache

«У меня для вас две новости: плохая и хорошая. Плохая: мяса
мало, будем есть бизоний помет. И хорошая: его-то у нас много. »
Из выступления вождя апачей

Итак, Вы решились установить на свой компьютер Apache для Windows 95/98. В таком случае Вам следует запастись терпением и для начала скачать дистрибутив сервера — файл с именем apache_setup.exe (3.061.629 байт). Скачали? Прекрасно. Теперь самое интересное — настройка Apache для Вашей системы.

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

Этап первый — установка

  1. Определитесь с директорией, в которую Вы будете устанавливать Apache. Все дальнейшие рассуждения основаны на том, что Вы выбрали для этой цели такой каталог:f:\usr\local\apache Если диска F: у Вас нет, или если Вы не хотите его захламлять, советуем сделать одно из трех:
    1. Создайте диск F: с помощью какой-нибудь программы для виртуальных разделов (например, с помощью встроенной в Windows 95/98 программы DriveSpace). Это самое лучшее решение, и с точки зрения экономии памяти, и с точки зрения быстродействия. Ведь что такое Web-сайт, как не набор очень небольших файлов? А DriveSpace как раз и оптимизирует работу с такими файлами.
    2. Сделайте виртуальный диск F:. Для этого создайте где-нибудь на любом диске директорию, которая в будущем будет являться корневой для диска F:. Предположим, Вы выбрали C:\INTERNET. Далее, в начале файла c:\autoexec.batпропишите такую строку: и перезагрузите компьютер. У вас должен появиться виртуальный пустой диск F:.

    ВНИМАНИЕ : имеются сведения, что в Windows 95/98 есть ошибка, в результате которой иногда subst-пути «сами по себе» преобразуются в абсолютные. То есть, например, иногда в рассмотренном выше примере команды (а точнее, команда dir в своем заголовке) ошибочно выведут, что текущая директория C:\ (а не F:\, как это должно быть). Указанная ошибка чаще всего проявляется в неработоспособности Perl-транслятора. Так что лично мы не рекомендуем Вам использовать subst. Вместо этого воспользуйтесь пунктом 1.

  2. Наконец, Вы можете всего этого не делать и поставить Apache на любой другой диск, только тогда Вам придется немного тяжелее при выполнении всех остальных действий. Нужно будет все указываемые пути заменять на Ваши собственные, а это крайне неприятно. Еще раз настоятельно рекомендуем воспользоваться диском F:.

Рекомендуем все же разместить Apache в указанном в начале каталоге, так как он максимально соответствует каталогу для реального Web-сервера Интернета. Ведь чем ближе в плане конфигурации мы будем к такому серверу, тем лучше и эффективнее сможем работать.

  • Запустите только что скачанный файл. В появившемся диалоге нажмите кнопку Yes, а затем — кнопку Next.
  • Теперь нажмите Browse. Вручную задайте директорию для установки: f:\usr\local\apache и нажмите кнопку OK.
  • Выберите тип установки — Сustom и уберите флажок Source Code (если, конечно, не хотите посмотреть исходные тексты Apache). Этим Вы сэкономите себе 3 Мбайта.
  • Нажмите Next и подождите, пока будут копироваться файлы Apache.
  • На запрос о перезагрузке компьютера ответьте «Перезагрузить».
  • Поздравляем — Apache установлен! Теперь самое неприятное — его настройка.

    Этап второй — настройка файла конфигурации Apache mime.types

    1. Откройте директорию f:\usr\local\apache\conf. Откройте находящийся там файл mime.types.
    2. Найдите в нем такую строчку: Измените ее на

    Следует заметить, что если Вы по каким-то причинам не хотите портить файл mime.types, то можно вместо этого прописать в файле httpd.conf (см. ниже) строки вида

    Этап третий — настройка файла httpd.conf

    Внимание! Это — самый ответственный момент установки. Просим соблюдать инструкции БУКВАЛЬНО.

    1. Откройте директорию f:\usr\local\apache\conf Откройте находящийся там файл httpd.conf. Это — единственный файл, который Вам осталось настроить. Вам предстоит найти и изменить в нем некоторые строки, а именно те, о которых упоминается далее. Во избежание недоразумений не трогайте все остальное. Следует заметить, что в нем каждый параметр сопровождается несколькими строками комментариев, разобраться в которых с первого раза довольно тяжело. Поэтому не обращайте на них внимание.
    2. В поле ServerAdmin укажите Ваш E-mail адрес, который будет показываться в сообщениях об ошибке сервера. Например:
    3. В поле ServerName напишите любое слово — на работе это не сказывается, например: Только не забудьте раскомментировать поле ServerName, то есть убрать символ «#» перед этим параметром (по умолчанию он закомментирован)!
    4. В поле DocumentRoot укажите ту директорию, в которой будут храниться Ваши html-файлы, например: Разумеется, можете указать и любую другую директорию, если хотите. В любом случае, не забудьте ее создать, лучше сделайте это прямо сейчас!
    5. Найдите блок, начинающийся строкой и заканчивающийся (вообще, такие блоки обозначают установки для заданной директории и всех ее поддиректорий). Его нужно изменить на: Таким образом, в этом блоке будут храниться установки для всех директорий по умолчанию (т.к. это — корневая директория).
    6. Найдите аналогичный блок, начинающийся и заканчивающийся . Там будет много комментариев, не обращайте на них внимание. Этот блок следует заменить на: Это — установки для директории с Вашими html-документами. Если хотите, можете установить другую директорию, главное, чтобы она совпадала с той, которая прописана в параметре DocumentRoot
    7. Идем дальше. Установите UserDir, например так: Это будет директория, в которой хранились бы домашние страницы пользователей, если бы это был настоящий Web-сервер, а также корневые каталоги виртуальных хостов (см. ниже). Не забудьте также создать этот каталог.
    8. Установите DirectoryIndex так: Это — так называемые файлы индекса, которые автоматически выдаются сервером при обращении к какой-либо директории, если не указано имя html-документа. В принципе, можно добавить сюда и другие имена, например, index.phtml, если Вы будите работать с PHP и т.д.
    9. Найдите и пропишите такой параметр: Да, именно так, с двумя слэшами. Это будет та директория, в которой должны храниться Ваши CGI-скрипты. Если хотите, можете задать другое имя, например: Подобный параметр говорит Apache о том, что, если будет указан путь вида http://localhost/cgi-bin, то на самом деле следует обратиться к директории f:/cgi-bin.
    10. Теперь следует найти и настроить блок параметров, начинающийся с и заканчивающийся . Это — установки для Вашей CGI-директории (если Вы установили для нее другое имя на предыдущем шаге, соответственно модифицируйте путь). Там должно быть:
    11. Настройте следующий параметр: Это говорит Apache о том, что файлы с расширением .exe и .bat нужно рассматривать как CGI-скрипты.
    12. И последнее — установите: Или, если Вы хотите, чтобы и обычные файлы html обрабатывались SSI, напишите так:

    Поздравляем — Вы настроили свой Apache, и он должен уже работать! Для запуска сервера нажмите Пуск->Программы->Apache Web Server->Start Apache as console app, при этом появится окно, очень похожее на Сеанс MS-DOS, и ничего больше не произойдет. Не закрывайте его и не трогайте до конца работы с Apache.

    Несколько слов о том, как можно упростить запуск и завершение сервера. В Windows можно назначить любому ярлыку функциональную комбинацию клавиш, нажав которые, Вы запустите этот ярлык. Так что щелкните правой кнопкой на панели задач, в контекстном меню выберите Свойства, затем Настройка меню и кнопку Дополнительно. В открывшемся Проводнике назначьте ярлыку Start Apache as console app комбинацию Ctrl+Alt+A, а ярлыку Shutdown Apache as console appCtrl+Alt+S

    Вот шаги, которые можно проделать для проверки работоспособности сервера:

    • Проверка html: в директории f:/www с html-документами Apache создайте файл index.html. Теперь запустите браузер и наберите:
      или просто Загрузится Ваш файл.
    • Проверка CGI: в директории f:/cgi-bin для CGI-скриптов создайте файл test.bat с таким содержанием:
      Теперь в браузере наберите: В окне отобразится результат команды DOS dir. (Хотелось бы отметить, что указанный тест работает не на всех версиях Windows: иногда вместо того, чтобы выполнить файл test.bat, Apache выводит в браузер его содержимое. С чем это связано — не совсем ясно, однако, кажется, можно избавиться от указанной ошибки путем манипулирования с Реестром. Если у Вас test.bat не запускается, не расстраивайтесь: вряд ли Вы когда-нибудь будете писать скрипты в виде bat-файлов, тем более, что это несовместимо с Unix.)
    • Проверка SSI: аналогична проверке html. Используйте, например, директиву Если bat-файлы Ваш Apache запускать не хочет (см. выше), то дождитесь установки Perl или PHP.

    Если что-то пошло не так, либо окно Apache открывается и тут же закрывается, значит, где-то произошла ошибка — скорее всего, в httpd.conf. За детальным разъяснением ее причин можно обратиться к log-файлам, расположенным в директории f:/usr/local/apache/logs.

    4. Виртуальные хосты Apache — как это настроить?


    «Виртуальные хосты — хосты, имеющие уникальный адрес
    в Интернет, эмулируемые и поддерживаемые сервером»
    Древнее языческое заклинание

    Итак, Вы установили Apache. Получили, таким образом, директорию f:/www для хранения документов и f:/cgi-bin для CGI. Но вот беда: в Интернете вы поддерживаете несколько серверов, а Apache создал для вас только один. Конечно, можно структуру этих несколькох серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов с помощью Apache, например, один с именем serv1 и адресом 127.0.0.2, а другой — с именем serv2 и адресом 127.0.0.3. (Конечно, вместо «serv1» и «serv2» Вам нужно будет указать желаемые имена Ваших виртуальных хостов. Советуем назвать их так же, как и на Вашем настоящем Web-сервере — это может многое упростить при программировании скриптов.)

    Как это принято в Unix, каждый сервер будет представлен своим каталогом в директории f:/home с именем, совпадающим с именем сервера. Например, сервер serv1 будет храниться в директории f:/home/serv1, которую Вам необходимо создать прямо сейчас. В этой директории будут находиться:

    • файл access.log с журналом доступа к виртуальному серверу.
    • файл errors.log с журналом ошибок сервера.
    • директория www, где будут храниться html-документы.
    • директория cgi для хранения CGI-программ.

    Последние две директории (www и cgi) Вам тоже необходимо создать прямо сейчас.

    Далее, для установки виртуального хоста необходимо сделать некоторые изменеия в файле конфигурации Apache httpd.conf (см. выше), а также в некоторых файлах Windows. Вот необходимые действия:

    1. Откройте директорию f:\usr\local\apache\conf. Откройте находящийся там файл httpd.conf. Перейдите в его конец, Вам предстоит добавить туда несколько строк.
    2. Пропишите следующие строки в конце файла после всех комментариев:
      При желании можно добавить и другие параметры (например, DirectoryIndex и т.д.) Вообще, не переопределенные параметры наследуются виртуальным хостом от главного.
    3. Теперь надо немного подправить системный файл hosts, который находится в C:\WINDOWS\hosts (такого файла может не быть по умолчанию — в этом случае его надо создать). hosts (не путать с файлом hosts.sam!) — обычный текстовый файл, и в нем обычно заранее прописана только одна строка: именно эта строка и задает соответствие имени localhost адресу 127.0.0.1. (Ради справедливости следует сказать, что имя localhost работает и без указанной выше строки. Ну и выдумщики же эти парни из компании Microsoft!) Для нашего виртуального хоста надо добавить соответствующую строчку, чтобы файл выглядел так:

    Этим Вы создадите виртуальных хост со следующими свойствами:

    • Имя — serv1
    • Доступен по адресу http://serv1 (или http://127.0.0.2).
    • Расположен, соответственно, в директории f:/home/serv1.
    • Директория для хранения документов — f:/home/serv1/www, доступная по адресу http://serv1/.
    • Директория для CGI — f:/home/serv1/cgi, доступная по адресу http://serv1/cgi/
    • Файлы журналов хранятся в f:/home/serv1

    Ну вот, мы создали один виртуальный хост! Если будет необходимо сделать второй, нужно просто проделать аналогичные действия, заменив параметры, связанные с расположением хоста на диске. Главное, не забудьте в этом случае указать другой IP-адрес (лучше всего указывать их последовательно, начиная с 127.0.0.2, затем 127.0.0.3 и т.д. — в этом случае все работает корректно). Желательно также для этих целей не указывать IP-адрес http://127.0.0.1, так как это — адрес главного сервера.

    Кстати, необходимо заметить, что главный хост (невиртуальный, тот, который мы создали в разделах 1 и 2) по-прежнему доступен по адресу http://127.0.0.1 или http://localhost. Более того, его директория cgi-bin «видна» всем созданным виртуальным хостам, так что Вы можете ее использовать.

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

    5. Установка PHP версии 3

    «- Больной, читайте первую строчку сверху!
    — Ша, Бэ, Пэ Ха Пэ. Доктор, кодировочку-то пофиксите. »
    Народный фольклор

    В отличие от установки Apache, установка PHP короче, однако мы бы не сказали, что проще. Дело в том, что, во-первых, у PHP нет нормальной setup-программы, как у Apache, а во-вторых, при его установке необходимо также настраивать сервер.

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

    Если Вы физически не можете или просто не хотите иметь такой каталог (хотя, если Вы читали инструкцию по установке Apache, все должно быть в порядке), то Вы вольны установить PHP в другой каталог, но тогда Вам предстоит следующее: в файле php_iis_reg.inf из дистрибутива PHP найти ВСЕ строки "f:\usr\local\php3" (их там, кстати, 6 штук) и заменить их на тот каталог, где Вы предполагаете разместить PHP. Могу сразу сказать, что это не самое приятное провождение времени, но уж ничего не поделаешь, такова жизнь.

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

    Установка PHP

    1. Создайте директорию f:/usr/local/php3 (если хотите другое имя, см. рассуждения выше). Это — та директория, в которую будет установлен PHP.
    2. Скачайте дистрибутив PHP — файл с именем php3_setup.exe (1.970.356 байт), желательно в только что созданную директорию. Это саморазворачивающийся zip-архив, который Вы должны будете запустить, чтобы разархивировать. По умолчанию он развернется в текущую директорию, так что будьте внимательны.
    3. Еще раз напоминаем: если Вы решили установить PHP в другую директорию, Вам необходимо вручную отредактировать файл php_iis_reg.inf с целью замены в нем имен директории на нужную (см. выше).
    4. В файле php3.ini из дистрибутива есть закомментированные строки, выглядящие так: Если Вы хотите включить какой-нибудь модуль (по умолчанию уже включена поддержка GD и mSQL), раскомментируйте соответствующую строку (уберите точку с запятой).
    5. Теперь в Проводнике Windows нажмите правой кнопкой мыши на файле php_iis_reg.inf и выберите в контекстном меню пункт Установить — этим Вы автоматически добавите в Реестр некоторые установки, касающиеся PHP.
    6. Скопируйте файл php3.ini в каталог с Windows (например, в c:/windows);

    Настройка Apache

    1. В файл конфигурации Apache conf/mime.types добавтьте такую строку:
    2. Теперь откройте файл conf/httpd.conf и добавьте в его конец (но перед блоками виртуальных хостов, если они там есть) такие строки:

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

    Напоминаем, что php-скрипты — не то же самое, что cgi-скрипты. В частности, если cgi-скрипты обычно располагают в /cgi-bin/, то php-скрипт должен лежать в директории с документами. Иными словами, файл в этом примере должен называеться примерно так: f:/www/test.php3

    6. Установка Perl

    «Язык может считаться законченным только тогда, когда
    в его синтаксисе используются все клавиши на клавиатуре»
    Отец-основатель Perl

    Это совсем просто, за исключением, может быть, выбора директории для Perl. А именно, Вы ДОЛЖНЫ разместить Perl в той же директории, в которой он находится на Вашем настоящем Web-сервере. Заметьте, что это очень важно, так как Perl требует, чтобы в каждом скрипте первой строкой стоял путь к Perl-интерпретатору; например, эта строка может выглядеть так:

    Эту же строку можно было бы написать и так: или даже так: Это заставляет искать Perl-интерпретатор в директории f:/usr/local/bin/ (если диск f: не указан, это означает, что он совпадает с диском, на котором расположен Apache). Ясно, что если Вы установите Perl не в такую же директорию, как на настоящем Web-сервере, Вам придется каждый раз менять эту самую первую строку во всех скриптах при закачке их на сервер. Итак, далее мы будем считать, что эта директория такова, как на большинстве Apache-серверов:

    ВНИМАНИЕ: очень распространенной ошибкой является установка Perl не в ту директорию или не на тот диск. Еще раз обращаем внимание на то, где должен быть расположен транслятор. Если Вы все же по какой-то необъяснимой причине не придерживаетесь нашего совета, то проверьте первую строку в Вашем скрипте. Она должна указывать не на директорию с Perl, а на исполнимый файл perl.exe. Напоминаем, что заставляет искать Perl-интерпретатор perl.exe в директории f:/usr/local/bin/, а не f:/usr/local/bin/perl

    Если Вы все же установите пути неправильно, Apache выдаст непонятное сообщение об ошибке, а в errors.log появится сообщение: couldn’t spawn child process. В этом случае проверьте все еще раз. Если кажется, что все в порядке, то, возможно, имеет место описанная выше ошибка с программой subst.

    Вот шаги, приводящие к цели:

    1. Первым делом создайте директорию Затем скачайте дистрибутив Perl — файл с именем perl_setup.exe (436.137 байт), желательно в только что созданную директорию. Это саморазворачивающийся архив, Вам нужно будет просто его запустить, чтобы разархивировать в текущую директорию. (Заметим, что версия Perl в этом архиве довольно стара и пригодна разве что для демонстрационных целей. В частности, в ней нет ни одного стандартного модуля. Поэтому, если Вы хотите использовать Perl в сколько-нибудь серьезных целях, Вам придется установить более свежую версию. Как это сделать описано в списке часто задаваемых вопросов. Все же рекомендуем Вам установить сначала предлагаемый дистрибутив, благо он очень маленький, а уже потом — новую версию поверх.)
    2. Теперь настроим сервер. Найдите в файле конфигурации Apache conf/httpd.conf строчку Замените ее на Как это ни странно, но эту директиву AddHandler иногда указывать не обязательно. Однако лучше перестраховаться.

    Вот, собственно, и все. Можете пользоваться Perl-транслятором. Для проверки его работоспособности используйте такой скрипт (помещенный, разумеется, в директорию cgi-bin или аналогичную):

    7. Установка MySQL

    Что ж, очень полезно. Даже чересчур.
    Дмитрий Котеров

    Сначала определимся: зачем же вообще нужны базы данных Web-программисту? Неужели не проще писать все самому? Ведь обычно объем данных не очень велик (если Вы только не пишите поисковую систему). Наш личный опыт таков: оказывается, стоит затратить какое-то время на изучение MySQL — это удивительно мощный инструмент, который сэкономит в будущем немало часов, потраченных на отладку «взбесившегося» скрипта.

    Итак, Вы решили установить у себя на локальном Apache поддержку MySQL. Как ни странно, это даже во многом проще, чем заставить работать Perl. Прежде чем привести точные инструкции, хотелось бы уточнить два момента:

    1. Эта статья не претендует ни в коей мере на то, чтобы быть учебником по MySQL. Предполагается, что Вы уже знаете, как работать с этой базой данных. Максимум, что здесь описывается — это то, как заставить MySQL работать под Window 95/98.
    2. В дальнейшем будем считать, что Apache у Вас установлен именно там, где это рекомендовалось выше.

    Что ж, приступим.

    1. Для начала запаситесь терпением и скачайте дистрибутив MySQL — mysql.zip. Как можно заметить, он довольно большой. Затем разверните его в любую удобную Вам директорию.
    2. Запустите setup.exe. Он спросит, действительно ли Вы хотите установить MySQL. После того, как Вы ответите утвердительно, файлы начнут копироваться в директорию c:/mysql, т.е. он даже не спросит Вас, куда устанавливать MySQL. Ничего страшного.
    3. Теперь, если Вы любите порядок, можете скопировать директорию c:/mysql в какое-нибудь более приличное место — например, f:/usr/local/. Только после этого строго следуйте указаниям в статье.
    4. Создайте в директории f:/usr/ такие два .bat-файла:
      • server.bat:

    Теперь для удобства можно создать ярлыки на Рабочем столе для этих файлов. Рекомендуем также назначить этим ярлыкам «горячие» клавиши: например, для запуска сервера — Ctrl+Alt+A, а для завершения работы — Ctrl+Alt+S. Кроме того, лучше поставить у этих ярлыков параметры «Запускать свернутыми в значок». Все это сильно упростит жизнь в дальнейшем.

  • Что ж, считайте, MySQL уже установлена. Осталось только создать базу данных. Для этого следует запустить f:/usr/local/mysql/bin/mysqladmin с ключем create имя_базы. Например, если мы хотим создать базу testbase, нужно ввести в окне Сеанса MS-DOS:
  • Если Вы планируете использовать MySQL в скриптах на PHP, проверьте, раскомментирована ли в файле php3.ini (расположенном в директории с PHP и в c:\windows) следующая строка: Если в ее начале стоит точка с запятой, уберите ее — иначе PHP не сможет опознавать функции для работы с MySQL
  • Поздравляем — теперь можно работать! Если хотите, можете проверить работоспособность MySQL следующим скриптом на PHP3 (скажем, расположенном в f:/www/test.php3): Обращаем Ваше внимание на макросы DBName, HostName, UserName и Password.DBName должен содержать имя базы данных. HostName — всегда localhost, ведь мы работаем на локальном компьютере. В макросе UserName проще всего подставлять root, который является собственником всех таблиц. При установке MySQL пользователю root не назначается пароль, так что макрос Password равен пустой строке.

    8. Часто задаваемые вопросы

    «А здесь — Ваша цитата»
    Бьерн Страуструп

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

    Q: Apache установился и запускается нормально, но при попытке открытия какой-нибудь страницы Internet Explorer настоятельно предлагает подключиться к Сети.
    A: На вкладке «Соединение» (или «Подключение«) в Свойствах IE установите флажок «Использовать локальную сеть«, даже если ее у Вас нет.

    Q: При запуске окно Apache открывается и тут же закрывается, сервер из браузера «не виден».
    A: Скорее всего, синтаксическая ошибка в httpd.conf. Посмотрите, что пишется в файле f:/usr/local/apache/logs/error.log — скорее всего, там будет указана строка, в которой произошла ошибка.

    Q: Ни один скрипт не работает — при запуске открывается маленькое окошко MS-DOS, в нем быстро пробегают строки, и потом оно закрывается.
    A: Эта ошибка часто возникает при использовании различных некорректно написанных резидентных антивирусных сторожей (например, SpiderGuard от Dr.Web). Боюсь, Вам придется от них отказаться.

    Q: Виртуальные хосты (а иногда и обычный, основной хост) из браузера недоступны ни по имени, ни по ip-адресу.
    A: Эта проблема часто возникает на компьютерах, объединенных в локальную сеть и совместно использующих одно подключение к Интернету. Обычно в таких случаях используется WinGate — программа, обеспечивающая этот совместный доступ. В ней-то и заключена вся проблема. Сделайте следующее: выберите какой-нибудь браузер, которым Вы реже всего пользуетесь (например, Netscape), и поставьте в настройках WinGate для его запускаемого файла (в нашем примере — netscape.exe) режим локального доступа. В этом случае Вы сможете работать с локальным Apache через этот (и только этот) браузер. Это не очень приятно, но, боюсь, другого решения для WinGate не существует.

    Q:Меня не устраивает указанная в статье версия Perl — уж очень древний.
    A: Не проблема установить новый, если Вы уже настроили старый. Для этого проделайте следующее:

  • Скачайте с http://www.activestate.comMS Installer (он лежит в разделе Downloads, рядом с самым свежим Перлом) и запустите его.
  • Скачайте оттуда же perlxxxx.msi (xxxx зависит от версии Perl, рекомендую Вам поставить самую наисвежайшую).
  • «Снесите под корень» старый Перл.
  • Запустите «start perlxxxx.msi» из окна DOS.
  • Выберите полную установку, и директорию — f:/usr/local (без bin!), и пусть он пропишет в autoexec.bat то, что хочет.
    В дистрибутив включена полная документация, включая описания стандартных пакетов.

    Q:Никак не могу установить поддержку MySQL в Perl.
    A: Проделайте следующее:

    • Установте самый свежий Perl, как это было только что описано.
    • Подключитесь к Интернету и запустите ppm.bat из директории с Perl.
    • Наберите help.
    • Наберите «install DBI«
    • Наберите «install DBD::Mysql«

    Q: А как бы мне поставить PHP4?
    A: Боюсь, это очень сложная задача. Насколько нам известно, пока не существует такой версии PHP4, которая бы так же легко, как PHP3, установилась под Windows. Впрочем, можем дать один совет: поставьте сначала PHP3, а уж затем поверх — PHP4 (в ту же самую директорию), и молитесь.

    3 ноября 2000, 17:21
    Дмитрий Котеров
    dkLab, ©1999-2020

    Настройка связки Apache + PHP + MySQL + phpMyAdmin

    Данное описание подходит для любой редакции Windows 7/8/8.1.

    Установка веб-сервера Apache

    Первым делом скачаем дистрибутив Apache с сайта: http://www.apachelounge.com/download/. В списке дистрибутивов Apache 2.4 binaries VC11, нам нужно скачать «httpd-2.4.7-win64-VC11.zip».

    После того как скачали, открываем архив httpd-2.4.7-win64-VC11.zip

    Извлекаем из него папку Apache24 в раздел диска C:\

    Теперь нам необходимо немного поправить конфиг, прежде чем устанавливать Apache. Открываем файл httpd.conf (находится здесь: C:\Apache24\conf) желательно через удобный редактор, например notepad++. Находим строку (217) ServerName www.example.com:80 и меняем на ServerName localhost:80

    Далее нам необходимо установить Apache используя командную строку. Нажимаем Пуск → Выполнить, вводим команду cmd и нажимаем OK. У нас должно открыться окно командной строки

    Здесь нам необходимо указать полный путь к файлу httpd.exe, который находится в папке Apache. В нашем случае это C:\Apache24\bin\httpd.exe. Набираем команду C:\Apache24\bin\httpd.exe -k install и жмем Enter.

    Если при выполнении программы у вас возникает следующая ошибка: failed to open the winnt service manager perhaps you forgot to log in as administrator, заходим в следующую папку: C:\Users\Здесь_имя_вашего_пользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools, запускаем командную строку от имени администратора

    И повторяем команду установки.

    Установка завершена. Откройте директорию bin (полный путь: C:\Apache24\bin\) и запустите файл: ApacheMonitor.exe. В системном трее появится значок Apache, с помощью которого можно быстро запускать/останавливать службу Apache, жмем start (запуск):

    Теперь проверим работоспособность. Открываем браузер, и в адресной строке пишем http://localhost/ (можно просто localhost). Если установка выполнилась успешно, должна открыться страница с надписью It works!


    Установка PHP (ручная)

    Нужен ли нам Apache без PHP? Конечно нет, это нонсенс! Поэтому далее мы рассмотрим ручную (без использования инсталлятора) установку PHP.

    Скачиваем PHP (Zip архив) с сайта: http://windows.php.net/download/. Нам нужна версия: VC11 x64 Thread Safe.

    Содержимое архива распаковываем в директорию C:\PHP (папку PHP создаём сами). Далее в папке C:\PHP находим два файла php.ini-development и php.ini-production. Эти файлы содержат базовые настройки. Первый файл оптимизирован для разработчиков, второй для рабочих систем. Основная разница в настройках: для разработчиков разрешен вывод на экран ошибок, тогда как для рабочих систем вывод ошибок запрещен из соображений безопасности.

    Сделаем кое что, прежде чем продолжить установку PHP. Открываем Панель управления → оформление и персонализация → параметры папок → вкладка Вид, находим строку «Скрывать расширения для зарегистрированных типов файлов», и если там стоит галочка, убираем ее и нажимаем «Применить».

    Продолжаем установку. И так, выбираем нужный вам файл (я выбрал php.ini-development). Выбранный файл нужно будет просто немного переименовать. Правый клик по файлу → Переименовать → стираем «-development», оставляя только php.ini

    Теперь открываем php.ini, нам необходимо внести несколько изменений (будьте внимательны при внесении изменений, если в начале строки стоит точка с запятой, ее надо будет убрать):

    1. Найти опцию extension_dir (строка 721) и изменить путь к папке ext в соответствии с путем установки PHP. У меня это выглядит так:
      extension_dir = «C:\PHP\ext»
    2. Найти опцию upload_tmp_dir (строка 791). Здесь надо указать путь к временной папке. Я выбрал c:\windows\temp. Всё вместе:
      upload_tmp_dir = «C:\Windows\Temp»
    3. Найти опцию session.save_path (строка 1369). Здесь также требуется указать путь к временной папке:
      session.save_path = «C:\Windows\Temp»
    4. В разделе Dynamic Extensions необходимо раскомментировать несколько строк (убрать точку с запятой в начале), соответствующих модулям PHP, которые могут понадобиться для работы: 866, 873, 874, 876, 886, 895, 900

    Сохраняем изменения и закрываем.

    Теперь вернемся к настройкам Apache. Нам придется немного отредактировать конфиг Apache. Заходим в папку C:\Apache24\conf и открываем файл httpd.conf.

    Переходим в конец файла и в самом низу добавляем следующие строчки:

    Путь к папке php указываете тот, который вы выбрали в процессе установки (если вы устанавливали в другую директорию).

    В этом же файле находим следующие строки (строки примерно 274-276):

    Перед index.html дописываем через пробел index.php. В итоге получается:

    Чтобы изменения вступили в силу, перезапускаем службу Apache (значок в трее — Apache monitor). Если служба перезапустится — это хороший знак. Если нет (выскочит ошибка) — ищите ошибки в конфигурационных файлах. Особенно внимательно проверьте все пути.

    Чтобы нам убедиться в работоспособности PHP, откройте папку C:\Apache24\htdocs (здесь содержатся файлы веб-сайта по умолчанию). Создайте в этой папке файл index.php со следующим содержанием:

    Теперь откройте в браузере http://localhost/ (или просто localhost). Если все прошло нормально, вы увидите похожую страницу:

    Если у вас вместо страницы с инфомацией о php открылась страница с надписью «It works!», тогда просто нажмите обновить страницу.

    Установка MySQL

    Открываем страницу загрузки дистрибутива: http://dev.mysql.com/downloads/installer/5.6.html и скачиваем Windows (x86, 32-bit), MSI Installer 5.6.16 250.8M. После нажатия на кнопку Download вы увидите форму для регистрации, ее можно пропустить нажав на ссылку внизу (» No thanks, just start my download!).

    Запускаем установщик, после небольшой загрузки видим следующее окно:

    Нажимаем Install MySQL Products, появляется следующее окно, в котором мы принимаем лицензионное соглашение (ставим галочку) и жмем Next >

    Следующее окно нам предлагает проверить, есть ли более новая версия MySQL, ставим галочку Skip. (пропустить) и нажимаем Next >

    В следующем окне нам предлагают выбрать тип установки, выбираем Custom и жмем Next >:

    В следующем окне нам предоставляется возможность выбратьнеобходимые компоненты: убираем галочку с MySQL Connectors, в Application убираем галочку с MySQL Workbench CE 6.0.8 и MySQL Notifier 1.1.5, в MySQL Server 5.6.16 убираем галочки с Development Components и Client C API library (shared) и жмем Next >

    Далее нам пишут, что ничего дополнительно нам устанавливать не нужно и мы можем приступить к установке, просто жмем Next >

    Следующее окно нам сообщает что именно будет установлено, просто нажимаем Execute

    После успешной установки жмем Next >

    Вследующем окно нам сообщается о том, что далее мы немного настроим наш сервер, жмем Next >

    В первом окне настрокйки, устанавливаем галочку Show Advanced Options, остальное оставляем как есть и жмем Next >

    В следующем окне нам предлагается установить пароль администратора (root). Этот пароль лучше не терять! Устанавливаем пароль и жмем Next >

    В следующем окне стираем в поле ввода цифры 56, остальное оставляем как есть и жмем Next >

    Осталось проверить успешно ли прошла установка. (win 8): Заходим в меню пуск → переходим к приложениям (стрелочка вниз) → находим MySQL5.6 Command Line Client (терминал для работы с MySQL в командной строке) → открываем его. Далее вводим пароль администратора (root). Если пароль правильный, вы попадете в командную строку ( mysql> ). Введите команду: show databases; (точка с запятой на конце обязательна). В результате вы должны увидеть список баз данных (как минимум две — information_schema и mysql). Это означает, что сервер работает правильно. Закрываем командную строку выполнив команду exit.

    Добавьте в файл C:\Windows\System32\drivers\etc\hosts строчку: 127.0.0.1 localhost. В этом же файле удалите или закомментируйте (поставить знак # в начале строки) строку ::1 localhost (если она изначально закомментирована, то не надо ничего с ней делать).

    Установка и базовая настройка phpMyAdmin

    Открываем страницу загрузки http://www.phpmyadmin.net/home_page/downloads.php и выбираем для скачивания архив оканчивающийся на *all-languages.7z или *all-languages.zip (на момент написания статьи последняя версия была phpMyAdmin 4.1.9). Создаем папку phpmyadmin в C:\Apache24\htdocs и извлекаем туда файлы скаченного архива.

    Проверим как оно работает. Открываем браузер и переходим по адресу http://localhost/phpmyadmin/. Должно открыться такое окно:

    Теперь нам необходимо создать конфигурационный файл для MySQL. Заходим в папку phpmyadmin и создаем там папку config. Открываем в браузере следующий адрес: http://localhost/phpmyadmin/setup/

    Теперь, чтобы настроить параметры подключения к MySQL, нажимаем на кнопку «Новый сервер», нам открывается новое окно, в графе «Хост сервера» localhost необходимо заменить на 127.0.0.1:

    Сохраняем настройки (жмем Apply) и нас автоматически вернут на предыдущую страницу. Выбираем язык по умолчанию — Русский, сервер по умолчанию — 127.0.0.1, конец строки — Windows. Внизу нажимаем Сохранить и затем Скачать.

    FPublisher

    Web-технологии: База знаний

    Документация PHP

    Установка

    Этот раздел содержит общие вопросы по установке PHP. PHP доступен практически для любой ОС (за исключением, может быть, MacOS предшествующей OSX) и любого web сервера.

    Для установки PHP следуйте инструкциям в Установка и настройка.

    Почему я не должен использовать Apache2 с потоковым MPM в эксплуатации?

    PHP — это клей. Клей, используемый для построения классных web приложений, склеивая дюжины сторонних библиотек и создавая впечатление одного согласованного целого, с помощью интуитивного и легко изучаемого языка. Гибкость и мощь PHP полагается на стабильность и устойчивость используемой платформы. Для склейки вместе ему необходимы работающая ОС, работающий web сервер и работающие сторонние библиотеки. Когда что-либо из этого перестаёт работать PHP нужны способы определения проблем и их быстрого исправления. Если вы усложняете низлежащую систему, не разделяя полностью потоки выполнения, не выделяя раздельные сегменты памяти и не предоставляя «песочницу» для игры для каждого запроса, то ваша PHP система увязнет в глине.

    Если вы всё-таки чувствуете, что должны использовать потоковый MPM, взгляните на конфигурацию с FastCGI, где вы можете запускать PHP в своём собственном пространстве памяти.

    И наконец, это предупреждение против потокового MPM не настолько остро для пользователей Windows, так как большинство библиотек на этой платформе потокобезопасны.

    Unix/Windows: Где должен находиться файл php.ini ?

    На Unix по умолчанию он должен находиться в директории /usr/local/lib , определяемой как /lib . Большинство людей изменяют это во время компиляции с помощью опции —with-config-file-path Для примера, вы можете задать что-то типа:

    Затем скопировать файл php.ini-dist из дистрибутива в /etc/php.ini и отредактировать его для ваших локальных потребностей.

    На Windows по умолчанию php.ini находится в Windows директории. Если вы используете Apache web сервер, php.ini сначала ищется в директории, где был установлен Apache, например c:\program files\apache group\apache . В этом случае на одной машине у вас могут быть разные файлы php.ini для разных версий Apache.

    Unix: Я установил PHP, но каждый раз при загрузке документа я получаю сообщение ‘Document Contains No Data’ (Документ Не Содержит Данных)! Что происходит?

    Вероятно, PHP падает по какой-то причине. Для того, чтобы убедиться в этом, просмотрите лог ошибок вашего сервера и затем попытайтесь воспроизвести проблему с помощью небольшого тестового примера. Если вы умеете пользоваться ‘gdb’, то добавьте трассировку к вашему сообщению об ошибке, это поможет разработчикам точно определить проблему. Если вы используете PHP как модуль Apache попробуйте что-то типа:

    Остановите ваши httpd процессы

    Остановите ваши httpd процессы

    > run -X -f /path/to/httpd.conf

    Затем вызовите URL, на котором возникает проблема, из вашего браузера

    > run -X -f /path/to/httpd.conf

    Если вы получаете дамп, gdb должен сейчас сообщить вам об этом

    Вам необходимо включить трассировку в ваше сообщение об ошибке, которое должно быть отправлено с » http://bugs.php.net/

    Если ваш скрипт использует функции регулярных выражений (ereg() и компания), то вам необходимо убедиться, что вы скомпилировали PHP и Apache с одним и тем же пакетом регулярных выражений. Это должно происходить автоматически для PHP и Apache 1.3.x

    Unix: Я установил PHP, используя RPMS, но Apache не обрабатывает PHP страницы! Что происходит?

    Полагая, что Apache и PHP оба были установлены из пакетов RPM, вам требуется в вашем файле httpd.conf раскомментировать или добавить все или некоторые из следующих строк:

    . в глобальные свойства или в свойства VirtualDomain, для которого вы хотите иметь поддержку PHP.

    Unix: Я установил PHP 3 используя RPMS, но он не компилируется с поддержкой нужной мне базы данных! Что происходит?

    Из-за того, как построен PHP 3, собрать полный и гибкий RPM для PHP не легко. Эта проблема решена в PHP 4. Для PHP 3 мы рекомендуем способ, описанный в файле INSTALL.REDHAT из дистрибутива PHP. Если вы всё-таки настаиваете на использовании варианта с RPM для PHP 3, читайте далее.

    Те, кто собирает RPM пакеты, настраивают RPMS для установки без поддержки баз данных для упрощения установок и потому что RPMS использует /usr/ вместо стандартной /usr/local/ директории для файлов. Вам необходимо указать в спек файле RPM какие базы данных поддерживать и где находится ваш сервер баз данных.

    Следующий пример объясняет процесс добавления поддержки для популярного сервера баз данных MySQL, используя mod установку для Apache.

    Конечно, всё это может быть применено для любого сервера баз данных, который PHP поддерживает. Для этого примера, мы будем полагать, что вы установили MySQL и Apache полностью с RPMS.

    Во-первых, удалите mod_php3 :

    Затем получите rpm с исходниками и УСТАНОВИТЕ его, НЕ —rebuild

    Затем отредактируйте файл /usr/src/redhat/SPECS/mod_php3.spec

    В секции %build добавьте поддержку нужной вам базы данныз и укажите путь

    Для MySQL вы добавите —with-mysql=/usr Секция %build будет выглядеть как что-то типа следующего:

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

    Затем установите этот rpm

    Перезапустите Apache и теперь у вас есть PHP 3 с поддержкой MySQL, установленный из RPM. Заметьте, что на много проще просто собрать PHP 3 из дистрибутива и следовать инструкциям в файле INSTALL.REDHAT дистрибутива.

    Unix: Я установил заплатку в Apache для расширений FrontPage и неожиданно PHP перестал работать. Неужели PHP не совместим с FrontPage расширениями для Apache?

    Нет, PHP прекрасно работает с FrontPage расширениями. Проблема в том, что FrontPage заплатка изменяет некоторые важные для PHP структуры. Перекомпиляция PHP (выполняя ‘make clean ; make’) после установки FP заплатки должна решить эту проблему.

    Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего браузера, я получаю пустой экран.

    Сделайте просмотр исходника (‘view source’) в web браузере и, вероятно, вы увидите исходный код вашего PHP скрипта. Это означает, что web сервер не послал скрипт PHP для интерпретации. Что-то не так с конфигурацией сервера, проверьте конфигурацию сервера согласно установочным инструкциям PHP.


    Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего браузера, я получаю ошибку сервера 500.

    Что-то произошло когда сервер пытался выполнить PHP. Чтобы увидеть более вразумительное сообщение об ошибке, используя командную строку, перейдите в директорию где находится исполняемый файл PHP ( php.exe на Windows) и запустите php -i. Если при запуске PHP возникли какие-либо проблемы, то появится соответствующее сообщение об ошибке, которое может дать вам понять что делать дальше. Если вы получаете экран, заполненый HTML кодом (вывод функции phpinfo()), то PHP работает и ваша проблема возможно связана с конфигурацией вашего сервера, которую вам необходимо проверить.

    Некоторые операционные системы: Я установил PHP без ошибок, но когда я пытаюсь запустить Apache, я получаю ошибки «undefined symbol» (неопределённый символ):

    На самом деле это связано с клиентскими библиотеками MySQL и не имеет никакого отношения к PHP. Одним нужна опция —with-zlib , другим — нет. Это также описано в MySQL FAQ.

    Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего браузера, я получаю ошибку:

    Это сообщение об ошибке означает, что PHP не смог вывести абсолютно ничего. Чтобы увидеть более вразумительное сообщение об ошибке, используя командную строку, перейдите в директорию, где находиться испольняемый файл PHP ( php.exe на Windows) и запустите php -i. Если при запуске PHP возникли какие-либо проблемы, то появится соответствующее сообщение об ошибке, которое может дать вам понять что делать дальше. Если вы получаете экран, заполненый HTML кодом (вывод фиункци phpinfo() функции), то PHP работает.

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

    • Анонимный пользователь Internet не имеет доступ к вашему PHP скрипту, php.exe , php4ts.dll , php.ini или любому загружаемому PHP расширению из за прав доступа, установленных на эти файлы.
    • Файл скрипта не существует (или, вероятно, не там где вы думаете он должен быть, относительно вашей корневой web директории). Заметьте, что для IIS вы можете поймать эту ошибку пометив ‘check file exists’ при настройке ассоциирования скриптов (script mappings) в Администраторе Internet Сервисов (Internet Services Manager). Если файл скрипта не существует, то сервер выдаст ошибку 404. Также допольнительная польза в том, что IIS будет выполнять необходимую вам аутентификацию, основываясь на NTLanMan правах доступа на ваш скрипт.

    Windows: Я следовал всем инструкциям, но так и не смог заставить PHP и IIS работать вместе!

    Убедитесь что все пользователи, кому необходимо запускать PHP скрипты, имеют право выполнять php.exe ! IIS использует анонимного пользователя, который добавлен во время установки IIS. Этот пользователь должен иметь права на php.exe . Также любому аутентифицированному пользователю будут нужны права на выполнение php.exe . И для IIS4 вам необходимо сказать ему, что PHP является скриптовой системой. Также вам захочется прочитать это.

    Когда PHP запускается как CGI в IIS, PWS, OmniHTTPD или Xitami, я получаю следующую ошибку: Security Alert! PHP CGI cannot be accessed directly..

    Вы должны установить директиву cgi.force_redirect в . По умолчанию она установлена в 1, поэтому убедитесь, что директива не закоментирована (с ;). Как все директивы, она задается в php.ini

    Так как значение по умолчанию 1, то очень важно быть уверенным на 100%, что был прочитан верный php.ini файл. Для подробностей читайте здесь.

    Как узнать, что мой php.ini был найден и прочтён? Похоже, что мои изменения не были восприняты?

    Чтобы убедиться, что PHP прочитал ваш php.ini , вызовите phpinfo() и недалеко от начала будет находиться строка, озаглавленная Configuration File (php.ini). Она скажет вам где PHP ищет php.ini и был ли файл прочитан. Если указана только директория, то файл не был прочитан и вы должны поместить ваш php.ini в эту директорию. Если php.ini включён в PATH, то он был прочитан.

    Если php.ini был прочитан и вы запускаете PHP как модуль, то не забудьте перезапустить ваш web сервер после внесения изменений в php.ini .

    Как на Windows добавить мою PHP директорию в PATH ?

    На Windows NT, 2000, XP и 2003:

    Идите в Control Panel и откройте системную иконку (Start -> Settings -> Control Panel -> System, или просто Start -> Control Panel -> System for Windows XP/2003)

    Перейдите в закладку Advanced

    Нажмите кнопку ‘Environment Variables’

    Смотрите в окошко ‘System Variables’

    Найдите Path (возможно, вам придется сделать прокрутку, чтобы найти его)

    Двойной щелчок на Path

    Добавьте в конец вашу PHP директорию через ‘;’ (например ;C:\php)

    Нажмите OK и перезапустите ваш компьютер

    На Windows 98/Me вам необходимо отредактировать файл autoexec.bat :

    Откройте Notepad (Start -> Run и введите notepad)

    Откройте файл C:\autoexec.bat

    Найдите строку с PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;. и добавьте в конец строки: ;C:\php

    Сохраните файл и перезапустите ваш компьютер

    Прежде в руководстве по PHP рекомендовалось копировать файлы в системную директорию Windows, так как эта директория ( C:\Windows , C:\WINNT , и т.п.) входит в системный PATH по умолчанию. Копирование файлов в системную директорию Windows давно уже противопоказывается и может вызвать проблемы.

    Как в Windows сделать файл php.ini доступным для PHP?

    Для этого есть несколько путей. Если вы используете Apache, то читайте инструкции по его установке (Apache 1, Apache 2), в ином случае, вы должны установить переменную окружения PHPRC :

    На Windows NT, 2000, XP и 2003:

    Идите в Control Panel и откройте системную иконку (Start -> Settings -> Control Panel -> System, или просто Start -> Control Panel -> System for Windows XP/2003)

    Перейдите в закладку Advanced

    Нажмите кнопку ‘Environment Variables’

    Посмотрите в окошко ‘System variables’

    Щёлкните на ‘New’ и введите ‘PHPRC’ как имя переменной и директорию, где находится php.ini , как значение переменной (например C:\php)

    Нажмите OK и перезапустите ваш компьютер

    На Windows 98/Me вам необходимо отредактировать файл autoexec.bat :

    Откройте Notepad (Start -> Run и введите notepad)

    Откройте файл C:\autoexec.bat

    Добавьте новую строку в конец файла: set PHPRC C:\php (замените C:\php на директорию, где находится php.ini )

    Сохраните файл и перезапустите ваш компьютер

    Возможно ли использовать согласование содержания в Apache (опция MultiViews) c PHP?

    Всё работает замечательно, если линки к PHP файлам имеют расширение. Этот FAQ рассматривает только случай, когда линки к PHP файлам не имеют расширения и вы хотите использовать согласование содержания для отбора PHP файлов из URL без расширений. В этом случае, замените строку AddType application/x-httpd-php .php на:

    Это решение не работает в Apache 1, так как в нём PHP модуль не ловит php-script.

    PHP хостинг

    В переводе с английского аббревиатура РНР переводится как «предварительный обработчик гипертекста». РНР является языком описания скриптов, который можно внедрять в HTML. В основе его синтаксиса лежит С, Perl и Java, с добавлением нескольких особенностей, специфичных именно для РНР. Цель создания РНР является предоставление возможностей создавать динамически генерируемые страницы.

    Как расшифровывается PHP?
    РНР представляет собой рекурсивный акроним термина ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’). До возникновения версии РНР 3.0 его название означало «Утилиты для домашней страницы/Интерпретатор форм» и обозначалось как PHP/FI.

    Какой хостинг провайдер предоставляет PHP?
    Практически любой из указанного в нашем рейтинге хостинг провайдеров.

    Каков принцип взаимодействия HTML и PHP?
    В отличие от других известных языков программирования, язык РНР имеет несколько неоспоримых преимуществ, поскольку он разрабатывался для решения довольно сложных задач. Благодаря использованию РНР осуществляется эффективное и надежное взаимодействие с HTML. Когда браузер посылает запрос на веб-сервер на получение страницы РНР, то сначала модуль РНР выполняет ее интерпретацию. Обычные теги HTML являются частями данной страницы. Процесс передачи их клиенту осуществляется подобно тому, как происходит обработка обычного документа HTML. Части документа, написанные на языке РНР, проходят обработку РНР-модулем сервера, который представляет собой специальную программу, которая предназначена для интерпретации инструкции РНР. После этого модуль РНР просматривает код РНР, а затем занимается выполнением заданных в нем инструкции: отправкой электронной поты, открытием доступа к базе данных или преобразованием чисел.

    Перед тем, как начать выполнять разработку сценариев РНР, нужно установить требуемое программное обеспечение: интерпретатор РНР и web-сервер Apache. Данный процесс обычно происходит оперативно и без особых трудностей. Если же у Вас возникнут проблемы, обратитесь к документации, которая прилагается к программам РНР и Apache.

    Добро пожаловать

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

    Переводы

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

    Дисклеймер

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

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

    Как внести вклад

    Помогите сделать этот сайт лучшим ресурсом для начинающих PHP программистов! Помочь используя GitHub

    Расскажите о нас

    Руководство PHP: Правильный путь содержит веб-баннеры, которые вы можете использовать на своём сайте. Окажите поддержку, показав начинающим PHP-разработчикам где они могут найти полезную информацию!

    Начало

    Использование стабильной версии (7.2)

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

    Наиболее часто в ближайшем будущем вы будете видеть, что используются версии PHP 5.x, с последней 5.6. Но вы должны попробовать использовать последнюю стабильную версию, если это возможно. Не дайте скромной разнице между числами 5.2 и 5.6 ввести вас в заблуждение, эта разница представляет важные изменения. Если вам нужна функция или пример её использования, вы всегда можете найти документацию на php.net.

    Встроенный веб-сервер

    Вы можете начать изучение PHP без необходимости в установке и конфигурировании полноценного веб-сервера (необходим PHP 5.4 или новее). Для запуска сервера вам необходимо выполнить следующую команду из терминала в корневой папке веб-проекта:

    Установка на Mac

    OSX поставляется с предзапакованным PHP, но, в лучшем случае, он немного отстает от стабильной версии. Lion поставляется с PHP 5.3.6 и Mountain Lion имеет 5.3.10.

    Для обновления PHP в OSX вы можете установить его с помощью нескольких пакетных менеджеров, наиболее рекомендуемый из которых php-osx by Liip.

    Другой вариант, скомпилировать самостоятельно, в этом случае убедитесь, что у вас установлен либо Xcode, либо его аналог от Apple “CLI для Xcode”, который можно загрузить с Apple Mac Developer Center.

    В качестве полного набора «всё-в-одном», который включает PHP, веб-сервер Apache и СУБД MySQL, и всё это с хорошим управлением через GUI, попробуйте MAMP.

    Установка в Windows

    PHP для Windows можно получить несколькими путями. Вы можете загрузить установочные файлы и, до недавнего времени, вы могли использовать ‘.msi’ установщик. Начиная с PHP версии 5.3.0 установщик не поддерживается.

    Для изучения и локальной разработки вы можете использовать встроенный в PHP 5.4+ веб-сервер, о конфигурации которого можно не беспокоиться. Если вы предпочитаете сервера «всё-в-одном», которые включают в себя полноценный веб-сервер и MySQL, тогда можете воспользоваться такими инструментами, как Web Platform Installer, Zend Server CE, XAMPP или WAMP, которые помогут быстро развернуть окружение для разработки в Windows. Но, стоит сказать, что эти инструменты будут отличаться от продакшна, так что будьте осторожны и учитывайте эти различия, если вы работаете на Windows и деплоите на Linux.

    Если вам нужно запустить конечную систему на Windows, то IIS7 даст вам лучшую стабильность и производительность. Вы можете использовать phpmanager (плагин для IIS7) для легкого конфигурирования и управления PHP. IIS7 поставляется с встроенным FastCGI, вам нужно просто настроить PHP в качестве обработчика. Для получения помощи и дополнительной информации посетите iis.net.

    Vagrant

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

    Если вы разрабатываете на Windows и деплоите на Linux (или что-либо отличающееся от Windows) или разрабатываете в команде, вы должны рассмотреть возможность использования виртуальной машины. Это звучит сложно, но, используя Vagrant, вы можете установить простую виртуальную машину всего лишь в несколько шагов. Они могут быть как выполнены вручную, так и с помощью специализированного софта, например, Puppet или Chef, который автоматизирует эту задачу. Использование этого софта гарантирует использование одинаковой конфигурации для нескольких машин, что избавляет вас от необходимости поддержки сложных списков установки. Вы также можете удалить вашу машину, и пересоздать её без большого количества ручных шагов, что делает создание «свежей» виртуалки очень простым.


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

    Стандарты написания кода

    Сообщество PHP является очень большим и разнообразным, сочетая в себе бесчисленное количество библиотек, фреймворков, и различных компонентов. Для PHP разработчика это обычная практика — выбрать несколько из них и соединить в одном проекте. Очень важно придерживаться общих стандартов написания кода (так точно, насколько это возможно) в своём PHP коде, чтобы позволить разработчикам сочетать и использовать различные библиотеки для своих проектов.

    Группа Совместимости Фреймворков предложила и одобрила ряд стилевых рекомендаций, известных как PSR-0, PSR-1 и PSR-2. Не дайте веселым именам смутить вас, эти рекомендации представляют собой набор правил, которых начинают придерживаться такие проекты, как Drupal, Zend, Symfony, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium и другие. Вы можете использовать их при работе над собственным проектом, или в дальнейшем использовать ваш собственный стиль.

    В идеале, вы должны писать PHP код, придерживаясь известных стандартов. Это может быть любая комбинация PSR-ов, или один из стандартов кода, сделанных PEAR или Zend. Это позволит другим разработчикам легко читать и работать с вашим кодом, и приложения, которые используют компоненты, смогут сохранить структуру приложения, даже работая с огромным количеством стороннего кода.

    Вы можете использовать PHP_CodeSniffer чтобы проверить код на соответствие одной из этих рекомендаций, а также плагин для текстовых редакторов, таких как, к примеру, Sublime Text 2 чтобы получить отчёт в реальном времени.

    Используйте PHP Coding Standards Fixer, созданный Фабиеном Потенсьером, для автоматического исправления синтаксиса вашего кода так, чтобы он соответствовал этим стандартам, что спасет вас от исправления каждой проблемы вручную.

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

    Основные моменты языка

    Парадигмы программирования

    PHP представляет собой гибкий, динамичный язык, который поддерживает несколько техник программирования. Он значительно развился в течение последних нескольких лет: добавлена мощная объектно-ориентированная модель в PHP 5.0 (2004), анонимные функции (замыкания) и пространства имен в PHP 5.3 (2009), а также трейты в PHP 5.4 (2012).

    Объектно-ориентированное программирование

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

    Функциональное программирование

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

    Рекурсия — это особенность, которая позволяет функции вызывать саму себя, это поддерживается языком, но бо́льшая часть кода PHP фокусируется на итерации.

    Анонимные функции (замыкания) поддерживаются PHP начиная с версии 5.3 (2009).

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

    Meta Programming

    PHP поддерживает несколько форм метапрограммирования, что реализуется с помощью таких механизмов, как Reflection API и Магические Методы. Доступно много Магических Методов, например: __get() , __set() , __clone() , __toString() , __invoke() , и т.д., которые позволяют отслеживать поведение внутри класса. Разработчики Ruby часто говорят, что PHP не хватает method_missing , но он доступен, как __call() и __callStatic() .

    Пространства имен

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

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

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

    Один из рекомендуемых способов использования пространств имен описан в PSR-4, который призван обеспечить стандарты для описания файлов, классов и пространств имен, что позволяет создавать подключаемый (plug-and-play) код.

    Стандартная Библиотека PHP (SPL)

    Стандартная библиотека PHP (SPL) поставляется вместе с PHP и предоставляет набор классов и интерфейсов. Она состоит в основном из часто используемых классов структур данных (стек, очередь, куча, и т.д.), а также итераторов, которые предназначены для прохождения через эти структуры данных или ваши собственные классы, которые реализуют интерфейсы SPL.

    Интерфейс командной строки

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

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

    Попробуйте запустить PHP из консоли:

    Опция -i выдаст вам конфигурацию вашего PHP, подобно функции phpinfo .

    Опция -a предоставляет доступ к интерактивной оболочке, подобно ruby IRB или интерактивной оболочки python. Также существует целый ряд других полезных опций командной строки.

    Давайте напишем простую «Привет, $name» программу CLI. Чтобы это сделать, создайте файл с именем hello.php , как показано ниже.

    PHP устанавливает две специальные переменные, основанных на аргументах, с которыми запущен ваш скрипт. $argc — это переменная с числовым значением, которая содержит количество переданных аргументов, $argv — это массив, содержащий значение каждого аргумента. Первый аргумент — всегда название вашего PHP скрипта, в этом случае hello.php .

    Выражение exit() используется с ненулевым числом, чтобы дать оболочке понять, что команда не удалась. Часто используемые коды завершения можно найти здесь

    Для запуска сценария, указанного выше, наберите в командной строке:

    XDebug

    Один из самых полезных инструментов в разработке программного обеспечения — хороший отладчик. Он позволяет вам отследить исполнение вашего кода и контролировать содержимое вашего стека. XDebug — это PHP отладчик, который может использоваться различными IDE, чтобы дать вам возможность устанавливать Брейкпоинты (точки отладки кода) и контролировать стек. Он также позволяет использовать такие инструменты, как PHPUnit и KCacheGrind, для покрытия кода тестами и его профилирования.

    Если вы оказываетесь в безвыходном положении при использовании var_dump/print_r, и у вас не получается найти решение, то возможно вам поможет использование отладчика.

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

    Стандартно, вы отредактируете ваш Apache VHost или .htaccess файл со следующими значениями:

    “remote_host” и “remote_port” будут указывать на ваш локальный компьютер и порт, который вы указали в вашей IDE для прослушивания. Дальше достаточно включить режим «ожидания соединений» в вашей IDE, и загрузить URL:

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

    Менеджер зависимостей

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

    В настоящее время существует две основные системы управления пакетами для PHP — Composer и PEAR. Какая из них подходит именно вам? Ответ — обе.

    • Используйте Composer для управления зависимостями одного проекта.
    • Используйте PEAR для управления зависимостями всех проектов во всей вашей системе.

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

    Composer и Packagist

    Composer является блестящим менеджером зависимостей для PHP. Укажите список зависимостей вашего проекта в файле composer.json и, с помощью нескольких простых команд, Composer автоматически скачает зависимости вашего проекта и установит для вас автозагрузку.

    На данный момент существует много PHP библиотек, которые совместимы с Composer, готовых для использования в вашем проекте. Список этих «пакетов» есть на Packagist, официальном репозитории для Composer-совместимых PHP библиотек.

    Как установить Composer

    Вы можете установить Composer локально (в вашей текущей рабочей директории; хотя это не рекомендуется) или глобально (например /usr/local/bin). Предположим, вы хотите установить Composer локально. Из корневой директории вашего проекта выполните:

    Это позволит загрузить файл composer.phar (бинарный PHP-архив). Вы можете запустить его, используя php для управления зависимостями вашего проекта. Обратите внимание: Если вы скачаете код напрямую в ваш интерпретатор, пожалуйста, сперва прочитайте код онлайн, для подтверждения его безопасности.

    Как установить Composer (вручную)

    Ручная установка Composer — это продвинутая техника; однако, существуют причины, по которым разработчик может предпочесть именно этот метод использованию интерактивной установки. Интерактивная установка проверяет настройки PHP, чтобы подтвердить, что:

    • Используется необходимая версия PHP
    • Файлы .phar могут быть верно выполнены
    • Определенные права на каталог достаточны
    • Не установлены конфликтные расширения
    • Установлены необходимые настройки php.ini

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

    Путь $HOME/local/bin (или другой каталог, выбранный вами) должен находиться в вашей переменной окружения $PATH . Это позволит быть доступной команде composer .

    Если вы прочтете документацию Composer, которая гласит, что нужно запускать Composer с помощью команды php composer.phar install , вы можете заменить эту команду на:

    Как объявить и установить зависимости

    Composer продолжает следить за зависимостями вашего проекта в файле composer.json . Вы можете управлять им вручную, если вам нравится, или же использовать сам Composer. Команда php composer.phar require добавляет зависимость в проект и, если в каталоге нет файла composer.json , он будет создан. Далее мы рассмотрим пример, который добавляет Twig, как зависимость вашего проекта. Запустите это в корневой директории вашего проекта, куда вы загружали composer.phar :

    Аналогично команда php composer.phar init проведет вас через создание полного файла composer.json для вашего проекта. Есть и другой путь, когда вы создадите файл composer.json вы можете сказать Composer, чтобы он скачал все ваши зависимости в папку vendors/ . Это также применимо для проектов, которые вы загрузили и которые предоставляют файл composer.json :

    Затем добавьте этот код в основной PHP-файл вашего приложения; это укажет PHP использовать автозагрузчик Composer для зависимостей вашего проекта.

    Теперь вы можете использовать зависимости вашего проекта и они будут автоматически загружаться (по требованию).

    Обновление зависимостей

    Composer создает файл composer.lock который хранит точную версию каждого пакета, который он загрузил во время первого запуска php composer.phar install . Если вы поделились проектом с другими разработчиками и файл composer.lock является частью него, то при запуске php composer.phar install они получат ту же версию, что и вы. Чтобы обновить ваши зависимости запустите php composer.phar update .

    Очень удобно гибко указывать требуемые версии. Если вы нуждаетесь в версии

    1.8, что значит “всё что новее 1.8.0, но меньше 2.0.x-dev”. Вы также можете использовать шаблон * , например 1.8.* . Теперь команда Composer php composer.phar update обновит все ваши зависимости до новейших версий, которые соответствуют указанным ограничениям.

    Проверка ваших зависимостей на безопасность

    Security Advisories Checker является веб-сервисом и инструментом командной строки, оба из которых изучают ваш файл composer.lock и сообщают, если есть необходимость в обновлении какой-либо из ваших зависимостей.

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

    PEAR требует, чтобы каждый пакет имел определенную структуру, это означает, что автор пакета должен подготовить его для использования с PEAR. Использование проекта, который не был подготовлен для работы с PEAR невозможно.

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

    Как установить PEAR

    Вы можете установить PEAR, загрузив установщик phar и выполнив его. Документация PEAR содержит подробную инструкцию по установке для каждой операционной системы.

    Если вы используете Linux, вы также можете посмотреть наличие PEAR в пакетном менеджере вашего дистрибутива. Debian и Ubuntu, к примеру, содержат информацию о пакете php-pear в пакетном менеджере apt.

    Как установить пакет

    Если пакет существует в списке пакетов PEAR, вы можете установить его, указав официальное название:

    Если пакет выложен на другом канале, вам нужно сначало сделать discover этого канала и затем указать его во время установки. Подробнее об этом в использование каналов.

    Обработка зависимостей PEAR с Composer

    Если вы уже используете Composer и желаете установить какой-то код из PEAR, вы можете использовать Composer для обработки зависимостей PEAR. Этот пример установит код из pear2.php.net :

    Первый раздел «repositories» даст понять Composer, что он должен сделать “initialise” (или “discover” в терминологии PEAR) репозиторий pear. Затем секция require укажет именам пакетов префикс, как ниже:

    Префикс “pear” жестко ограничен, чтобы избежать любых конфликтов, так как каналы Pear могут быть схожи с другими поставщиками пакетов например, вместо короткого имени (или полного URL) может быть использовано для объявления в каком канале находится пакет.

    Когда код будет установлен он будет доступен в вашей папке vendor и автоматически доступен через автозагрузчик (файл Autoload) Composer.

    Чтобы использовать этот пакет PEAR просто объявите как ниже:


    Практики написания кода

    Основы

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

    Дата и время

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

    Для начала работы с DateTime, сконвертируйте «сырую» строку даты и времени в объект с помощью фабричного метода createFromFormat() или выполните new \DateTime , чтобы получить текущую дату и время. Используйте метод format() для конвертирования DateTime обратно в строку для вывода.

    Вычисления с DateTime возможны с использованием класса DateInterval. У класса DateTime есть методы add() и sub() , которые принимают DateInterval, как аргумент. Не пишите код, который ожидает одинаковое число секунд каждый день, перевод часов и смена часовых поясов разрушат это предположение. Вместо этого используйте интервалы дат. Для расчета разницы между датами используйте метод diff() . Он вернет новый объект DateInterval, который очень легко отобразить.

    С объектами DateTime, вы можете использовать стандартные методы сравнения:

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

    Design Patterns

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

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

    Исключения

    Исключения — это неотъемлемая часть большинства популярных языков программирования, но зачастую PHP разработчики не уделяют им должного внимания. Языки, подобные Ruby, очень подробно обрабатывают исключения, поэтому, если что-то идёт не верно, например: не удался HTTP запрос, запрос к базе данных происходит неправильно или если запрошенное изображение не было найдено, Ruby (или используемые гемы) выбросит исключение на экран, помогающее понять где вы допустили ошибку.

    PHP сам по себе довольно слаб в плане этого и вызов file_get_contents() , как правило, даст вам только FALSE и предупреждение. Многие устаревшие PHP-фреймворки, как CodeIgniter, просто вернут false, добавят сообщение в свой собственный журнал и, может быть, дадут вам использовать метод, как $this->upload->get_error() , чтобы посмотреть, что пошло не так. Проблема в том, что вы должны искать ошибку и проверять документацию, чтобы понять, какой ошибочный метод существует в этом классе, вместо того, чтобы сделать это всё более очевидным.

    Еще одна проблема в том, что классы автоматически выдают ошибку на экран и закрывают процесс. Когда вы делаете это, вы не даете другому разработчику динамически обработать эту ошибку. Исключения должны быть выброшены, чтобы дать разработчику знать об ошибке и выбрать, как её обработать. Например:

    Исключения SPL

    Универсальный класс Exception предоставляет очень мало отладочного контекста для разработчика; как бы то ни было, для того чтобы исправить это, можно создать специализированный класс, который будет расширять возможности универсального класса Exception :

    Это означает, что вы можете добавить несколько блоков отлова и обрабатывать разные исключения по-разному. Это может привести к созданию множества изменённых Исключений, некоторые из которых можно было бы избежать, используя Исключения SPL, предоставляемые расширением SPL.

    Например, если вы используете магический метод __call() и вами был вызван неизвестный метод, то вместо выбрасывания стандартного исключения, которое очень расплывчато, или вместо создания своего исключения, вы можете просто использовать throw new BadFunctionCallException; .

    Базы данных

    Скорее всего, ваш PHP код будет использовать базу данных для сохранения информации. Существует несколько вариантов для подключения и взаимодействия с базой данных. Рекомендуемым вариантом до PHP 5.1.0 было использование нативных (родных) драйверов, таких как mysql, mysqli, pgsql, etc.

    Встроенные драйвера замечательны, если вы используете ОДНУ базу данных в ваших приложениях, но если, например, вы используете MySQL и немного MSSQL, или вам нужно подключиться в базе данных Oracle, тогда вы не сможете использовать те же драйвера. Вам нужно будет изучить новый API для каждой базы данных — и это может оказаться нерациональным.

    Обратите внимание, что расширение mysql для PHP больше не поддерживается, и его официальным статусом, начиная с PHP версии 5.4.0, является «Устарело в связи с длительным сроком использования». Это значит, что оно будет удалено в течение нескольких следующих релизов, так что в PHP 5.6 (или в версиях, следующих за 5.5) оно вполне может пропасть. Если вы используете mysql_connect() и mysql_query() в своих приложениях, тогда вам придется столкнуться с переписыванием кода, поэтому лучшим вариантом сейчас является использование в приложениях mysqli или PDO вместо mysql, прежде чем вы в дальнейшем столкнётесь с нерабочими приложениями. Если вы начинаете изучение баз данных с нуля, тогда полностью откажитесь от использования расширения mysql — используйте Расширение MySQLi или PDO.

    PDO — это абстрактная библиотека для подключения к базе данных, встроенная в PHP с версии 5.1.0, которая обеспечивает единый интерфейс для взаимодействия с большим количеством различных баз данных. PDO не будет переводить ваши SQL запросы или эмулировать отсутствующие возможности; он чист для подключения к нескольким типам баз данных с тем же API.

    Более важно, что PDO позволяет вам безопасно вводить пользовательские данные (например идентификатор) в ваши SQL запросы, без беспокойства о SQL-инъекциях. Это возможно благодаря использованию PDO выражений и связывания (bound) параметров.

    Предположим, что PHP скрипт получает числовой идентификатор в качестве параметра из запроса. Этот идентификатор должен быть использован для получения пользовательских записей из базы данных. Ниже приведён неправильный способ реализации этого:

    Это ужасный код. Вы вставляете необработанные параметры в SQL запрос. Это приведёт к взлому. Просто представьте, что взломщик сделает запрос http://domain.com/? >, который присвоит переменной $_GET[‘id’] значение 1;DELETE FROM users и приведёт к удалению всех ваших пользователей! Вместо этого, вы должны очистить ввод идентификатора с помощью связывания параметров PDO.

    Это правильный код. Он использует связанный параметр в выражении PDO. Это позволяет избежать ввода некоректного ID перед тем, как передать запрос в базу данных, тем самым предотвращая потенциальные SQL-инъекции.

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

    Уровни абстракции

    Многие фреймворки предоставляют собственный уровень абстракции, который может строиться на основе PDO. Такая фактическая абстракция баз данных позволяет оборачивать запросы на PHP в методы, которые отсутствуют в одной системе баз данных, но работают в другой. Это, конечно, добавит небольшие накладные расходы, но если вы строите портативные приложения, которым необходима работа с MySQL, PostgreSQL и SQLite, тогда, для чистоты кода, минимальными накладными расходами можно пренебречь.

    Некоторые уровни абстракции построены с использованием PSR-0 стандарта, поэтому могут быть установлены в любое приложение:

    Безопасность

    Безопасность веб-приложений

    Есть плохие люди, которые могут и хотят взломать ваши веб-приложения. Важно принять необходимые меры предосторожности, чтобы укрепить безопасность вашего приложения. К счастью, прекрасные люди в The Open Web Application Security Project (OWASP) составили полный список известных проблем безопасности и методов защиты от них. Это должно быть прочитано любым разработчиком, заботящимся о безопасности.

    Хэширование паролей

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

    Очень важно правильно хэшировать пароль перед его сохранением. Хэширование пароля является необратитым, односторонняя функция применяется на пользовательских паролях. Она возвращает строку определенной длины, которую невозможно расшифровать. Это значит, что вы можете сравнить один хэш с другим, чтобы понять, что они пришли из одной и той же исходной строки, но вы не можете определить оригинальную строку. Если ваши пароли не захэшированы, и доступ к базе данных получен третьй стороной, то ваши пользовательские аккаунты теперь скомпрометированы. Некоторые пользователи (к сожалению) могут использовать один и тот же пароль для разных сервисов. Как бы то ни было, очень важно серьезно относиться к безопасности.

    Хэширование паролей с функцией password_hash

    В PHP 5.5 была представлена функция password_hash . Сейчас она использует BCrypt, сильнейший алгоритм, поддерживаемый PHP. Она будет обновлена в будущем, для поддержки бОльшего числа алгоритмов, по мере необходимости. Библиотека password_compat была создана для обратной совместимости с PHP >= 5.3.7.

    Ниже мы хэшируем строку и далее сверяем её с новой строкой. Поскольку наши две исходные строки отличаются (‘secret-password’ и ‘bad-password’) эта авторизация будет неудачной.

    Фильтрация данных

    Никогда не доверяйте пользовательскому вводу, который передаётся вашему PHP коду. Всегда проверяйте и очищайте пользовательский ввод перед его использованием в коде. Функции filter_var и filter_input помогут очистить переменные, а также проверить соответствие введённых данных некоторому формату (например, адрес электронной почты).

    Пользовательский ввод может быть различным: $_GET и $_POST , данные введённые в форму, некоторые значения в суперглобальной переменной $_SERVER и тело HTTP запроса, открытое с помощью fopen(‘php://input’, ‘r’) . Запомните, что пользовательский ввод не ограничивается данными формы, отправленной пользователем. Отправляемые и загружаемые файлы, значения сессий, данные cookie и данные сторонних веб-сервисов также приравниваются к пользовательскому вводу.

    Хотя пользовательские данные могут быть без проблем сохранены, скомбинированы и к ним может быть получен доступ позже, они всё ёще являются пользовательским вводом. Каждый раз, когда вы что-либо обрабатываете, объединяете или подключаете данные в ваш код, спросите себя, отфильтрованы ли эти данные и можно ли им доверять.

    Данные могут быть отфильтрованы по-разному, в зависимости от их назначения. Например, когда нефильтрованные данные, введённые пользоватем, передаются в HTML код страницы, он может выполнить HTML и JavaScript на вашем сайте! Этот тип атаки известен, как Cross-Site-Scripting (XSS) и может иметь очень серьёзные последствия. Один из способов избежать XSS заключается в очистке ввода от всех HTML тэгов (их удалением, или заменой на HTML символы) с помощью функции strip_tags или экранирование символов в равносильные им HTML сущности с функцией htmlentities или htmlspecialchars .

    Другой пример, передача данных для выполнения командной строкой. Это может быть крайне опасно (и, как правило — это плохая идея), но вы можете использовать встроенную функцию escapeshellarg для очистки аргументов командной строки.

    Последний пример, принимает пользовательский ввод, чтобы определить, какой файл загружать из файловой системы. Это может быть использовано для изменения имени файла на путь файла. Вам нужно убрать “/”, “../”, нулевые байты или другие символы из пути файла, так чтобы скрипт не мог загружать скрытые, непубличные или конфиденциальные файлы.

    Санитизация

    Санитизация удаляет (или экранирует) неправильные или небезопасные символы из пользовательского ввода.

    Например, вам необходимо нормализовать пользовательский ввод перед подключением ввода в HTML или его вставкой в сырой SQL запрос. Когда вы используете связанные параметры с PDO, они будут очищать ввод за вас.

    Иногда требуется разрешить некоторые безопасные HTML тэги в вводе, когда он подключается в HTML страницу. Это очень трудно сделать и многие избегают этого, используя ограниченное форматирование, как например Markdown или BBCode, либо библиотеки с белым списком, как HTML Purifier, существующие по этой причине.

    Валидация

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

    Конфигурационные файлы

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

    • Рекомендуется хранить вашу конфигурационную информацию там, где к ней не может быть получен доступ напрямую, а доступ к ней осуществлялся через файловую систему.
    • Если вы вынуждены хранить конфигурационные файлы в корневом каталоге, именуйте файл с расширением .php . Это гарантирует, что, если к скрипту обратятся напрямую, он не будет выведен, как обычный текст.
    • Информация в файлах конфигурации, должна быть защищена соответственно, либо с помощью шифрования или системных прав группы/пользователя файла.

    Использование глобальных переменных

    Примечание: С появлением PHP 5.4 директива register_globals была удалена и больше не может быть использована. Это касается тех, кому нужно обновить старое приложение.

    Включенный параметр конфигурации register_globals делает несколько типов переменных (в том числе из $_POST , $_GET и $_REQUEST ) глобальными, доступными в глобальной области видимости вашего приложение. Это может легко привести к проблемам с безопасностью, поскольку ваше приложение не сможет эффективно определить откуда пришли данные.

    Например : $_GET[‘foo’] будет доступна через $foo , которая может заместить переменную, которая не была объявлена. Если вы используете PHP register_globals off (выключена).

    Сообщения об ошибках

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

    Разработка

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

    Установка значения в -1 покажет каждую возможную ошибку, даже если новые уровни и константы будут добавлены в новых версиях PHP. Константа E_ALL ведёт себя так-же в PHP 5.4. — php.net

    Константа уровня ошибок E_STRICT была введена в 5.3.0 и не является частью E_ALL , как бы то ни было, она стала частью E_ALL в 5.4.0 Что это значит? Для вывода всех возможных ошибок в версии 5.3 вам нужно использовать либо -1 либо E_ALL | E_STRICT .

    Вывод всех ошибок разными версиями PHP

    • -1 or E_ALL
    • 5.3 -1 or E_ALL | E_STRICT
    • > 5.3 -1 or E_ALL

    Продакшн

    Чтобы спрятать все ошибки вашей среды во время продакшна, настройте ваш php.ini следующим образом:

    С этими настройками в продакшне, ошибки всё также будут записываться в лог ошибок веб сервера, но не будут показаны пользователю. Для подробной информации об этих настройках, смотрите руководство PHP:

    Тестирование

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

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

    Тесто-ориентированная разработка

    Разработка через тестирование (TDD) представляет собой процесс разработки программного обеспечения, который опирается на повторении очень короткого цикла разработки: сперва, разработчик пишет автоматизированные тесты, которые определяют желаемое улучшение или новую функцию, далее производит код, который успешно пройдет этот тест и наконец производит рефактор кода для соответствия стандартам. Kent Beck, человек которому приписывают статус разработчика или “переоткрывателя” техники, TDD предлагает простую конструкцию, а также вселяет уверенность.

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

    Модульное тестирование (Unit Testing)

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

    При создании класса или функции, вы должны создать модульный тест для каждого возможного поведения. На базовом уровне, вы должны убедиться, что ваш код выдаёт ошибку, если вы отсылаете неправильные аргументы и работает, если вы отсылаете правильные аргументы, соответственно. Это поможет убедиться в том, что изменения, которые вы сделаете относительно этого класса или функции позднее не помешают старым работать как ожидалось. Единственная альтернатива этому var_dump() в test.php, который не является способом создания приложений — больших или маленьких.

    Ещё одно использование модульных тестов — вклад в open source. Если вы можете писать тесты, которые показывают сломанную функциональность, тогда почините её, и покажите, что тест пройден, патчи имеют больше шансов быть принятыми. Если вы запускаете проект, который допускает Pull Request, тогда вы должны указать это в качестве требования.

    PHPUnit является фреймворком тестирования стандарта де-факто для написания модульных тестов в PHP приложениях, но также существует несколько альтернатив.

    Интеграционное тестирование

    Интеграционное тестирование (иногда называется Интеграция и Тестирование, с аббревиатурой “I&T”) это фаза в тестирование програмнного обеспечения, в котором отдельные модули, комбинируются и тестируются, как группа. Это происходит после модульного тестирования и перед валидационным тестированием. Integration testing takes as its input modules that have been unit tested, groups them in larger aggregates, applies tests defined in an integration test plan to those aggregates, and delivers as its output the integrated system ready for system testing.

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


    Функциональное тестирование

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

    Инструменты функционального тестирование

    • Selenium
    • Mink
    • Codeception это фреймворк для тестирования (всё-в-одном), включающий инструменты подтверждающего тестирования

    Поведенческо-ориентированная разработка

    Существует две разновидности Поведенческо-ориентированной разработки (BDD): SpecBDD и StoryBDD. SpecBDD концентрируется на техническом поведении или коде, в то время как StoryBDD концентрируется на деле, будущем поведении или взаимодействии. PHP имеет фреймворки для обоих типов BDD.

    Используя StoryBDD, вы пишите читаемые людьми истории, которые объясняют поведение вашего приложения. Эти истории могут быть запущены, как актуальные тесты для вашего приложения. Фреймворк, используемый в PHP приложениях для StoryBDD — Behat, который вдохновлён проектом для Ruby Cucumber и реализует Gherkin DSL для объяснения особенностей поведения.

    Вместе со SpecBDD, вы пишите спецификацию, которая объясняет, как ваш код должен себя вести. Вместо тестирования функции или метода, вы объясняете, как эта функция или метод должен себя вести. PHP предлагает фреймворк PHPSpec для данных целей. Этот фреймворк вдохновлён проектом RSpec для Ruby.

    Инструменты

    • Behat, StoryBDD фреймворк для PHP, вдохновлённый проектом для Ruby Cucumber;
    • PHPSpec, SpecBDD фреймворк для PHP, вдохновлённый проектом для Ruby RSpec;
    • Codeception это фреймворк для тестирования (всё-в-одном), использующий принципы BDD;

    Дополнительные инструменты тестирования

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

    Инструменты

    • Selenium автоматизационный инструмент для браузера интегрируемый с PHPUnit
    • Mockery Mock Object Framework интегрируемый с PHPUnit или PHPSpec

    Сервера и развертывание

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

    Платформа, как сервис (PaaS)

    PaaS предоставляет системную и сетевую архитектуры, необходимые для запуска PHP приложений в веб. Это означает, как минимум, отсутствие настройки для запуска PHP приложений или PHP фреймворков.

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

    Виртуальный или выделенный сервер

    Если вы знакомы с администрированием системы, или заинтересованы в его изучении, виртуальный или выделенный сервер даст вам полный контроль над средой продакшна вашего приложения.

    nginx и PHP-FPM

    PHP, через встроенный в него менеджер процессов FastCGI (FPM), очень хорошо сочетается с nginx, который является легковесным и высокопроизводительным веб-сервером. Он использует меньше памяти, чем Apache и может лучше обрабатывать конкурентные запросы. Это особенно важно на виртуальном сервере, для которого может быть критичен объем используемой памяти.

    Apache и PHP

    PHP и Apache имеют длинную совместную историю. Apache широконастраиваемый и имеет большое количество доступных модулей для расширения функциональности. Это очень популярный выбор для виртуальных хостингов и лёгкой установки PHP фреймворков и приложений с открытым исходным кодом, как WordPress. К сожалению, Apache использует больше ресурсов, чем nginx, и не может выдержать столько же посетителей одновременно.

    Apache имеет несколько возможных конфигураций для запуска PHP. Самая популярная и лёгкая для установки prefork MPM вместе с mod_php5. Хотя это не самое эффективное в отношении памяти решение, оно очень просто для установки и использования. Наверное, это лучшее решение, если вы не хотите углубляться в серверное администратирование. Если вы хотите использовать mod_php5, вы обязаны использовать prefork MPM.

    Если вы хотите получить больше производительности и стабильности с Apache, тогда вы можете взглянуть на ту же FPM систему, как в nginx и запустить worker MPM или event MPM, используя mod_fastcgi или mod_fcgid. Эта конфигурация позволит получить существенную экономию в памяти и будет намного быстрее, но потребует больше работы для установки.

    Виртуальный хостинг

    PHP, благодаря своей популярности, установлен на большом количестве виртуальных хостингов. Очень трудно найти хостинг без установленного PHP, но очень важно убедиться в том, что установлена последняя версия. Виртуальные хостинги позволяют вам и другим разработчикам развертывать веб-сайты на одной машине. Достоинством виртуального хостинга является его низкая цена. Недостатком — то, что вы не знаете, чем будут заниматься ваши соседи; сильно загружая сервер или открывая бреши в безопасности. Если бюджет вашего проекта позволяет избежать использования Виртуальных хостингов, то рассмотрите другие варианты.

    Построение и развёртывание вашего приложения

    Если вы обновляете структуру базы данных вручную или запускаете вручную тесты перед обновлением ваших файлов, то подумайте дважды! С каждой дополнительной необходимой ручной задачей для развёртывания новой версии вашего приложения, потенциальный шанс возникновения фатальной ошибки возрастает. Делаете ли вы простое обновление, полный процесс сборки или стратегию непрерывной интеграции автоматизация сборки — ваш друг.

    Среди задач, которые вы, возможно, захотите автоматизировать:

    • Управление зависимостями
    • Компиляция, минификация файлов (assets)
    • Запуск тестов
    • Создание документации
    • Запаковка
    • Развёртывание

    Создание инструментов автоматизации

    Инструменты построения — коллекция скриптов, которые обрабатывают общие задачи развёртки приложений. Инструменты постройки не являются частью вашего приложения, они взаимодействуют с вашим приложением «извне».

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

    Phing самый простой путь, чтобы начать автоматическую развёртку в мире PHP. С Phing вы можете контролировать ваш процесс запаковки, развёртки или тестирования с помощью простого построечного XML файла. Phing (который базируется на Apache Ant) предоставляет богатый набор задач, часто необходимых для установки или обновления веб приложения, и может быть расширен дополнительными нестандартными задачами, написанными на PHP.

    Capistrano — система для начинающих-профессиональных разработчиков для исполнения команд в структуризованном, воспроизводимом пути на одной или многих удалённых машинах. Предварительно он настроен для развёртки приложений Ruby on Rails. Как бы то ни было люди успешно развёртывают и PHP приложения с ним. Успех использования Capistrano зависит на умении работы с Ruby и Rake.

    Сообщение в блоге Dave Gardner PHP Deployment with Capistrano является хорошей отправной точкой для PHP разработчиков, заинтересованных в Capistrano.

    Chef является нечто большим, чем просто фрэймворк развёртки. Это очень мощный интеграционный фрэймворк, основанный на Ruby, который не просто развёртывает ваше приложение, но и может построить всё серверное окружение или виртуальный сервер.

    Ресурсы о Chef для PHP разработчиков:

    Для дальнейшего изучения:

    Непрерывная интеграция

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

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

    Для дальнейшего изучения:

    Кэширование

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

    Кэширование байткода

    Во время исполнения PHP файла, на низком уровне он сперва компилируется в байткод (или опкод) и только потом исполняется байткод. Если PHP файл не изменён, то байткод будет всегда одинаков. Это значит, что шаг компиляции — пустая трата процессорных ресурсов.

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

    Начиная с PHP 5.5 появилось встроенное расширение для кэширования байткод — OPcache. Оно также доступно в виде отдельного расширения для ранних версий.

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

    • APC (PHP 5.4 и более ранние)
    • XCache
    • Zend Optimizer+ (часть Zend Server)
    • WinCache (расширение для MS Windows Server)

    Кэширование объектов

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

    Множество популярных решений для кэширования байткода также дают вам кэшировать данные, поэтому нет причин, чтобы не воспользоваться ими. APC, XCache и WinCache предоставляют API для сохранения данных из вашего PHP кода в свой кэш в памяти.

    Самыми популярными системами кэширования объектов являются APC и memcached. APC — идеальный выбор для кэширования объектов, он включает простой API для добавления данных в кэш память и при этом очень просто устанавливается и используется. Единственное существующее ограничение APC состоит в том, что он привязан к серверу на котором установлен. Memcached, напротив, устанавливается как отдельный сервис, и к нему можно получить доступ по сети, что позволяет хранить объекты в очень быстром централизованном хранилище данных и множество других систем могут получать эти данные из него.

    Учтите, если PHP запущен как (Fast-)CGI приложение внутри вашего веб-сервера, то каждый PHP процесс будет иметь собственный кэш, например, APC данные не будут расшарены между вашими процессами. В этом случае имеет смысл подумать об использовании вместо него memcached, так как он не ограничен процессом PHP.

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

    Пример использования APC:

    Подробнее о популярных системах кэширования объектов:

    Руководство по PHP русский перевод

    25.02.2008 (последний раз редактировалось 01.02.2012)
    сайт: http://ru2.php.net/download-docs.php
    условия использования: бесплатно

    скачать руководство PHP, русский (html) В формате html. Дата редакции 26-01-2012 (много html файлов)
    скачать руководство PHP, русский (html) В формате html. Дата редакции 26-01-2012 (Одним большим файлом)
    скачать руководство PHP, русский (chm) В формате chm. Дата редакции 26-01-2012 (с комментариями пользователей на английском)

    Официальный мануал по php.
    Освещает 4 и 5 версии php.
    Это руководство состоит, главным образом, из справочника функций, а также содержит справочник языка, комментарии к наиболее важным из отличительных особенностей PHP, и другие дополнительные сведения.
    онлайн версия справочника по функциям php

    Содержание руководства:

    Авторские права
    Руководство по PHP
    Предисловие
    Приступая к работе
    Введение
    Простой учебник
    Установка и настройка
    Общие инструкции по установке
    Установка на Unix системы
    Installation on Mac OS X
    Installation on Windows systems
    FastCGI Process Manager (FPM)
    Установка расширений PECL
    Проблемы?
    Runtime Configuration
    Справочник языка
    Основы синтаксиса
    Типы
    Переменные
    Константы
    Выражения
    Операторы
    Управляющие конструкции
    Функции
    Классы и объекты
    Namespaces
    Исключения
    Ссылки. Разъяснения
    Предопределённые переменные
    Предопределённые исключения
    Predefined Interfaces
    Context options and parameters
    Supported Protocols and Wrappers
    Безопасность
    Вступление
    Общие рассуждения
    Если PHP установлен как CGI
    Если PHP установлен как модуль Apache
    Безопасность файловой системы
    Безопасность баз данных
    Сообщения об ошибках
    Использование глобальных переменных (Register_Globals)
    Данные, введенные пользователем
    Волшебные кавычки
    Сокрытие PHP
    Необходимость обновлений
    Отличительные особенности
    HTTP-аутентификация в PHP
    Cookies
    Sessions
    Работа с XForms
    Загрузка файлов на сервер
    Работа с удаленными файлами
    Работа с соединениями
    Постоянные соединения с базами данных
    Безопасный режим
    Использование PHP в командной строке
    Garbage Collection
    Справочник функций
    Изменение поведения PHP
    Обработка аудио форматов
    Службы аутентификации
    Расширения по работе с датой и временем
    Расширения для работы с командной строкой
    Расширения сжатия и архивации
    Обработка кредитных карт
    Криптографические расширения
    Расширения для работы с базами данных
    Расширения для работы с файловой системой
    Поддержка человеческих языков и кодировок
    Обработка и генерация изображений
    Расширения по работе с почтой
    Математические расширенияMathematical
    Генерация нетекстовых MIME форматов
    Расширения для управления процессами программ
    Другие базовые расширения
    Другие службы
    Расширения для работы с поисковыми системами
    Расширения для работы с серверами
    Расширения для работы с сессиями
    Обработка текста
    Расширения, относящиеся к переменным и типам
    Веб-сервисы
    Расширения только для Windows
    Обработка XML
    Ядро PHP: Руководство хакера по Zend Engine
    Preface
    The «counter» Extension — A Continuing Example
    The PHP 5 build system
    Extension structure
    Memory management
    Working with variables
    Writing functions
    Working with classes and objects
    Working with resources
    Working with INI settings
    Working with streams
    PDO Driver How-To
    Extension FAQs
    Zend Engine 2 API reference
    Zend Engine 2 opcode list
    Zend Engine 1
    ЧАВО — ЧАВО: ЧАсто задаваемые Вопросы и Ответы на них
    Общая информация
    Списки рассылки
    Получение PHP
    Вопросы по Базам данных
    Установка
    Проблемы Сборки
    Использование PHP
    PHP и HTML
    PHP и COM
    PHP и другие языки
    Переход из PHP 4 в PHP 5
    Разные вопросы
    Appendices
    История PHP и смежных проектов
    Migrating from PHP 5.2.x to PHP 5.3.x
    Migrating from PHP 5.1.x to PHP 5.2.x
    Migrating from PHP 5.0.x to PHP 5.1.x
    Миграция с PHP 4 на PHP 5
    Classes and Objects (PHP 4)
    Отладка в PHP
    Configure options
    Директивы php.ini
    Список/классификация расширений
    Список псевдонимов функций
    List of Reserved Words
    List of Resource Types
    Список доступных фильтров
    Список поддерживаемых транспортных протоколов
    Таблица сравнения типов в PHP
    List of Parser Tokens
    Userland Naming Guide
    Об этом руководстве
    Creative Commons Attribution 3.0
    Список функций

    Комментарии

    05.09.2009 ljubchyk
    Документация по РНР, а називается html)

    26.01.2010 zohen
    Посмотрим что ето замануал)))

    31.03.2010 Dikan
    Качаю вот, говорят хорошая книга, по изучаю.

    01.04.2010 Mistic
    вобщем то очень доступно описано.
    сам не зная не одного языка программирования в течении двух недель освоил php именно по этой книге(это было пару лет назад).
    это классический мануал по php

    13.07.2010 LuMeN
    Надеюсь поможет поверю на слова

    24.12.2010 Nosirjon
    Скачаю начал изучачть html а потом php

    21.04.2011 babay
    Если это «PHP русский», то я — Папа Римский.

    25.04.2011 виктор
    Для Папы Римского, ты прочитал два слова из всего, что тут написано?
    Это руководство по PHP на русском языке.
    Никто тут даже не пытался сказать, что PHP русский.


    Админ, поставь в названии запятую «Руководство по PHP, русский» или «Руководство по PHP на русском».

    18.05.2011 KaReN
    Ну попробую, до этого ,было object pascal в среде дельфи, щсейчас решил в инете прробовал html, хочу попробовать нечто большее

    01.06.2011 Денис
    Да не слушайте вы ни кого, нормальный такое руководство, конечно не, то что нужно было мне, но тем кто хочет его освоить самое оно!
    P.S. мне нужно было описание функций и волей судьбы выплыл сюда.

    02.06.2011 виктор
    Денис, вот как раз в этом мануале и есть описание функций.
    Вобщем то самое основное в этом справочнике описание функций

    03.12.2011 Александр
    Парни, если кто не понимает, что перевод с английского на русский то ему запятая не поможет :-)

    08.12.2011 я php
    Да да, даже можно точку с запятой поставить, все равно не поможет. ))))

    24.01.2012 lili
    этому человеку и php не поможет..

    30.01.2012 ed-210
    Кто-нибудь может сказать, почему переведенный вариант руководства за 18-02-2011 всё-равно содержит английские статьи? Есть где-то полностью русский мануал?
    P.S. Ибо так лень напрягать мозг, для того чтобы вникнуть во вражескую терминологию.

    01.02.2012 админ
    справочники обновлены

    11.04.2012 Олег
    Спасибо за мануал!

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

    16.10.2015 Боря
    Прочитал множество книг и документаций по PHP. Ни одна не удобна так как этот справочник от разработчиков и не объясняет этот языка лучше этого справочника, так точно и последовательно. Рекомендую всем! Можно сказать что это полный справочник по языку PHP. Удачи всем !

    PHP хостинг

    В переводе с английского аббревиатура РНР переводится как «предварительный обработчик гипертекста». РНР является языком описания скриптов, который можно внедрять в HTML. В основе его синтаксиса лежит С, Perl и Java, с добавлением нескольких особенностей, специфичных именно для РНР. Цель создания РНР является предоставление возможностей создавать динамически генерируемые страницы.

    Как расшифровывается PHP?
    РНР представляет собой рекурсивный акроним термина ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’). До возникновения версии РНР 3.0 его название означало «Утилиты для домашней страницы/Интерпретатор форм» и обозначалось как PHP/FI.

    Какой хостинг провайдер предоставляет PHP?
    Практически любой из указанного в нашем рейтинге хостинг провайдеров.

    Каков принцип взаимодействия HTML и PHP?
    В отличие от других известных языков программирования, язык РНР имеет несколько неоспоримых преимуществ, поскольку он разрабатывался для решения довольно сложных задач. Благодаря использованию РНР осуществляется эффективное и надежное взаимодействие с HTML. Когда браузер посылает запрос на веб-сервер на получение страницы РНР, то сначала модуль РНР выполняет ее интерпретацию. Обычные теги HTML являются частями данной страницы. Процесс передачи их клиенту осуществляется подобно тому, как происходит обработка обычного документа HTML. Части документа, написанные на языке РНР, проходят обработку РНР-модулем сервера, который представляет собой специальную программу, которая предназначена для интерпретации инструкции РНР. После этого модуль РНР просматривает код РНР, а затем занимается выполнением заданных в нем инструкции: отправкой электронной поты, открытием доступа к базе данных или преобразованием чисел.

    Перед тем, как начать выполнять разработку сценариев РНР, нужно установить требуемое программное обеспечение: интерпретатор РНР и web-сервер Apache. Данный процесс обычно происходит оперативно и без особых трудностей. Если же у Вас возникнут проблемы, обратитесь к документации, которая прилагается к программам РНР и Apache.

    ГЛАВА 1 Знакомство с PHP

    Последние пять лет ознаменовались фантастическим развитием Интернета и новых способов общения между людьми. На переднем крае этого явления находится World Wide Web (WWW). Ежедневно в этой новой коммуникационной среде открываются тысячи новых сайтов, а потребителям предлагаются новые виды услуг. Вместе с бурным развитием рынка появился огромный спрос на новые технологии и разработчиков, владеющих ими. Если вы читаете этот абзац, вероятно, вы уже являетесь или скоро станете web-разработчиком. Впрочем, какой бы ни была ваша профессия, вы выбрали эту книгу потому, что слышали о замечательной новой технологии — PHP.

    В этой главе вы познакомитесь с языком PHP, получите представление о его истории и возможностях, а также основную информацию, необходимую для разработки сайтов с поддержкой PHP. Надеюсь, приведенные примеры пробудят ваш энтузиазм и наглядно покажут, какие перспективы PHP открывает перед вами и вашей организацией. Вы узнаете, как установить и настроить программное обеспечение PHP на компьютерах с Linux/UNIX или Windows и как внедрить PHP в HTML. К концу главы вы будете готовы к тому, чтобы углубленно заняться изучением других важных аспектов языка PHP. Итак, зажигайте свет, включайте свою любимую музыку и устраивайтесь поудобнее. Пришла пора познакомиться с тем, что станет одним из важнейших пунктов в вашем резюме, — с программированием на PHP.

    Краткая история

    История PHP начинается с 1995 года, когда независимый программист-контрактник по имени Расмус Лердорф (Rasmus Lerdorf) написал сценарий Perl/CGI для подсчета количества посетителей сайта, прочитавших его онлайновое резюме. Его сценарий решал две задачи: регистрацию данных посетителя и вывод количества посетителей на web-странице. Развитие WWW еще только начиналось, никаких специальных средств для решения этих задач не было, и к автору хлынул поток сообщений с вопросами. Лердорф начал бесплатно раздавать свой инструментарий, названный Personal Home Page (PHP) или Hypertext Processor (гипертекстовый процессор).

    Шумный успех инструментария PHP заставил Лердорфа приступить к разработке расширений PHP. Одно из расширений преобразовывало данные, введенные на форме HTML, в символические переменные, что позволяло экспортировать их в другие системы. Чтобы добиться поставленной цели, Лердорф решил в дальнейших разработках перейти с Perl на С. Расширение существующего инструментария PHP привело к появлению PHP 2.0, или PHP-FI (Personal Home Page — Form Interpretator). В усовершенствовании версии 2.0 принимали участие программисты со всего мира.

    Новая версия PHP пользовалась исключительной популярностью, и вскоре образовалась основная команда разработчиков. Они сохранили исходную концепцию внедрения программного кода прямо в HTML и переписали заново механизм лексического анализа, что привело к появлению PHP 3.0. К моменту выхода версии 3.0 в 1997 году свыше 50 000 пользователей применяли PHP для улучшения своих web-страниц.

    В 1997 году было решено, что сокращение PHP должно означать не «Personal Home page», а «PHP Hypertext Processor»

    В течение следующих двух лет стремительное развитие PHP продолжалось. В язык добавлялись сотни новых функций, а количество пользователей стремительно росло. В начале 1999 года служба Netcraft (http://www.netcraft.com) сообщила о том, что, по минимальным оценкам, число пользователей PHP превысило 1 000 000, в результате чего PHP стал одним из самых популярных сценарных языков в мире.

    В начале 1999 года было объявлено о предстоящем выходе PHP 4.0. Хотя одной из сильнейших сторон PHP была эффективность выполнения сценариев, при первоначальных разработках не предполагалось, что на базе PHP будут строиться крупномасштабные приложения. По этой причине была начата работа над более устойчивым механизмом лексического анализа, больше известным под названием Zend (http://www.zend.com). Работа шла быстро и завершилась 22 мая 2000 года выпуском PHP версии 4.0.

    Кроме лексического анализатора Zend, компания Zend Technologies (Израиль) распространяет оптимизатор Zend, который повышает выигрыш в быстродействии от применения лексического анализатора Zend. Тесты показывают, что ускорение работы программы в результате использования оптимизатора составляет от 40 до 100 %. За дополнительной информацией обращайтесь на сайт Zend.

    На момент написания этой книги, по данным Netcraft (http://www.netcraft.com), программное обеспечение PHP было установлено более чем в 3,6 миллиона доменов. Будущее PHP выглядит светлым, поскольку продукт продолжает активно использоваться как на крупных web-сайтах, так и на компьютерах отдельных пользователей.

    PHP лучше всего охарактеризовать как работающий на стороне сервера встроенный язык сценариев Web, позволяющий разработчикам быстро и эффективно строить динамические web-приложения. С позиций грамматики и синтаксиса PHP напоминает язык программирования С, хотя разработчики не постеснялись включить в него средства из других языков, в том числе из Perl, Java и C++. Среди ценных заимствованных возможностей — поддержка регулярных выражений, мощные средства работы с массивами, объектно-ориентированная методология и обширная поддержка работы с базами данных.

    При написании приложений, выходящих за рамки традиционной, статической методологии разработки web-страниц (то есть HTML), PHP также может послужить ценным инструментом для создания и управления динамическим содержанием, который используется наряду с JavaScript, стилями, WML (Wireless Markup Language) и другими полезными языками. Благодаря наличию сотен стандартных функций PHP в состоянии решить практически любую задачу, которая может придти в голову разработчику. В нем имеется обширная поддержка создания графики и операций с ней, математических вычислений, средств электронной коммерции и таких популярных технологий, как XML (Extensible Markup Language), ODBC (Open Database Connectivity) и Macromedia Shockwave. Широкий выбор возможностей избавляет от необходимости рутинной и непростой работы по подключению сторонних модулей, поэтому многие разработчики со всего мира останавливают свой выбор на PHP.

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

    Сообщение «Hello world!» выводится в заголовке web-страницы. Интересно то, что команда print внутри конструкции, которая обычно называется экранирующими последовательностями PHP ( ), представляет собой законченную программу. Ни длинного кода инициализации, ни включения библиотек — программа состоит лишь из того кода, который непосредственно решает поставленную задачу!

    Конечно, для выполнения сценариев PHP необходимо предварительно установить и настроить программное обеспечение PHP на сервере. Этот процесс описан в разделе «Загрузка и установка PHP/Apache» настоящей главы. Разделу предшествуют фрагменты из отзывов нескольких пользователей, выступающих в пользу PHP, с кратким обзором языка и его истории. Но прежде чем браться за процесс установки, мы познакомимся с некоторыми характеристиками PHP. Этой теме посвящен следующий раздел.

    Характеристики PHP

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

    • традиционностью;
    • простотой;
    • эффективностью;
    • безопасностью;
    • гибкостью.

    Существует еще одна «характеристика», которая делает PHP особенно привлекательным: он распространяется бесплатно!

    Традиционность

    Язык PHP кажется знакомым программистам, работающим в разных областях. Многие конструкции языка позаимствованы из Си Perl, а нередко код PHP практически неотличим от того, что встречается в типичных программах С или Pascal. Это заметно снижает начальные усилия при изучении PHP.

    Простота

    Сценарий PHP может состоять из 10 000 строк или из одной строки — все зависит от специфики вашей задачи. Вам не придется подгружать библиотеки, указывать специальные параметры компиляции или что-нибудь в этом роде. Механизм PHP просто начинает выполнять код после первой экранирующей последовательности ( ). Если код имеет правильный синтаксис, он исполняется в точности так, как указал программист.

    Эффективность

    Эффективность является исключительно важным фактором при программировании для многопользовательских сред, к числу которых относится и WWW. В PHP 4.0 был реализован механизм выделения ресурсов и обеспечена улучшенная поддержка объектно-ориентированного программирования, а также средства управления сеансом. В последней версии появился и механизм подсчета ссылок (reference counting), предотвращающий выделение лишней памяти.

    Безопасность

    PHP предоставляет в распоряжение разработчиков и администраторов гибкие и эффективные средства безопасности, которые условно делятся на две категории: средства системного уровня и средства уровня приложения.

    Средства безопасности системного уровня

    В PHP реализованы механизмы безопасности, находящиеся под управлением администраторов; при правильной настройке PHP это обеспечивает максимальную свободу действий и безопасность. PHP может работать в так называемом безопасном режиме (safe mode), который ограничивает возможности применения PHP пользователями по ряду важных показателей. Например, можно ограничить максимальное время выполнения и использование памяти (неконтролируемый расход памяти отрицательно влияет на быстродействие сервера). По аналогии с cgi-bin администратор также может устанавливать ограничения на каталоги, в которых пользователь может просматривать и исполнять сценарии PHP, а также использовать сценарии PHP для просмотра конфиденциальной информации на сервере (например, файла passwd).

    Средства безопасности уровня приложения

    В стандартный набор функций PHP входит ряд надежных механизмов шифрования. PHP также совместим с многими приложениями независимых фирм, что позволяет легко интегрировать его с защищенными технологиями электронной коммерции (e-commerce). Другое преимущество заключается в том, что исходный текст сценариев PHP нельзя просмотреть в браузере, поскольку сценарий компилируется до его отправки по запросу пользователя. Реализация PHP на стороне сервера предотвращает похищение нетривиальных сценариев пользователями, знаний которых хватает хотя бы для выполнения команды View Source.

    Тема безопасности настолько важна, что ей посвящена целая глава. За подробной информацией о средствах безопасности PHP обращайтесь к главе 16.

    Гибкость

    Поскольку PHP является встраиваемым (embedded) языком, он отличается исключительной гибкостью по отношению к потребностям разработчика. Хотя PHP обычно рекомендуется использовать в сочетании с HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и другие языки. Кроме того, хорошо структурированные приложения PHP легко расширяются по мере необходимости (впрочем, это относится ко всем основным языкам программирования).

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

    Поскольку PHP не содержит кода, ориентированного на конкретный web-сервер, пользователи не ограничиваются определенными серверами (возможно, незнакомыми для них). Apache, Microsoft IIS, Netscape Enterprise Server, Stronghold и Zeus — PHP работает на всех перечисленных серверах. Поскольку эти серверы работают на разных платформах, PHP в целом является платформенно-незави-симым языком и существует на таких платформах, как UNIX, Solaris, FreeBSD и Windows 95/98/NT.

    Наконец, средства PHP позволяют программисту работать с внешними компонентами, такими как Enterprise Java Beans или СОМ-объекты Win32. Благодаря

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

    Бесплатное распространение

    Стратегия Open Source наделала немало шуму в программной отрасли. Распространение исходных текстов программ в массах оказало несомненно благотворное влияние на многие проекты, в первую очередь — Linux, хотя и успех проекта Apache сильно подкрепил позиции сторонников Open Source. Сказанное относится и к истории создания PHP, поскольку поддержка пользователей со всего мира оказалась очень важным фактором в развитии проекта PHP.

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

    В следующем разделе «Рекомендации пользователей» приведены свидетельства трех видных профессионалов в области web-разработок. Из них становится ясно, почему они считают PHP такой замечательной технологией.

    Рекомендации пользователей

    «Мы в течение долгого времени поддерживали личные контакты с некоторыми разработчиками PHP и вели с ними обширную переписку. Когда у разработчиков PHP возникали какие-то проблемы, относящиеся к MySQL, мы всегда были готовы помочь им в поиске решения. Кроме того, мы включили в MySQL несколько новых возможностей лишь для того, чтобы улучшить его интеграцию с PHP. Результатом наших усилий стало то, что MySQL превосходно работает с PHP, — и мы позаботимся о том, чтобы это положение сохранилось и в будущем!»

    Майкл «Монти» Видениус (Michael «Monty» Widenius),

    «Выбор PHP для реализации mp3.lycos.com был обусловлен несколькими причинами. Главной причиной стали сжатые сроки работы над проектом — ведь PHP ускоряет процесс разработки. Другой причиной была высокая эффективность — мы перешли от 0 к 1,4 миллиона посещений в сутки, и PHP с этим прекрасно справился. Третья причина заключалась в том, что я твердо знал: если на стадии тестирования с повышенной нагрузкой в PHP обнаружатся какие-либо ошибки, я смогу их самостоятельно исправить, поскольку PHP распространяется вместе с исходными текстами».

    Стиг Баккен (Stig Bakken),

    FAST Search & Transfer ASA

    «Я использовал PHP с первых дней, еще с версии PHP/FI 1.x. Мне понравилось, что я могу обрабатывать формы и настраивать страницы «на ходу» при помощи такого простого языка. Вместе с потребностями моей компании развивался и PHP.

    В наши дни PHP обладает исключительно богатыми возможностями. Мы используем его практически во всех создаваемых web-сайтах, включая 32bit.com и DevShed.com. Мы даже воспользовались им в Info West для реализации службы поддержки, управления учетными записями и отслеживания портов.

    Эволюция PHP и признание его мировым сообществом — классический пример успешного ведения проекта с открытыми исходными текстами. Широта взглядов создателей, поддержка сообщества и хорошее сопровождение кодовой базы привели PHP к успеху, о котором многие коммерческие проекты могут лишь мечтать. Я с оптимизмом смотрю в будущее PHP и рекомендую каждому web-разработчику попробовать его в деле. Возможно, вы, как и я, уже не расстанетесь с ним».

    Рэнди Косби (Randy Cosby),

    президент nGenuity, Inc. DevShed

    Вводный пример

    Пример, приведенный в листинге 1.1, наглядно показывает, как легко PHP интегрируется с HTML-кодом.

    Листинг 1.1. Создание динамической страницы PHP

    apache — запуск двух версий PHP на одном сервере

    У меня есть два проекта на локальном сервере, один проект работает на PHP5.6, а другой — на PHP7.0. Теперь можно ли будет включить эти две версии на основе проектов? Я уже пробовал добавлять AddHandler application/x-httpd-php7 .php в одном из проектов htaccess, но не работает. В настоящее время на сервере уже установлены PHP7.0 и PHP5.6-fpm. Ниже скриншот phpinfo.

    Решение

    Так что после поиска в гугле на весь день. Мне удалось запустить два моих проекта в FastCgi на разных версиях PHP. Спасибо ребятам из этого Форум . Я удалил все, включая Apache и начать все заново. Ниже приведены шаги, которые я использовал для включения двух версий PHP на моем локальном сервере. Кстати, мой компьютер работает на Linux Mint 18.

    1. Предполагая, что вы уже установили Apache, создали виртуальный хост для двух проектов и добавили необходимые php PPA. Давайте назовем проекты site56.local для php5.6 и site70.local для php7.0. Установите php5.6-fpm и php7.0-fpm, запустив.

    sudo apt-get установить php7.0-fpm

    1. Создайте два файла в / usr / lib / cgi-bin / (честно говоря, я не знаю, нужен ли этот шаг по-прежнему) и сохраните.

    sudo nano / usr / lib / cgi-bin / php56-fcgi

    sudo nano / usr / lib / cgi-bin / php70-fcgi

    Откройте файл php56 conf «/etc/apache2/conf-available/php5.6-fpm.conf», добавьте этот конфиг и сохраните.

    AddHandler php56-fcgi .php
    Action php56-fcgi /php56-fcgi
    Alias /php56-fcgi /usr/lib/cgi-bin/php56-fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization
    Action php70-fcgi /php70-fcgi
    Alias /php70-fcgi /usr/lib/cgi-bin/php70-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization

    Require all granted

    Теперь включите новую конфигурацию apache.

    1. Если вы установили php5.6 и php5.7, убедитесь, что вы отключили эти два и перезапустите apache.

    sudo systemctl перезапустить apache2

    1. Создайте файл .htacces в проекте, который должен работать на php7.0, и добавьте этот обработчик.
    1. Теперь создайте файл phpinfo для двух проектов, и если вы видите что-то подобное, то поздравляю!

    PS: убедитесь, что вы включили htaccess в вашем apache2.conf или httpd.conf

    Другие решения

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

    # ls -la / etc / apache2 / conf-enabled | grep php

    # ls -la / etc / apache2 / mods-enabled | grep php

    Настройте другую версию PHP-FPM для конкретного сайта:

    Добавьте следующую строку в существующий файл VirtualHost.

    Это не работает для Debian 9 Stretch. Мне понадобилось время, чтобы понять, что делать, но в конце концов я нашел решение, которое кажется еще проще:

    Если вы установили php5.6 и php5.7, убедитесь, что вы отключили эти два и перезапустите apache.

    На данный момент все ваши сайты должны работать на PHP 5.6.

    Для сайтов, которым нужен php 7, добавьте эту строку в vhost:

    Это должно сделать свое дело ��

    Я попытался реализовать решение Makubex, и оно сработало. У меня была только одна проблема с недавно установленной LAMP, и это было то, что fastcgi не был включен.
    Я просто снова установил php с помощью следующего скрипта и впоследствии включил fastcgi.

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

    Добавив следующую строку

    в конфигурации Apache vhost вы можете изменить версию php внутри каталога php70project в вашем корневом каталоге vhost / var / www на версию 7, работающую от имени fastcgi.

    Следующий подход для использования с сокетом Unix

    не работает, как задумано.
    К сожалению, я не смог найти правильный код, чтобы это работало, но на этой странице нет примера использования сокетов Unix с подпапками. https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html это может быть просто невозможно.

    Это можно сделать, отключив и включив новую версию PHP-

    • переключиться на старую версию —
      a2dismod php7.0
      перезапуск службы apache2
    • перейти на более новую версию
      a2enmod php7.0
      перезапуск службы apache2
  • Илон Маск рекомендует:  Что такое код asp accessssl
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL