На stackoverflow очень много вопросов типа «какой сервер поставить для разработки на php». Многие советуют apache2 и nginx+php-fpm. Но сегодняшняя статья о такой возможности, как встроенный сервер php.
Встроенный сервер в php появился начиная с версии 5.4.0, и запускается командой:
$ php -S localhost:8000 index.php
где:
-S — запустить сервер
localhost — хост(ip address) на котором будет сервер
8000 — порт сервера
index.php — файл обработки запросов
Роутинг сервера осуществляется с помощью php-файла, выполняющего данные функции, так вот, если этот файл возвращает `false`, то будет запрошен файл напрямую; если же это не так, то будет обрабатываться файл, который мы указали как роутер.
К примеру, если в файл index.php добавить следующее условие:
<?php
if (preg_match('/.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false; // сервер возвращает файлы напрямую.
} else {
// some code
}
То при запросе файлов статики они будут отданы напрямую сервером, а любой другой запрос будет обработан через index.php…
Часть 2. Пишем системный скрипт и сервер на php
И так как же написать системный скрипт для linux? Ответ довольно прост — первым делом мы должны указать интерпретатор, который будет выполнять этот скрипт. Так как мы пишем скрипт на php, то и укажем его интерпретатором в первой строке:
#!/usr/bin/php
Далее опишем те параметры, которые принимает скрипт из консоли:
if(isset($argv[1])) {
$host = $argv[1];
} else {
help();
}
if(isset($argv[2])) {
$port = $argv[2];
} else {
help();
}
Два простых if'а, которые проверяют 1 и 2 аргумент, которые будут host и port соответственно, и если это не так, то выводит функцию help().
function help()
{
echo "
usage: phpServer host port
".PHP_EOL;
exit();
}
И, наконец, дописываем инструкцию, запускающую сервер.
system(sprintf('php -S %s:%s', $host, $port));
После того как скрипт готов, изменяем его права и закидываем в папку /usr/bin/server.
$ chmod 0777 server
$ sudo cp server /usr/bin/server
Ну вот и всё, теперь нам остаёться только зайти в папку с проектом и запустить сервер командой.
$ server localhost 8080
Для доступа к веб части сервера, вводим в адресную строку localhost:8080 и переходим.
Вывод: Встроенный сервер php предназначен только для разработки, и это намного экономичнее apache2 и nginx+php-fpm…
Автор: lnroma