TANSOT

czyli dziennik wojen z oprogramowaniem. Więcej »

Szybki serwer HTTP pod Symfony 5

7 mar 2020 261 słów

Wersje Symfony do 4.x umożliwiały łatwe uruchomienie serwera HTTP poleceniem bin/console server:start. W wersji 5 pakiet WebServerBundle został usunięty, a w zamian zaleca się użyć Symfony CLI. To rozwiązanie wymaga jednak użycia zamkniętoźródłowego programu, co nie dla każdego będzie akceptowalne. Jako alternatywę można posłużyć się wbudowanym serwerem PHP i dla wygody opakować go w skrypt shellowy.

Plik bin/server (należy nadać mu uprawnienia do wykonania poleceniem chmod +x bin/server):

#!/bin/sh
# wejście do głównego katalogu projektu
cd "`dirname "$0"`/.." || exit
"${PHP-php}" -S "0.0.0.0:${PORT-8000}" -t public/ server.php

Plik server.php należy umieścić w głównym katalogu projektu (nie w katalogu public!).

W razie potrzeby można ustawić inną ścieżkę do interpretera PHP i/lub numer portu (domyślnie 8000):

$ PHP=/opt/php7.4/bin/php bin/server
$ PORT=8888 bin/server

Aktualizacja 17.10: Skrypt ulepszony o obsługę opcji i wyświetlanie pomocy:

#!/bin/sh

set -e
cd "$(dirname "$0")/.."

# Default values of configuration options
: "${PHP:=php}" "${PORT:=8000}" "${BIND:=127.0.0.1}"

usage() {
    cat <<EOF
Usage
 \$ $0 [-h] [-b ADDRESS] [-p PORT]

Options
 -h              Show help
 -b ADDRESS      Bind to a specific address (Default: 127.0.0.1)
 -p PORT         Set port number (Default: 8000)
EOF
    exit "${1-0}"
}

while getopts "hp:b:" option; do
    case "$option" in
        h)
            usage
            ;;
        p)
            PORT="$OPTARG"
            ;;
        b)
            BIND="$OPTARG"
            ;;
        *)
            usage 1
  esac
done

exec "$PHP" -S "$BIND:$PORT" -t public

Użycie:

$ bin/server [-p 8888] [-b 0.0.0.0]

Opcja -p ustawia numer portu (domyślnie 8000), a -b określa adres sieciowy, na którym serwer będzie nasłuchiwać żądań. Domyślnie jest to 127.0.0.1, co oznacza, że serwer akceptuje wyłącznie żądania z tego samego komputera ( tzw. localhost). Aby dopuścić komunikację z dowolnej sieci, należy podać 0.0.0.0.