Μεταβλητές περιβάλλοντος Php. Μεταβλητές Περιβάλλοντος CGI

10.08.2022

Μεταβλητές Περιβάλλοντος

Μεταβλητές περιβάλλοντος στην PHP

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

HTTP_ACCEPT

Αυτή η μεταβλητή παραθέτει όλα Τύποι δεδομένων MIME, το οποίο μπορεί να ερμηνευτεί από το πρόγραμμα περιήγησης. Η γραμμή */* σημαίνει ότι το πρόγραμμα περιήγησης κατανοεί οποιονδήποτε τύπο.

HTTP_ACCEPT= image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*

HTTP_REFERER

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

HTTP_REFERER= http://www.spravkaweb.ru/php/pril/

HTTP_COOKIE

Αυτή η μεταβλητή αποθηκεύει όλα τα cookie με κωδικοποίηση URL.

HTTP_COOKIE= hotlog=1; ZDEDebuggerPresent=php,phtml,php3; b=b; PHPSESSID=16805922a9258cda274316e60f649cf8

HTTP_USER_AGENT

Προσδιορίζει το πρόγραμμα περιήγησης του χρήστη. Για να καθορίσετε τον τύπο του προγράμματος περιήγησης, πρέπει να ελέγξετε αυτήν τη γραμμή για τις λέξεις: εάν το πρόγραμμα περιήγησης είναι - Internet Explorer, τότε θα υπάρχει η υποσυμβολοσειρά MSIE και εάν υπάρχει μόνο η λέξη Mozilla, τότε αυτή είναι το Netscape.

Για παράδειγμα:

HTTP_USER_AGENT= Mozilla/4.0 (συμβατό; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

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

HTTP_HOST= www.spravkaweb.ru

HTTP_FROM

Διεύθυνση e-mailο χρήστης που έστειλε το αίτημα.

SERVER_NAME

Όνομα τομέα ή διεύθυνση IP διακομιστή.

SERVER_NAME= www.spravkaweb.ru

SERVER_SOFTWARE

Το όνομα και η έκδοση του προγράμματος διακομιστή που ανταποκρίνεται στο αίτημα πελάτη.

SERVER_PORT

Αυτή η μεταβλητή περιέχει τη θύρα διακομιστή στην οποία είχε πρόσβαση το πρόγραμμα περιήγησης του χρήστη. Συνήθως αυτό είναι 80. Η μεταβλητή μπορεί επίσης να χρησιμοποιηθεί για να σχηματίσει την παράμετρο κεφαλίδας Location.

SERVER_PROTOCOL

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

SERVER_PROTOCOL= HTTP/1.1

REMOTE_ADDR

Αυτή η μεταβλητή περιέχει τη διεύθυνση IP (ή το όνομα τομέα) του κεντρικού υπολογιστή του χρήστη στον οποίο ξεκίνησε το πρόγραμμα περιήγησης.

REMOTE_PORT

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

REMOTE_USER

Το όνομα αναγνώρισης του χρήστη που υποβάλλει το αίτημα.

SCRIPT_NAME

Περιέχει το όνομα του αρχείου που περιέχει αυτό το σενάριο. Αυτή η μεταβλητή είναι βολική για χρήση κατά τη διαμόρφωση της κεφαλίδας Τοποθεσία κατά την ανακατεύθυνση στον εαυτό σας (self-redirect), καθώς και για την αντικατάσταση της τιμής του χαρακτηριστικού action της ετικέτας

στη σελίδα που καλεί το σενάριο όταν εκκινείται χωρίς παραμέτρους (για να μην συνδέεται με ένα συγκεκριμένο όνομα σεναρίου).

DOCUMENT_ROOT

Ο ριζικός κατάλογος του δέντρου εγγράφων Ιστού.

ΑΙΤΗΣΗ_ΜΕΘΟΔΟΣ

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

QUERY_STRING

Περιέχει τις παραμέτρους που εμφανίζονται μετά το ερωτηματικό στη διεύθυνση URL. Να σας υπενθυμίσουμε ότι είναι διαθέσιμα τόσο με τη μέθοδο GET όσο και με τη μέθοδο POST (αν στην τελευταία περίπτωση ορίστηκαν στο χαρακτηριστικό action της ετικέτας ).

PATH_INFO

Περιέχει πρόσθετες πληροφορίεςγια το μονοπάτι.

PATH_TRANSLATED

Ίδιες πληροφορίες όπως στη μεταβλητή PATH_INFOμε ένα πρόθεμα που καθορίζει τη διαδρομή προς τον ριζικό κατάλογο του δέντρου εγγράφων Ιστού.

CONTENT_TYPE

Τύπος δεδομένων πολυμέσων του αιτήματος.

CONTENT_LENGTH

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

GATEWAY_INTERFACE

Η έκδοση CGI που χρησιμοποιεί ο διακομιστής.

Παράδειγμα χρήσης μεταβλητών περιβάλλοντος

Μεταβλητές Περιβάλλοντος

Μεταβλητές Περιβάλλοντος:

echo "Ήρθατε από: ".getenv("HTTP_REFERER")."
";

$br=getenv("HTTP_USER_AGENT");

if(strpos($br,"MSIE")!==false) echo "Έχετε Internet Explorer
";

else echo "Έχετε Netscape ή άλλα.
";

echo "Η IP σας: ".getenv("REMOTE_ADDR")."
";

echo "Εδώ είναι οι παράμετροι στη γραμμή του προγράμματος περιήγησης: ".getenv("QUERY_STRING");

Από το βιβλίο The Art of Programming for Unix συγγραφέας Raymond Eric Stephen

Από το βιβλίο The Art of Programming for Unix συγγραφέας Raymond Eric Stephen

Από το βιβλίο Programming in Ruby [Γλωσσική ιδεολογία, θεωρία και πρακτική εφαρμογής] από τον Fulton Hal

Από το βιβλίο HTML 5, CSS 3 και Web 2.0. Ανάπτυξη σύγχρονων ιστοσελίδων. συγγραφέας Dronov Vladimir

Από το βιβλίο Ανάπτυξη Εφαρμογών στο περιβάλλον Linux. Δεύτερη έκδοση συγγραφέας Τζόνσον Μάικλ Κ.

10.4. Μεταβλητές περιβάλλοντος Όταν εκτελείται ένα πρόγραμμα Unix, το περιβάλλον που είναι διαθέσιμο σε αυτό περιλαμβάνει ένα σύνολο σχέσεων ονόματος-τιμής (τόσο τα ονόματα όσο και οι τιμές είναι συμβολοσειρές). Ορισμένα από αυτά εγκαθίστανται χειροκίνητα από τον χρήστη, άλλα εγκαθίστανται από το σύστημα κατά τη διάρκεια

Από το βιβλίο Firebird DATABASE DEVELOPER'S GUIDE από την Borri Helen

10.4.1. Μεταβλητές περιβάλλοντος συστήματος Υπάρχουν πολλές γνωστές μεταβλητές περιβάλλοντος που μπορεί να αποκτήσει ένα πρόγραμμα όταν εκτελείται από ένα κέλυφος Unix. Αυτές οι μεταβλητές (ειδικά HOME) πρέπει συχνά να αξιολογούνται πριν από την ανάγνωση του τοπικού αρχείου

Από το βιβλίο Προγραμματισμός Linuxσε παραδείγματα συγγραφέας Ρόμπινς Άρνολντ

10.4.2. Προσαρμοσμένες μεταβλητές περιβάλλοντος Παρόλο που οι εφαρμογές είναι ελεύθερες να ερμηνεύουν μεταβλητές περιβάλλοντος εκτός του συνόλου που ορίζεται από το σύστημα, η πραγματική χρήση μιας τέτοιας δυνατότητας είναι επί του παρόντος αρκετά ασυνήθιστη.

Από το βιβλίο του συγγραφέα

10.4.3. Πότε να χρησιμοποιείτε τις μεταβλητές περιβάλλοντος Οι μεταβλητές περιβάλλοντος χρήστη και συστήματος έχουν κοινό το γεγονός ότι περιέχουν δεδομένα που αποθηκεύονται σε μεγάλες ποσότητες αρχεία ρυθμίσεωνθα ήταν κουραστικό. Και εξαιρετικά κουραστικό

Από το βιβλίο του συγγραφέα

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

Από το βιβλίο του συγγραφέα

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

Από το βιβλίο του συγγραφέα

22.3.3. Μεταβλητές περιβάλλοντος Σε προγράμματα που χρησιμοποιούν δυνατότητες setuid ή setgid, πρέπει να δίνεται ιδιαίτερη προσοχή στις ρυθμίσεις περιβάλλοντος. Αυτές οι μεταβλητές καθορίζονται από τον χρήστη που ενεργοποίησε το πρόγραμμα, ανοίγοντας έτσι την πόρτα για επιθέσεις. Η πιο εμφανής επίθεση

Από το βιβλίο του συγγραφέα

Μεταβλητές περιβάλλοντος Οι μεταβλητές περιβάλλοντος είναι καθολικές ρυθμίσεις συστήματος που χρησιμοποιούνται κατά την αρχική εκκίνηση. λειτουργικό σύστημα. Σε Windows, Linux και στα περισσότερα συστήματα UNIXο διακομιστής Firebird αναγνωρίζει και χρησιμοποιεί ορισμένες μεταβλητές περιβάλλοντος εάν αυτές

Από το βιβλίο του συγγραφέα

Πού ορίζονται οι μεταβλητές περιβάλλοντος των Windows Ο τύπος των μεταβλητών περιβάλλοντος και ο τρόπος ορισμού τους διαφέρουν από μία; εκδόσεις Windowsσε άλλον. Στον πίνακα Ο Πίνακας 3.1 δείχνει τους τύπους (εάν υπάρχουν) και τις μεθόδους καθορισμού των τιμών των μεταβλητών περιβάλλοντος. Ρυθμίσεις μεταβλητής περιβάλλοντος για

Από το βιβλίο του συγγραφέα

Κεφάλαιο 2 Ορίσματα, επιλογές και μεταβλητές περιβάλλοντος Η πρώτη εργασία οποιουδήποτε προγράμματος είναι συνήθως η ερμηνεία των επιλογών και των ορισμάτων της γραμμής εντολών. Αυτό το κεφάλαιο εξετάζει πώς τα προγράμματα C (και C++) λαμβάνουν τα ορίσματα της γραμμής εντολών τους, περιγράφοντας το πρότυπο

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

κύρια ιδέα

Εκτελέστε την υπηρεσία, τις μικροϋπηρεσίες και τις εξαρτημένες εφαρμογές μέσα στο ίδιο οικοσύστημα, που έχει ρυθμιστεί χρησιμοποιώντας μεταβλητές περιβάλλοντος.
Πρόβλημα
Αυτό το άρθρο επαναλαμβάνει τις "μεταβλητές περιβάλλοντος" πάρα πολλές φορές.
Εκτός κουτιού, το php-fpm αγνοεί τις καθολικές μεταβλητές περιβάλλοντος (συνάρτηση getenv), ενώ το php cli μπορεί να τις λάβει.
Φόντο
Μπορείτε να παραλείψετε αυτήν την ενότητα εάν έχετε ήδη εργαστεί με το .env

ΣΕ αυτή τη στιγμήΕργάζομαι σε ένα έργο γραμμένο σε ZF2. Για τη διαμόρφωση του έργου, χρησιμοποιήθηκαν αρχεία διαμόρφωσης για διαφορετικά περιβάλλοντα. Αυτό δημιουργεί μεγάλο αριθμόδιπλότυπες διαμορφώσεις στο αποθετήριο του έργου κάπως έτσι:
  • session.global.php
  • session.local.php.dist
  • session.unittest.php.dist
  • db.global.php
  • db.local.php.dist
  • db.unittest.php.dist
Αυτά τα διπλότυπα πρέπει να συγχρονίζονται συνεχώς μεταξύ τους. Επιπλέον, αποθηκεύουν κάποια λογική PHP μέσα τους, η οποία δημιουργεί διπλασιασμό κώδικα.

Έτσι το έργο λαμβάνει πλέον υπόψη το περιβάλλον, αλλά...

Ενώ η ανάπτυξη πραγματοποιήθηκε σε μηχανές εργασίας, το έργο διάβασε το αρχείο .env και όλα λειτούργησαν. Αλλά όταν ανέπτυξα ένα περιβάλλον δοκιμής, αποδείχτηκε ότι αν ορίσω μεταβλητές περιβάλλοντος του πραγματικού συστήματος, το php-fpm τις αγνοεί. Διάφορες συνταγές από την Google και το StackOverflow συνοψίζονται σε έναν ή τον άλλο αυτοματισμό της χρήσης δύο γνωστών μεθόδων:

1. Περάστε μεταβλητές μέσω nginx χρησιμοποιώντας την παράμετρο fastcgi_param test SOMEENV.
2. Ρύθμιση μεταβλητών σε μορφή env στη διαμόρφωση του χώρου συγκέντρωσης διεργασιών εργασίας php-fpm.

Τόσο η πρώτη όσο και η δεύτερη επιλογή είναι βολικές για ορισμένες ειδικές καταστάσεις. Αλλά αν πιστεύετε στο παράδειγμα της «διαμόρφωσης του περιβάλλοντος, όχι της εφαρμογής», τότε τέτοιες μέθοδοι αποδεικνύονται πολύ πιο δύσκολες από, για παράδειγμα, απλά να τοποθετήσετε ένα αρχείο .env στο φάκελο του έργου. Αλλά ένας ενορχηστρωτής, ένα σύστημα CI, ή απλώς διαχειριστής συστήματοςδεν πρέπει να γνωρίζουν τις λεπτομέρειες της υλοποίησης του έργου, δεν είναι κομψό.

Προτεινόμενη λύση
Έχοντας συνδυάσει διάφορες συνταγές από το Διαδίκτυο, βρήκα την παρακάτω λειτουργική λύση.
Δοκιμασμένο σε Centos 7, PHP 5.6.14.

1. Ανοίξτε το /etc/php.ini - Αντικαταστήστε το variables_order = "GPCS" με variables_order = "EGPCS" # Μετά από αυτό, η PHP θα προσθέσει μεταβλητές περιβάλλοντος στον καθολικό χώρο # http://php.net/manual/ru/ini. core.php #ini.variables-order 2. Ανοίξτε το /etc/php-fpm.d/www.conf, για να μην συγχέεται με το /etc/php-fpm.conf (σε διαφορετικά συστήματαμπορεί να βρίσκεται σε διαφορετικά μέρη, αυτή είναι η διαμόρφωση συγκέντρωσης διαδικασίας www για php-fpm. - Προσθήκη (ή αντικατάσταση, εάν υπάρχει): clear_env = όχι # απενεργοποιήστε την εκκαθάριση των καθολικών μεταβλητών για τους εργαζόμενους που έχουν ξεκινήσει 3. Ορίστε τις απαραίτητες μεταβλητές περιβάλλοντος στο /etc/environment (τυπική σύνταξη A=B) 4. ln -fs /etc/environment / etc/sysconfig/php-fpm # τώρα η διαμόρφωση της μεταβλητής περιβάλλοντος υπηρεσίας php-fpm θα είναι απλώς ένας σύνδεσμος προς την καθολική διαμόρφωση 5. systemctl daemon-reload && service php-fpm επανεκκίνηση

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

Πλεονεκτήματα της προτεινόμενης λύσης:
- Οι μεταβλητές που είναι αποθηκευμένες στο /etc/environment είναι προσβάσιμες σε διαφορετικές εφαρμογές. Μπορείτε να καλέσετε το echo $MYSQL_HOST σε κέλυφος ή getenv("MYSQL_HOST") σε php.
- Οι μεταβλητές περιβάλλοντος που δεν έχουν οριστεί ρητά στο /etc/environment δεν θα καταλήγουν σε php-fpm. Αυτό επιτρέπει στον ενορχηστρωτή να ελέγχει το περιβάλλον έξω από το απομονωμένο σύστημα στο οποίο εκτελείται η υπηρεσία.

Μειονεκτήματα:
- Δυστυχώς, δεν βρήκα μια λειτουργική εντολή για reload σε php-fpm, παρόμοια με το nginx, οπότε αν αλλάξετε /etc/environment, πρέπει να κάνετε systemctl daemon-reload && service php-fpm επανεκκίνηση.

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

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

Ας ρίξουμε μια πιο προσεκτική ματιά:

  • Πώς λειτουργεί;
  • είναι πραγματικά καλή ιδέα;
  • πώς να δουλέψω μαζί τους στην PHP;
  • και τέλος, μερικές συμβουλές και κοινά λάθη που πρέπει να αποφύγετε - οι παγίδες που πέσαμε στον πραγματικό κόσμο!

Δεν θα καλύψουμε τον τρόπο ρύθμισης μεταβλητών περιβάλλοντος στον διακομιστή ιστού/Docker/crontabs... επειδή εξαρτάται από το σύστημα, λογισμικό, και θέλουμε να εστιάσουμε στις ίδιες τις μεταβλητές περιβάλλοντος.

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

Env vars 101

Όταν εκτελείται ένα πρόγραμμα, κληρονομεί όλες τις μεταβλητές περιβάλλοντος από τους γονείς του. Έτσι, εάν ορίσετε τη μεταβλητή YOLO σε covfefe στο bash και στη συνέχεια εκτελέσετε την εντολή, θα μπορείτε να διαβάσετε YOLO σε οποιαδήποτε θυγατρική διαδικασία.

$ YOLO=covfefe php -r "echo getenv("YOLO");" covfefe

Εφόσον αυτή η μεταβλητή ορίζεται μόνο τοπικά, δεν μπορούμε να την διαβάσουμε από άλλο τερματικό (άλλο γονικό). Η ιδέα είναι να βεβαιωθείτε ότι η εφαρμογή σας κληρονομεί πάντα τις σωστές μεταβλητές.

Μπορείτε να δείτε όλες τις μεταβλητές περιβάλλοντος γραμμή εντολώνεκτελώντας την ακόλουθη εντολή, αλλά δεν θα δείτε τη μεταβλητή YOLO επειδή μεταβιβάστηκε μόνο στην εντολή php αμέσως και δεν ορίστηκε στην τρέχουσα διαδικασία:

Μπορείτε να ορίσετε τη μεταβλητή περιβάλλοντος χρησιμοποιώντας την εξαγωγή<имя>=<значение> :

$ εξαγωγή YOLO=covfefe

Τα ονόματα των μεταβλητών έχουν διάκριση πεζών-κεφαλαίων και η σύμβαση είναι να χρησιμοποιούνται ονόματα μόνο στα αγγλικά, με κεφαλαία, με _ ως διαχωριστικό (το λεγόμενο στυλ "snake" με κεφαλαία). Πιθανότατα γνωρίζετε ήδη ορισμένες μεταβλητές - όπως PATH , DISPLAY , HTTP_PROXY ...

Βέλτιστες πρακτικές σήμερα

josegonzalez/dotenv , με γνώμονα την ασφάλεια:

Αυτή η βιβλιοθήκη δεν θα συμπληρώσει superglobals από προεπιλογή:

$Loader = new josegonzalez\Dotenv\Loader("path/to/.env"); // Ανάλυση του file.env: $Loader->parse(); // Στείλτε την ανάλυση result.env στη μεταβλητή $_ENV: $Loader->toEnv();

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

symfony/dotenv , ένα νέο παιδί στο μπλοκ:

Διαθέσιμο από το Symfony 3.3. Αυτό το στοιχείο φροντίζει το αρχείο .env όπως τα άλλα, και επίσης γεμίζει υπερσφαιρικούς πίνακες:

$dotenv = νέο Symfony\Component\Dotenv\Dotenv(); $dotenv->load(__DIR__."/.env"); $dbUser = getenv("DB_USER"); $dbUser = $_ENV["DB_USER"]; $dbUser = $_SERVER["DB_USER"];

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

Οι μεταβλητές περιβάλλοντος είναι πάντα συμβολοσειρές

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

Κλάση Db ( δημόσια συνάρτηση σύνδεση (όνομα κεντρικού υπολογιστή συμβολοσειράς, θύρα int) ( ) ) // Αυτό δεν θα λειτουργήσει: $db->connect($_SERVER["DATABASE_HOSTNAME"], $_SERVER["DATABASE_PORT"]);

Στο Symfony μπορείτε πλέον να μετατρέψετε μεταβλητές , και ακόμα περισσότερα - ανάγνωση ενός αρχείου, αποκωδικοποίηση json...

Μεταβλητές περιβάλλοντος παντού ή όχι

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

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

Η τάση να έχω μόνο μία μεταβλητή όπως η APP_CONFIG_PATH και να την διαβάζω μέσω του "%env(json:file:APP_CONFIG_PATH)%" για μένα μοιάζει με την επανεφεύρεση του παλιού καλού parameters.yml, εκτός εάν η διαχείριση του αρχείου γίνεται αυτόματα από ένα αξιόπιστο εργαλείο (όπως το AWS Secret Store ). Και υπάρχει επίσης το envkey.com που σας επιτρέπει να διαχειρίζεστε τις μεταβλητές του περιβάλλοντος σας σε ένα μέρος χωρίς να ασχολείστε μόνοι σας με τα αρχεία, μου αρέσει αυτή η προσέγγιση καθώς είναι πολύ πιο εύκολη!

Μεταβλητές Περιβάλλοντος

Μεταβλητές περιβάλλοντος στην PHP

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

HTTP_ACCEPT

Αυτή η μεταβλητή παραθέτει όλα Τύποι δεδομένων MIME, το οποίο μπορεί να ερμηνευτεί από το πρόγραμμα περιήγησης. Η γραμμή */* σημαίνει ότι το πρόγραμμα περιήγησης κατανοεί οποιονδήποτε τύπο.

HTTP_ACCEPT= image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*

HTTP_REFERER

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

HTTP_REFERER= http://www.spravkaweb.ru/php/pril/

HTTP_COOKIE

Αυτή η μεταβλητή αποθηκεύει όλα τα cookie με κωδικοποίηση URL.

HTTP_COOKIE= hotlog=1; ZDEDebuggerPresent=php,phtml,php3; b=b; PHPSESSID=16805922a9258cda274316e60f649cf8

HTTP_USER_AGENT

Προσδιορίζει το πρόγραμμα περιήγησης του χρήστη. Για να καθορίσετε τον τύπο του προγράμματος περιήγησης, πρέπει να ελέγξετε αυτήν τη γραμμή για την παρουσία λέξεων: εάν το πρόγραμμα περιήγησης είναι Internet Explorer, τότε θα υπάρχει η υποσυμβολοσειρά MSIE και εάν υπάρχει μόνο η λέξη Mozilla, τότε αυτό είναι το Netscape.

Για παράδειγμα:

HTTP_USER_AGENT= Mozilla/4.0 (συμβατό; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

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

HTTP_HOST= www.spravkaweb.ru

HTTP_FROM

Διεύθυνση email του χρήστη που έστειλε το αίτημα.

SERVER_NAME

Όνομα τομέα ή διεύθυνση IP διακομιστή.

SERVER_NAME= www.spravkaweb.ru

SERVER_SOFTWARE

Το όνομα και η έκδοση του προγράμματος διακομιστή που ανταποκρίνεται στο αίτημα πελάτη.

SERVER_PORT

Αυτή η μεταβλητή περιέχει τη θύρα διακομιστή στην οποία είχε πρόσβαση το πρόγραμμα περιήγησης του χρήστη. Συνήθως αυτό είναι 80. Η μεταβλητή μπορεί επίσης να χρησιμοποιηθεί για να σχηματίσει την παράμετρο κεφαλίδας Location.

SERVER_PROTOCOL

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

SERVER_PROTOCOL= HTTP/1.1

REMOTE_ADDR

Αυτή η μεταβλητή περιέχει τη διεύθυνση IP (ή το όνομα τομέα) του κεντρικού υπολογιστή του χρήστη στον οποίο ξεκίνησε το πρόγραμμα περιήγησης.

REMOTE_PORT

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

REMOTE_USER

Το όνομα αναγνώρισης του χρήστη που υποβάλλει το αίτημα.

SCRIPT_NAME

Περιέχει το όνομα του αρχείου που περιέχει αυτό το σενάριο. Αυτή η μεταβλητή είναι βολική για χρήση κατά τη διαμόρφωση της κεφαλίδας Τοποθεσία κατά την ανακατεύθυνση στον εαυτό σας (self-redirect), καθώς και για την αντικατάσταση της τιμής του χαρακτηριστικού action της ετικέτας στη σελίδα που καλεί το σενάριο όταν εκκινείται χωρίς παραμέτρους (για να μην συνδέεται με ένα συγκεκριμένο όνομα σεναρίου).

DOCUMENT_ROOT

Ο ριζικός κατάλογος του δέντρου εγγράφων Ιστού.

ΑΙΤΗΣΗ_ΜΕΘΟΔΟΣ

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

QUERY_STRING

Περιέχει τις παραμέτρους που εμφανίζονται μετά το ερωτηματικό στη διεύθυνση URL. Να σας υπενθυμίσουμε ότι είναι διαθέσιμα τόσο με τη μέθοδο GET όσο και με τη μέθοδο POST (αν στην τελευταία περίπτωση ορίστηκαν στο χαρακτηριστικό action της ετικέτας ).

PATH_INFO

Περιέχει πρόσθετες πληροφορίες για τη διαδρομή.

PATH_TRANSLATED

Ίδιες πληροφορίες όπως στη μεταβλητή PATH_INFOμε ένα πρόθεμα που καθορίζει τη διαδρομή προς τον ριζικό κατάλογο του δέντρου εγγράφων Ιστού.

CONTENT_TYPE

Τύπος δεδομένων πολυμέσων του αιτήματος.

CONTENT_LENGTH

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

GATEWAY_INTERFACE

Η έκδοση CGI που χρησιμοποιεί ο διακομιστής.

Παράδειγμα χρήσης μεταβλητών περιβάλλοντος

Προσοχή!Το άρθρο γράφτηκε για Windows 7, αλλά δεν υπάρχουν θεμελιώδεις διαφορές στην προσθήκη PHP σε μεταβλητές περιβάλλοντος σε άλλες εκδόσεις (Window XP, Windows Vista, Windows 8, ...).

Πληροφορίες!Όλες οι διαδρομές στις ρυθμίσεις θα υποδεικνύονται με βάση το γεγονός ότι το Denwer είναι εγκατεστημένο στο φάκελο D:/web. Όταν χρησιμοποιείτε δεδομένα από το άρθρο, μην ξεχάσετε να αλλάξετε αυτήν τη διαδρομή στη δική σας.

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

Ας υποθέσουμε ότι το Denwer είναι εγκατεστημένο στο φάκελο D:/web.

Κάντε δεξί κλικ στο εικονίδιο "Υπολογιστής" Ιδιότητες:

Πρόσθετες παράμετροι συστήματος:

Καρτέλα "Για προχωρημένους", κουμπί "Ρυθμίσεις περιβάλλοντος...":

Ομάδα Ρυθμίσεις συστήματος, επισημάνετε τη μεταβλητή Διαδρομή και κάντε κλικ στο κουμπί Επεξεργασία:

Προσθέστε τη γραμμή D:\web\usr\local\php5; και κάντε κλικ στο "Ok":

Επανεκκινήστε το Denwer. Τώρα μπορείτε να ανοίξετε την κονσόλα (Win + R και πληκτρολογήστε cmd) και να ελέγξετε τη λειτουργία της PHP, πληκτρολογήστε την εντολή:

Για να διορθώσετε αυτά τα σφάλματα, ανοίξτε το αρχείο D:/web/usr/local/php5/php.ini. Βρείτε τις μεταβλητές extension_dir, zend_extension, session.save_path και ορίστε τις στις ακόλουθες τιμές.