1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Запуск PHP-сервера</a><ul><li><a>CLI _server: проверка использования</a></li>
1
<ul><li><a>Запуск PHP-сервера</a><ul><li><a>CLI _server: проверка использования</a></li>
2
<li><a>Поддержка неподдерживаемых файловых типов</a></li>
2
<li><a>Поддержка неподдерживаемых файловых типов</a></li>
3
<li><a>Доступ с удаленных машин</a></li>
3
<li><a>Доступ с удаленных машин</a></li>
4
</ul></li>
4
</ul></li>
5
<li><a>Apache HTTP _Server</a></li>
5
<li><a>Apache HTTP _Server</a></li>
6
</ul><p>Начиная с версии 5.4.0, язык программирования<strong>PHP</strong>содержит встроенный веб-сервер (server), который находится в модуле <strong>CLI SAPI</strong>. В этой статье мы поговорим, как он работает, настраивается и запускается. Отдельное внимание уделим известному web-серверу<strong>Apache</strong>.</p>
6
</ul><p>Начиная с версии 5.4.0, язык программирования<strong>PHP</strong>содержит встроенный веб-сервер (server), который находится в модуле <strong>CLI SAPI</strong>. В этой статье мы поговорим, как он работает, настраивается и запускается. Отдельное внимание уделим известному web-серверу<strong>Apache</strong>.</p>
7
<p>В языке программирования PHP сервер (_server) выполняет лишь один однопоточный процесс, поэтому если запрос будет заблокирован, программные приложения остановятся, причем запросы URL обслуживаются из текущей директории, где он был запущен (когда не используется опция<em>-t</em>, обеспечивающая явное указание корневого документа). Если URL запроса не указывает на конкретный файл, в указанной директории вернется<em>index.php</em>или<em>index.html</em>. Если же файлы не существуют, их поиск продолжится в родительской директории и т. д., причем до тех пор, пока файлы не будут обнаружены либо не будет достигнут корень документа. Когда обнаружен<em>index.php/index.html</em>, он возвращается, причем в<em>$_SERVER[‘PATH_INFO’]</em>будет последняя часть URL. В обратном случае вернется код<em>404</em>.</p>
7
<p>В языке программирования PHP сервер (_server) выполняет лишь один однопоточный процесс, поэтому если запрос будет заблокирован, программные приложения остановятся, причем запросы URL обслуживаются из текущей директории, где он был запущен (когда не используется опция<em>-t</em>, обеспечивающая явное указание корневого документа). Если URL запроса не указывает на конкретный файл, в указанной директории вернется<em>index.php</em>или<em>index.html</em>. Если же файлы не существуют, их поиск продолжится в родительской директории и т. д., причем до тех пор, пока файлы не будут обнаружены либо не будет достигнут корень документа. Когда обнаружен<em>index.php/index.html</em>, он возвращается, причем в<em>$_SERVER[‘PATH_INFO’]</em>будет последняя часть URL. В обратном случае вернется код<em>404</em>.</p>
8
-
<p>Если в процессе запуска web сервера файл PHP указывается в командной строке, он рассматривается в качестве скрипта "маршрутизации" (как роутер). Этот скрипт выполняется лишь в начале каждого запроса HTTP. Если же скрипт возвращает <em>false</em>, тогда запрашиваемый ресурс возвращается как есть. В обратном случае браузеру вернется вывод скрипта.</p>
8
+
<p>Если в процессе запуска web сервера файл PHP указывается в командной строке, он рассматривается в качестве скрипта "маршрутизации" (как роутер). Этот скрипт выполняется лишь в начале каждого запроса HTTP. Если же скрипт возвращает <em>false</em>, тогда запрашиваем��й ресурс возвращается как есть. В обратном случае браузеру вернется вывод скрипта.</p>
9
<p>Разработчик может настроить встроенный PHP web server таким образом, чтобы он осуществлял разветвление нескольких воркеров в целях проверки кода, требующего нескольких одновременных запросов ко встроенному веб серверу. Для этого, начиная с версии 7.4.0, надо задавать в переменной окружения число требуемых воркеров, делая это перед запуском:</p>
9
<p>Разработчик может настроить встроенный PHP web server таким образом, чтобы он осуществлял разветвление нескольких воркеров в целях проверки кода, требующего нескольких одновременных запросов ко встроенному веб серверу. Для этого, начиная с версии 7.4.0, надо задавать в переменной окружения число требуемых воркеров, делая это перед запуском:</p>
10
<p>Данная функция является экспериментальной. Она не поддерживается в операционной системе Windows и не предназначена для использования в production. Да и вообще, встроенный web_server обычно не предназначен для того, чтобы использовать его в production.</p>
10
<p>Данная функция является экспериментальной. Она не поддерживается в операционной системе Windows и не предназначена для использования в production. Да и вообще, встроенный web_server обычно не предназначен для того, чтобы использовать его в production.</p>
11
<p>Запуск осуществляется следующим образом:</p>
11
<p>Запуск осуществляется следующим образом:</p>
12
<p>$ cd ~/public_html</p>
12
<p>$ cd ~/public_html</p>
13
<p>$ php -S localhost:8000</p>
13
<p>$ php -S localhost:8000</p>
14
<p>В результате в консоли будет приблизительно такой вывод:</p>
14
<p>В результате в консоли будет приблизительно такой вывод:</p>
15
<p>Listening on localhost:8000</p>
15
<p>Listening on localhost:8000</p>
16
<p>Document root is /home/me/public_html</p>
16
<p>Document root is /home/me/public_html</p>
17
<p>Press Ctrl-C to quit</p>
17
<p>Press Ctrl-C to quit</p>
18
<p>После этого пишем URL-запрос:</p>
18
<p>После этого пишем URL-запрос:</p>
19
<p>- http://localhost:8000/;</p>
19
<p>- http://localhost:8000/;</p>
20
<p>- http://localhost:8000/myscript.html.</p>
20
<p>- http://localhost:8000/myscript.html.</p>
21
<p>По итогу в консоли будет выведено примерно следующее:</p>
21
<p>По итогу в консоли будет выведено примерно следующее:</p>
22
<p>Можно отметить, что до версии 7.4.0 статические ресурсы с символическими ссылками в операционной системе "Виндовс" доступны не были.</p>
22
<p>Можно отметить, что до версии 7.4.0 статические ресурсы с символическими ссылками в операционной системе "Виндовс" доступны не были.</p>
23
<p>Теперь давайте выполним запуск, указав корневую директорию:</p>
23
<p>Теперь давайте выполним запуск, указав корневую директорию:</p>
24
<p>$ cd ~/public_html</p>
24
<p>$ cd ~/public_html</p>
25
<p>$ php -S localhost:8000 -t foo/</p>
25
<p>$ php -S localhost:8000 -t foo/</p>
26
<p>Вывод в консоли:</p>
26
<p>Вывод в консоли:</p>
27
<p>В примере ниже используется скрипт маршрутизации. Запросы изображений будут их отображать, однако запросы файлов HTML вернут строку "Добро пожаловать".</p>
27
<p>В примере ниже используется скрипт маршрутизации. Запросы изображений будут их отображать, однако запросы файлов HTML вернут строку "Добро пожаловать".</p>
28
<p>Обратите внимание, что встроенный web _server не должен применяться в общедоступной сети.</p>
28
<p>Обратите внимание, что встроенный web _server не должен применяться в общедоступной сети.</p>
29
<h3>CLI _server: проверка использования</h3>
29
<h3>CLI _server: проверка использования</h3>
30
<p>Чтобы обеспечить совместное использование скрипта маршрутизации при разработке с CLI _server и далее с рабочим (production) web-сервером, применяют следующую команду:</p>
30
<p>Чтобы обеспечить совместное использование скрипта маршрутизации при разработке с CLI _server и далее с рабочим (production) web-сервером, применяют следующую команду:</p>
31
<h3>Поддержка неподдерживаемых файловых типов</h3>
31
<h3>Поддержка неподдерживаемых файловых типов</h3>
32
<p>Если требуется обслуживание статических ресурсов с MIME-типами, не поддерживаемыми web CLI _server, пригодится следующий код:</p>
32
<p>Если требуется обслуживание статических ресурсов с MIME-типами, не поддерживаемыми web CLI _server, пригодится следующий код:</p>
33
<p>$ php -S localhost:8000 router.php</p>
33
<p>$ php -S localhost:8000 router.php</p>
34
<p>Local host - так называемый локальный ("местный") хост, то есть компьютер, на котором запускается программа (ПК в данном случае работает как Virtual _server).</p>
34
<p>Local host - так называемый локальный ("местный") хост, то есть компьютер, на котором запускается программа (ПК в данном случае работает как Virtual _server).</p>
35
<h3>Доступ с удаленных машин</h3>
35
<h3>Доступ с удаленных машин</h3>
36
<p>Также у разработчика есть возможность сделать сервер на PHP доступным для всех сетевых интерфейсов на 8000 порту:</p>
36
<p>Также у разработчика есть возможность сделать сервер на PHP доступным для всех сетевых интерфейсов на 8000 порту:</p>
37
<h2>Apache HTTP _Server</h2>
37
<h2>Apache HTTP _Server</h2>
38
<p>Apache ("Апач") - известный HTTP-сервер, имя которого заимствовано от названия племени североамериканских индейцев. Это кроссплатформенное программное обеспечение, поддерживаемое многими операционными системами:</p>
38
<p>Apache ("Апач") - известный HTTP-сервер, имя которого заимствовано от названия племени североамериканских индейцев. Это кроссплатформенное программное обеспечение, поддерживаемое многими операционными системами:</p>
39
<p>- Linux,</p>
39
<p>- Linux,</p>
40
<p>- Windows,</p>
40
<p>- Windows,</p>
41
<p>- BSD,</p>
41
<p>- BSD,</p>
42
<p>- Mac OS,</p>
42
<p>- Mac OS,</p>
43
<p>- Novell NetWare,</p>
43
<p>- Novell NetWare,</p>
44
<p>- BeOS.</p>
44
<p>- BeOS.</p>
45
<p>Широко известна связка Apache + PHP + MySQL.</p>
45
<p>Широко известна связка Apache + PHP + MySQL.</p>
46
<p>Основные достоинства "Апача" - гибкость конфигурации и надежность. С его помощью можно подключать для предоставления данных внешние модули, применять для аутентификации пользователей СУБД, модифицировать сообщения об ошибках и многое другое. Также Apache-серверы (servers) поддерживает протокол IPv4.</p>
46
<p>Основные достоинства "Апача" - гибкость конфигурации и надежность. С его помощью можно подключать для предоставления данных внешние модули, применять для аутентификации пользователей СУБД, модифицировать сообщения об ошибках и многое другое. Также Apache-серверы (servers) поддерживает протокол IPv4.</p>
47
<p>Одно из преимуществ - интеграция с другим программным обеспечением и языками программирования. Есть много модулей, обеспечивающих веб-серверу Apache поддержку разных систем разработки и языков программирования. Что реализуют в модулях:</p>
47
<p>Одно из преимуществ - интеграция с другим программным обеспечением и языками программирования. Есть много модулей, обеспечивающих веб-серверу Apache поддержку разных систем разработки и языков программирования. Что реализуют в модулях:</p>
48
<p>- поддержку языков программирования;</p>
48
<p>- поддержку языков программирования;</p>
49
<p>- исправление ошибок;</p>
49
<p>- исправление ошибок;</p>
50
<p>- добавление новых функций;</p>
50
<p>- добавление новых функций;</p>
51
<p>- возможность модификации основных фукнций;</p>
51
<p>- возможность модификации основных фукнций;</p>
52
<p>- средства усиления безопасности.</p>
52
<p>- средства усиления безопасности.</p>
53
<p>Раз уж затронули тему безопасности, то тут "Апач" имеет разные механизмы, включая механизм разграничения доступа к данным. Основное:</p>
53
<p>Раз уж затронули тему безопасности, то тут "Апач" имеет разные механизмы, включая механизм разграничения доступа к данным. Основное:</p>
54
<p>- ограничение доступа к некоторым файлам/каталогам;</p>
54
<p>- ограничение доступа к некоторым файлам/каталогам;</p>
55
<p>- механизм авторизации пользователей, обеспечивающий доступ к каталогу на основании HTTP- и digest-аутентификации;</p>
55
<p>- механизм авторизации пользователей, обеспечивающий доступ к каталогу на основании HTTP- и digest-аутентификации;</p>
56
<p>- ограничение доступа к конкретным каталогам либо всему серверу, которое основано на IP-адресах пользователей;</p>
56
<p>- ограничение доступа к конкретным каталогам либо всему серверу, которое основано на IP-адресах пользователей;</p>
57
<p>- запрет доступа к файлам по их типу, что можно распространить как на всех пользователей, так и на некоторую их часть, к примеру, организовав запрет доступа к файлам конфигурации/базы данных.</p>
57
<p>- запрет доступа к файлам по их типу, что можно распространить как на всех пользователей, так и на некоторую их часть, к примеру, организовав запрет доступа к файлам конфигурации/базы данных.</p>
58
<p>Некоторые модули позволяют реализовывать авторизацию с помощью СУБД либо PAM.</p>
58
<p>Некоторые модули позволяют реализовывать авторизацию с помощью СУБД либо PAM.</p>
59
<p>Вдобавок ко всему, "Апачу" не проблема поддерживать механизмы CGI и FastCGI, позволяющие исполнять программы почти на любых языках программирования, включая C/C++, Lua, Java.</p>
59
<p>Вдобавок ко всему, "Апачу" не проблема поддерживать механизмы CGI и FastCGI, позволяющие исполнять программы почти на любых языках программирования, включая C/C++, Lua, Java.</p>
60
<p>Если вас интересует установка и настройка Apache, обратите внимание на дополнительные ссылки ниже, где вы найдете нужную информацию.</p>
60
<p>Если вас интересует установка и настройка Apache, обратите внимание на дополнительные ссылки ниже, где вы найдете нужную информацию.</p>
61
<p><em>Данная статья про</em><em>server</em><em>PHP написана на основании следующих материалов:</em></p>
61
<p><em>Данная статья про</em><em>server</em><em>PHP написана на основании следующих материалов:</em></p>
62
<ul><li><em>Page № 1: https://www.php.net/manual/ru/features.commandline.webserver.php;</em></li>
62
<ul><li><em>Page № 1: https://www.php.net/manual/ru/features.commandline.webserver.php;</em></li>
63
<li><em>Page № 2: https://www.php.net/manual/ru/install.unix.apache2.php.</em></li>
63
<li><em>Page № 2: https://www.php.net/manual/ru/install.unix.apache2.php.</em></li>
64
</ul><p>Хотите знать больше и получить самую современную информацию? Обратите внимание на соответствующий курс в Otus:</p>
64
</ul><p>Хотите знать больше и получить самую современную информацию? Обратите внимание на соответствующий курс в Otus:</p>
65
<a></a>
65
<a></a>