Εγκατάσταση PHP 8.1 και Ρύθμιση Τοπικού Περιβάλλοντος Ανάπτυξης σε Ubuntu


Μια προηγούμενη έκδοση αυτού του σεμιναρίου γράφτηκε από την alenaholligan.

Εισαγωγή

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

Η PHP 8.1 είναι μια σταθερή έκδοση με μακροχρόνια υποστήριξη που φέρνει σημαντικές βελτιώσεις και νέες δυνατότητες γλώσσας, διατηρώντας ταυτόχρονα την αξιοπιστία. Η εγκατάσταση της PHP 8.1 σε Ubuntu διασφαλίζει ότι το τοπικό σας περιβάλλον ανάπτυξης είναι ενημερωμένο, ασφαλές και συμβατό με ευρέως χρησιμοποιούμενα πλαίσια και πλατφόρμες όπως το WordPress, το Laravel και εφαρμογές PHP προσαρμοσμένες στις ανάγκες σας.

Αυτός ο οδηγός σας καθοδηγεί στη διαδικασία εγκατάστασης του PHP 8.1 σε Ubuntu, στη διαμόρφωσή του με Apache ή Nginx, στην εγκατάσταση των βασικών επεκτάσεων PHP και στην εγκατάσταση του Composer για τη διαχείριση εξαρτήσεων. Θα μάθετε επίσης πώς να επαληθεύσετε την εγκατάστασή σας και να αντιμετωπίσετε συνήθη προβλήματα.

Αναπτύξτε τις εφαρμογές PHP σας από το GitHub χρησιμοποιώντας την πλατφόρμα εφαρμογών Linux-Console.net. Αφήστε το Linux-Console.net να επικεντρωθεί στην κλιμάκωση της εφαρμογής σας.

Κύρια Συμπεράσματα

  • Εγκατάσταση PHP 8.1 σε Ubuntu 22.04: Το Ubuntu 22.04 LTS περιλαμβάνει την PHP 8.1 στα προεπιλεγμένα αποθετήριά του, επιτρέποντάς σας να εγκαταστήσετε μια σταθερή, με μακροχρόνια υποστήριξη έκδοση PHP χρησιμοποιώντας το apt χωρίς τρίτα PPAs. Αυτό εξασφαλίζει προβλέψιμες ενημερώσεις, επιδιορθώσεις ασφαλείας και συμβατότητα με σύγχρονα PHP frameworks.

  • Απαραίτητες επεκτάσεις PHP για πραγματικά έργα: Οι περισσότερες εφαρμογές PHP παραγωγικού επιπέδου βασίζονται σε επεκτάσεις όπως mysql, curl, xml, mbstring, zip, gd και bcmath. Η εγκατάσταση αυτών νωρίς αποτρέπει σφάλματα κατά την εκτέλεση αργότερα και εξασφαλίζει συμβατότητα με frameworks όπως τα Laravel, Symfony και WordPress.

  • Επιλογή μεταξύ Apache ή Nginx για ανάπτυξη σε PHP: Ο Apache μπορεί να εκτελέσει PHP απευθείας χρησιμοποιώντας το mod_php, ενώ ο Nginx απαιτεί PHP‑FPM για τη διαχείριση αιτημάτων. Και οι δύο μέθοδοι λειτουργούν καλά για τοπική ανάπτυξη, αλλά το PHP‑FPM αντικατοπτρίζει πιο πιστά τα σύγχρονα περιβάλλοντα παραγωγής και κλιμακώνεται καλύτερα υπό φόρτο.

  • Το Composer ως θεμέλιο των σύγχρονων ροών εργασίας PHP: Το Composer διαχειρίζεται τις εξαρτήσεις του έργου μέσω των composer.json και composer.lock, εξασφαλίζοντας σταθερές εκδόσεις σε διάφορους υπολογιστές. Είναι απαραίτητο για την εγκατάσταση πλαισίων, τη δημιουργία autoloaders και τη διατήρηση αξιόπιστων εκδόσεων εξαρτήσεων σε συνεργατικά έργα PHP.

  • Ρύθμιση του PHP ειδικά για ανάπτυξη: Τα περιβάλλοντα ανάπτυξης επωφελούνται από εκτενή αναφορά σφαλμάτων, υψηλότερα όρια μνήμης και μεγαλύτερους χρόνους εκτέλεσης. Η προσαρμογή αυτών των ρυθμίσεων στο php.ini βοηθά στην γρήγορη εντόπιση σφαλμάτων κατά την ανάπτυξη, αλλά πρέπει πάντα να επαναφέρονται για περιβάλλοντα παραγωγής.

  • Η αντιμετώπιση προβλημάτων και η επαλήθευση είναι μέρος της εγκατάστασης: Ο έλεγχος του PHP με php -v, η επαλήθευση των φορτωμένων επεκτάσεων και η ανασκόπηση των αρχείων καταγραφής του Apache, του Nginx ή του PHP‑FPM είναι κρίσιμα βήματα. Οι περισσότερες δυσλειτουργίες κατά την εγκατάσταση προκύπτουν από ελλείποντα πρόσθετα, δικαιώματα ή λανθασμένες ρυθμίσεις του διακομιστή web.

Προαπαιτούμενα

Για να ολοκληρώσετε αυτό το σεμινάριο, χρειάζεστε:

  • Μια τοπική μηχανή ή εικονικός διακομιστής που τρέχει Ubuntu (συμβατό με Ubuntu 22.04 LTS και νεότερες εκδόσεις)
  • Διοικητική (sudo) πρόσβαση στη μηχανή
  • Μια ενεργή σύνδεση στο διαδίκτυο
  • Βασική εξοικείωση με τη γραμμή εντολών

Αν ρυθμίζετε έναν νέο διακομιστή Ubuntu, δείτε τον οδηγό μας σχετικά με την Αρχική Ρύθμιση Διακομιστή με Ubuntu.

Βήμα 1 — Ρύθμιση του PHP 8.1

Θα ολοκληρώσετε την εγκατάσταση και τη ρύθμισή σας μέσω της γραμμής εντολών, η οποία είναι ένας μη γραφικός τρόπος αλληλεπίδρασης με τον υπολογιστή σας. Δηλαδή, αντί να κάνετε κλικ σε κουμπιά, θα πληκτρολογείτε κείμενο και θα λαμβάνετε ανατροφοδότηση από τον υπολογιστή σας επίσης μέσω κειμένου.

Η γραμμή εντολών, γνωστή και ως shell ή τερματικό, μπορεί να σας βοηθήσει να τροποποιήσετε και να αυτοματοποιήσετε πολλές από τις εργασίες που κάνετε καθημερινά σε έναν υπολογιστή και είναι ένα απαραίτητο εργαλείο για προγραμματιστές λογισμικού. Υπάρχουν πολλές εντολές τερματικού που μπορείτε να μάθετε και που σας επιτρέπουν να κάνετε πιο δυναμικά πράγματα. Το άρθρο Εισαγωγή στο Τερματικό του Linux μπορεί να σας βοηθήσει να εξοικειωθείτε καλύτερα με το τερματικό.

Σημείωση: Αν είστε νέοι στο Ubuntu, σκεφτείτε να περιηγηθείτε στην τεκμηρίωση του Ubuntu για επιπλέον οδηγίες διαχείρισης συστήματος.

Στο Ubuntu, μπορείτε να βρείτε την εφαρμογή Τερματικού κάνοντας κλικ στο εικονίδιο του Ubuntu στην επάνω αριστερή γωνία της οθόνης σας και πληκτρολογώντας terminal στη γραμμή αναζήτησης. Κάντε κλικ στο εικονίδιο της εφαρμογής Τερματικού για να την ανοίξετε. Εναλλακτικά, μπορείτε να πατήσετε τα πλήκτρα CTRL, ALT και T στο πληκτρολόγιό σας ταυτόχρονα για να ανοίξετε αυτόματα την εφαρμογή Τερματικού.

Σημείωση: Στο Ubuntu 22.04 LTS, η PHP 8.1 είναι διαθέσιμη στα προεπιλεγμένα αποθετήρια. Όταν εγκαθιστάτε την PHP χωρίς να καθορίσετε έκδοση στο Ubuntu 22.04, το σύστημα εγκαθιστά από προεπιλογή την PHP 8.1.

Αν χρειάζεται να διαχειριστείτε πολλές εκδόσεις PHP ή να εγκαταστήσετε μια διαφορετική έκδοση, σκεφτείτε τη χρήση του phpenv ή του phpbrew για τη διαχείριση εκδόσεων.

Εκτελέστε τις παρακάτω εντολές για να ενημερώσετε τη λίστα των διαθέσιμων πακέτων σας και στη συνέχεια εγκαταστήστε το PHP 8.1:

sudo apt update
sudo apt install --no-install-recommends php8.1

Η σημαία --no-install-recommends θα διασφαλίσει ότι άλλα πακέτα, όπως ο διακομιστής ιστού Apache, δεν θα εγκατασταθούν.

Ελέγξτε τις πληροφορίες της έκδοσης PHP σας με την ακόλουθη εντολή:

php -v

Θα λάβετε έξοδο όπως αυτή:

PHP 8.1.2-1ubuntu2.22 (cli) (built: Jul 15 2025 12:11:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.22, Copyright (c), by Zend Technologies

Αυτή η εγκατάσταση δοκιμάστηκε σε Ubuntu 22.04 LTS χρησιμοποιώντας πακέτα PHP 8.1 από τα επίσημα αποθετήρια του Ubuntu.

Εγκαταστήστε βασικές επεκτάσεις PHP για ανάπτυξη ιστοσελίδων:

sudo apt install -y php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bcmath

Αυτή η εντολή θα εγκαταστήσει τα ακόλουθα modules:

  • php8.1-cli - διερμηνέας εντολών, χρήσιμος για τον έλεγχο σεναρίων PHP από ένα κέλυφος ή για την εκτέλεση γενικών εργασιών scripting κελύφους
  • php8.1-common - τεκμηρίωση, παραδείγματα και κοινά modules για PHP
  • php8.1-mysql - για εργασία με βάσεις δεδομένων MySQL
  • php8.1-zip - για εργασία με συμπιεσμένα αρχεία
  • php8.1-gd - για εργασία με εικόνες
  • php8.1-mbstring - χρησιμοποιείται για τη διαχείριση μη ASCII συμβολοσειρών
  • php8.1-curl - σας επιτρέπει να κάνετε αιτήματα HTTP σε PHP
  • php8.1-xml - για εργασία με δεδομένα XML
  • php8.1-bcmath - χρησιμοποιείται όταν εργάζεστε με ακριβείς δεκαδικούς αριθμούς

Τα αρχεία διαμόρφωσης του PHP αποθηκεύονται στο /etc/php/8.1/. Το κύριο αρχείο διαμόρφωσης είναι το php.ini, το οποίο μπορεί να βρίσκεται σε διαφορετικούς φακέλους ανάλογα με την εγκατάστασή σας:

  • Ρύθμιση CLI: /etc/php/8.1/cli/php.ini
  • Ρύθμιση Apache: /etc/php/8.1/apache2/php.ini (αν είναι εγκατεστημένος ο Apache)
  • Διαμόρφωση PHP-FPM: /etc/php/8.1/fpm/php.ini (αν είναι εγκατεστημένο το PHP-FPM)

Επαληθεύστε τις εγκατεστημένες επεκτάσεις:

php -m

Αυτό εμφανίζει όλα τα φορτωμένα modules του PHP. Αν το php -v δείχνει διαφορετική έκδοση από αυτή που περιμένατε, μπορεί να έχετε εγκαταστήσει πολλές εκδόσεις PHP. Χρησιμοποιήστε το php8.1 -v για να ελέγξετε συγκεκριμένα την PHP 8.1.

Έχετε εγκαταστήσει το PHP και έχετε επαληθεύσει την έκδοση που έχετε σε λειτουργία. Έχετε επίσης εγκαταστήσει τυχόν απαραίτητα modules του PHP και καταφέρατε να εμφανίσετε τη λίστα με τα modules που έχετε φορτώσει.

Βήμα 2 — Ρύθμιση του PHP με Apache

Εγκαταστήστε το mod_php του Apache:

sudo apt install libapache2-mod-php8.1

Ενεργοποιήστε το module και επανεκκινήστε τον Apache:

sudo a2enmod php8.1
sudo systemctl restart apache2

Κατανόηση του mod_php: Το mod_php module ενσωματώνει την PHP απευθείας στη διαδικασία του Apache. Όταν ο Apache λαμβάνει ένα αίτημα για ένα αρχείο PHP, το επεξεργάζεται εσωτερικά χρησιμοποιώντας τον ενσωματωμένο διερμηνευτή PHP. Αυτό διαφέρει από το Nginx, το οποίο απαιτεί μια ξεχωριστή υπηρεσία PHP-FPM. Η εντολή a2enmod δημιουργεί έναν συμβολικό σύνδεσμο στο /etc/apache2/mods-enabled/ για να ενεργοποιήσει το module.

Επαληθεύστε ότι το Apache επεξεργάζεται σωστά το PHP δημιουργώντας ένα αρχείο δοκιμής στη ρίζα εγγράφων του Apache (συνήθως /var/www/html):

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Επισκεφθείτε το http://localhost/info.php στον περιηγητή σας. Θα πρέπει να δείτε τη σελίδα με τις πληροφορίες διαμόρφωσης του PHP. Αφαιρέστε αυτό το αρχείο μετά τη δοκιμή για λόγους ασφαλείας:

sudo rm /var/www/html/info.php

Επίλυση προβλημάτων Apache PHP

Αν το Apache δεν ξεκινά μετά την εγκατάσταση του mod_php:

Ελέγξτε το αρχείο καταγραφής σφαλμάτων του Apache:

sudo tail -20 /var/log/apache2/error.log

Συνηθισμένα προβλήματα περιλαμβάνουν:

  • Αντιφατικά PHP modules: Εάν έχετε πολλές εκδόσεις PHP, απενεργοποιήστε πρώτα τα άλλα PHP modules με sudo a2dismod php7.4 (αν υπάρχουν)
  • Σφάλματα σύνταξης στη διαμόρφωση του Apache: Εκτελέστε sudo apache2ctl configtest για έλεγχο

Εάν επισκεφθείτε το localhost και δείτε «Λειτουργεί!» αλλά τα αρχεία PHP εμφανίζονται ως απλό κείμενο:

Αυτό σημαίνει ότι η Apache δεν επεξεργάζεται PHP. Ελέγξτε:

  1. Ελέγξτε ότι το module είναι ενεργοποιημένο:
apache2ctl -M | grep php
  1. Αν δεν εμφανίζεται τίποτα, το module δεν έχει φορτωθεί. Επανενεργοποιήστε το:
sudo a2enmod php8.1
sudo systemctl restart apache2
  1. Ελέγξτε ότι το αρχείο PHP σας έχει τη σωστή επέκταση (.php) και περιέχει κώδικα PHP

Αν λάβετε το σφάλμα 403 Απαγορευμένο:

Ελέγξτε τα δικαιώματα αρχείου:

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

Σημείωση Ασφαλείας: Η συνάρτηση phpinfo() αποκαλύπτει λεπτομερείς πληροφορίες συστήματος. Μην αφήνετε ποτέ αρχεία που περιέχουν phpinfo() σε παραγωγικούς διακομιστές.

Διαμόρφωση Εικονικού Φιλοξενητή Apache

Για τοπική ανάπτυξη με προσαρμοσμένους τομείς, δημιουργήστε έναν εικονικό διακομιστή:

sudo nano /etc/apache2/sites-available/example.local.conf

Προσθέστε αυτή τη ρύθμιση:

<VirtualHost *:80>
    ServerName example.local
    DocumentRoot /var/www/example.local
    <Directory /var/www/example.local>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
  • ServerName: Το όνομα τομέα για αυτόν τον εικονικό διακομιστή
  • DocumentRoot: Όπου βρίσκονται τα αρχεία PHP σας
  • AllowOverride All: Επιτρέπει στα αρχεία .htaccess να παρακάμπτουν τις ρυθμίσεις του Apache (απαραίτητο για frameworks όπως το Laravel)
  • Require all granted: Επιτρέπει την πρόσβαση στον κατάλογο

Δημιουργήστε τον κατάλογο, ενεργοποιήστε τον ιστότοπο και επανεκκινήστε τον Apache:

sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo a2ensite example.local.conf
sudo systemctl restart apache2

Προσθέστε τον τομέα στο αρχείο σας /etc/hosts για τοπική πρόσβαση:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts

Επιλογή μεταξύ Apache και Nginx

Πριν ρυθμίσετε τον web server σας, σκεφτείτε ποιος ταιριάζει στις ανάγκες σας:

ΧαρακτηριστικόApache με mod_phpNginx με PHP-FPM
Επεξεργασία PHPΕνσωματωμένο στη διαδικασία ApacheΞεχωριστή υπηρεσία PHP-FPM
Χρήση ΜνήμηςΥψηλότερο (PHP σε κάθε διαδικασία Apache)Χαμηλότερο (ξεχωριστή ομάδα διεργασιών)
ΑπόδοσηΚατάλληλο για χαμηλή έως μέτρια κίνησηΚαλύτερο για υψηλή κυκλοφορία και ταυτόχρονες αιτήσεις
ΡύθμισηΑπλούστερη αρχική ρύθμισηΠιο σύνθετο (απαιτεί διαμόρφωση PHP-FPM)
Υποστήριξη .htaccessΦυσική υποστήριξηΔεν υποστηρίζεται (πρέπει να ρυθμιστεί στα μπλοκ του διακομιστή)
Χρήση ΠαραγωγήςΣυνηθισμένο σε κοινόχρηστη φιλοξενίαΣυνηθισμένο σε σύγχρονες αναπτύξεις
Καμπύλη ΜάθησηςΠιο εύκολο για αρχάριουςΠιο απότομη καμπύλη μάθησης
Αποδοτικότητα ΠόρωνΛιγότερο αποδοτικό υπό υψηλό φορτίοΠιο αποτελεσματικό υπό υψηλό φορτίο

Πότε να επιλέξετε το Apache:

  • Ξέρετε το Apache ή χρειάζεστε υποστήριξη για .htaccess
  • Ρύθμιση ενός απλού περιβάλλοντος ανάπτυξης
  • Δουλεύοντας με πλαίσια που βασίζονται σε μεγάλο βαθμό σε .htaccess (ορισμένες εγκαταστάσεις του WordPress)
  • Προτιμάς μια πιο απλή αρχική διαμόρφωση

Πότε να επιλέξετε το Nginx:

  • Χρειάζεστε καλύτερη απόδοση υπό υψηλό φορτίο
  • Θέλεις να καθρεφτίσεις σύγχρονα παραγωγικά περιβάλλοντα
  • Δημιουργείτε εφαρμογές που θα μπορούν να επεκταθούν
  • Προτιμάς μια πιο μοντέρνα αρχιτεκτονική

Και τα δύο λειτουργούν εξίσου καλά για τοπική ανάπτυξη. Η επιλογή συχνά εξαρτάται από την προσωπική προτίμηση ή την υπάρχουσα υποδομή.

Βήμα 3 — Ρύθμιση του PHP με Nginx

Εγκαταστήστε το PHP-FPM (Διαχειριστής Διεργασιών FastCGI):

sudo apt install php8.1-fpm

Ξεκινήστε και ενεργοποιήστε το PHP-FPM:

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

Κατανόηση του PHP-FPM και του FastCGI: Σε αντίθεση με το mod_php του Apache, το Nginx δεν επεξεργάζεται άμεσα PHP. Το PHP-FPM (FastCGI Process Manager) λειτουργεί ως ξεχωριστή υπηρεσία με την οποία επικοινωνεί το Nginx χρησιμοποιώντας το πρωτόκολλο FastCGI. Το FastCGI είναι ένα δυαδικό πρωτόκολλο για τη διασύνδεση προγραμμάτων με web servers—είναι ταχύτερο από το παραδοσιακό CGI γιατί διατηρεί τις διεργασίες ζωντανές μεταξύ των αιτήσεων.

Όταν το Nginx λαμβάνει ένα αίτημα για ένα αρχείο PHP, προωθεί το αίτημα στο PHP-FPM μέσω ενός socket Unix (ή σύνδεσης TCP). Το PHP-FPM επεξεργάζεται τον κώδικα PHP και επιστρέφει το αποτέλεσμα στο Nginx, το οποίο στη συνέχεια το αποστέλλει στον πελάτη. Αυτή η διαχωριστική διαδικασία επιτρέπει στο PHP-FPM να διαχειρίζεται τη δική του ομάδα διεργασιών, βελτιώνοντας την απόδοση και τη διαχείριση των πόρων.

Διαμόρφωση Μπλοκ Εξυπηρετητή Nginx

Δημιουργήστε μια διαμόρφωση μπλοκ διακομιστή:

sudo nano /etc/nginx/sites-available/example.local

Προσθέστε αυτή τη ρύθμιση:

server {
    listen 80;
    server_name example.local;
    root /var/www/example.local;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Επεξήγηση ρυθμίσεων:

  • root: Ο φάκελος όπου βρίσκονται τα αρχεία PHP σας
  • location ~ \.php$: Ταιριάζει με όλα τα αιτήματα που τελειώνουν σε .php χρησιμοποιώντας regex
  • include snippets/fastcgi-php.conf: Περιλαμβάνει την προεπιλεγμένη διαμόρφωση FastCGI του Nginx (ορίζει το SCRIPT_FILENAME και άλλες απαιτούμενες μεταβλητές)
  • fastcgi_pass unix:/var/run/php/php8.1-fpm.sock: Το Unix socket στο οποίο ακούει το PHP-FPM. Αυτός είναι ο τρόπος που το Nginx επικοινωνεί με το PHP-FPM. Η διαδρομή του socket ορίζεται στο /etc/php/8.1/fpm/pool.d/www.conf

Ενεργοποιήστε τον ιστότοπο και δοκιμάστε τη διαμόρφωση:

sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo ln -s /etc/nginx/sites-available/example.local /etc/nginx/sites-enabled/
sudo nginx -t

Αν το τεστ περάσει, επανεκκινήστε το Nginx:

sudo systemctl restart nginx

Προσθέστε τον τομέα στο /etc/hosts:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts

Δημιουργήστε ένα αρχείο δοκιμής PHP:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.local/info.php

Επισκεφθείτε το http://example.local/info.php. Θα πρέπει να δείτε τη σελίδα διαμόρφωσης του PHP. Αφαιρέστε το αρχείο δοκιμής μετά την επαλήθευση:

sudo rm /var/www/example.local/info.php

Αντιμετώπιση Προβλημάτων Nginx PHP

Αν λάβετε σφάλμα «502 Bad Gateway»:

Αυτό σημαίνει ότι το Nginx δεν μπορεί να επικοινωνήσει με το PHP-FPM. Ελέγξτε:

  1. Επαληθεύστε ότι το PHP-FPM εκτελείται:
sudo systemctl status php8.1-fpm
  1. Ελέγξτε ότι η διαδρομή του socket είναι σωστή. Η θέση του socket ορίζεται στο /etc/php/8.1/fpm/pool.d/www.conf:
grep listen /etc/php/8.1/fpm/pool.d/www.conf

Θα πρέπει να δείτε κάτι σαν listen=/run/php/php8.1-fpm.sock. Η διαδρομή στο config του Nginx πρέπει να ταιριάζει ακριβώς. Σημειώστε ότι το /var/run συχνά είναι ένα σύνδεσμος (symlink) προς το /run, οπότε και οι δύο διαδρομές λειτουργούν.

  1. Ελέγξτε τα δικαιώματα του αρχείου socket:
ls -la /var/run/php/php8.1-fpm.sock

Η υποδοχή θα πρέπει να ανήκει στον www-data ή στον χρήστη που τρέχει ο Nginx. Αν τα δικαιώματα είναι λάθος:

sudo chown www-data:www-data /var/run/php/php8.1-fpm.sock
  1. Ελέγξτε το αρχείο καταγραφής σφαλμάτων του Nginx:
sudo tail -20 /var/log/nginx/error.log

Μπορεί να δείτε σφάλματα όπως:

connect() to unix:/var/run/php/php8.1-fpm.sock failed (2: No such file or directory)

Αυτό υποδεικνύει ότι η διαδρομή της υποδοχής είναι λανθασμένη ή το PHP-FPM δεν εκτελείται.

Αν τα αρχεία PHP κατεβαίνουν αντί να εκτελούνται:

Αυτό σημαίνει ότι το Nginx δεν προωθεί τα αρχεία PHP στο PHP-FPM. Ελέγξτε:

  • Το μπλοκ location ~ \.php$ υπάρχει στη διαμόρφωση του διακομιστή σας
  • Η οδηγία fastcgi_pass δείχνει στην σωστή υποδοχή
  • Έχετε επανεκκινήσει το Nginx μετά την πραγματοποίηση αλλαγών

Αν λαμβάνετε σφάλματα «Αρχείο δεν βρέθηκε»:

Ελέγξτε αν υπάρχει το snippets/fastcgi-php.conf:

ls -la /etc/nginx/snippets/fastcgi-php.conf

Αυτό το αρχείο ορίζει το SCRIPT_FILENAME, το οποίο λέει στο PHP-FPM ποιο αρχείο να εκτελέσει. Χωρίς αυτό, το PHP-FPM δεν ξέρει ποιο αρχείο να επεξεργαστεί.

Βήμα 4 — Ρύθμιση του PHP για Ανάπτυξη

Ρυθμίστε το PHP για ανάπτυξη προσαρμόζοντας την αναφορά σφαλμάτων, τις ρυθμίσεις εμφάνισης και τα όρια μνήμης στο php.ini. Αυτές οι ρυθμίσεις διαφέρουν από τις ρυθμίσεις παραγωγής.

Η PHP χρησιμοποιεί ξεχωριστά αρχεία ρυθμίσεων για χρήση από τη γραμμή εντολών (CLI) και για τον ιστότοπο. Επεξεργαστείτε το κατάλληλο αρχείο:

Για CLI (όταν εκτελείτε PHP από το τερματικό):

sudo nano /etc/php/8.1/cli/php.ini

Για διακομιστή ιστού (Apache ή Nginx με PHP-FPM):

# For Apache
sudo nano /etc/php/8.1/apache2/php.ini

# For PHP-FPM (Nginx)
sudo nano /etc/php/8.1/fpm/php.ini

Σημείωση: Εάν χρησιμοποιείτε τόσο το CLI όσο και τον web server, χρειάζεται να ρυθμίσετε τα αρχεία ξεχωριστά. Οι αλλαγές στο cli/php.ini δεν επηρεάζουν αιτήματα web, και οι αλλαγές στο apache2/php.ini ή fpm/php.ini δεν επηρεάζουν τα scripts του CLI.

Βασικές Ρυθμίσεις Ανάπτυξης

Βρείτε και ενημερώστε αυτές τις ρυθμίσεις στο αρχείο σας php.ini:

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
date.timezone = America/New_York

Τι κάνει κάθε ρύθμιση:

  • display_errors=On: Εμφανίζει τα σφάλματα PHP απευθείας στον περιηγητή (χρήσιμο για εντοπισμό σφαλμάτων, επικίνδυνο σε παραγωγή)
  • display_startup_errors=On: Εμφανίζει τα σφάλματα που συμβαίνουν κατά την εκκίνηση του PHP
  • error_reporting=E_ALL: Αναφέρει όλους τους τύπους σφαλμάτων (προειδοποιήσεις, ειδοποιήσεις, κ.λπ.)
  • log_errors=On: Καταγράφει τα σφάλματα σε ένα αρχείο καταγραφής
  • error_log: Όπου η PHP γράφει τα αρχεία καταγραφής σφαλμάτων
  • memory_limit=256M: Μέγιστη μνήμη που μπορεί να χρησιμοποιήσει ένα σενάριο (αυξήστε την αν λάβετε σφάλματα «μνήμη εξαντλήθηκε»)
  • upload_max_filesize=64M: Μέγιστο μέγεθος για ανεβασμένα αρχεία
  • post_max_size=64M: Μέγιστο μέγεθος για δεδομένα POST (πρέπει να είναι μεγαλύτερο από upload_max_filesize)
  • max_execution_time=300: Μέγιστος χρόνος εκτέλεσης ενός script (σε δευτερόλεπτα)
  • date.timezone: Ορίζει τη προεπιλεγμένη ζώνη ώρας (χρησιμοποιήστε τη τοπική σας ζώνη ώρας: Asia/Kolkata, Europe/London, UTC, κ.λπ.)

Προειδοποίηση Παραγωγής: Μην χρησιμοποιείτε ποτέ αυτές τις ρυθμίσεις ανάπτυξης σε περιβάλλον παραγωγής. Πάντα να ορίζετε display_errors=Off και να χρησιμοποιείτε τα κατάλληλα επίπεδα αναφοράς σφαλμάτων σε ζωντανούς διακομιστές.

Αφού κάνετε αλλαγές, επανεκκινήστε τον διακομιστή ιστού σας:

# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm

Επαλήθευση της Διαμόρφωσής Σας

Ελέγξτε αν οι αλλαγές σας εφαρμόστηκαν:

# For CLI
php -i | grep display_errors

# For web server (create a test file)
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/test.php

Επισκεφθείτε το αρχείο δοκιμής στον περιηγητή σας και αναζητήστε το display_errors. Θα πρέπει να εμφανίζει On. Αφαιρέστε το αρχείο δοκιμής μετά την επαλήθευση.

Αν οι αλλαγές σας δεν εμφανιστούν:

  1. Βεβαιωθείτε ότι επεξεργαστήκατε το σωστό αρχείο php.ini (CLI vs web server)
  2. Ελέγξτε για τυπογραφικά λάθη στα ονόματα των ρυθμίσεων (είναι ευαίσθητα σε πεζά και κεφαλαία)
  3. Επανεκκινήστε τον διακομιστή ιστού σας μετά την πραγματοποίηση αλλαγών
  4. Ορισμένες ρυθμίσεις μπορούν να παρακαμφθούν μέσω .htaccess (Apache) ή php.ini στον φάκελο του έργου σας

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

Βήμα 5 — Ρύθμιση του Composer για Διαχείριση Εξαρτήσεων (Προαιρετικό)

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

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

Αν και παρόμοιο, το Composer δεν είναι διαχειριστής πακέτων με την ίδια έννοια όπως το yum ή το apt. Ασχολείται με «πακέτα» ή βιβλιοθήκες, αλλά τα διαχειρίζεται ανά έργο, εγκαθιστώντας τα σε ένα φάκελο (π.χ. vendor) μέσα στο έργο σας. Από προεπιλογή, δεν εγκαθιστά τίποτα παγκοσμίως. Συνεπώς, είναι ένας διαχειριστής εξαρτήσεων. Ωστόσο, υποστηρίζει ένα παγκόσμιο έργο για ευκολία μέσω της εντολής global.

Αυτή η ιδέα δεν είναι νέα, και το Composer αντλεί μεγάλη έμπνευση από το npm του Node και το bundler της Ruby.

Ας υποθέσουμε :

  • Έχετε ένα έργο που εξαρτάται από πολλές βιβλιοθήκες.
  • Μερικές από αυτές τις βιβλιοθήκες εξαρτώνται από άλλες βιβλιοθήκες.

Συνθέτης:

  • Σας επιτρέπει να δηλώσετε τις βιβλιοθήκες από τις οποίες εξαρτάστε.
  • Βρίσκει ποιες εκδόσεις ποίων πακέτων μπορούν και πρέπει να εγκατασταθούν και τις εγκαθιστά κατεβάζοντάς τες στο έργο σας.
  • Σας επιτρέπει να ενημερώσετε όλες τις εξαρτήσεις σας με μία εντολή.
  • Σας επιτρέπει να δείτε το κεφάλαιο Βασική Χρήση για περισσότερες λεπτομέρειες σχετικά με τη δήλωση εξαρτήσεων.

Κατεβάστε το πρόγραμμα εγκατάστασης του Composer:

curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php

Επαληθεύστε την ακεραιότητα του προγράμματος εγκατάστασης ελέγχοντας το SHA-384 hash του. Αποκτήστε το πιο πρόσφατο hash:

HASH=$(curl -sS https://composer.github.io/installer.sig)

Ελέγξτε αν το hash ταιριάζει:

php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"

Πρέπει να δεις:

Installer verified

Αν δείτε Installer corrupt, η λήψη ήταν ελλιπής ή έχει αλλοιωθεί. Κατεβάστε ξανά τον εγκαταστάτη και επαληθεύστε το hash. Αν συνεχίσει να αποτυγχάνει, ελέγξτε τη σύνδεση στο διαδίκτυο ή δοκιμάστε να κατεβάσετε από διαφορετικό δίκτυο.

Εγκατάσταση του Composer παγκοσμίως:

sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

Θα λάβετε αποτέλεσμα παρόμοιο με αυτό:

All settings correct for using Composer
Downloading...

Composer (version 2.3.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

Δοκιμάστε την εγκατάστασή σας:

composer

Θα λάβετε έξοδο όπως η παρακάτω:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.3.5 2022-04-13 16:43:00

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display help for the given command. When no command is given display help for the list command
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi|--no-ansi           Force (or disable --no-ansi) ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
      --no-scripts               Skips the execution of all scripts defined in composer.json file.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

Αυτό επιβεβαιώνει ότι ο Composer εγκαταστάθηκε επιτυχώς στο σύστημά σας και είναι διαθέσιμο σε ολόκληρο το σύστημα.

Σημείωση: Εάν προτιμάτε να έχετε ξεχωριστά εκτελέσιμα αρχεία Composer για κάθε έργο που φιλοξενείτε στον διακομιστή σας, μπορείτε να το εγκαταστήσετε τοπικά, για κάθε έργο ξεχωριστά. Αυτή η μέθοδος είναι επίσης χρήσιμη όταν ο χρήστης του συστήματός σας δεν έχει άδεια να εγκαταστήσει λογισμικό σε ολόκληρο το σύστημα.

Για να το κάνετε αυτό, χρησιμοποιήστε την εντολή php /tmp/composer-setup.php χωρίς κανένα όρισμα. Αυτή η εντολή θα δημιουργήσει ένα αρχείο composer.phar στον τρέχοντα φάκελό σας, το οποίο μπορείτε να εκτελέσετε χρησιμοποιώντας php composer.phar.

Βήμα 6 — Χρήση του Composer σε ένα έργο PHP

Ως τελικό βήμα, μπορείτε προαιρετικά να αρχικοποιήσετε το έργο σας με το composer init. Αυτό θα δημιουργήσει το αρχείο composer.json που θα διαχειρίζεται τις εξαρτήσεις του έργου σας. Η αρχικοποίηση του έργου θα σας επιτρέψει επίσης να καθορίσετε λεπτομέρειες του έργου όπως Συντάκτης και Άδεια, καθώς και να χρησιμοποιήσετε τη λειτουργία αυτοφόρτωσης του Composer. Μπορείτε να καθορίσετε τις εξαρτήσεις τώρα ή να τις προσθέσετε αργότερα.

Δημιουργήστε έναν κατάλογο έργου και αρχικοποιήστε το Composer:

cd ~
mkdir example-project
cd example-project
composer init

Η εκτέλεση αυτής της εντολής θα ξεκινήσει τον οδηγό εγκατάστασης. Τα στοιχεία που εισάγετε στον οδηγό μπορούν να ενημερωθούν αργότερα, οπότε μπορείτε να αφήσετε τις προεπιλογές και απλώς να πατήσετε ENTER. Αν δεν είστε έτοιμοι να εγκαταστήσετε οποιεσδήποτε εξαρτήσεις, μπορείτε να επιλέξετε no. Εισάγετε τα στοιχεία σας σε κάθε ερώτημα:

                                            
  Welcome to the Composer config generator  
                                            


This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [sammy/example-project]:  sammy/project1
Description []:
Author [n to skip]: Sammy <sammy@linux-console.net>
Minimum Stability []: 
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: 

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

Add PSR-4 autoload mapping? Maps namespace "Sammy\Project1" to the entered relative path. [src/, n to skip]: n

{
    "name": "sammy/project1",
    "type": "project",
    "authors": [
        {
            "name": "Sammy",
            "email": "sammy@linux-console.net"
        }
    ],
    "require": {}
}

Do you confirm generation [yes]? yes

Πριν επιβεβαιώσετε τη δημιουργία, θα δείτε ένα δείγμα του αρχείου composer.json που θα δημιουργήσει ο οδηγός. Αν όλα φαίνονται σωστά, μπορείτε να επιβεβαιώσετε την προεπιλογή ναι. Αν χρειάζεται να ξεκινήσετε ξανά, επιλέξτε όχι.

Την πρώτη φορά που ορίζετε οποιαδήποτε εξάρτηση, το Composer θα δημιουργήσει έναν φάκελο vendor. Όλες οι εξαρτήσεις εγκαθίστανται σε αυτόν τον φάκελο vendor. Το Composer δημιουργεί επίσης ένα αρχείο composer.lock. Αυτό το αρχείο καθορίζει την ακριβή έκδοση κάθε εξάρτησης και υπο-εξάρτησης που χρησιμοποιείται στο έργο σας. Αυτό διασφαλίζει ότι οποιοδήποτε μηχάνημα εκτελεί το πρόγραμμα σας, θα χρησιμοποιεί ακριβώς την ίδια έκδοση κάθε πακέτου.

Σημείωση: Ο φάκελος vendor δεν θα πρέπει ποτέ να δεσμεύεται στο σύστημα ελέγχου εκδόσεων (VCS) σας. Ο φάκελος vendor περιέχει μόνο πακέτα που έχετε εγκαταστήσει από άλλους προμηθευτές. Οι ίδιοι οι προμηθευτές θα συντηρούν τον δικό τους κώδικα στα δικά τους συστήματα ελέγχου εκδόσεων. Θα πρέπει να παρακολουθείτε μόνο τον κώδικα που γράφετε εσείς. Αντί να δεσμεύετε τον φάκελο vendor, χρειάζεται μόνο να δεσμεύετε τα αρχεία composer.json και composer.lock. Μπορείτε να μάθετε περισσότερα για το πώς να αγνοείτε συγκεκριμένα αρχεία στο How To Use Git: A Reference Guide.

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

Βήμα 7 — Δοκιμή του περιβάλλοντος PHP

Δημιουργήστε και εκτελέστε ένα βασικό σενάριο PHP για να δοκιμάσετε την εγκατάστασή σας:

nano hello.php

Προσθέστε τον ακόλουθο κώδικα PHP:

<?php
echo 'Hello World!';
?>

Αποθηκεύστε και κλείστε το αρχείο (πατήστε CTRL+X, μετά Y, και στη συνέχεια ENTER). Εκτελέστε το σενάριο:

php hello.php

Αν το PHP επεξεργαστεί σωστά, θα δείτε μόνο τους χαρακτήρες μέσα στα εισαγωγικά:

Hello World!

Η PHP έχει επεξεργαστεί επιτυχώς το σενάριο, που σημαίνει ότι το περιβάλλον PHP σας είναι εγκατεστημένο με επιτυχία και είστε έτοιμοι να συνεχίσετε το ταξίδι σας στον προγραμματισμό.

Βήμα 8 — Ρύθμιση Πραγματικών Έργων PHP

Τα σύγχρονα PHP frameworks όπως τα Laravel, Symfony και WordPress απαιτούν συγκεκριμένα extensions της PHP και το Composer. Εγκαταστήστε το framework χρησιμοποιώντας το Composer ή τον εγκαταστάτη του framework και στη συνέχεια ρυθμίστε τον web server σας να δείχνει στον δημόσιο φάκελο του έργου.

Ρύθμιση του Laravel

Εγκαταστήστε το Laravel χρησιμοποιώντας το Composer:

composer create-project laravel/laravel my-laravel-app
cd my-laravel-app

Αυτή η εντολή κατεβάζει το Laravel και όλες τις εξαρτήσεις του. Η διαδικασία μπορεί να πάρει μερικά λεπτά.

Το Laravel απαιτεί αυτές τις επεκτάσεις PHP (εγκατεστημένες στο Βήμα 1):

  • php8.1-mbstring - Διαχείριση συμβολοσειρών πολλαπλών byte
  • php8.1-xml - Ανάλυση XML
  • php8.1-curl - αιτήσεις HTTP
  • php8.1-zip - Διαχείριση αρχείων
  • php8.1-bcmath - Μαθηματικά αυθαίρετης ακρίβειας

Αν το Laravel λέει «λειπει το mbstring» παρόλο που το έχετε εγκαταστήσει:

Αυτό συνήθως σημαίνει ότι η επέκταση είναι εγκατεστημένη αλλά δεν έχει φορτωθεί. Ελέγξτε:

  1. Ελέγξτε αν η επέκταση είναι εγκατεστημένη:
php -m | grep mbstring
  1. Αν λείπει, εγκαταστήστε το:
sudo apt install php8.1-mbstring
  1. Αν είναι εγκατεστημένο αλλά δεν εμφανίζεται, επανεκκινήστε τον διακομιστή ιστού σας:
# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm
  1. Ελέγξτε ποιο αρχείο php.ini χρησιμοποιείται. Ο εγκαταστάτης του Laravel χρησιμοποιεί CLI PHP, οπότε ελέγξτε:
php --ini

Βεβαιωθείτε ότι η επέκταση είναι ενεργοποιημένη στο αρχείο php.ini του CLI.

Επαλήθευση εγκατάστασης Laravel:

Μετά την ολοκλήρωση της εγκατάστασης, ξεκινήστε τον διακομιστή ανάπτυξης του Laravel:

php artisan serve

Πρέπει να δεις:

INFO  Server running on [http://127.0.0.1:8000]

Επισκεφθείτε το http://localhost:8000 στον περιηγητή σας. Θα πρέπει να δείτε τη σελίδα καλωσορίσματος του Laravel.

Για ρυθμίσεις παρόμοιες με παραγωγής με Apache ή Nginx:

Ρυθμίστε τον διακομιστή ιστού σας ώστε να δείχνει στον φάκελο public (όχι στη ρίζα του έργου). Το public/index.php του Laravel είναι το σημείο εισόδου για όλα τα αιτήματα.

Σημείωση: Μάθετε περισσότερα για το Laravel στο σεμινάριό μας για το Πώς να Εγκαταστήσετε το Laravel σε Ubuntu.

Ρύθμιση του WordPress

Κατεβάστε και αποσυμπιέστε το WordPress:

cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo chown -R www-data:www-data /var/www/wordpress

Το WordPress απαιτεί μια βάση δεδομένων MySQL ή MariaDB. Εγκαταστήστε το MySQL αν χρειάζεται:

sudo apt install mysql-server
sudo mysql_secure_installation

Το σενάριο mysql_secure_installation θα σας ζητήσει να:

  • Ορίστε έναν κωδικό root
  • Κατάργηση ανώνυμων χρηστών
  • Απαγόρευση σύνδεσης root απομακρυσμένα
  • Αφαίρεση βάσης δεδομένων δοκιμής
  • Επαναφόρτωση πινάκων προνομίων

Δημιουργήστε μια βάση δεδομένων και έναν χρήστη για το WordPress:

sudo mysql -u root -p

Στην προτροπή του MySQL:

CREATE DATABASE wordpress_db;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Αντικαταστήστε το secure_password με έναν ισχυρό κωδικό πρόσβασης. Το WordPress θα χρησιμοποιήσει αυτά τα διαπιστευτήρια για να συνδεθεί στη βάση δεδομένων.

Αν το WordPress δεν μπορεί να συνδεθεί με τη βάση δεδομένων:

  1. Ελέγξτε αν το MySQL εκτελείται:
sudo systemctl status mysql
  1. Δοκιμάστε τη σύνδεση της βάσης δεδομένων:
mysql -u wpuser -p wordpress_db

Αν αυτό αποτύχει, ελέγξτε:

  • Το όνομα χρήστη και ο κωδικός είναι σωστά
  • Η βάση δεδομένων υπάρχει: SHOW DATABASES;
  • Ο χρήστης έχει δικαιώματα: SHOW GRANTS FOR 'wpuser'@'localhost';
  1. Ελέγξτε αν η επέκταση MySQL του PHP είναι εγκατεστημένη:
php -m | grep mysql

Αν λείπει, εγκαταστήστε το:

sudo apt install php8.1-mysql
sudo systemctl restart apache2  # or php8.1-fpm for Nginx

Ολοκλήρωση της εγκατάστασης του WordPress:

Ρυθμίστε τον διαδικτυακό σας διακομιστή να δείχνει στο /var/www/wordpress (δείτε το Βήμα 2 για Apache ή το Βήμα 3 για Nginx). Επισκεφθείτε τον ιστότοπο στον περιηγητή σας. Το WordPress θα σας ζητήσει να:

  1. Επιλέξτε τη γλώσσα σας
  2. Εισάγετε τα διαπιστευτήρια της βάσης δεδομένων (χρησιμοποιήστε τη βάση δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης που δημιουργήσατε)
  3. Ολοκληρώστε την εγκατάσταση

Σημείωση: Για λεπτομερή εγκατάσταση του WordPress, δείτε Πώς να εγκαταστήσετε το WordPress με LAMP σε Ubuntu.

Ρύθμιση του Symfony

Εγκαταστήστε το Symfony χρησιμοποιώντας το Composer:

composer create-project symfony/website-skeleton my-symfony-app
cd my-symfony-app

Το Symfony απαιτεί τις ίδιες επεκτάσεις όπως και το Laravel. Ξεκινήστε τον διακομιστή ανάπτυξης:

symfony server:start

Ή χρησιμοποιήστε τον ενσωματωμένο διακομιστή του PHP:

php -S localhost:8000 -t public

Αν η εγκατάσταση του Symfony αποτύχει λόγω σφαλμάτων επεκτάσεων:

Ελέγξτε ότι όλες οι απαιτούμενες επεκτάσεις είναι εγκατεστημένες και φορτωμένες:

php -m | grep -E 'mbstring|xml|curl|zip|bcmath'

Αν λείπει κάποιο, εγκαταστήστε το και επανεκκινήστε τον web server σας.

Βήμα 9 — Καλύτερες Πρακτικές για Τοπική Ανάπτυξη

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

Θέματα Ασφαλείας

Ακόμη και στην τοπική ανάπτυξη, ακολουθήστε τις καλύτερες πρακτικές ασφάλειας:

  1. Απενεργοποιήστε επικίνδυνες συναρτήσεις PHP στην παραγωγή: Συναρτήσεις όπως exec(), system() και shell_exec() θα πρέπει να περιορίζονται στα αρχεία php.ini της παραγωγής.

  2. Χρησιμοποιήστε μεταβλητές περιβάλλοντος: Αποθηκεύστε ευαίσθητες ρυθμίσεις σε αρχεία .env (μην τα ανεβάζετε ποτέ σε σύστημα ελέγχου εκδόσεων). Το Laravel και το Symfony υποστηρίζουν αυτό εγγενώς.

  3. Ορίστε σωστά δικαιώματα αρχείων: Τα αρχεία του διακομιστή ιστού θα πρέπει να είναι αναγνώσιμα από τον χρήστη του διακομιστή ιστού αλλά να μην είναι εγγράψιμα:

sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type d -exec chmod 755 {} \;
sudo find /var/www/your-project -type f -exec chmod 644 {} \;

Γιατί αυτά τα δικαιώματα είναι σημαντικά: Οι κατάλογοι χρειάζονται 755 (ανάγνωση, εγγραφή, εκτέλεση για τον ιδιοκτήτη· ανάγνωση και εκτέλεση για τους άλλους) ώστε ο web server να μπορεί να τους διασχίζει. Τα αρχεία χρειάζονται 644 (ανάγνωση και εγγραφή για τον ιδιοκτήτη· μόνο ανάγνωση για τους άλλους) ώστε ο web server να μπορεί να τα διαβάζει αλλά όχι να τα τροποποιεί. Αυτό αποτρέπει κακόβουλα scripts από το να αντικαθιστούν τα αρχεία σας.

Ενσωμάτωση Ελέγχου Έκδοσης

Χρησιμοποιείτε πάντα έλεγχο εκδόσεων για τα έργα σας σε PHP. Αρχικοποιήστε το Git στον κατάλογο του έργου σας:

cd /var/www/your-project
git init

Δημιουργήστε ένα αρχείο .gitignore για να αποκλείσετε περιττά αρχεία:

/vendor/
/node_modules/
.env
.DS_Store
*.log

Βελτιστοποίηση Απόδοσης

Για καλύτερη απόδοση στην τοπική ανάπτυξη:

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

  • Χρησιμοποιήστε την βελτιστοποίηση αυτόματου φορτωτή του Composer:

composer install --optimize-autoloader --no-dev
  • Διαμορφώστε τις ομάδες PHP-FPM για καλύτερη διαχείριση πόρων αν χρησιμοποιείτε Nginx.

Βήμα 10 — Αντιμετώπιση Συχνών Προβλημάτων

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

Οι επεκτάσεις PHP δεν φορτώνουν

Αν το php -m δεν εμφανίζει μια επέκταση που μόλις εγκαταστήσατε:

  • Ελέγξτε αν είναι πραγματικά εγκατεστημένο:
dpkg -l | grep php8.1-extension_name
  • Ελέγξτε αν το αρχείο επέκτασης υπάρχει:
ls /usr/lib/php/*/extension_name.so
  • Επιβεβαιώστε ότι είναι ενεργοποιημένο στο php.ini. Ορισμένες επεκτάσεις χρειάζεται να ενεργοποιηθούν ρητά:
grep -i extension_name /etc/php/8.1/*/php.ini
  • Επανεκκινήστε τον διακομιστή ιστού σας:
# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm
  • Ελέγξτε ποιο php.ini χρησιμοποιείται:
php --ini

Βεβαιώσου ότι ελέγχεις το σωστό αρχείο php.ini (CLI ή διακομιστή web).

Αν η επέκταση εξακολουθεί να μην εμφανίζεται:

  • Ορισμένες επεκτάσεις απαιτούν επιπλέον βιβλιοθήκες συστήματος. Ελέγξτε την τεκμηρίωση της επέκτασης
  • Ελέγξτε ότι έχετε εγκαταστήσει τη σωστή έκδοση (php8.1-extension, όχι php8.0-extension)
  • Ελέγξτε για αντικρουόμενες εκδόσεις PHP που μπορεί να προκαλούν προβλήματα

500 Εσωτερικό Σφάλμα Διακομιστή

Ένα σφάλμα 500 σημαίνει ότι ο διακομιστής αντιμετώπισε ένα σφάλμα αλλά δεν μπορεί να εμφανίσει λεπτομέρειες. Ελέγξτε τα αρχεία καταγραφής σφαλμάτων:

# Apache
sudo tail -20 /var/log/apache2/error.log

# Nginx
sudo tail -20 /var/log/nginx/error.log

# PHP-FPM
sudo tail -20 /var/log/php8.1-fpm.log

Συνηθισμένοι λόγοι και λύσεις:

  1. Λανθασμένα δικαιώματα αρχείου: Τα αρχεία PHP πρέπει να είναι αναγνώσιμα από τον χρήστη του διακομιστή ιστού
sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type f -exec chmod 644 {} \;
sudo find /var/www/your-project -type d -exec chmod 755 {} \;
  1. Ελλείπουσες επεκτάσεις PHP: Ελέγξτε το αρχείο καταγραφής σφαλμάτων για μηνύματα όπως «Κλήση σε ανύπαρκτη συνάρτηση». Εγκαταστήστε την ελλείπουσα επέκταση και επανεκκινήστε τον διακομιστή ιστού.

  2. Σφάλματα σύνταξης σε αρχεία PHP: Το αρχείο καταγραφής σφαλμάτων θα εμφανίσει το αρχείο και τον αριθμό γραμμής. Συχνά προβλήματα:

    • Λείπουν ελληνικά ερωτηματικά
    • Μη κλειστές αγκύλες ή εισαγωγικά
    • Χρήση μη ορισμένων συναρτήσεων ή κλάσεων
  3. Λανθασμένη διαμόρφωση διακομιστή ιστού:

    • Apache: Ελέγξτε τη διαμόρφωση του εικονικού υποδοχέα, τη φόρτωση των μονάδων
    • Nginx: Επαλήθευση διαδρομής socket PHP-FPM, ρύθμιση FastCGI
  4. Υπέρβαση ορίου μνήμης PHP: Αυξήστε το memory_limit στο php.ini αν δείτε σφάλματα “Επιτρεπόμενο μέγεθος μνήμης εξαντλήθηκε”

Συγκρούσεις Έκδοσης PHP

Αν php -v εμφανίζει μια διαφορετική έκδοση από αυτή που περιμένατε, έχετε εγκαταστήσει πολλές εκδόσεις PHP.

Ελέγξτε ποιες εκδόσεις είναι εγκατεστημένες:

dpkg -l | grep php | grep -E 'php[0-9]'

Χρησιμοποιήστε ρητά την σωστή έκδοση:

php8.1 -v
php8.1 -m

Αναβαθμίστε τον διακομιστή ιστού σας για να χρησιμοποιεί PHP 8.1:

Για το Apache, απενεργοποιήστε τα άλλα PHP modules και ενεργοποιήστε το PHP 8.1:

sudo a2dismod php7.4 php8.0  # if they exist
sudo a2enmod php8.1
sudo systemctl restart apache2

Για το PHP-FPM, σταματήστε άλλες εκδόσεις και ξεκινήστε το PHP 8.1:

sudo systemctl stop php7.4-fpm php8.0-fpm  # if they exist
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

Ορισμός του PHP 8.1 ως προεπιλεγμένης έκδοσης CLI:

sudo update-alternatives --set php /usr/bin/php8.1

Προβλήματα μνήμης του συνθέτη

Αν ο Composer εξαντλήσει τη μνήμη, θα δείτε ένα σφάλμα όπως:

Fatal error: Allowed memory size of 134217728 bytes exhausted

Διόρθωσέ το εκτελώντας το Composer με αυξημένη μνήμη:

php -d memory_limit=512M /usr/local/bin/composer install

Ή αυξήστε το όριο μνήμης του PHP στο php.ini:

memory_limit = 512M

Αν η εγκατάσταση του Composer αποτύχει λόγω ασυμφωνίας κατακερματισμού:

Ο έλεγχος κατακερματισμού ενδέχεται να αποτύχει εάν:

  • Ο εγκαταστάτης ενημερώθηκε από τότε που τον κατεβάσατε (κατεβάστε τον ξανά για να λάβετε το πιο πρόσφατο hash)
  • Η λήψη σας ήταν κατεστραμμένη (δοκιμάστε ξανά να κατεβάσετε)
  • Βρίσκεστε πίσω από έναν διακομιστή μεσολάβησης που τροποποιεί αρχεία (ελέγξτε τις ρυθμίσεις του δικτύου σας)

Προβλήματα Σύνδεσης Βάσης Δεδομένων

Αν η εφαρμογή PHP σας δεν μπορεί να συνδεθεί με MySQL/MariaDB, μπορεί να δείτε σφάλματα όπως:

SQLSTATE[HY000] [2002] No such file or directory

ή

Access denied for user 'username'@'localhost'

Βήματα αντιμετώπισης προβλημάτων:

  1. Ελέγξτε αν η υπηρεσία βάσης δεδομένων λειτουργεί:
sudo systemctl status mysql

Αν δεν λειτουργεί, ξεκινήστε το:

sudo systemctl start mysql
sudo systemctl enable mysql
  1. Ελέγξτε αν η επέκταση MySQL του PHP είναι εγκατεστημένη:
php -m | grep mysql

Αν λείπει, εγκαταστήστε το:

sudo apt install php8.1-mysql
sudo systemctl restart apache2  # or php8.1-fpm for Nginx
  1. Επαληθεύστε τα διαπιστευτήρια και τα δικαιώματα της βάσης δεδομένων. Δοκιμάστε τη σύνδεση:
mysql -u username -p database_name

Αν αυτό αποτύχει, ελέγξτε:

  • Το όνομα χρήστη και ο κωδικός είναι σωστά
  • Η βάση δεδομένων υπάρχει: SHOW DATABASES;
  • Ο χρήστης έχει άδειες: SHOW GRANTS FOR 'username'@'localhost';

Σημείωση: Για τη ρύθμιση του MySQL, δείτε Πώς να Εγκαταστήσετε το MySQL σε Ubuntu.

Το αρχείο PHP εμφανίζεται ως απλό κείμενο αντί να εκτελείται

Αν το αρχείο PHP σας εμφανίζεται ως απλό κείμενο στον περιηγητή:

  1. Ελέγξτε την επέκταση του αρχείου: Πρέπει να είναι .php, όχι .txt ή .html

  2. Ελέγξτε αν το PHP επεξεργάζεται αρχεία:

    • Apache: Ελέγξτε ότι το mod_php είναι ενεργοποιημένο: apache2ctl -M | grep php
    • Nginx: Ελέγξτε ότι το PHP-FPM εκτελείται και ότι η διαδρομή του socket είναι σωστή
  3. Ελέγξτε τα δικαιώματα αρχείου: Ο διακομιστής ιστού πρέπει να μπορεί να διαβάσει το αρχείο

  4. Επαληθεύστε ότι το αρχείο περιέχει κώδικα PHP: Βεβαιωθείτε ότι ξεκινά με <?php ή <?

  5. Έλεγχος διαμόρφωσης του web server:

    • Apache: Ο εικονικός οικοδεσπότης ενδέχεται να μην έχει ρυθμιστεί σωστά
    • Nginx: Το μπλοκ location ~ \.php$ μπορεί να λείπει ή να είναι λάθος

Προβλήματα Μεταφόρτωσης Αρχείων

Εάν η μεταφόρτωση αρχείων αποτύχει, ενδέχεται να δείτε σφάλματα όπως:

The uploaded file exceeds the upload_max_filesize directive

Έλεγξε αυτές τις ρυθμίσεις php.ini:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

Σημαντικό: Το post_max_size πρέπει να είναι μεγαλύτερο από το upload_max_filesize. Αν ορίσετε upload_max_filesize=100M, ορίστε post_max_size=110M ή μεγαλύτερο.

Αν οι μεταφορτώσεις εξακολουθούν να αποτυγχάνουν:

  1. Ελέγξτε το αρχείο καταγραφής σφαλμάτων για συγκεκριμένα μηνύματα σφάλματος
  2. Ελέγξτε αν ο φάκελος ανεβάσματος υπάρχει και είναι εγγράψιμος:
sudo chmod 755 /path/to/upload/directory
sudo chown www-data:www-data /path/to/upload/directory
  1. Έλεγχος χώρου στο δίσκο: df -h
  2. Επαληθεύστε ότι η φόρμα χρησιμοποιεί enctype="multipart/form-data"

Ξεκινήστε ξανά τον διακομιστή ιστού σας αφού κάνετε αλλαγές στο php.ini.

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

Πώς μπορώ να εγκαταστήσω το PHP 8.1 σε Ubuntu;

Εγκαταστήστε το PHP 8.1 χρησιμοποιώντας τον διαχειριστή πακέτων του Ubuntu: sudo apt update && sudo apt install php8.1. Το PHP 8.1 είναι διαθέσιμο στα προεπιλεγμένα αποθετήρια του Ubuntu, επομένως δεν απαιτούνται πρόσθετες πηγές πακέτων.

Ποιες επεκτάσεις PHP είναι απαραίτητες για την ανάπτυξη;

Οι απαραίτητες επεκτάσεις περιλαμβάνουν php8.1-cli, php8.1-mysql, php8.1-curl, php8.1-xml, php8.1-mbstring, php8.1-zip, php8.1-gd και php8.1-bcmath. Αυτές καλύπτουν τη σύνδεση με βάσεις δεδομένων, αιτήματα HTTP, χειρισμό συμβολοσειρών και επεξεργασία εικόνων.

Πώς διαμορφώνω το PHP με Apache ή Nginx;

Για τον Apache, εγκαταστήστε το libapache2-mod-php8.1 και ενεργοποιήστε το με sudo a2enmod php8.1. Για τον Nginx, εγκαταστήστε το php8.1-fpm και ρυθμίστε τον Nginx να στέλνει τα αιτήματα PHP στο socket του PHP-FPM χρησιμοποιώντας FastCGI.

Πώς μπορώ να επαληθεύσω ότι η PHP είναι εγκατεστημένη σωστά;

Τρέξτε php -v για να ελέγξετε την έκδοση του PHP. Δημιουργήστε ένα αρχείο test με <?php phpinfo(); ?> και αποκτήστε πρόσβαση σε αυτό μέσω του web server σας για να δείτε αναλυτικές πληροφορίες διαμόρφωσης του PHP.

Μπορώ να τρέξω Laravel ή WordPress τοπικά με αυτή τη ρύθμιση;

Ναι. Το Laravel απαιτεί το Composer και τις τυπικές επεκτάσεις PHP που αναφέρονται παραπάνω. Το WordPress χρειάζεται μια βάση δεδομένων MySQL επιπλέον της PHP. Και τα δύο πλαίσια λειτουργούν με ρυθμίσεις είτε Apache είτε Nginx.

Πώς εγκαθιστώ το Composer για έργα PHP;

Κατεβάστε τον εγκαταστάτη του Composer, επαληθεύστε το hash του και εγκαταστήστε τον παγκοσμίως: sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer. Επαληθεύστε με composer --version.

Πώς να αντιμετωπίσω την έλλειψη επεκτάσεων PHP;

Ελέγξτε τις εγκατεστημένες επεκτάσεις με php -m. Εγκαταστήστε τις ελλείπουσες επεκτάσεις χρησιμοποιώντας sudo apt install php8.1-extension_name και στη συνέχεια επανεκκινήστε τον ιστότοπό σας.

Πώς μπορώ να ρυθμίσω την αναφορά σφαλμάτων PHP για ανάπτυξη;

Επεξεργαστείτε το php.ini και ρυθμίστε display_errors=On, error_reporting=E_ALL και log_errors=On. Θυμηθείτε να απενεργοποιήσετε την εμφάνιση σφαλμάτων σε περιβάλλοντα παραγωγής.

Ποια είναι η διαφορά μεταξύ Apache και Nginx για PHP;

Το Apache χρησιμοποιεί το mod_php για να επεξεργάζεται απευθείας PHP (η PHP ενσωματώνεται στη διαδικασία του Apache), ενώ το Nginx απαιτεί PHP-FPM (FastCGI Process Manager) για να χειριστεί τα αιτήματα PHP (η PHP εκτελείται ως ξεχωριστή υπηρεσία). Δείτε την ενότητα «Επιλογή ανάμεσα σε Apache και Nginx» παραπάνω για έναν πίνακα συγκριτικής ανάλυσης. Και οι δύο προσεγγίσεις λειτουργούν καλά· επιλέξτε ανάλογα με τις ανάγκες απόδοσης, την εξοικείωση και την υπάρχουσα υποδομή σας.

Μπορώ να εγκαταστήσω πολλές εκδόσεις PHP στο ίδιο σύστημα;

Ναι, χρησιμοποιώντας εργαλεία όπως το phpenv ή το phpbrew. Ωστόσο, για τα περισσότερα σενάρια ανάπτυξης, μία μόνο έκδοση PHP είναι αρκετή. Χρησιμοποιήστε διαχειριστές εκδόσεων όταν χρειάζεται να δοκιμάσετε εφαρμογές με διαφορετικές εκδόσεις PHP.

Συμπέρασμα

Τώρα έχετε ένα πλήρως ρυθμισμένο περιβάλλον ανάπτυξης PHP 8.1 σε Ubuntu με υποστήριξη για διακομιστές ιστού Apache και Nginx. Η εγκατάστασή σας περιλαμβάνει βασικές επεκτάσεις PHP, το Composer για διαχείριση εξαρτήσεων και σωστή ρύθμιση για τοπική ανάπτυξη.

Πριν ξεκινήσετε το επόμενο έργο σας, σκεφτείτε να εγκαταστήσετε ένα Ολοκληρωμένο Περιβάλλον Ανάπτυξης (IDE) όπως το VS Code με επεκτάσεις PHP για επισήμανση σύνταξης, εντοπισμό σφαλμάτων και υποστήριξη IntelliSense.

Με το περιβάλλον σας έτοιμο, μπορείτε να εξερευνήσετε περαιτέρω την ανάπτυξη σε PHP:

  • Μάθετε τα βασικά του PHP με το Πώς να Εργάζεστε με Συμβολοσειρές στο PHP
  • Δημιουργήστε APIs χρησιμοποιώντας Πώς να Χρησιμοποιήσετε τα Web APIs σε PHP
  • Κατανοήστε τις συναρτήσεις στο Πώς να χρησιμοποιείτε συναρτήσεις στο PHP
  • Δημιουργήστε βάσεις δεδομένων με τον Οδηγό Εγκατάστασης και Χρήσης του PostgreSQL σε Ubuntu

Για παραγωγικές εγκαταστάσεις, σκεφτείτε να χρησιμοποιήσετε την πλατφόρμα εφαρμογών Linux-Console.net για να αναπτύξετε τις εφαρμογές PHP σας απευθείας από το GitHub με αυτόματη κλιμάκωση και πιστοποιητικά SSL.

Ευχαριστούμε που μάθατε με την Κοινότητα του Linux-Console.net.