Дистрибутивы php для windows

Содержание
  1. PHP: Hypertext Preprocessor
  2. PHP For Windows
  3. PECL For Windows
  4. Which version do I choose?
  5. Apache
  6. VC15 & VS16
  7. TS and NTS
  8. What is PGO?
  9. amd64 (x86_64) Builds
  10. Long and multibyte path
  11. Archives
  12. OCI DLLs missing from PHP 8.0.0 pre-release builds
  13. Windows Defender Warnings
  14. OpenSSL default config path changed
  15. PHP 7.4 builds use Visual Studio 2017
  16. Visual Studio 2019 Builds
  17. OpenSSL 1.1.1a
  18. The windows.php.net site uses SSL by default
  19. AVX builds
  20. OpenSSL security update
  21. OpenSSL security update
  22. PHP: Hypertext Preprocessor
  23. PHP For Windows
  24. PECL For Windows
  25. Which version do I choose?
  26. Apache
  27. VC15 & VS16
  28. TS and NTS
  29. What is PGO?
  30. amd64 (x86_64) Builds
  31. Long and multibyte path
  32. Archives
  33. Установка PHP7 на Windows
  34. PHP на Windows
  35. ШАГ 1 скачать дистрибутив PHP для Windows
  36. ШАГ 2 размещение PHP в Windows
  37. Структура файлов и каталогов дистрибутива PHP7 для Windows
  38. Общие замечания по установке PHP
  39. Выделяют три направления использования PHP
  40. Подключение PHP к WEB серверу
  41. PHP как SAPI или ISAPI модуль WEB сервера
  42. PHP как внешнее FastCGI/CGI приложение
  43. ШАГ 3 создание php.ini
  44. php.ini
  45. php.ini и php-SAPI.ini
  46. .user.ini
  47. Последовательность поиска конфига PHP в локализациях
  48. Создание php.ini
  49. Способы изменения конфигурации PHP
  50. Режимы директив PHP
  51. ini_set() — настройка PHP в скриптах
  52. Настройка PHP в конфигах Apache
  53. Пример настроек PHP в конфиге виртуального хоста Apache.
  54. ШАГ 4 CLI вызов PHP
  55. Пример CLI вызова PHP в командной строке Windows
  56. Пример запуска встроенного PHP web сервера для сайта и каталога Z:\WebDevelopment\Projects\Site1 на localhost:80
  57. ШАГ 5 настройка работы PHP с web сервером Apache2.4 на Windows
  58. Настройка Apache2.4 для работы с PHP
  59. PHP как Apache модуль
  60. PHP как FastCGI/CGI с Apache
  61. ШАГ 6 настройка виртуального хоста Apache
  62. Создание и настройка виртуального хоста Apache2.4
  63. Файл hosts
  64. Файл httpd-vhosts.conf
  65. директива Apache
  66. Общий вид директивы :
  67. VirtualHost _default_
  68. Команды проверки конфигурации виртуальных хостов Apache
  69. Использование несколько версий PHP
  70. ШАГ 7 FTP EMAIL
  71. EMAIL
  72. FTP сервер для Windows
  73. Дополнения и инструменты PHP
  74. deplister.exe
  75. Пример работы утилиты deplister.exe для модуля PHP:
  76. Отладчик phpdbg
  77. PECL extensions
  78. Скринкаст: Установка PHP7 на Windows

PHP: Hypertext Preprocessor

Are you seeing a warning from Windows Defender? Check out this info.

PHP For Windows

This site is dedicated to supporting PHP on Microsoft Windows. It also supports ports of PHP extensions or features as well as providing special builds for the various Windows architectures.

If you like to build your own PHP binaries, instructions can be found on the Wiki.

PECL For Windows

PECL extensions for Windows is being worked on. Windows DLL can be downloaded right from the PECL website.

The PECL extension release and snapshot build directories are browsable directly.

Which version do I choose?

If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

Apache

Please use the Apache builds provided by Apache Lounge. They provide VC15 and VS16 builds of Apache for x86 and x64. We use their binaries to build the Apache SAPIs.

With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP.

VC15 & VS16

More recent versions of PHP are built with VC15 or VS16 (Visual Studio 2017 or 2019 compiler respectively) and include improvements in performance and stability.

— The VC15 and VS16 builds require to have the Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86 installed

TS and NTS

TS refers to multithread capable builds. NTS refers to single thread only builds. Use case for TS binaries involves interaction with a multithreaded SAPI and PHP loaded as a module into a web server. For NTS binaries the widespread use case is interaction with a web server through the FastCGI protocol, utilizing no multithreading (but also for example CLI).

What is PGO?

Profile Guided Optimization is an optimization feature available in Microsoft’s Visual C++ compiler that allows you to optimize an output file based on profiling data collected during test runs of the application or module.

Links:

amd64 (x86_64) Builds

PHP 7 provides full 64-bit support. The x64 builds of PHP 7 support native 64-bit integers, LFS, 64-bit memory_limit and much more.

x64 builds are recommended (almost all Windows installations support x64).

Long and multibyte path

PHP 7.1+ supports long and UTF-8 paths. See the manual for details.

Archives

Past releases are available from our archives, older versions not found there can be found at the Museum.

OCI DLLs missing from PHP 8.0.0 pre-release builds

Due to a build system error which only has been noticed recently, so far the PHP 8.0.0 pre-release builds didn’t contain php_oci8_12c.dll and php_pdo_oci.dll in the ext/ folder. You can now separately download these files and copy them in your existing PHP-8.0.0beta1 installation (the DLLs are not suitable for the alpha releases). Make sure that you use the appropriate package (x64 vs. x86, and non thread-safe vs. thread-safe).

Windows Defender Warnings

A few days ago, we have noticed that Windows Defender reports some files in the PHP source and test packages as severe threat, claiming they would constitute a backdoor (e.g. Backdoor:PHP/Dirtelti.MTF). These files are auxiliary test files containing eval statements. Are these files backdoors? That depends on the context, i.e. in this case whether they are accessible via the Web. If they are, because they have been uploaded to the webroot of a publicly available Webserver, for instance, they may pose a serious threat. On the other hand, if they are just used on a local machine for development and testing purpuses, they are not malicious in any way.

So, if you experience such Windows Defender warnings, examine the reported files, make sure they don’t pose any threat, and then unblock them.

Happy PHPing on Windows!

OpenSSL default config path changed

As of PHP 7.4.0, the OpenSSL default config path changes from c:\usr\local\ssl\openssl.cnf to C:\Program Files\Common Files\SSL\openssl.conf for x64 builds, and C:\Program Files (x86)\Common Files\SSL\openssl.conf for x86 builds. These paths match the defaults of OpenSSL 1.1, and are more inline with the Windows folder structure than the old settings. Note that this path is still configurable via the environment variable OPENSSL_CONF. See also the installation section in the PHP manual.

PHP 7.4 builds use Visual Studio 2017

We used Visual Studio 2019 to build the early releases of PHP 7.4 (up to and including 7.4.0beta2). And although Visual Studio 2019 is generally an improvement over Visual Studio 2017, due to compatibility issues we have decided to switch back to Visual Studio 2017 for our PHP 7.4 builds, and we are planning to stick with this for the complete lifetime of PHP 7.4.

Note that it is still possible to use Apache VS16 builds from Apachelounge in combination with PHP 7.4, since VS 2019 is forward compatible with VS 2017.

Our master snapshots are still built with Visual Studio 2019, and we are planning to stick with Visual Studio 2019 for PHP 8.0.

Visual Studio 2019 Builds

All binary packages we were offering contained «vc#» (for instance, «vc14») in the filename to designate the Visual Studio version which has been used to build them. This number («#») has tradionally been the major number of the respective platform toolset. The preview releases of Visual Studio 2017 shipped with platform toolset 15.00, so we used «vc15» to mark the files. The first GA release of Visual Studio 2017, however, shipped with platform toolset 14.10 (to signal the backward compatibility), but the internal Visual Studio version number stayed 15.00. To avoid confusion with already distributed packages, we stuck with the «vc15» marker. For our Visual Studio 2019 builds (PHP 7.4 and master) we finally changed from «vc#» to «vs#» (note the «s»), where the number now designates the major internal Visual Studio version number. We are planning to stick with this new naming scheme for the foreseeable future.

OpenSSL 1.1.1a

The recent release candidates 7.2.14RC1 and 7.3.1RC1 use the latest OpenSSL 1.1.1 release branch. Please help testing these release candidates with the regard to the OpenSSL compatibility and report bugs. This concerns the OpenSSL extension itself as well as the extensions depending on OpenSSL like cURL.

The windows.php.net site uses SSL by default

Thanks to «Let’s Encrypt», the site now uses SSL by default. All the non SSL links are transparently redirected to the SSL locations.

WinXP users might experience connection issues. It is a high time to switch away from WinXP to some more recent OS version.

AVX builds

In addition to the usual regular snapshots, the current master builds deliver binaries with AVX (Advanced Vector Extensions) support. AVX is an instruction set available in many modern CPUs. The internal PHP implementation uses these specific CPU instructions to improve performance.

Processors, manufactured after 2011, most likely support AVX. The exact information about the hardware can be retrieved by using the Coreinfo tool.

Help us to test these new flavours, any feedback appreciated!

OpenSSL security update

The OpenSSL Security Advisory [19 Mar 2015] announces the availability of the OpenSSL 0.9.8zf and 1.0.1m which fix twelve security vulnerabilities. The latest PHP releases 5.4.39, 5.5.23 and 5.6.7 already contain the updated OpenSSL library. All PHP users are strongly encouraged to upgrade to the corresponding patch versions.

Alternatively, the updated OpenSSL dependency DLLs can be downloaded separately as replacement for the older PHP and Apache versions.

OpenSSL security update

The OpenSSL Security Advisory [07 Apr 2014] announces the availability of the OpenSSL 1.0.1g which fixes CVE-2014-0160. In this regard the latest PHP release 5.5.11 was rebuilt with the OpenSSL 1.0.1g. All PHP users are strongly encouraged to upgrade to PHP 5.5.11. If you already have downloaded this version before 10-Apr-2014, please redownload. The existing private keys should be regenerated as soon as possible.

Alternatively, the updated OpenSSL dependency DLLs can be downloaded separately as replacement for the older PHP versions. Though be aware that this issue affects only OpenSSL 1.0.x and the DLL packages are only applicable to PHP 5.5 and upper.

PHP 5.4 and lower is not affected by this issue.

PHP: Hypertext Preprocessor

Are you seeing a warning from Windows Defender? Check out this info.

PHP For Windows

This site is dedicated to supporting PHP on Microsoft Windows. It also supports ports of PHP extensions or features as well as providing special builds for the various Windows architectures.

If you like to build your own PHP binaries, instructions can be found on the Wiki.

PECL For Windows

PECL extensions for Windows is being worked on. Windows DLL can be downloaded right from the PECL website.

The PECL extension release and snapshot build directories are browsable directly.

Which version do I choose?

If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

Apache

Please use the Apache builds provided by Apache Lounge. They provide VC15 and VS16 builds of Apache for x86 and x64. We use their binaries to build the Apache SAPIs.

With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP.

VC15 & VS16

More recent versions of PHP are built with VC15 or VS16 (Visual Studio 2017 or 2019 compiler respectively) and include improvements in performance and stability.

— The VC15 and VS16 builds require to have the Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86 installed

TS and NTS

TS refers to multithread capable builds. NTS refers to single thread only builds. Use case for TS binaries involves interaction with a multithreaded SAPI and PHP loaded as a module into a web server. For NTS binaries the widespread use case is interaction with a web server through the FastCGI protocol, utilizing no multithreading (but also for example CLI).

What is PGO?

Profile Guided Optimization is an optimization feature available in Microsoft’s Visual C++ compiler that allows you to optimize an output file based on profiling data collected during test runs of the application or module.

Links:

amd64 (x86_64) Builds

PHP 7 provides full 64-bit support. The x64 builds of PHP 7 support native 64-bit integers, LFS, 64-bit memory_limit and much more.

x64 builds are recommended (almost all Windows installations support x64).

Long and multibyte path

PHP 7.1+ supports long and UTF-8 paths. See the manual for details.

Archives

Past releases are available from our archives, older versions not found there can be found at the Museum.

Установка PHP7 на Windows

В статье описывается ручная portable установка языка PHP 7.1, 7.2 и 7.^ на Windows из zip архива. Показаны все основные шаги инсталляции последней версии PHP, начиная от выбора необходимой сборки дистрибутива PHP и его развертывания в Windows, до настройки самого языка и WEB сервера Apache 2.4 для работы с PHP скриптами для обработки http запросов. Описана структура и назначение основных файлов дистрибутива PHP и приведены основные команды для работы с PHP из командой строки. Продемонстрировано использование встроенного в PHP HTTP WEB сервера. Статья содержит скринкаст, где, все описанное в статье, выполнено на примерах в Windows7.

Читайте также:  Core parking manager windows 10

Язык программирования PHP сейчас является наиболее распространенным языком для WEB приложений. PHP сочетает в себе большой накопленный опыт его использования и надежность, что позволяет реализовывать на нем не только малые и средние проекты, но и большие. Нужно вспомнить, что изначально, Facebook и ВКонтакте были написаны на PHP, и только потом были переведены на собственные компилируемые языки, основой для которых послужил PHP. Язык PHP не стоит на месте и постоянно развивается, но это делается разумно и осторожно, что обеспечивает пользователям легкий переход на новые версии языка, получая при этом улучшение в скорости и надежности. Основные действия по установке PHP7, описанные в этой статье, подойдут как для PHP 7.1.0, так и для PHP 7.2.0 и любых версий PHP 7.^. В примерах статьи используются версия PHP 7.1.0 (01.12.2016). Более подробно о нововведениях языка PHP7 рекомендую посмотреть в докладе Дмитрия Стогова (Zend Technologies) — «Развитие ветки PHP-7» . Здесь приведу из доклада Дмитрия только факты о том, что, по результатам тестов, PHP сейчас является самым быстрым из интерпретируемых языков и дальнейшее направление развития — это приближение по скорости к языкам C.

PHP на Windows

Несмотря на то, что в большинстве случаев PHP используют на Linux операционных системах, он с таким же успехом может использоваться и на Windows, как в сочетании с Apache, так и с Windows IIS WEB серверами. Например, если вы работаете на Windows, но вам необходимо выполнять запуск и тестирование PHP скриптов и CMS на основе PHP, то вы можете самостоятельно установить и вручную настроить все необходимые компоненты, включая и PHP. Такой подход является хорошей альтернативой против использования уже готовых сборок Win+AMP, так как вы получаете полнофункциональные версии компонентов и приобретаете реальный опыт по настройке PHP и Apache. В интернете присутствуют различные инсталляторы PHP, но не один из них не одобрен PHP.net. На официальном сайте PHP (php.net) рекомендуют выполнять именно ручную инсталляцию PHP на Windows из оригинального дистрибутива PHP в zip архиве, так как это является безопасным в отношении заражения системы троянами и вирусами. Ручная инсталляция PHP на Windows позволяет хорошо изучить структуру дистрибутива PHP и назначение его основных файлов и настроек, что будет несомненным плюсом в дальнейшем, при развертывании LAMP сервера на Linux и для выполнения WEB разработки на PHP.

ШАГ 1 скачать дистрибутив PHP для Windows

Скачивать дистрибутив PHP для Windows нужно с официального сайта PHP, где на странице «PHP For Windows» выложены сборки PHP для Windows в виде zip архива.

В примерах этой статьи PHP будет настраиваться в Windows7 на работу с WEB сервером Apache через его собственный, специализированный SAPI модуль вызова PHP, поэтому мною будет использован следующий дистрибутив PHP 7.1.0:

Данная сборка выполнена в Visual Studio 2015 с пакетом VC14Visual C++ 2015 x64 Redistributable Package, который должен быть установлен в вашей системе. Компоненты VC14, обычно уже имеются в системе, но если они не установлены, то скачать VC14 для инсталляции можно на официальном сайте Microsoft по ссылке : Распространяемый компонент Microsoft Visual C++ 2015 Update 3 RC .

Эта сборка является Thread Safe (потоково безопасной) версией и обеспечивает корректное функционирование PHP при использовании его из нескольких потоков одновременно, что как раз и нужно при работе PHP через SAPI модуль Apache на Windows. Это связано с тем, что, в зависимости от подхода и операционной системы, параллельная обработка может быть реализована через параллельные процессы или через параллельные потоки. Эти подходы имеют отличия и накладывают некоторые требования к исполнению как в PHP, так и в других программах. Так, например, потоки имеют общее адресное пространство, процессы же имеют разное. Для процессов вообще безразлично, что внутри каждого из них происходит т.к. они не влияют друг на друга. Поэтому, там, где PHP может исполняться в несколько параллельных потоков, необходимо использовать версию Thread Safe для безопасного разделения переменных окружения, адресного пространства и т.п. Если же PHP будет исполняться только внутри параллельных процессов, то можно использовать Non Thread Safe версию PHP, хотя это и не обязательно.

О том, какой вариант PHP использовать, Thread Safe или Non Thread Safe, так же написано на странице загрузки PHP в секции под заголовком: Which version do I choose?. Там сказано, что:

  • если вы планируете использовать PHP на Windows через встроенный SAPIмодуль WEB сервера Apache (или другого WEB сервера), то необходимо использовать Thread Safe версию PHP, т.к. SAPI модуля WEB серверов являются много поточными и PHP может выполняться в нескольких параллельных потоках;
  • если вы планируете использовать PHPтолько как внешнее CGI или CLI приложение через FastCGI/CGI или CLI (в них PHP запускается только как параллельный процесс), то можно выбрать и Non Thread Safe версию PHP.

Эта сборка содержит в своем составе SAPI модуль Apache, который взят от сборки Apache от Apache Lounge http://www.apachelounge.com/. Данная сборка PHP будет корректно работать как с Apache от Apache Lounge, так и с сборкой Apache 2.4.23 x64 от Apache Haus, инсталляция которой на Windows была описана мною в статье и скринкасте: «Установка Apache на Windows» Andew.ru/pages/page/install-apache-on-windows.php.

ШАГ 2 размещение PHP в Windows

Скачанный дистрибутив PHP необходимо распаковать с сохранением его структуры в выбранный вами каталог, который может располагаться в любом месте файловой системы (не обязательно в системных каталогах Windows). Путь до папки, где будет размешаться PHP, желательно выбирать как можно короче, без пробелов и других недопустимых символов. Лучше использовать только EN буквы и цифры. Например: «C:\PHP».

В статьях, связанных с темой установки PHP на Windows: «Установка Apache на Windows», «Portable MySQL 5.7 в Windows» и «Установка Gulp в WEB проект сайта», мною, во всех примерах, используется для разрешения дистрибутивов Apache, MySQL и Gulp корневой каталог «Z:\WebDevelopment». Поэтому, в продолжении этих тем, для примеров этой статьи, мною будет использован для инсталяции PHP каталог вида: «Z:\WebDevelopment\PHP». Таким образом, эта статья дополнит предыдущие и объединит их вокруг темы по самостоятельной организации собственного WinAMP сервера на Windows.

Для удобства работы с PHP через командную строку нужно добавить в конец системной переменной PATH, через точку с запятой, путь к директории с инсталляцией PHP, например, ;Z:\WebDevelopment\PHP . Это можно сделать в настройках Windows: Computer > Properties > Advanced > System Properties > System Variables, где выбрать редактирование системной переменной Path. После этого PHP станет доступен из командной строки в любом месте файловой системы.

Структура файлов и каталогов дистрибутива PHP7 для Windows

PHP 7 package structure с комментариями к файлам:

Общие замечания по установке PHP

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

Выделяют три направления использования PHP

  • Веб-сайты и веб-приложения, где PHP используется как язык сценариев на стороне сервера для генерации динамического web содержимого;
  • Командная строка сценариев, где PHP вызывается через командную строку (CLI) и выполняет различные сценарии, как на локальном компьютере, так и на сервере;
  • Desktop (GUI) приложения, где PHP используется для создания оконных приложений.

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

Подключение PHP к WEB серверу

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

PHP как SAPI или ISAPI модуль WEB сервера

В качестве собственного PHP модуля SAPI (Server Application Programming Interface) или ISAPI (Internet Server Application Programming Interface) для различных WEB серверов, которые представляет собой интерфейс прикладного программирования (API), расширявший возможности веб-сервера в части взаимодействия с PHP. Это подход реализуется через прямой SAPI/ISAPI модуль самого WEB сервера, который поставляется с PHP или с WEB сервером и реализует взаимодействие между веб-сервером и языком программирования PHP напрямую. Использование прямого модуля для конкретного web сервера является самым эффективным и высокопроизводительным (при большом количестве запросов) способом взаимодействия между web сервером и PHP. Такие SAPI модуля имеются для WEB серверов: Apache, Microsoft Internet Information Server, Netscape и IPlanet. Многие другие серверы имеют поддержку ISAPI, например, OmniHTTPd. Для Apache работа с PHP через SAPI модуль, из-за длительного их совместного сотрудничества, является самым распространенным и эффективным решением. В данную сборку PHP php-7.1.0-Win32-VC14-x64 для Windows уже включен модуль SAPI для Apache с названием файла php7apache2_4.dll. Несмотря на удобство и скорость работы такой подход имеет и свои недостатки. Например, запуск php скриптов от имени web сервера, а не от имени пользователя владельца файла. Но для Apache в Ubuntu этот недостаток можно устранить использованием пакета libapache2-mpm-itk (multiuser module for Apache). Это дополнительный модуль для Apache, который есть в universe репозиториях Ubuntu и он позволяет Apache запускать PHP скрипты от имени владельца файла.

PHP как внешнее FastCGI/CGI приложение

FastCGI (Fast Common Gateway Interface) и CGI (Common Gateway Interface — общий интерфейс шлюза ) интерфейсы — это второй вариант взаимодействия между WEB сервером и PHP. FastCGI это клиент серверный протокол взаимодействия веб сервера и приложения, который является продолжением развития технологии CGI. Этот протокол предоставляет общий и универсальный способ взаимодействия PHP с любым WEB сервером, и в новой версии не уступает по скорости прямому модулю SAPI. Для некоторых серверов, например, IIS, FastCGI значительно более стабилен и может быть быстрее, чем модуль ISAPI. Если PHP не имеет модуль поддержки для вашего веб сервера, то вы всегда можете использовать PHP через FastCGI или CGI интерфейсы. Для использования PHP с web сервером через FastCGI/CGI понадобиться настроить веб сервер на обработку запросов через файл-обработчик php-cgi.exe, который входит и в дистрибутив PHP для Windows. Использование FastCGI имеет много преимуществ и является более экономичным и безопасным подходом в отношении прав доступа и возникновения ошибок в работе скриптов. Единственным, незначительным и относительным недостатком для FastCGI является то, что он может уступать в скорости, при большом количестве запросов, по сравнению с SAPI модулем Apache. Для других же web серверов FastCGI может быть даже более лучшим выбором.

ШАГ 3 создание php.ini

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

  • Если PHP вызывается и работает как SAPIмодульWEBсервера, то файл php.iniчитается только один раз, когда WEB сервер стартует. И пока WEB сервер работает, файл php.ini больше не перечитывается. Поэтому, если PHP у вас работает как модуль сервера, не забывайте пере запускать web сервер после внесения изменений в php.ini;
  • Если же PHP работает как внешнее CGI или CLI приложение через FastCGI/CGI или CLI, то файл php.iniперечитывается заново при каждом вызове и обращению к PHP.

php.ini

При инсталяции PHP на Windows, в основном, используют для конфигурации PHP один конфиг файл с именем php.ini , который располагают в каталоге установки PHP. Однако, нужно так же понимать, что одна инсталляция PHP может одновременно использоваться и как SAPI модуль веб сервера и как внешнее FastCGI/CGI или CLI приложение. Для таких случаев, многоцелевого использования PHP, можно задать разные файлы конфигурации PHP как по имени (php.ini или php-SAPI.ini), расположению, так и по их количеству. Например, для SAPI модуля веб сервера, можно сделать отдельный php.ini файл (название файла может быть и вида php-SAPI.ini, см. ниже) и разместить его в каталоге web сервера или сайта, указав PHPIniDir директиву для Apache. Тогда, при вызове PHP через SAPI модуль Apache, будет использоваться этот конфиг, а при вызове PHP через FastCGI/CGI или CLI будет использоваться другой конфиг, например, php.ini из каталога инсталяции PHP.

php.ini и php-SAPI.ini

Имя файла конфигурации php.ini используется в PHP на Windows по умолчанию. Именно конфиг с именем php.ini PHP будет искать, если отсутствуют другие варианты. Однако, можно использовать другое имя файла конфигурации PHP, задав его в формате php-SAPI.ini, где часть SAPI это имя вызывающего PHP модуля или интерфейса. Это имя модуля/интерфейса можно узнать при помощи PHP функции php_sapi_name() , которая вернет строку с именем вызвавшего PHP модуля или интерфейса. Могут быть значения вида: apache, apache2filter, apache2handler, cgi-fcgi, cli, cli-server и т.п. Соответственно, узнав имя вызывающего PHP модуля или интерфейса для конкретного варианта использования PHP, вы можете создать для него отдельный конфиг, например, php-cli.ini, php-apache.ini. Тогда, при вызове PHP через этот модуль или интерфейс, PHP будет сначала использовать соответствующий ему конфиг, если он существует. Если такого файла нет в указанных искомых расположениях, то будет использоваться php.ini имя файла конфига. Иными словами, PHP сначала всегда пытается найти и использовать конфиг с именем, соответствующий вызывающему модулю или интерфейсу, и только при отсутствии такового, использует конфиг с именем php.ini.

Читайте также:  Realtek dolby drivers windows 10

.user.ini

С версии PHP 5.3.0 добавлена поддержка PHP INI файлов .user.ini уровня каталога, по аналогии с .htaccess конфигами в Apache. Эти файлы ищутся и применяются только для CGI/FastCGI вызова PHP, когда, помимо основного php.ini файла, PHP дополнительно ищет INI файлы в каждой директории, начиная с директории вызываемого PHP файла и далее по каталогам в верх до корневой директории из $_SERVER[‘DOCUMENT_ROOT’]. Если запрошенный PHP файл находится вне корневой директории, то сканируется только директория этого запрошенного файла. В таких, .user.ini PHP конфигах, уровня директории, могут применяться только PHP директивы режимов PHP_INI_PERDIR и PHP_INI_USER (см. описание режимов ниже).

PHP директивы user_ini.filename и user_ini.cache_ttl настраивают использование этих конфигов уровня директории:

  • user_ini.filename — задет имя файла, который PHP будет искать в каждой директории. Если значение директивы пустая строка, то поиск файла не производится. По умолчанию значение user_ini.filename = «.user.ini». Если нужно, чтобы PHPне выполнял поиск INI файла в директориях, то установите эту директиву как user_ini.filename =
  • user_ini.cache_ttl — задет частоту обновления пользовательского INI файла каталога. По умолчанию, директива имеет значение user_ini.cache_ttl = 300, что соответствует 5 минутам.

Последовательность поиска конфига PHP в локализациях

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

PHP на Windows ищет файл(файлы) php.ini и php-SAPI.ini по порядку в следующих локализация:

  • если PHP вызван как SAPI модуль web сервера, то путь к файлу php-SAPI.ini/php.ini будет браться из значения соответствующей директивы конфига web сервера. Для Apache это директива PHPIniDir, в которой задается путь к каталогу с файлом конфигурации PHP;
  • если PHP вызван из CGI и CLI, то путь будет браться из параметра -c опции для CGI и CLI, если такой параметр указан;
  • в системной переменной окружения PHPRC. Для Apache, при работе PHP как CGI, ее можно задать директивой SetEnvPHPRC. Что бы создать эту переменную для операционной системы и добавить в нее путь к каталогу с конфигом PHP в Windows нужно зайти в Start ->Settings ->Control Panel ->System, перейти в вкладку Advanced, и нажать кнопку ‘Environment Variables’ и перейти в ‘System variables’панель, где выбрать создать ‘New’ переменную, и задать для нее имя PHPRC и значение пути до каталога с файлом php.ini, например, C:\php, сохранить и перезагрузить систему. Этот вариант позволяет указать каталог расположения дефолтовогоphp-SAPI.ini и php.ini файлов конфигурации PHP. Обычно, это каталог инсталяции PHP на Windows.
  • в ключах реестра KEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath и других;
  • в текущей рабочей директории, кроме вызова через CLI
  • в директории web сервера (для варианта вызова через SAPI модуль) или в директории инсталяции PHP для вариантов вызова через CGI, CLI, GUI. Это, как раз и есть, наиболее распространенный вариант расположения конфигов PHP.
  • в директории C:\windows

Создание php.ini

Учитывая вышеописанную логику поиска имени и расположения конфигов PHP, получается, что самым простым будет использование файла конфигурации с именем php.ini, который будет располагаться в каталоге инсталяции PHP на Windows. При таком подходе PHP будет использовать одни конфиг php.ini в дефолтовом расположении для всех вариантов вызова. Соответственно, нужно будет указать только путь к инсталяции PHP в директиве PHPIniDir WEB сервера Apache, для случая запуска PHP через его модуль. Так же, нужно убедиться, что Apache имеет права на чтение файла php.ini. Других настроек для указания пути к конфигу PHP в этом варианте не потребуется.

Файл php.ini можно создать на основе файлов примеров php.ini-development и php.ini-production, входящих в дистрибутив PHP для Windows. Более предпочтительнее использовать файл php.ini-production, т.к. он имеет оптимизированные настройки по умолчанию для лучшей производительности и безопасности, и PHP будет прекрасно работать с этими настройками. Создайте из этого файла (php.ini-production) копированием и переименованием свой php.ini конфиг в каталоге вашей инсталляции PHP. Для примеров этой статьи и скринкаста путь для php.ini будет как «Z:\WebDevelopment\PHP\php.ini«.

Рекомендуется прочесть php.ini файл, так как он хорошо комментирован. Обратите внимание, что в этом файле директивы display_errors и magic_quotes_gpc выключены (off). В секции Windows extensions файла php.ini можно настроить загрузку модулей PHP, с которыми вы хотите запускать PHP. По умолчанию, для модулей PHP на Windows задан extension_dir = «ext» каталог. Нужно заметить, что модуля PHP можно подключать и загружать не только через конфигурационный файл php.ini, но и динамически в скриптах, по ходу их исполнения при помощи PHP функции dl() . Для этого функция dl() должна быть разрешена в php.ini (по умолчанию enable_dl = Off). В php.ini-production уже оптимально настроены необходимые модуля и поэтому, в начале, лучше проверить работу PHP с этими дефолтовыми настройками. Если PHP будет работать нормально с этими настройками по умолчанию, то уже можно будет выполнять активацию других, необходимых вам дополнительных модулей и директив. Лучше это делать по шагам, выполняя проверку работы PHP после каждого изменения блока настроек, что бы иметь возможность быстро найти причину, если PHP не запуститься или будет работать не корректно. Если вам приходится постоянно выполнять много изменений в конфигурационных файлах (не только PHP, но и других), то можно порекомендовать создать для конфигов отдельный репозиторий GIT, что бы было удобно отслеживать и протоколировать все изменения. Это очень хорошая практика и часто используется на продуктивных серверах.

Способы изменения конфигурации PHP

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

Режимы директив PHP

  • PHP_INI_USER — директива может быть установлена только в пользовательских php скриптах при помощи функции ini_set(), в пользовательском .user.ini;
  • PHP_INI_PERDIR — директива может быть установлена только в php.ini(главный конфиг), httpd.conf и/или .htaccess;
  • PHP_INI_SYSTEM — директива может быть установлена только в php.ini и/или httpd.conf;
  • PHP_INI_ALL — директива может быть задана в любом месте

Конфигурационные директивы PHP можно задать и /или изменить в:

  • в главномphp.ini файле для данного вызова PHP;
  • в php-SAPI.ini файле для соответствующего вызывающего модуля SAPI;
  • в локальном файле .user.ini каталога (только для CGI/FastCGI SAPI);
  • в php скриптах при их выполнении (ini_set());
  • в конфигах Apache (httpd.conf, .htaccess);

ini_set() — настройка PHP в скриптах

Функция PHP ini_set() позволяет выполнять установку и/или изменение значений конфигурационных директив PHP с режимом PHP_INI_USER в php скриптах при их исполнении. Заданная при помощи этой функции настройка будет жить только пока исполняется сделавший ее PHP скрипт. По завершению работы скрипта настройка будет восстановлена к исходному состоянию.

Настройка PHP в конфигах Apache

Когда PHP используется как SAPI модуль Apache возможно выполнять изменение настроек PHP не только через php.ini файлы и php скрипты, но и напрямую в конфигурационных файлах Apache разного уровня — httpd.conf, httpd-vhosts.conf, .htaccess и т.д. В конфигах Apache могут быть установлены таким образом только директивы PHP, соответствующие режимам PHP_INI_ALL, PHP_INI_PERDIR и PHP_INI_SYSTEM.

  • php_valuenamevalue — позволяет установить значение(кромеtrue/false) для директивы PHP уровня/режима PHP_INI_ALL и PHP_INI_PERDIR. Для сброса значения ставят none;
  • php_flagnameon|off — позволяет установить логическое значение для директивы PHP уровня PHP_INI_ALL и PHP_INI_PERDIR;
  • php_admin_valuenamevalue — позволяет установить значение(кромеtrue/false) для директивы PHP уровня PHP_INI_ALL и PHP_INI_PERDIR. Для сброса значения ставят none. Директива не допустима в .htaccess (игнорируется) и, будучи ранее установленной, не может быть переопределена в .htaccess или в ini_set() функции php скрипта;
  • php_admin_flagnameon|off — позволяет установить логическое значение для директивы PHP уровня PHP_INI_ALL и PHP_INI_PERDIR. Директива не допустима в .htaccess (игнорируется) и, будучи ранее установленной, не может быть переопределена в .htaccess или в ini_set() функции php скрипта.

Пример настроек PHP в конфиге виртуального хоста Apache.

В примере использованы директивы Apache php_admin_value и php_admin_flag, следовательно, сделанные через них настройки PHP не могут быть изменены пользователем в .htaccess или в ini_set(). Таким образом, администратор сервера может повысить безопасность сайта и не опасаться, что настройки, сделанные им для виртуального хоста будет переопределены на уровне каталога сайта его пользователем.

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

ШАГ 4 CLI вызов PHP

После развертывания дистрибутива PHP, создания php.ini файла и указания пути к инсталяции PHP в системной переменной PATH, установка PHP на Windows считаться выполненной. Теперь можно использовать PHP через CLI, обратившись к бинарнику php.exe (CLI исполняемый файл для вызова PHP только из командной строки) в командной строке.

Пример CLI вызова PHP в командной строке Windows

В примере ниже продемонстрирован CLI вызов PHP и выполнение команды >php —help, которая выводит краткий help по использованию PHP через CLI. Если вы прописали в системной переменой PATH путь до инсталяции PHP, как было указано выше, то вы можете открыть командную строку в любом месте файловой системы и обращаться к PHP. Если же у вас не задан в PATH путь до инсталяции PHP, то командную строку необходимо открыть в каталоге с инсталляцией PHP, где расположен файл php.exe или добавить тогда этот путь в команду вызова PHP.

Примеры в статье и скринкасте приводятся с учетом того, что в PATH уже прописан путь до каталога инсталяции PHP.

Как видно, даже из этой краткой справки, PHP предоставляет большой набор команд для работы через CLI. Наибольший практический интерес предоставляет команда:

которая позволяет запустить встроенный в PHP WEB сервер.

Этот встроенный в PHP WEB сервер можно успешно использовать для разработки и тестирования PHP скриптов и сайтов на PHP. Работа с ним будет похожа на использование WEB сервера в Node.js. Можно запустить несколько экземпляров встроенного в PHP веб сервера для разных каталогов/сайтов, задав каждому свое сочетание хост:порт. Каждый, запущенный экземпляр, будет обслуживать свой каталог/сайт, для которого он был запущен (см. пример ниже). Несмотря на простоту и удобство встроенного в PHP WEB сервера его, все же, не рекомендуют использовать для Production эксплуатации сайтов, а использовать для этих целей специализированные WEB сервера, например, Apache. Также, если вы используете в каталогах сайта файлы конфигурации Apache .htaccess, то при работе со встроенным в PHP веб сервером нужно понимать, что конфигурационные директивы Apache из этих файлов и из файлов виртуальных хостов не будут работать.

Пример запуска встроенного PHP web сервера для сайта и каталога Z:\WebDevelopment\Projects\Site1 на localhost:80

Сообщения в командной строке при обращении в браузере по адресу localhost

Как видите, внешне, запуск и работа встроенного в PHP WEB сервера очень похожа на работу встроенного в Node.js сервера. Выбираем каталог с сайтом и запускаем PHP веб сервер на нужном хосте (не забываем в файле C:\WINDOWS\system32\drivers\etc\hosts прописать этот хост) и порту. Наблюдаем сообщения в командной строке от PHP WEB сервера. Смотрите так же демонстрацию работы встроенного в PHP веб сервера в скринкасте к этой статье.

ШАГ 5 настройка работы PHP с web сервером Apache2.4 на Windows

Для работы PHP с веб сервером необходимо будет выполнить уже дополнительные настройки в конфигурации самого WEB сервера, которые описаны ниже. В примерах этой статьи и скринкаста мною будет выполняться настройка PHP для работы с WEB сервером Apache 2.4.23 x64 от Apache Haus, инсталляция которого описана скринкасте и статье: Установка Apache на Windows.

Настройка Apache2.4 для работы с PHP

Как уже было описано выше, PHP может работать с web сервером Apache как через SAPI Apache модуль DLL (php7apache2_4.dll), так и через CGI/FastCGI бинарник PHP (php-cgi.exe). Но в любом случае необходимо будет сделать соответствующие настройки в httpd.conf файле веб сервера, и перезапустить сервер. Не забываете перезапускать Apache после правок файлов его конфигурации и конфигов PHP, если php вызывается как модуль Apache.

В данном дистрибутиве PHP от php.net имеется файл php7apache2_4.dll из сборки Apache от Apache Lounge (см. выше). Этот файл, собственно, и является SAPI модулем WEB сервера Apache и обеспечивает взаимодействие между веб сервером и PHP. Данный модуль php7apache2_4.dll будет так же корректно работать и с дистрибутивом Apache 2.4.23 x64 от Apache Haus, сборка которого используется в моих примерах. Нужно сказать, что этот SAPI модуль DLL работает достаточно стабильно на Windows и обеспечивает хорошую безопасность в сравнении с CGI.

PHP как Apache модуль

Для того, что бы указать Apache на использование SAPI модуля PHP для вызова и обработки всех .php файлов, необходимо в главном конфигурационном файле WEB сервера Apache httpd.conf дописать нижеследующие строки, которые можно разместить, например, поле блока директив подключения модулей Apache.

где:

  • LoadModule директива загружает SAPI модуль Apache, через который и будет вызываться PHP;
  • AddType директива ассоциирует указанный ( application/x-httpd-php ) MIME тип с файлами расширения .php;
  • PHPIniDir определяет путь, где располагаются конфигурационные файлы php.ini или php-SAPI.ini при работе PHP как модуля Apache. Обычно это директория инсталяции PHP. Apache должен иметь доступ на чтение php.ini файла;
  • пути в директивах должны иметь прямые слеши и не содержать пробелов. Желательно использовать только EN символы и цифры.

PHP как FastCGI/CGI с Apache

Что бы настроить Apache для работы с PHP через FastCGI/CGI необходимо добавить в httpd.conf настройки, разрешающие выполнение CGI программ.

Apache предоставляет несколько вариантов настройки внешних CGI обработчиков:

  • директива Action модуля mod_actions, которая напрямую активирует исполнение скрипта как внешней CGI программы и позволяет назначить MIME типу CGI обработчик;
  • директивы AddHandler или SetHandler, которые позволяют установить обработчик для файлов с расширениями, которые планируются обрабатываться как CGI программа. Затем, этому обработчику нужно будет директивой Action назначить CGI исполняемый файл бинарник php-cgi.exe. Так же, директива Options+ExecCGI позволяет разрешить выполнения CGI программ в указанном каталоге;
  • ScriptAlias директива, которая позволяет связать URL с каталогом файловой системы и назначить исполнение запрошенного файла как CGI программы. Эта директива используется в сочетании с другими директивами;
  • сочетание нескольких директив и подходов позволяет в Apache выполнить и более сложную, комбинированную на разных уровнях конфигурации (глобальном, сайта, каталога) настройку для CGI, когда только часть сайтов (виртуальных хостов) или отдельных каталогов будут обрабатываться через CGI, а остальные скрипты будут вызваться через SAPI модуль PHP. Но любом случае, всегда нужно будет задать через директиву AddTypeMIME тип или через директивы AddHandler, SetHandler обработчик, ассоциированный с файлами расширений, которые будут обрабатываться через CGI/FastCGI и назначить этому MIME типу/обработчику директивой Action файл-бинарник php-cgi.exe.
Читайте также:  Linux шлюз что это

Чтобы настроить Apache для обработки всех PHP файлов через FastCGI/CGI интерфейсы необходимо в httpd.conf конфиге Apache добавить нижеследующие строки:

где:

  • AddType директива связывает указанный MIME тип с файлами расширения .php;
  • Action директива задет внешний CGI обработчик для MIME типа ассоциированного с .php файлами;
  • SetEnv директива задает переменную окружения PHPRC, в значении которой указывается путь к каталогу инсталяции PHP. В примере это «Z:/WebDevelopment/PHP»

После этой настройки Apache будет все PHP файлы обрабатывать как внешние CGI программы через FastCGI/CGI бинарник php-cgi.exe.

ШАГ 6 настройка виртуального хоста Apache

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

Об установки других компонентов Win+AMP сборки написано в статьях:

Создание и настройка виртуального хоста Apache2.4

Все примеры статьи и скринкаста по настройке виртуального хоста будут приведены для сборки Apache 2.4.23 x64 от Apache Haus, инсталляция которого описана в статье: Установка Apache на Windows,

где:

  • Z:\WebDevelopment\Apache24 это ServerRoot — домашний каталог Apache2.4;
  • Z:\WebDevelopment\Apache24\conf\httpd.conf — главный конфиг данной инсталяции Apache2.4;
  • Z:\WebDevelopment\Apache24\conf\extra\httpd-vhosts.conf — конфиг для настройки виртуальных хостов в Apache2.4 на Windows.

Файл hosts

Файл hosts — это обычный текстовый локальный файл без расширения, в котором настраивается соответствие доменных имен сетевым IP адресам узлов. Таким образом, файл hosts — это простой вариант локального DNS и запрос к этому файлу выполняется в первую очередь, а запрос к внешним DNS серверам выполняется уже во вторую очередь.

В примере статьи и скринкаста виртуальный хост будет настраиваться для сайта из каталога «Z:\WebDevelopment\Projects\Site1» и тестового домена text.ru для этого сайта. Для того, чтобы браузер на вашем компьютере открывал этот локальный сайт по доменному имени text.ru необходимо в файл C:\WINDOWS\system32\drivers\etc\hosts добавить соответствующий этому домену IP адрес как 127.0.0.1 — локальных хост.

Файл httpd-vhosts.conf

В Apache2.4 настройка конфигурации виртуальных хостов вынесена в отдельный файл конфигурации: conf\extra\httpd-vhosts.conf относительно домашней директории веб сервера. Это сделано для удобства, чтобы не писать все в главном конфиге Apache2.4. Поэтому принято логически связанные блоки конфигурации веб сервера выносить в отдельные специализированные файлы конфигурации (смотри обзор конфигурации Apache в Ubuntu), которые подключаются в главном конфиге Apache при помощи директивы Include. Следуя этой логике, конфигурация виртуальных хостов вынесена в отдельный файл с именем conf\extra\httpd-vhosts.conf, а в главном конфиге Apache в секции с комментарием «Virtual hosts» выполнено подключение этого конфига:

Найдите в главном конфиге Apache conf\httpd.conf приведенный выше блок кода и убедитесь, что директива Include для httpd-vhosts.conf файла не закомментирована. По умолчанию она закомментирована, поэтому раскомментируйте ее для того, чтобы при старте Apache файл с конфигурацией виртуальных хостов был прочитан и добавлен в конфигурацию веб сервера.

директива Apache

Для создания и управления виртуальными хотами в Apache используется директива . , которая создает контейнер для директив, применимых только к указанному в VirtualHost hostname или IP адресу. Это позволяет на одном компьютере для одного и того же IP/hostname назначить разные сайты, разделив их по значению директивы ServerName, указав в ней разные доменные имена сайтов для разных виртуальных хостов.

Общий вид директивы :

В открывающем теге директивы VirtualHost addr [ :port ] [ addr [ :port ]] . > можно указать:

  • IP адрес, с которым будет ассоциирован данный виртуальный хост. Это IP одного из сетевых интерфейсов данного сервера/компьютера. Например, будет применяться к локальному сетевому интерфейсу (сетевому адаптеру) данного сервера;
  • FQDN (Fully Qualified Domain Name) — полное доменное имя одного из сетевых интерфейсов данного сервера/компьютера вместо его IP адреса, с которым будет ассоциирован данный виртуальный хост. Например, . Здесь нужно понимать, что указанный домен должен быть связан с IP адресом одного из сетевых интерфейсов данного сервера/компьютера. Однако, предпочтительно все же указывать именноIP адрес, а не доменное имя, т.к. при указании доменного имени Apache должен будет все равно определить его IP, а это требует уверенности, что все настройки DNS сделаны правильно. Также расходуется время на дополнительную операцию по получению IP адреса для доменного имени. Поэтому, при настройках, обычно предпочитают указывать именно IP адрес;
  • можно, опционально, указать порт для адреса, например ;
  • можно указать несколько addr [ :port ] [ addr [ :port ]] значений, например, ;
  • можно использовать для задания IPадреса символ подстановки *звездочку, которая будет означать любое значение. Звездочкой можно заменять толькоIPадрес. Например, будет применен для всех IP интерфейсов данного сервера;
  • вместо * звездочки можно использовать строку _default_, которая, в данном случае, является алиасом звездочки. Например, будет равносильно .

После того, как выполнено подключения конфига виртуальных хостов в главном конфиге Apache, необходимо открыть файл conf\extra\httpd-vhosts.conf на редактирование, перейти в его конец и добавить новый блок кода для нужного виртуального хоста (в примере для test.ru). Для подсказки можно пользоваться приведенными в конце этого файла закомментированными заготовками кода для создания виртуальных хостов.

VirtualHost _default_

Обязательно первым, в списке виртуальных хостов, должен быть указан виртуальный хост по умолчанию как: или . Это связано с тем, что если Apache не найдет виртуального хоста, сопоставимого по параметру ServerName с доменом URL запроса, то в этом случае Apache отдаст первый из списка виртуальный хост. Поэтому позаботьтесь, чтобы первый, в списке виртуальных хостов, хост был правильно настроен и отдавал нужную вам страницу. Именно поэтому первым всегда записывают, так называемый, дефолтовый хост. Если настройка виртуальных хостов вынесена в отдельные файлы, где для каждого виртуального хоста имеется свой конфигурационный файл, то Apache будет читать эти файлы согласно порядку их подключения в своем главном конфиге. И если подключение выполнено через подключение директории с конфигами виртуальных хостов, то Apache будет читать эти конфиги виртуальных хостов согласно алфавитному порядку файлов в директории. Поэтому, всегда нужно обращать внимание, в какой последовательности Apache прочитает конфигурацию виртуальных хостов, т.к. если он не найдет для запроса соответствующего виртуального хоста, то он отдаст первый прочитанный виртуальный хост. Поэтому, если подключают конфиги виртуальных хостов сразу целой директорией, то в этой директории создают файл с именем 000-default-vhosts.conf, в котором задают виртуальный хост по умолчанию. Имя файла специально начинается с 000, что бы этот файл был первым в алфавитном порядке, и соответственно был первым прочитан Apache.

Блок кода из файла httpd-vhosts.conf, где продемонстрирована простая, минимальная, начальная настройка виртуальных хостов для сайта test.ru из примера статьи и скринкаста:

Команды проверки конфигурации виртуальных хостов Apache

Для проверки конфигурации виртуальных хостов Apache предоставляет специальные команды, которые выводят в терминале информацию о том, как Apache обработал файл конфигурации виртуальных хостов.

Для Linux
Для Windows

Теперь, после настроек виртуальных хостов (дефолтового и test.ru) и добавления домена test.ru в hosts файл можно запустить Apache и обратиться в браузере к сайту примера из каталога Z:\WebDevelopment\Projects\Site1 по URL http://test.ru или http://test.ru/index.php.

Использование несколько версий PHP

Если вам требуется использовать несколько версий PHP, обслуживаемых одним web сервером Apache, то вам необходимо выполнить установку в систему как описано выше нескольких, нужных вам версий PHP, например PHP 7.2 и PHP 5.6, использовав для каждой из версий свой каталог. После этого вы можете в конфигурационном файле вашего Apache указать подключение нужной версии PHP. Тогда для смены версии PHP вам нужно будет остановить web сервер Apache, открыть его конфиг и сделать правки подключения PHP указав путь к нужной вам в данный момент версии PHP. Можно для этого заранее сделать в конфиге Apache заготовленные блоки подключения для каждой версии PHP, но держать их закомментированными, а активной только один блок, используемый в данный момент. Это будет такой простой ручной особ смены версий PHP.

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

После этого нужно созданные службы настроить так, что бы автостарт был только у одной, или вообще, что бы все службы имели только ручной запуск, что бы не получить ситуацию, когда система будет пытаться запустить одновременно несколько служб Apache с разными конфигами и получится конфликт. В данный момент времени должна быть запущена только одна служба Apache. Детали по настройке Apache как службы Windows смотрите в статье: Установка Apache на Windows.

ШАГ 7 FTP EMAIL

На этом установку PHP на Windows и базовую настройку Apache для запуска PHP скриптов можно считать законченной. Все описанное ниже является не обязательным и приведено в качестве дополнения. Можно добавить MySQL, GULP, FTP и EMAIL, что бы получить полноценный разработческий WAMP сервер на Windows. Ссылки на установку MySQL и GULP были приведены выше.

EMAIL

В качестве тестового EMAIL сервера для перехвата email сообщений, отправленных из PHP, можно порекомендовать старенький инструмент от набора Denwer, который представляет собой заглушку-эмулятор sendmail сервера. Этот инструмент слушает 25 порт и перехватывает email сообщения отправленные из PHP, и складывает их в локальный каталог, который настроен в конфиге скрипта. Это позволит вам локально выполнять тестирование отправки почты из PHP.

Структура каталогов инструмента из набора Denwer для перехвата email из PHP:

FTP сервер для Windows

Если необходимо работать в PHP с функциями FTP, то тогда нужно установить дополнительно FTP сервер. Для разработки и тестирования в качестве FTP сервера для Windows можно порекомендовать: «Baby FTP Server» .

Дополнения и инструменты PHP

deplister.exe

В составе данной сборки PHP7 присутствует утилита командной строки с именем файла deplister.exe. Эта утилита предназначена для определения зависимостей модулей PHP. Если вызвать эту утилиту в командной строке и передать ей в виде аргумента файл модуля PHP, то будет выдан список файлов-зависимостей для этого модуля и результат проверки их на соответствие этому модулю. Таки образом, данная утилита может быть полезна для поиска проблем в работе подключаемых модулей PHP. Обычно, для модулей поставляемых в составе одной сборки PHP проблем не возникает, но они могут быть при добавлении отдельно скачанных модулей PHP. Здесь эта утилита может и пригодиться.

Пример работы утилиты deplister.exe для модуля PHP:

Отладчик phpdbg

В состав дистрибутива PHP включен файл phpdbg.exe и php7phpdbg.dll, который является легким, мощным, простым в использовании интерактивным отладчиком для PHP скриптов. Будучи реализованным и как модуль SAPI (php7phpdbg.dll), phpdbg может осуществлять полный контроль над окружением, не оказывая влияния на функциональность и производительность PHP кода.

Отладчик phpdbg предоставляет следующие возможности для отладки PHP скриптов:

  • Пошаговая отладка;
  • Гибкое размещение точек останова в методах класса, в функциях, в строках файла, Address, Opcode;
  • Легкий доступ к PHP со встроенным Eval ();
  • Легкий доступ к выполняемому в данный момент коду;
  • Userland API;
  • SAPI Agnostic — Легко Интегрированный;
  • Поддержка файлов PHP конфигурации;
  • JIT Super Globals — установить свой собственный;
  • Optional readline Support — удобно в терминале;
  • Remote Debugging Support — GUI Java;
  • Простое управление отладчиком

PECL extensions

PHP дистрибутив содержит основные необходимые расширения PHP. Однако, может возникнуть потребность установить дополнительные расширения и модули, отсутствующие в данном дистрибутиве. Для расширений PHP существует PECL репозиторий , доступный через PEAR пакетный менеджер и напрямую, в браузере. Поэтому, дополнительные модули и библиотеки PHP под Windows можно скачать на php.net и pecl.php.net, где можно найти скомпилированные бинарники нужной библиотеки как .dll файла. Скачанную библиотеку или модуль нужно поместить в директорию для расширений PHP на Windows (PHP/ext). Затем, добавленное расширение нужно подключить в файле php.ini как extension=php_extname.dll и перезапустить WEB сервер для вступления изменений с силу.

Скринкаст: Установка PHP7 на Windows

В скринкасте продемонстрирована инсталляция и настройка PHP 7.1.0 php-7.1.0-Win32-VC14-x64 на Windows7, интеграция с Apache. Показы все основные шаги — выбор сборки дистрибутива PHP, размещение PHP в Windows7, обзор состава дистрибутива PHP, настройка PHP, работа с PHP из командной строки, использование встроенного в PHP WEB сервера, настройка работы PHP как модуля Apache, настройка виртуального хоста в Apache. Дополнительно даны примеры и ссылки по самостоятельной организации WinAMP сборки. В конце добавлена информация о новшествах PHP7 и перспективах развития языка PHP.

Оцените статью