Τρέχουσα κατάσταση: PHP2Shell. Δύο κρίσιμες ευπάθειες της PHP (CVSS 9.2) επιτρέπουν κακόβουλο κώδικα χωρίς σύνδεση. Patches από τις 21/10/2026.Τι πρέπει να γίνει τώρα →

Τοπική ανάπτυξη PHP: Docker, DDEV και άλλα

Για την τοπική ανάπτυξη PHP υπάρχουν ο ενσωματωμένος διακομιστής ιστού, οι επίσημες εικόνες Docker και εργαλεία όπως το DDEV. Σημασία έχει να εκτελείται τοπικά η ίδια έκδοση PHP όπως στην παραγωγή.

Ημερομηνία 5 λεπτά ανάγνωσηςΓνώση PHP

Εν συντομία: Για την τοπική ανάπτυξη PHP υπάρχουν τρεις συνηθισμένοι τρόποι: ο ενσωματωμένος διακομιστής ιστού (php -S) για γρήγορες δοκιμές, οι επίσημες εικόνες Docker της PHP για αναπαραγώγιμα περιβάλλοντα και εργαλεία όπως το DDEV, που δημιουργούν έτοιμα περιβάλλοντα έργου για WordPress, TYPO3, Shopware ή Laravel. Αποφασιστική σημασία έχει λιγότερο το εργαλείο και περισσότερο η αντιστοιχία: τοπικά πρέπει να εκτελείται η ίδια έκδοση PHP με τις ίδιες επεκτάσεις όπως στην παραγωγή. Για την ασφάλεια μετρά πάντα, τελικά, το περιβάλλον εκτέλεσης στον διακομιστή.

Γιατί ένα δικό σας περιβάλλον ανάπτυξης;

Το να κάνετε αλλαγές απευθείας στον ζωντανό διακομιστή είναι επικίνδυνο: κάθε τυπογραφικό λάθος είναι αμέσως ορατό στους πελάτες και τα αρχεία δοκιμών μένουν εύκολα πίσω. Ένα τοπικό περιβάλλον διαχωρίζει τη δοκιμή από τη λειτουργία. Είναι ταυτόχρονα το μέρος όπου δοκιμάζονται πρώτα οι νέες εκδόσεις PHP και οι ενημερώσεις ασφαλείας.

Για τη διοίκηση και την ηγεσία πληροφορικής το ερώτημα δεν είναι επομένως αν υπάρχει περιβάλλον ανάπτυξης, αλλά αν αντιστοιχεί στο ζωντανό σύστημα. Ένα τοπικό περιβάλλον με PHP 8.4, ενώ στην παραγωγή εκτελείται ακόμη η 8.1, συγκαλύπτει προβλήματα αντί να τα δείχνει. Το ίδιο ισχύει για την έκδοση της βάσης δεδομένων, τον διακομιστή ιστού και επεκτάσεις όπως οι intl, gd ή pdo_mysql: ακόμη και μια επέκταση που λείπει μπορεί να οδηγήσει στο να γίνει αντιληπτό ένα σφάλμα μόνο στην παραγωγή.

Οι επιλογές με μια ματιά

Επιλογή Κατάλληλη για Δυνατά σημεία Όρια
Ενσωματωμένος διακομιστής php -S σύντομες δοκιμές, μικρά σενάρια χωρίς εγκατάσταση άλλου λογισμικού δεν αντικαθιστά Nginx ή Apache, όχι για δημόσια δίκτυα
Επίσημη εικόνα Docker ομάδες, αναπαραγώγιμα περιβάλλοντα έκδοση ορίζεται με tag, κοντά στη λειτουργία containers τη διαμόρφωση και τη συνεργασία πολλών containers τις στήνετε μόνοι
DDEV έργα CMS και frameworks έτοιμοι τύποι έργων, περιλαμβάνονται βάση δεδομένων και διακομιστής ιστού προϋποθέτει Docker, δικές του συμβάσεις
Τοπικά εγκατεστημένη PHP μεμονωμένοι προγραμματιστές γρήγορη, άμεση οι εκδόσεις πολλών έργων είναι δύσκολο να συντηρούνται παράλληλα

Ο ενσωματωμένος διακομιστής ιστού

Από την PHP 5.4 η γραμμή εντολών περιέχει έναν μικρό διακομιστή ιστού. Ξεκινά στον τρέχοντα κατάλογο ή, με -t, σε άλλον κατάλογο εγγράφων:

php -S localhost:8000 -t public/

Προαιρετικά μεταβιβάζετε ένα σενάριο δρομολόγησης (router) που εκτελείται πρώτο σε κάθε αίτημα. Το εγχειρίδιο είναι σαφές στην κατάταξη: ο διακομιστής προορίζεται να υποστηρίζει την ανάπτυξη, δεν είναι πλήρης διακομιστής ιστού και δεν πρέπει να χρησιμοποιείται σε δημόσιο δίκτυο. Δεσμεύστε τον γι' αυτό στο localhost, όχι στο 0.0.0.0, διαφορετικά μπορεί να είναι προσβάσιμος στο WLAN της εταιρείας ή του ξενοδοχείου. Περισσότερα για τη γραμμή εντολών στη σελίδα PHP στη γραμμή εντολών.

Docker: επίσημες εικόνες PHP

Οι επίσημες εικόνες υπάρχουν σε πολλές παραλλαγές: cli για τη γραμμή εντολών, apache με Apache και mod_php, fpm για λειτουργία πίσω από Nginx ή άλλον proxy, καθώς και παραλλαγές Alpine για μικρές εικόνες. Μια γρήγορη εκκίνηση με Apache:

docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache

Οι εικόνες περιέχουν τα πρότυπα php.ini-development και php.ini-production στον κατάλογο $PHP_INI_DIR. Τοπικά έχει νόημα το πρότυπο ανάπτυξης, επειδή εμφανίζει σφάλματα. Για την παραγωγή η τεκμηρίωση της εικόνας συνιστά ρητά το πρότυπο παραγωγής. Τις επεκτάσεις τις εγκαθιστάτε με τα συνοδευτικά βοηθητικά σενάρια docker-php-ext-configure, docker-php-ext-install και docker-php-ext-enable. Πώς λειτουργούν τα tags και τα digests, εξηγεί η σελίδα Επίσημες εικόνες Docker της PHP.

DDEV: έτοιμα περιβάλλοντα για CMS και frameworks

Το DDEV βασίζεται στο Docker και στήνει για ένα έργο διακομιστή ιστού, PHP, βάση δεδομένων και βοηθητικές υπηρεσίες. Οι οδηγίες γρήγορης εκκίνησης ακολουθούν σχεδόν πάντα το ίδιο μοτίβο:

ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch

Ως τύπους έργων το DDEV γνωρίζει, μεταξύ άλλων, τους wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 και τον γενικό τύπο php. Την έκδοση PHP την ορίζετε στο .ddev/config.yaml· σύμφωνα με την τεκμηρίωση είναι δυνατές εκδόσεις από την 5.6 έως την 8.5, προεπιλογή είναι η 8.4:

# .ddev/config.yaml (απόσπασμα)
php_version: "8.3"
webserver_type: nginx-fpm   # εναλλακτικά apache-fpm

Έτσι το τοπικό περιβάλλον αντιστοιχεί στην ζωντανή έκδοση, ακόμη κι αν αυτή δεν είναι η νεότερη.

Τοπική ανάπτυξη, επίπεδο ενημέρωσης και PHP2Shell

Μετά το PHP2Shell, αρκετοί πάροχοι πλατφορμών επεσήμαναν ένα τυπικό σφάλμα σκέψης. Η Vercel τονίζει σύμφωνα με το δελτίο της ότι δεν αρκεί η ενημέρωση του τοπικού περιβάλλοντος ανάπτυξης, του κώδικα της εφαρμογής ή των πρόσθετων· αποφασιστικό είναι το περιβάλλον εκτέλεσης PHP που πράγματι εξυπηρετεί. Το να έχετε τοπικά PHP 8.4.27 δεν προστατεύει τον διακομιστή με 8.4.26.

Αντίστροφα, το περιβάλλον ανάπτυξης φέρνει δικούς του κινδύνους που μπορούν να περάσουν στην παραγωγή:

  1. Ini ανάπτυξης στην παραγωγή: το display_errors είναι ενεργό στο php.ini-development. Αν αυτό το αρχείο φτάσει στον διακομιστή, οι επισκέπτες βλέπουν διαδρομές και μηνύματα σφαλμάτων. Δείτε Απενεργοποίηση της εμφάνισης σφαλμάτων στην παραγωγή.
  2. Ξεχασμένα αρχεία δοκιμών: αρχεία phpinfo(), dumps βάσεων δεδομένων ή αρχεία .env με διαπιστευτήρια δεν ανήκουν στην ανάπτυξη προς παραγωγή.
  3. Ανοιχτοί διακομιστές ανάπτυξης: php -S ή containers με δημοσιευμένες θύρες σε υπολογιστές του δικτύου.
  4. Παρωχημένες εικόνες: Οι τοπικές εικόνες δεν ενημερώνονται από μόνες τους· μετά από μια έκδοση ασφαλείας της PHP πρέπει να ξαναχτίζεται και το περιβάλλον ανάπτυξης, ώστε οι δοκιμές να εκτελούνται με τη διορθωμένη έκδοση.
Συμβουλή

Ορίστε την έκδοση PHP σε ένα σημείο, για παράδειγμα στο Dockerfile ή στο .ddev/config.yaml, και αλλάζετέ την στις ενημερώσεις μαζί με τη διαμόρφωση του διακομιστή.

Πώς βοηθά συγκεκριμένα η PHP SOS;

Στη σύμβαση συντήρησης ασφαλείας φροντίζουμε ώστε η ανάπτυξη και η λειτουργία να ταιριάζουν:

  • Αντιπαραβολή: Συγκρίνουμε την έκδοση PHP και τις επεκτάσεις των περιβαλλόντων ανάπτυξης, δοκιμών και παραγωγής.
  • Διαδικασία ενημέρωσης: Οι νέες εκδόσεις PHP εγκαθίστανται πρώτα στο περιβάλλον δοκιμών, έπειτα στην παραγωγή, κάθε φορά με επανεκκίνηση.
  • Έλεγχος της ανάπτυξης προς παραγωγή: Φροντίζουμε ώστε να μη φτάνουν στον διακομιστή ini ανάπτυξης, αρχεία δοκιμών ή διαπιστευτήρια.
  • Τεκμηρίωση: Γνωρίζετε ανά πάσα στιγμή ποια έκδοση εκτελείται πού.

Συχνές ερωτήσεις

Επιτρέπεται να χρησιμοποιώ τον ενσωματωμένο διακομιστή ιστού της PHP δημόσια;

Όχι. Το εγχειρίδιο της PHP λέει ρητά ότι ο διακομιστής που ξεκινά με php -S προορίζεται για ανάπτυξη και δεν πρέπει να χρησιμοποιείται σε δημόσιο δίκτυο. Για τη λειτουργία ανήκουν το PHP-FPM με Nginx ή Apache.

Τι είναι το DDEV;

Το DDEV είναι ένα εργαλείο που βασίζεται στο Docker και δημιουργεί έτοιμα περιβάλλοντα ανάπτυξης για έργα PHP. Γνωρίζει τύπους έργων για WordPress, TYPO3, Shopware 6, Laravel, Drupal και άλλα συστήματα.

Αρκεί να ενημερώσω την τοπική έκδοση PHP;

Όχι. Απέναντι σε ευπάθειες όπως το PHP2Shell μετρά το περιβάλλον εκτέλεσης PHP που πράγματι εξυπηρετεί, δηλαδή αυτό στον διακομιστή. Το τοπικό περιβάλλον πρέπει όμως να έχει την ίδια έκδοση, ώστε οι δοκιμές να είναι ουσιαστικές.

Ποιο php.ini χρησιμοποιώ τοπικά;

Τοπικά έχει νόημα το php.ini-development, επειδή εμφανίζει σφάλματα. Στην παραγωγή πρέπει να χρησιμοποιείται το php.ini-production. Οι επίσημες εικόνες Docker περιέχουν και τα δύο πρότυπα.

Πηγές

Άμεση επικοινωνία

Κάθε ώρα μετράει. Γράψτε μας τώρα.

Περιγράψτε σύντομα το σύστημα, την έκδοση PHP και ό,τι παρατηρείτε. Θα επικοινωνήσουμε μαζί σας, θα διευκρινίσουμε την κατάσταση και θα εργαστούμε εξ αποστάσεως μέχρι το περιστατικό να κλείσει και να τεκμηριωθεί.

Άμεση βοήθεια