Szybki serwer HTTP pod Symfony 5
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
.