HTML Diff
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>