HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Как и многие другие языки PHP сразу поставляется со встроенным веб-сервером. Этот веб-сервер создан для удобства разработки, так как не надо ставить ничего дополнительно. Но он не подходит для продакшен-среды. В последнем случае нужно использовать nginx.</p>
1 <p>Как и многие другие языки PHP сразу поставляется со встроенным веб-сервером. Этот веб-сервер создан для удобства разработки, так как не надо ставить ничего дополнительно. Но он не подходит для продакшен-среды. В последнем случае нужно использовать nginx.</p>
2 <p>С точки зрения организации кодовой базы разработка сайтов мало отличается от разработки обычных программ. Первым делом необходимо создать директорию, внутри которой будет вестись разработка сайта. Затем ее следует добавить в git-репозиторий. Назовем эту директорию корнем проекта.</p>
2 <p>С точки зрения организации кодовой базы разработка сайтов мало отличается от разработки обычных программ. Первым делом необходимо создать директорию, внутри которой будет вестись разработка сайта. Затем ее следует добавить в git-репозиторий. Назовем эту директорию корнем проекта.</p>
3 <p>Если проект учебный, то лучше сразу создать репозиторий на GitHub и выкладывать все эксперименты туда.</p>
3 <p>Если проект учебный, то лучше сразу создать репозиторий на GitHub и выкладывать все эксперименты туда.</p>
4 <p>Затем нужно создать файл<em>index.php</em>и поместить его в корень проекта. По соглашению это главный входной файл в PHP, который автоматически ищется веб-серверами.</p>
4 <p>Затем нужно создать файл<em>index.php</em>и поместить его в корень проекта. По соглашению это главный входной файл в PHP, который автоматически ищется веб-серверами.</p>
5 <p>Создайте такой файл в директории проекта со следующим содержимым:</p>
5 <p>Создайте такой файл в директории проекта со следующим содержимым:</p>
6 <p>Затем запустите веб-сервер, например, на порту 8080:</p>
6 <p>Затем запустите веб-сервер, например, на порту 8080:</p>
7 <p>Когда сервер будет запущен, он полностью забирает управление. Вкладка терминала больше не доступна для ввода команд. В отличие от обычных скриптов, которые выполняют свою задачу и заканчиваются, веб-сервера должны слушать порт непрерывно и сразу реагировать на входящие соединения. Поэтому, когда сервер запустят, он продолжит работать, пока его не остановят.</p>
7 <p>Когда сервер будет запущен, он полностью забирает управление. Вкладка терминала больше не доступна для ввода команд. В отличие от обычных скриптов, которые выполняют свою задачу и заканчиваются, веб-сервера должны слушать порт непрерывно и сразу реагировать на входящие соединения. Поэтому, когда сервер запустят, он продолжит работать, пока его не остановят.</p>
8 <p>Остановить сервер можно с помощью команды Ctrl-C.</p>
8 <p>Остановить сервер можно с помощью команды Ctrl-C.</p>
9 <p>Такой способ запуска удобен в разработке, но в реальном окружении сервера запускают в виде<strong>демонов</strong>. Это процесс операционной системы, работающий в фоне.</p>
9 <p>Такой способ запуска удобен в разработке, но в реальном окружении сервера запускают в виде<strong>демонов</strong>. Это процесс операционной системы, работающий в фоне.</p>
10 <p>Если в это время попытаться запустить еще один веб-сервер в соседней вкладке на том же порту, то запуск завершится с такой ошибкой:</p>
10 <p>Если в это время попытаться запустить еще один веб-сервер в соседней вкладке на том же порту, то запуск завершится с такой ошибкой:</p>
11 <blockquote><p>Failed to listen on localhost</p>
11 <blockquote><p>Failed to listen on localhost</p>
12 (reason: Address already in use)</blockquote><p>Программисты часто встречаются с этой ошибкой. Она означает, что какой-то процесс занял соответствующий порт - в данном случае 8080. В такой ситуации нужно либо остановить процесс, который мешает, либо стартовать на другом порту.</p>
12 (reason: Address already in use)</blockquote><p>Программисты часто встречаются с этой ошибкой. Она означает, что какой-то процесс занял соответствующий порт - в данном случае 8080. В такой ситуации нужно либо остановить процесс, который мешает, либо стартовать на другом порту.</p>
13 <p>Посмотреть, какой процесс занял порт 8080, можно командой sudo lsof -i :8080.</p>
13 <p>Посмотреть, какой процесс занял порт 8080, можно командой sudo lsof -i :8080.</p>
14 <p>После этого откройте браузер и введите http://localhost:8080. На экран выведется текущий год. В терминале, где запущен веб-сервер, появятся записи (лог), показывающие входящие запросы:</p>
14 <p>После этого откройте браузер и введите http://localhost:8080. На экран выведется текущий год. В терминале, где запущен веб-сервер, появятся записи (лог), показывающие входящие запросы:</p>
15 <p>Теперь снова откройте файл<em>index.php</em>и добавьте ниже вывод echo 'Hello, world!';. Выполните f5 в браузере, и вы увидите, что изменения применились автоматически. Так происходит, потому что веб-сервер запускает файл на выполнение заново при каждом http-запросе.</p>
15 <p>Теперь снова откройте файл<em>index.php</em>и добавьте ниже вывод echo 'Hello, world!';. Выполните f5 в браузере, и вы увидите, что изменения применились автоматически. Так происходит, потому что веб-сервер запускает файл на выполнение заново при каждом http-запросе.</p>
16 <h2>Тело HTTP-ответа</h2>
16 <h2>Тело HTTP-ответа</h2>
17 <p>При запуске скриптов на PHP, любая функция предсказуемо печатает на экран:</p>
17 <p>При запуске скриптов на PHP, любая функция предсказуемо печатает на экран:</p>
18 <p>Но если этот же файл запускается веб-сервером, то печать на экран работает по-другому. Всё, что выводится на экран в процессе работы скрипта, веб-сервер собирает и отправляет как тело HTTP-ответа. Это одна из причин популярности PHP.</p>
18 <p>Но если этот же файл запускается веб-сервером, то печать на экран работает по-другому. Всё, что выводится на экран в процессе работы скрипта, веб-сервер собирает и отправляет как тело HTTP-ответа. Это одна из причин популярности PHP.</p>
19 <p>Фактически вся работа с веб-сервером встроена внутрь языка. Это позволяет быстро начать создавать сайты, не особо разбираясь в том, как этот веб-сервер работает.</p>
19 <p>Фактически вся работа с веб-сервером встроена внутрь языка. Это позволяет быстро начать создавать сайты, не особо разбираясь в том, как этот веб-сервер работает.</p>