Jak szybko testować strony internetowe za pomocą wbudowanego serwera WWW PHP

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 -Sflagi do phppliku 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 8080w localhostpowyższym przykładzie. Teraz możesz przejść http://localhost:8080do 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 -tflagę podczas uruchamiania serwera:

$ php -S localhost:8080 -t /home/$USER/public_docs

Katalog główny dokumentu będzie teraz znajdował się /public_docsw 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 localhostnie 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.0się 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.phprównież szukać index.htmlplikó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-Typenagłó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.phpdo 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-serverskrypt 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_WORKERSzmienną ś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

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *