На stackoverflow очень много вопросов типа «какой сервер поставить для разработки на php». Многие советуют apache2 и nginx+php-fpm. Но сегодняшняя статья о такой возможности, как встроенный сервер php.
Встроенный сервер в php появился начиная с версии 5.4.0, и запускается командой:
где:
Роутинг сервера осуществляется с помощью php-файла, выполняющего данные функции, так вот, если этот файл возвращает `false`, то будет запрошен файл напрямую; если же это не так, то будет обрабатываться файл, который мы указали как роутер.
К примеру, если в файл index.php добавить следующее условие:
То при запросе файлов статики они будут отданы напрямую сервером, а любой другой запрос будет обработан через index.php…
Часть 2. Пишем системный скрипт и сервер на php
И так как же написать системный скрипт для linux? Ответ довольно прост — первым делом мы должны указать интерпретатор, который будет выполнять этот скрипт. Так как мы пишем скрипт на php, то и укажем его интерпретатором в первой строке:
Далее опишем те параметры, которые принимает скрипт из консоли:
Два простых if'а, которые проверяют 1 и 2 аргумент, которые будут host и port соответственно, и если это не так, то выводит функцию help().
И, наконец, дописываем инструкцию, запускающую сервер.
После того как скрипт готов, изменяем его права и закидываем в папку /usr/bin/server.
Ну вот и всё, теперь нам остаёться только зайти в папку с проектом и запустить сервер командой.
Для доступа к веб части сервера, вводим в адресную строку localhost:8080 и переходим.
Вывод: Встроенный сервер php предназначен только для разработки, и это намного экономичнее apache2 и nginx+php-fpm…
Встроенный сервер в 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…
