Cum să testați rapid site-urile web cu serverul web încorporat PHP

Publicat: 2022-08-11

Ilustrație care arată sigla PHP

Trebuie să porniți rapid un server web pentru a testa o aplicație PHP? Interpretul PHP are unul încorporat! Puteți utiliza acest lucru pentru a vă inspecta rapid munca fără a rula Apache, NGINX sau o soluție de containerizare.

Serverul integrat PHP primește relativ puțină atenție, dar este destul de puternic în scopuri de dezvoltare. În acest ghid, vom arăta cum îl puteți utiliza ca alternativă la alte micro-servere, cum ar fi SimpleHTTPServer Python sau pachetul http-server npm, niciunul dintre acestea nu poate executa scripturi PHP.

Utilizarea serverului încorporat

Serverul încorporat este un mecanism comod pentru a vă ajuta să testați site-uri PHP în medii care nu au un server HTTP complet. Este disponibil în PHP 5.4 și în toate versiunile ulterioare. Îl puteți rula direct din directorul de lucru fără a fi nevoie să configurați mai întâi o gazdă virtuală.

Înainte de a utiliza serverul, fiți avertizat că este conceput numai pentru dezvoltare. Documentația PHP avertizează în mod explicit împotriva implementării acestui server în fața aplicațiilor de producție. Nu este suficient de sigur pentru a fi expus în rețelele accesibile publicului.

Pornirea serverului

Serverul este pornit prin trecerea steagului -S la executabilul php :

 $ php -S localhost:8080
[Veni, 10 iunie 16:00:00 2022] Serverul de dezvoltare PHP 8.1.5 (http://localhost:8080) a început

Argumentul dat comenzii specifică adresa de ascultare a serverului. Am folosit portul 8080 pe localhost în exemplul de mai sus. Acum puteți vizita http://localhost:8080 în browserul dvs. web pentru a accesa conținutul din directorul de lucru. Orice script PHP va fi executat automat atunci când le solicitați.

Puteți servi o cale care se află în afara directorului dvs. de lucru setând steag-ul -t când porniți serverul:

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

Rădăcina documentului va fi acum /public_docs în folderul dvs. de acasă.

Țineți fereastra terminalului deschisă în timp ce utilizați serverul web. Apăsați Ctrl+C pentru a opri procesul după ce ați terminat de testat site-ul. PHP va înregistra fiecare cerere primită în fereastra terminalului dvs., inclusiv metoda URI și HTTP. Orice erori PHP neprinse vor apărea și în jurnale.

Activarea accesului la distanță

Ascultarea pe localhost nu va permite conexiuni de intrare de la alte dispozitive din rețeaua dvs. Puteți permite accesul de la distanță legând în schimb la 0.0.0.0 :

 $ php -S 0.0.0.0:8080

Amintiți-vă că serverul nu este întărit pentru utilizare în producție și nu ar trebui să fie expus public. Permiteți accesul de la distanță numai atunci când este absolut necesar, cum ar fi atunci când testați o anumită funcție pe un dispozitiv mobil. Asigurați-vă că portul pe care îl utilizați nu este deschis pentru internet.

Solicitați potrivirea alternativă

PHP va căuta fișiere index.php și index.html în rădăcina activă a documentului atunci când solicitarea primită nu are o componentă URI. Dacă niciunul dintre aceste fișiere nu există, serverul va continua să se deplaseze în sus în arborele de directoare, căutând un index într-unul dintre părinții rădăcinii documentului. Aceasta înseamnă că puteți sfârși neintenționat prin a difuza conținut care se află în afara directorului pe care l-ați specificat. O stare 404 Not Found va fi emisă atunci când vârful arborelui este atins fără a fi găsit un fișier index.

Solicitările care includ un URI (cum ar fi /file ) trebuie să fie corelate exact cu un fișier static din rădăcina documentului. În caz contrar, un 404 va fi returnat. PHP setează automat antetul de răspuns Content-Type la tipul MIME al fișierului difuzat pentru cele mai populare extensii de fișiere.

Utilizarea unui script de router

Puteți configura opțional serverul web să apeleze un script la fiecare solicitare. Acest lucru vă permite să utilizați controlerul frontal al aplicației dvs. pentru a efectua rutarea dinamică avansată.

Funcționalitatea routerului este activată prin furnizarea unui nume de fișier PHP pe linia de comandă când porniți serverul:

 $ php -S localhost:8080 router.php

PHP va folosi acum router.php pentru a gestiona fiecare cerere primită. Puteți direcționa utilizatorii către punctul corespunzător din aplicația dvs. inspectând URI-ul solicitării:

 if ( $_SERVER [ "REQUEST_URI" ] === "/tabloul de bord" ) {
    require_once ( "dashboard.php" ) ;
}
else if ( $_SERVER [ "REQUEST_URI" ] === "/profil" ) {
    require_once ( "profile.php" ) ;
}
else {
    require_once ( "404.php" ) ;
}

Ieșirea produsă de scriptul routerului va deveni răspunsul care este trimis înapoi clientului. O excepție este dacă scriptul returnează false : în acest caz, PHP va reveni la returnarea fișierului static care se potrivește cu URI-ul cererii inițiale.

 if ( str_începe_cu ( $_SERVER [ " REQUEST_URI " ] , "/api " ) ) {
    // Rută către punctul final API corect
    // ...
}
else {
    // Deservește alte rute static
    return false ;
}

Detectarea serverului încorporat din codul dvs. PHP

Codul dvs. PHP poate detecta dacă este apelat de serverul web încorporat, inspectând numele interfeței active. Funcția php_sapi_name() oferă această valoare. Va fi setat la cli-server atunci când scriptul a fost invocat de componenta server integrată.

 if ( php_sapi_name ( ) === „cli-server” ) {
    enable_development_mode ( ) ;
}

Gestionarea mai multor cereri simultan

Serverul rulează implicit într-un mod sincron cu un singur proces în mod implicit. Cererile sunt tratate individual și se blochează reciproc până la finalizare. Acesta este unul dintre motivele pentru care serverul nu este potrivit pentru utilizare în producție.

PHP 7.4 a adăugat suport pentru gestionarea mai multor cereri simultan. Se bazează pe disponibilitatea fork() și nu funcționează pe Windows. Serverul va trimite un nou lucrător pentru a servi fiecare cerere primită atunci când acest mod este activat. Îl puteți activa setând variabila de mediu PHP_CLI_SERVER_WORKERS la numărul de lucrători pe care doriți:

 $ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080

Această funcționalitate este încă marcată ca experimentală în PHP 8.1.

rezumat

PHP are un server web încorporat, care este o modalitate convenabilă de a testa aplicațiile și de a expune rapid conținutul sistemului de fișiere local din rețeaua locală. Acceptă execuția de script PHP, rutarea catch-all și fișierele statice cu cele mai comune tipuri MIME.

Deși serverul acceptă acum un mod opțional de bifurcare, nu este recomandabil să îl utilizați în producție. Este conceput ca un ajutor de dezvoltare și nu are caracteristicile de personalizare și securitate de care veți avea nevoie pentru implementările dvs. publice. Acolo unde excelează este ca o alternativă ușoară și integrată la platformele de dezvoltare convenționale precum containerele WAMP, XAMPP și Docker.