Θέλετε να ξεκινήσετε γρήγορα έναν web server για να δοκιμάσετε μια εφαρμογή PHP; Ο διερμηνέας PHP (interpreter) έχει έναν ενσωματωμένο! Μπορείτε να το χρησιμοποιήσετε για να επιθεωρήσετε γρήγορα την εργασία σας χωρίς να εκτελέσετε Apache, NGINX ή μια λύση containerization.

Ο intergrated web server της PHP τραβάει σχετικά λίγη προσοχή, αλλά είναι αρκετά ισχυρός για σκοπούς ανάπτυξης. Σε αυτόν τον οδηγό, θα δείξουμε πώς μπορείτε να το χρησιμοποιήσετε ως εναλλακτική σε άλλους micro-servers όπως ο SimpleHTTPServer της Python ή το http-server npm πακέτο, κανένα από τα οποία δεν μπορεί να εκτελέσει PHP scripts.

Ο built-in web server είναι ένας βολικός μηχανισμός που σας βοηθά να δοκιμάζετε PHP sites σε περιβάλλοντα που δεν διαθέτουν πλήρως ανεπτυγμένο HTTP server. Είναι διαθέσιμο σε PHP 5.4 και σε όλες τις νεότερες εκδόσεις. Μπορείτε να το εκτελέσετε απευθείας από το directory εργασίας σας χωρίς να χρειάζεται να ρυθμίσετε πρώτα έναν virtual host.

Πριν χρησιμοποιήσετε τον web server, πρέπει να θυμάστε ότι έχει σχεδιαστεί μόνο για χρήση ανάπτυξης. Το documentation της PHP προειδοποιεί ρητά για την χρήση αυτού του server μπροστά από εφαρμογές παραγωγής. Δεν είναι επαρκώς ασφαλής να εκτίθεται σε δημόσια προσβάσιμα δίκτυα.

Δείτε επίσης: Πώς θα φορτίσετε ένα MacBook χρησιμοποιώντας ένα άλλο MacBook

Ο web server ξεκινάει περνώντας το -S flag στο εκτελέσιμο αρχείο php:

$ php -S localhost:8080
[Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
Πώς να δοκιμάσετε το site σας με τον built-in Web server της PHP;

Το argument που δίνεται στην εντολή καθορίζει το server listening address. Χρησιμοποιήσαμε τo port 8080 στο localhost στο παραπάνω παράδειγμα. Τώρα μπορείτε να επισκεφτείτε το http://localhost:8080 στον browser σας για να αποκτήσετε πρόσβαση στο περιεχόμενο στο working directory σας. Τυχόν PHP scripts θα εκτελεστούν αυτόματα όταν τα ζητήσετε.

Μπορείτε να εμφανίσετε μια διαδρομή που βρίσκεται εκτός του working directory σας ορίζοντας τo -t flag κατά την εκκίνηση του server:

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

Το root του εγγράφου θα είναι τώρα /public_docs μέσα στον αρχικό σας φάκελο.

Κρατήστε το terminal window σας ανοιχτό ενώ χρησιμοποιείτε τον web server της PHP. Πατήστε Ctrl+C για να τερματίσετε το process μόλις ολοκληρώσετε τη δοκιμή του site σας. Η PHP θα καταγράφει κάθε εισερχόμενo request στο terminal window σας, συμπεριλαμβανομένης της μεθόδου URI και HTTP. Τυχόν μη εντοπισμένα σφάλματα PHP θα εμφανιστούν και στα αρχεία log.

Το listening στο localhost δεν θα επιτρέψει εισερχόμενες συνδέσεις από άλλες συσκευές στο δίκτυό σας. Μπορείτε να επιτρέψετε την απομακρυσμένη πρόσβαση δεσμεύοντας αντ’ αυτού στο 0.0.0.0:

$ php -S 0.0.0.0:8080

Να θυμάστε ότι ο PHP web server δεν είναι hardened για παραγωγική χρήση και δεν πρέπει να εκτίθεται δημόσια. Να επιτρέπεται η απομακρυσμένη πρόσβαση μόνο όταν είναι απολύτως απαραίτητο, όπως κατά τη δοκιμή μιας συγκεκριμένης λειτουργίας σε μια κινητή συσκευή. Βεβαιωθείτε ότι το port που χρησιμοποιείτε δεν είναι ανοιχτό στο διαδίκτυο.

Η PHP θα αναζητήσει αρχεία index.php και index.html στο active root του εγγράφου όταν το εισερχόμενο request στερείται στοιχείου URI. Εάν δεν υπάρχει κανένα από αυτά τα αρχεία, ο server θα συνεχίσει να κινείται προς τα επάνω στο directory tree, αναζητώντας ένα index σε έναν από τους parent φακέλους του root εγγράφου σας. Αυτό σημαίνει ότι μπορείτε ακούσια να καταλήξετε να προβάλλετε περιεχόμενο που βρίσκεται εκτός του directory που έχετε καθορίσει. Η κατάσταση 404 Not Found θα εκδοθεί όταν η PHP φτάσει στην κορυφή του directory tree χωρίς να βρεθεί αρχείο index.

Πώς να δοκιμάσετε το site σας με τον built-in Web server της PHP;

Τα requests που περιλαμβάνουν ένα URI (όπως το /file) πρέπει να αντιστοιχίζονται ακριβώς με ένα στατικό αρχείο στο root του εγγράφου. Διαφορετικά ένα 404 θα επιστραφεί. Η PHP ορίζει αυτόματα τo Content-Type response header στον τύπο MIME του αρχείου που εμφανίζεται για τις πιο δημοφιλείς επεκτάσεις αρχείων.

Μπορείτε προαιρετικά να διαμορφώσετε τον web server της PHP ώστε να καλεί ένα script σε κάθε request. Αυτό σας επιτρέπει να χρησιμοποιήσετε τον front controller της εφαρμογής σας για να εκτελέσετε advanced dynamic routing

.

Η λειτουργία του router ενεργοποιείται με την παροχή ενός filename PHP στο command line κατά την εκκίνηση του server:

$ php -S localhost:8080 router.php

Η PHP θα χρησιμοποιεί πλέον το router.php για να χειρίζεται κάθε εισερχόμενο request. Μπορείτε να κάνετε route τους χρήστες στο κατάλληλο σημείο της εφαρμογής σας επιθεωρώντας το URI request:

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

Το output που παράγεται από το script του router σας θα γίνει η απάντηση που θα σταλεί πίσω στον client. Μια εξαίρεση είναι εάν το script επιστρέψει false: σε αυτήν την περίπτωση, η PHP θα γυρίσει στην επιστροφή του στατικού αρχείου που ταιριάζει με το αρχικό URI request.

if (str_starts_with($_SERVER["REQUEST_URI"], "/api")) {
    // Route to the correct API endpoint
    // ... 
}
else {
    // Serve other routes statically
    return false;
}
Πώς να δοκιμάσετε το site σας με τον built-in Web server της PHP;

Ο κώδικας PHP σας μπορεί να εντοπίσει εάν καλείται από τον ενσωματωμένο web server, επιθεωρώντας το active interface name. Το function php_sapi_name() παρέχει αυτήν την τιμή. Θα ρυθμιστεί σε cli-server όταν το script κληθεί από το integrated server component.

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

Ο PHP web server τρέχει απο προεπιλογή σε single-process synchronous mode. Τα requests αντιμετωπίζονται μεμονωμένα και εμποδίζουν το ένα το άλλο να εκτελεστεί μέχρι να ολοκληρωθούν. Αυτός είναι ένας από τους λόγους για τους οποίους ο server είναι ακατάλληλος για παραγωγική χρήση.

Δείτε επίσης: Πώς θα απενεργοποιήσετε το Superfetch στα Windows 10 και 11

Η PHP 7.4 πρόσθεσε υποστήριξη για τον χειρισμό πολλαπλών requests ταυτόχρονα. Βασίζεται στη διαθεσιμότητα fork() και δεν λειτουργεί στα Windows. Ο server θα διαχωρίσει έναν νέο worker για να εξυπηρετήσει κάθε εισερχόμενο request όταν αυτή η λειτουργία είναι ενεργοποιημένη. Μπορείτε να την ενεργοποιήσετε ρυθμίζοντας τη μεταβλητή περιβάλλοντος PHP_CLI_SERVER_WORKERS στον αριθμό των workers που θέλετε:

$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
Πώς να δοκιμάσετε το site σας με τον built-in Web server της PHP;

Αυτή η λειτουργία εξακολουθεί να επισημαίνεται ως πειραματική στην PHP 8.1.

Η PHP διαθέτει έναν ενσωματωμένο web server που είναι ένας βολικός τρόπος για να δοκιμάσετε τις εφαρμογές σας και να εκθέσετε γρήγορα το περιεχόμενο του local filesystem στο τοπικό σας δίκτυο. Υποστηρίζει εκτέλεση script PHP, catch-all routing και στατικά αρχεία με τους πιο συνηθισμένους τύπους MIME.

Παρόλο που ο web server υποστηρίζει τώρα μια προαιρετική λειτουργία forking, δεν συνιστάται η χρήση της στην παραγωγή. Προορίζεται ως βοήθημα ανάπτυξης και δεν διαθέτει τις δυνατότητες προσαρμογής και ασφάλειας που θα χρειαστείτε για τις δημόσιες αναπτύξεις σας. Εκεί που υπερέχει είναι ως μια ελαφριά και ολοκληρωμένη εναλλακτική λύση σε συμβατικές πλατφόρμες ανάπτυξης όπως τα containers WAMP, XAMPP και Docker.

Πηγή: howtogeek.com