Pull to refresh

Разработка сервера на php и системных скриптов

Reading time2 min
Views24K
На 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…
Tags:
Hubs:
Total votes 32: ↑15 and ↓17-2
Comments49

Articles