Jak szybko testować strony internetowe za pomocą wbudowanego serwera WWW PHP
Potrzebujesz szybko uruchomić serwer WWW, aby przetestować aplikację PHP? Interpreter PHP ma jeden wbudowany! Możesz użyć tego, aby szybko sprawdzić swoją pracę bez uruchamiania Apache, NGINX lub rozwiązania do konteneryzacji.
Zintegrowany serwer PHP otrzymał stosunkowo niewiele uwagi, ale jest wystarczająco wydajny do celów programistycznych. W tym samouczku pokażemy, jak można go używać jako alternatywy dla innych mikroserwerów, takich jak SimpleHTTPServer Pythona lub pakiet npm serwera http , z których żaden nie może wykonywać skryptów PHP.
Korzystanie z wbudowanego serwera
Wbudowany serwer jest przydatnym mechanizmem pomagającym testować strony PHP w środowiskach, które nie mają pełnego serwera HTTP. Jest dostępny w PHP 5.4 i wszystkich nowszych wersjach. Możesz uruchomić go bezpośrednio z katalogu roboczego bez wcześniejszego konfigurowania wirtualnego hosta.
Przed użyciem serwera pamiętaj, że służy on wyłącznie do rozwoju. Dokumentacja PHP wyraźnie ostrzega przed wdrażaniem tego serwera w aplikacjach produkcyjnych. Nie jest wystarczająco bezpieczny, aby być otwarty w sieciach publicznych.
Uruchomienie serwera
Serwer jest uruchamiany poprzez przekazanie -S
flagi do php
pliku wykonywalnego:
$ php -S localhost:8080
[Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
Argument przekazany do polecenia określa adres nasłuchiwania serwera. Użyliśmy portu 8080
w localhost
powyższym przykładzie. Teraz możesz przejść http://localhost:8080
do przeglądarki internetowej, aby uzyskać dostęp do zawartości w katalogu roboczym. Wszelkie skrypty PHP zostaną wykonane automatycznie na Twoje żądanie.
Możesz podać ścieżkę, która znajduje się poza twoim katalogiem roboczym, ustawiając -t
flagę podczas uruchamiania serwera:
$ php -S localhost:8080 -t /home/$USER/public_docs
Katalog główny dokumentu będzie teraz znajdował się /public_docs
w twoim katalogu domowym.
Pozostaw otwarte okno terminala podczas korzystania z serwera WWW. Naciśnij klawisze Ctrl+C, aby zatrzymać proces po zakończeniu testowania witryny. PHP będzie rejestrować każde przychodzące żądanie w oknie terminala, w tym metodę URI i HTTP. Wszelkie niewykryte błędy PHP pojawią się również w dziennikach.
Włącz zdalny dostęp
Słuchanie localhost
nie zezwala na połączenia przychodzące z innych urządzeń w Twojej sieci. Dostęp zdalny można włączyć, łącząc 0.0.0.0
się z:
$ php -S 0.0.0.0:8080
Należy pamiętać, że serwer nie jest chroniony do użytku produkcyjnego i nie powinien być udostępniany publicznie. Zezwalaj na zdalny dostęp tylko wtedy, gdy jest to absolutnie konieczne, na przykład podczas testowania określonej funkcji na urządzeniu mobilnym. Upewnij się, że używany port nie jest otwarty na Internet.
Poproś o dopasowanie zastępcze
PHP będzie index.php
również szukać index.html
plików w katalogu głównym aktywnego dokumentu, jeśli w przychodzącym żądaniu nie ma komponentu URI. Jeśli żaden z tych plików nie istnieje, serwer będzie kontynuował przechodzenie w górę drzewa katalogów w poszukiwaniu indeksu w jednym z nadrzędnych dokumentów głównych. Oznacza to, że możesz nieumyślnie wyświetlać zawartość spoza określonego katalogu. Status 404 Not Found zostanie wygenerowany, gdy zostanie osiągnięty szczyt drzewa, ale nie zostanie znaleziony plik indeksu.
Żądania zawierające identyfikator URI (takie jak /file
) muszą dokładnie odpowiadać plikowi statycznemu w katalogu głównym dokumentu. W przeciwnym razie zostanie zwrócony błąd 404. PHP automatycznie ustawia Content-Type
nagłówek odpowiedzi na typ MIME obsługiwanego pliku dla najpopularniejszych rozszerzeń plików.
Korzystanie ze skryptu routera
Opcjonalnie możesz skonfigurować serwer WWW tak, aby przy każdym żądaniu wywoływał skrypt. Pozwala to na użycie kontrolera frontowego aplikacji do wykonywania zaawansowanego routingu dynamicznego.
Funkcjonalność routera jest włączana poprzez określenie nazwy pliku PHP w wierszu poleceń podczas uruchamiania serwera:
$ php -S localhost:8080 router.php
PHP będzie teraz używać router.php
do przetwarzania każdego przychodzącego żądania. Możesz skierować użytkowników do odpowiedniego punktu w swojej aplikacji, sprawdzając identyfikator URI żądania:
Dane wyjściowe wygenerowane przez skrypt routera staną się odpowiedzią wysłaną z powrotem do klienta. Wyjątkiem jest skrypt return false
: w tym przypadku PHP powróci do zwrócenia statycznego pliku, który pasuje do oryginalnego identyfikatora URI żądania.
Wykrywanie wbudowanego serwera na podstawie kodu PHP
Twój kod PHP może określić, czy jest wywoływany przez wbudowany serwer WWW, sprawdzając nazwę aktywnego interfejsu. Funkcja php_sapi_name()
zapewnia tę wartość. Zostanie on ustawiony, gdy cli-server
skrypt zostanie wywołany przez zintegrowany komponent serwera.
Obsługa wielu wniosków jednocześnie
Domyślnie serwer działa w trybie synchronicznym jednego procesu. Żądania są przetwarzane indywidualnie i blokują się wzajemnie do czasu ich zakończenia. Jest to jeden z powodów, dla których serwer nie nadaje się do użytku produkcyjnego.
PHP 7.4 dodało wsparcie dla obsługi wielu żądań w tym samym czasie. Jest to zależne od fork()
dostępności i nie działa w systemie Windows. Gdy ten tryb jest włączony, serwer utworzy nowego pracownika do obsługi każdego przychodzącego żądania. Możesz go aktywować, ustawiając PHP_CLI_SERVER_WORKERS
zmienną środowiskową na żądaną liczbę pracowników:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
Ta funkcjonalność jest nadal oznaczona jako eksperymentalna w PHP 8.1.
Streszczenie
PHP ma wbudowany serwer WWW, który jest wygodnym sposobem testowania aplikacji i szybkiego dostępu do zawartości lokalnego systemu plików w sieci lokalnej. Obsługuje wykonywanie skryptów PHP, pełny routing i pliki statyczne z najpopularniejszymi typami MIME.
Chociaż serwer obsługuje teraz opcjonalny tryb rozwidlenia, nie zaleca się używania go w środowisku produkcyjnym. Jest przeznaczony do pomocy w programowaniu i nie zawiera funkcji dostosowywania i zabezpieczeń potrzebnych do wdrożeń publicznych. Wyróżnia się jako lekka i zintegrowana alternatywa dla tradycyjnych platform programistycznych, takich jak kontenery WAMP , XAMPP i Docker.
Dodaj komentarz