Απόλυτο και σχετικό όνομα διαδρομής. Περιγραφή διαδρομών: απόλυτη, σχετική, UNC και διεύθυνση URL

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

Από αυτό το άρθρο θα μάθουμε:

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

Διαδρομές προς αρχεία στον διακομιστή

Η απόλυτη διαδρομή για τον διακομιστή είναι η πλήρης διαδρομή από τη ρίζα στο σενάριο. Μπορείτε να μάθετε την πλήρη διαδρομή του σεναρίου χρησιμοποιώντας τη "μαγική" σταθερά __FILE__:

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

D:\OpenServer\domains\site\index.php- για OpenServer σε Windows

/var/www/site/index.php - για UNIX

Φυσικά, η συνάρτηση include() και τα ανάλογά της μπορούν να περιλαμβάνουν ένα αρχείο από την απόλυτη διαδρομή του:

Η σχετική διαδρομή για τον διακομιστή είναι η διαδρομή από το φάκελο στον οποίο βρίσκεται η τρέχουσα δέσμη ενεργειών. Ας φανταστούμε ότι υπάρχουν 2 σενάρια στον ιστότοπό μας: index.php και config.php. Στη συνέχεια, μπορείτε να συνδέσετε το δεύτερο από το πρώτο χρησιμοποιώντας τόσο απόλυτες όσο και σχετικές διαδρομές:

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

Index.php scripts script1.php script2.php

Τα περιεχόμενα των αρχείων θα είναι ως εξής:

Εκκινήστε το αρχείο index.php στο πρόγραμμα περιήγησής σας. Εάν όλα γίνονται σωστά, θα εμφανιστεί το μήνυμα Η σύνδεση πέτυχε. Τώρα δοκιμάστε να μετακινήσετε το αρχείο script2.php στη ρίζα του ιστότοπου, στο ίδιο επίπεδο με το index.php .

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

Πλοήγηση με χρήση σχετικών μονοπατιών.

Σημειώστε ότι οι σχετικές διαδρομές δεν ξεκινούν ποτέ με κάθετο / . Εάν υπάρχει μια πρώτη κάθετο, η PHP θα θεωρήσει τη διαδρομή ως απόλυτη.

folder1/folder2/folder3/script1.php- αναζήτηση για ένα αρχείο σε έναν υποφάκελο

../index.php - μετακίνηση προς τα πάνω κατά ένα φάκελο

../../../index.php - μετακίνηση προς τα επάνω 3 φακέλους

Πώς να καθορίσετε τη διαδρομή προς ένα αρχείο στον διακομιστή;

Ξεχάστε τις σχετικές διαδρομές. Να παρέχετε πάντα μόνο απόλυτες διαδρομές αρχείων. Ριζοσπάστης, σωστά; Μην ανησυχείτε, η κοινότητα της PHP έχει βρει 2 απλούς (υπάρχουν και δύσκολοι :)) τρόπους για να καθορίσετε την πλήρη διαδρομή... χωρίς να καθορίσετε την πλήρη διαδρομή.

Ο πρώτος τρόπος είναι να χρησιμοποιήσετε τη συνάρτηση dirname(). Παίρνει μια διαδρομή προς ένα αρχείο και επιστρέφει τη διαδρομή χωρίς το όνομα του αρχείου, π.χ. το φάκελο στον οποίο βρίσκεται το αρχείο. Συνδυάζοντας __FILE__ και dirname() μπορούμε να πάρουμε τον τρέχοντα φάκελο σεναρίου:

Τώρα γνωρίζουμε με βεβαιότητα ότι το αρχείο script2.php θα συμπεριληφθεί, που βρίσκεται στον ίδιο φάκελο με το τρέχον σενάριο.

Ο δεύτερος τρόπος είναι η χρήση σταθερών. Χρησιμοποιείται σε πολλά δημοφιλή CMS και μοιάζει με αυτό:

Δημιουργείται μια σταθερή DIR_ROOT, στην οποία θα αποθηκεύσουμε την πλήρη διαδρομή προς τον ριζικό φάκελο του ιστότοπου. Μπορείτε επίσης προαιρετικά να δημιουργήσετε πολλές σταθερές με συνδέσμους σε φακέλους που χρησιμοποιούνται συχνά. Στο include() περνάμε μια σταθερά και η διαδρομή προς το απαιτούμενο αρχείο προστίθεται σε σχέση με αυτήν.

Διαδρομές προς αρχεία στο πρόγραμμα περιήγησης

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

Η απόλυτη διαδρομή προς ένα αρχείο στο πρόγραμμα περιήγησης ξεκινά με κάθετο /, για παράδειγμα /images/logo.jpg. Αυτή η διαδρομή σημαίνει ότι το αρχείο βρίσκεται στη διεύθυνση site.ru/images/logo.jpg.

Η σχετική διαδρομή προς το αρχείο φαίνεται ακριβώς η ίδια, αλλά χωρίς την πρώτη κάθετο, για παράδειγμα images/logo.jpg.

Ένα συνηθισμένο λάθος που κάνουν οι αρχάριοι είναι να χρησιμοποιούν μια σχετική διαδρομή αντί για μια απόλυτη. Ας φανταστούμε ότι το λογότυπο του ιστότοπου βρίσκεται στη διεύθυνση site.ru/images/logo.jpg. Ας προσπαθήσουμε να το συνδέσουμε μέσω μιας σχετικής διαδρομής:

Όλα δείχνουν να είναι καλά και λειτουργούν. Αλλά αυτό θα συμβεί έως ότου ο χρήστης μεταβεί σε κάποιο φάκελο, για παράδειγμα site.ru/products/15/. Όπως μπορείτε να μαντέψετε, το πρόγραμμα περιήγησης θα προσπαθήσει να φορτώσει το λογότυπο στο site.ru/products/15/images/logo.jpg.

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

Το άρθρο περιέχει κομμάτια κώδικα. Μπορείτε να κατεβάσετε την πλήρη έκδοση εδώ - https://bitbucket.org/okiseleva/html-and-css-learn/src. Φάκελοι - "absolute_path_lvl_1" και όλοι οι υποφάκελοι.

Η διαδρομή μπορεί να είναι απόλυτη ή σχετική.

Απόλυτη διαδρομή

Απόλυτη διαδρομή είναι η διαδρομή από τον ριζικό φάκελο προς το αρχείο.

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

/absolute_path_lvl_1/level_2.1/level_3.1/Kevin.png

Απόλυτη διαδρομή προς το αρχείο

Σχετική διαδρομή

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

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

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

Hello.png

Σχετική διαδρομή, αρχείο κοντά


2. Ανεβείτε έναν φάκελο

../Kevin_lvl_2.png

Σχετική διαδρομή 2

3. Ένα πιο περίπλοκο παράδειγμα, από Diff_paths.htmlστη φωτογραφία με τον Κέβιν

../level_2.1/level_3.1/Kevin.png

Σχετική διαδρομή 3


Ποια είναι η διαφορά μεταξύ απόλυτων και σχετικών μονοπατιών;

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

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

Στο αρχείο absolute_path_lvl_1/level_2.2/Diff_paths.htmlΜπορείτε να δείτε ένα παράδειγμα σελίδας HTML με διαφορετικές διαδρομές αρχείων.

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


D:/hgprojects → Κατέβασα το έργο "html-and-css-learn" εδώ. Μπορεί να έχεις άλλο τρόπο


ΥΓ - περισσότερες λεπτομέρειες στο βιβλίο "

Όπως γνωρίζετε, στην παράμετρο href της ετικέτας () πρέπει να καθορίσετε τη διαδρομή προς το αρχείο στο οποίο αναφέρεται.
Πολλοί άνθρωποι γράφουν κάτι σαν http://somesite.ru/catalog/doc.html. Ναι, κανείς δεν διαφωνεί, λειτουργεί. Υπάρχει όμως ένα «αλλά». Ας δούμε ένα παράδειγμα.

Αφήστε τον ιστότοπό σας να φιλοξενείται, για παράδειγμα, σε κάποια δωρεάν φιλοξενία και η διεύθυνσή του ήταν η εξής: http://fsite.freehosting.ru.
Υπάρχουν περίπου 100 έγγραφα στον διακομιστή. Και έτσι αποφασίζετε να μετακινήσετε τον ιστότοπό σας σε άλλο τομέα,
αφήστε το να πληρωθεί φιλοξενία στη ζώνη ru: http://site.ru. Λοιπόν, πρέπει τώρα να αλλάξουμε το http://fsite.freehosting.ru σε http://site.ru παντού;
Ναι, χάρη σε συντάκτες όπως το homesite, αυτό είναι δυνατό. Αλλά αυτό δεν είναι λύση.
Ας υποθέσουμε ότι πριν ανεβάσετε μια σελίδα στον διακομιστή, ελέγχετε τη λειτουργικότητά της
στον οικιακό σας διακομιστή apache (για όσους δεν γνωρίζουν ακόμη τι είναι ο "οικιακός διακομιστής", μεταβείτε εδώ (Εγκατάσταση και ρύθμιση παραμέτρων διακομιστή apache) και αντί για http://localhost θα χρειαστεί να γράψετε http:// site.ru παντού Συμφωνώ με αυτό, τουλάχιστον είναι άβολο.

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

Απόλυτη διαδρομή

Ας πάρουμε, για παράδειγμα, το αρχείο doc.html, το οποίο βρίσκεται στη διεύθυνση: http://somesite.ru/catalog/doc.html. Όπως γνωρίζετε, υπάρχει ένας φάκελος www στον διακομιστή. Όπως μπορούμε να δούμε από τη διεύθυνση, αυτός ο φάκελος περιέχει τον φάκελο του καταλόγου και περιέχει ήδη το αρχείο doc.html.

Εάν, κατά τον καθορισμό της διαδρομής προς ένα αρχείο, βάλετε / πριν από τη διεύθυνση, τότε θα είναι παρόμοια με την εξής: root_directory_in_the_north/www/path στο αρχείο.
Δηλαδή, το http://somesite.ru/catalog/doc.html είναι παρόμοιο με το ακόλουθο: /catalog/doc.html.
Έτσι, όταν υπάρχει ένα / μπροστά από τη διεύθυνση, σημαίνει ότι η «αντίστροφη μέτρηση» ξεκινά από τον κατάλογο www.
Τώρα, αντί για http://localhost/index.html, μπορείτε να γράψετε /index.html από οποιοδήποτε έγγραφο.
Αλλά για να φτάσετε στον κατάλογο cgi πρέπει να γράψετε ως εξής: /cgi-bin/path to the file.

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

Σχετική διαδρομή

Υπάρχουν επίσης σχετικές διαδρομές, οι οποίες καθορίζονται σε σχέση με το ίδιο το έγγραφο από το οποίο προέρχεται ο σύνδεσμος.
Για παράδειγμα, εάν δημιουργήσετε έναν σύνδεσμο στο doc.html newcat/new.html, αυτό σημαίνει ότι το αρχείο new.html βρίσκεται στον κατάλογο newcat, ο οποίος, με τη σειρά του, βρίσκεται στον ίδιο κατάλογο με το αρχείο doc.html. Όπως μπορείτε να δείτε, αυτή η διαδρομή είναι σχετική με το αρχείο doc.html. Όπου κι αν βρίσκεται αυτό το αρχείο, η διαδρομή newcat/new.html θα είναι πάντα έγκυρη εάν το αρχείο doc.html και ο κατάλογος newcat βρίσκονται στο ίδιο επίπεδο (δηλαδή στον ίδιο κατάλογο).

Μπορείτε επίσης να μετακινήσετε έναν κατάλογο σε σχέση με ένα έγγραφο. Για να γίνει αυτό πρέπει να γράψετε ../.
Για παράδειγμα, υπάρχει ένας μεγάλος κατάλογος, περιέχει δύο καταλόγους: τον κύριο και τον δευτερεύοντα. Ο κύριος κατάλογος περιέχει το ήδη γνωστό αρχείο doc.html. και στον δευτερεύοντα κατάλογο υπάρχει ένα αρχείο new.html. Για να δημιουργήσετε έναν σύνδεσμο από το αρχείο doc.html στο αρχείο new.html, πρέπει να γράψετε ../secondary/new.html. Αλλά εάν ο μεγάλος κατάλογος βρίσκεται στον κατάλογο www, τότε η διαδρομή προς το αρχείο new.html θα μπορούσε να καθοριστεί ως εξής: /big/secondary/new.html

Αντί για συμπέρασμα, αξίζει να πούμε ότι η χρήση απόλυτων και σχετικών μονοπατιών διευκολύνει πολύ το έργο των web masters, είτε είναι αρχάριοι είτε επαγγελματίες. Χρησιμοποιήστε λοιπόν αυτή την ευκαιρία, όπως λένε, στο έπακρο και προσπαθήστε να αποφύγετε μονοπάτια όπως το http://site.ru/catalog/file.file ή τουλάχιστον να καταφύγετε στη βοήθειά τους όσο το δυνατόν λιγότερο.


Ο ιστότοπός σας υπάρχει σε δύο διαστάσεις, όπως ήταν.
Πραγματικό και εικονικό.

Για όλους τους επισκέπτες, αυτός είναι ένας εικονικός διακομιστής ιστού. Το οποίο διαφέρει, μεταξύ άλλων, στο ότι ΔΕΝ ΥΠΑΡΧΟΥΝ ΑΡΧΕΙΑ σε αυτό. αν γράφεις %20" target="_blank">http://site.ru/file.html- αυτό δεν είναι αρχείο. Αυτό είναι ένα URI, μια εικονική διεύθυνση. Μπορεί να μην υπάρχει καθόλου αρχείο με το όνομα file.html στον διακομιστή. Αυτές είναι όλες εικονικές διευθύνσεις, όχι αρχεία.
Και το πρόγραμμα περιήγησης λειτουργεί συγκεκριμένα με διευθύνσεις.

Για έναν προγραμματιστή, ένας ιστότοπος είναι ένα πρόγραμμα που εκτελείται σε έναν πολύ συγκεκριμένο πραγματικό υπολογιστή. Με πολύ συγκεκριμένο σκληρό δίσκο, καταλόγους και αρχεία. Και το σενάριο, δουλεύοντας με τα δεδομένα του, φορτώνοντας άλλα σενάρια, λειτουργεί με πραγματικά ΑΡΧΕΙΑ, σε φυσικό ΔΙΣΚΟ.

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

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

Ας ξεκινήσουμε με το δεύτερο.
Είναι πολύ απλό. Εάν η διαδρομή καθορίζεται από τη ρίζα του συστήματος, τότε αυτή είναι μια απόλυτη διαδρομή. Είναι σαν μια ταχυδρομική διεύθυνση στην πραγματική ζωή - όπου κι αν πάτε, αλλά με την ακριβή διεύθυνση θα βρείτε πάντα το σωστό μέρος.
παραδείγματα απόλυτων μονοπατιών:
/var/www/site/forum/index.php
/img/frame.gif
από:\windows\command.com

Στα συστήματα Unix και σε ιστότοπους, η ρίζα συμβολίζεται με κάθετο - "/".
Είναι σημαντικό. Αυτό δεν είναι απλώς ένα ραβδί, αλλά μια ανεξάρτητη ΔΙΕΥΘΥΝΣΗ, μια διαδρομή.
Στη διεύθυνση %20" target="_blank">http://www.site.ru/η τελευταία κάθετο δεν είναι για ομορφιά! Υποδηλώνει μια πολύ συγκεκριμένη διεύθυνση - την αρχή του ιστότοπου.
Σε έναν δίσκο σε συστήματα Unix μπορείτε επίσης να πληκτρολογήσετε "cd /" και θα μεταφερθείτε στον ριζικό κατάλογο.
Στα συστήματα Windows, το σύστημα αρχείων χωρίζεται σε δίσκους, επομένως, η απόλυτη διεύθυνση πρέπει να υποδεικνύει το όνομα του δίσκου. Δεν υπάρχει απόλυτη ρίζα ολόκληρου του συστήματος αρχείων στα Windows, κάθε δίσκος έχει τη δική του. Για παράδειγμα, C:\ E:\
Επομένως, ακόμα κι αν η διαδρομή στα Windows ξεκινά με κάθετο, δεν είναι απόλυτη διαδρομή, αλλά σχετική. Σε σχέση με τον τρέχοντα δίσκο. Και το απόλυτο ξεκινά με ένα γράμμα.

Εάν η ρίζα δεν καθορίζεται στην αρχή της διαδρομής, τότε αυτή η διαδρομή θα είναι σχετική και προέρχεται από την τρέχουσα θέση. Στην πραγματική ζωή, είναι σαν ο δρόμος προς το ποτοπωλείο - «δύο τετράγωνα αριστερά και ευθεία σε όλη τη διαδρομή». Αυτό το μονοπάτι μπορεί να επιτευχθεί μόνο από ένα συγκεκριμένο σημείο. Από την άλλη θα καταλήξεις σε τελείως διαφορετικό μέρος.
Το απλούστερο παράδειγμα μιας σχετικής διαδρομής είναι απλώς ένα όνομα αρχείου.
Εάν το αρχείο βρίσκεται στον ίδιο κατάλογο με τον οποίο λειτουργεί το πρόγραμμα, θα το βρει προσθέτοντας την τρέχουσα διαδρομή στο όνομα του αρχείου.
παραδείγματα σχετικών μονοπατιών:
file.php (το αρχείο βρίσκεται στον ίδιο φάκελο)
./file.php (το αρχείο βρίσκεται στον ίδιο φάκελο. Μια τέτοια καταχώρηση απαιτείται μερικές φορές σε ορισμένα συστήματα Unix)
images/picture.jpg (το αρχείο βρίσκεται στον φάκελο εικόνων, ο οποίος βρίσκεται στον τρέχοντα)
../file.php (το αρχείο βρίσκεται σε φάκελο που βρίσκεται ένα επίπεδο ψηλότερα από το τρέχον)
../../file.php (το αρχείο βρίσκεται σε φάκελο που βρίσκεται δύο επίπεδα υψηλότερα από το τρέχον)

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

Τώρα ας προχωρήσουμε στο πρώτο σημείο.
Η διαφορά μεταξύ της ρίζας του διακομιστή web, όπως φαίνεται από το πρόγραμμα περιήγησης, και της ρίζας του συστήματος αρχείων στο δίσκο.
Γενικά, όλα πρέπει να είναι ξεκάθαρα από τις προηγούμενες εξηγήσεις.
Στο δίσκο, η διαδρομή προς το αρχείο σεναρίου μπορεί να είναι ως εξής:
/var/www/site/forum/index.php
Ταυτόχρονα, η εικονική διεύθυνση αυτού του σεναρίου όταν προβάλλεται μέσω ενός προγράμματος περιήγησης θα είναι:
%20" target="_blank">http://www.site.ru/forum/index.php
Σε αυτό το παράδειγμα, είναι εύκολο να δούμε πού τέμνονται οι δύο διαστάσεις: οι δύο διευθύνσεις έχουν ένα κοινό μέρος - /forum/index.php - και αυτός είναι ο λόγος της σύγχυσης.
Για το πρόγραμμα περιήγησης, αυτή είναι η πιο ολοκληρωμένη διαδρομή που μπορεί να γίνει. Ξεκινά από τη ρίζα του ιστότοπου.
Για ένα σενάριο που εκτελείται στον διακομιστή, αυτό είναι μόνο ΜΕΡΟΣ της διαδρομής.
για το σενάριο, η διαδρομή /forum/index.php θα είναι ανύπαρκτη - δεν υπάρχει κατάλογος φόρουμ στη ρίζα του δίσκου!
για να λάβετε την πλήρη διαδρομή για αυτό που μοιάζει με /forum/index.php στον ιστότοπο, πρέπει να προσθέσετε στα αριστερά τη διαδρομή προς το φάκελο που θεωρείται η ρίζα για ολόκληρο τον διακομιστή web.
στο παράδειγμά μας είναι
/var/www/site
Αυτή η διαδρομή ορίζεται στη διαμόρφωση του διακομιστή web και περιέχεται στη μεταβλητή συστήματος PHP $_SERVER["DOCUMENT_ROOT"]

Σε έναν εικονικό διακομιστή -αυτόν που βλέπει ο χρήστης- αντίθετα δεν υπάρχει δίσκος. Υπάρχει ρίζα τοποθεσίας. Δηλαδή, για να είναι εγγυημένη η λειτουργία οποιουδήποτε συνδέσμου, ανεξάρτητα από το πού στο site καλείται, πρέπει να είναι απόλυτος.
Εάν έχετε, ας πούμε, δύο ενότητες στον ιστότοπό σας:
%20" target="_blank">http://www.site.ru/about/info.php
Και
%20" target="_blank">http://www.site.ru/job/vacancy.php
στη συνέχεια, αν δημιουργήσετε έναν σύνδεσμο στο αρχείο info.php απλώς στο vacancy.php , το πρόγραμμα περιήγησης δεν θα το βρει - θα αναζητήσει τη διεύθυνση %20," target="_blank">http://www.site.ru/about/vacancy.php, συμπληρώνοντας τη διαδρομή από τον τρέχοντα κατάλογο.
Επομένως, πρέπει να γράψετε την πλήρη διαδρομή από τη ρίζα του ιστότοπου - /job/vacancy.php
Όλα αυτά ισχύουν, φυσικά, όχι μόνο για τις ετικέτες
αλλά επίσης και οποιαδήποτε άλλα όπου χρησιμοποιούνται σύνδεσμοι προς άλλα αρχεία.

Οι σύνδεσμοι προς τις τοπικές διευθύνσεις θα πρέπει να γράφονται χωρίς να προσδιορίζεται το πρωτόκολλο και ο τομέας - μόνο η διαδρομή από τη ρίζα του ιστότοπου - /job/vacancy.php. Οι σύνδεσμοι προς άλλους ιστότοπους θα πρέπει να είναι γραμμένοι πλήρως - %20." target="_blank">http://www.site1.ru/job/vacancy.php .

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

Η σταθερά __FILE__ περιέχει το όνομα του τρέχοντος εκτελέσιμου αρχείου.
Σε αντίθεση με το PHP_SELF, περιέχει το όνομα του αρχείου που εκτελείται αυτήν τη στιγμή.
ο σχεδιασμός φαίνεται πολύ χρήσιμος dirname(__FILE__), με το οποίο είναι επιθυμητό να αντικατασταθούν όλες οι κλήσεις σε αρχεία που βρίσκονται στον ίδιο κατάλογο με το σενάριο κλήσης. Για παράδειγμα:
απαιτείται dirname(__FILE__). "/init.php"
Η συνάρτηση dirname(), μαζί με το basename(), είναι μία από τις πιο συχνά χρησιμοποιούμενες για εργασία με αρχεία και καταλόγους.

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

Απόλυτες διαδρομές


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

Σε σχέση με τη ρίζα του ιστότοπου


Σε αυτήν την περίπτωση, το πρόγραμμα περιήγησης παίρνει τον τομέα του ιστότοπου και αντικαθιστά τον καθορισμένο σύνδεσμο προς αυτόν. Σε αυτή την περίπτωση θα λειτουργήσει http://site/css/style.css.Στην περίπτωση του http, δεν υπάρχει λόγος ανησυχίας για το https, αφού θα ληφθεί με τη μορφή που είναι ανοιχτή αυτή τη στιγμή η σελίδα, δηλαδή με http θα είναι http. Είναι επίσης πολύ βολικό για τη μεταφορά ορισμένων λειτουργιών μεταξύ διαφορετικών τοποθεσιών ή τη μεταφορά μιας τοποθεσίας από έναν τομέα σε άλλο χωρίς να αγγίξετε τον κώδικα. Ένας τρόπος προτεραιότητας για τον καθορισμό διαδρομών σε σελίδες και αρχεία.

Σχετικά με αυτή τη σελίδα


Μια λιγότερο δημοφιλής μέθοδος, καθώς παίρνει την τρέχουσα σελίδα και προσθέτει μια νέα διεύθυνση στη διαδρομή της ..com/trick/css/style.css . Σχεδόν αδύνατο να χρησιμοποιηθεί σε περιπτώσεις που χρησιμοποιούμε CNC.

Χρησιμοποιώντας την ετικέτα βάσης


Σε αυτήν την περίπτωση, αντί για την τυπική αντικατάσταση τομέα, η διαδρομή από τη βάση θα αντικατασταθεί για τη σχετική διαδρομή. Δηλαδή, θα λάβουμε ένα αρχείο που βρίσκεται:
http://site/tricks/css/style.css

Σχετικές και απόλυτες διαδρομές στην PHP

Όλα είναι πολύ απλά, όταν εργαζόμαστε στο σύστημα αρχείων θα τηρούμε τους κανόνες για την εργασία με διαδρομές στην PHP. Αν περάσουμε την εντολή στο πρόγραμμα περιήγησης πελάτη, τότε χρησιμοποιούνται μονοπάτια HTML. Δηλαδή στο παρακάτω παράδειγμα περνάμε από την PHP τη διαδρομή στον browser με τη σελίδα στην οποία πρέπει να πάει. Το γεγονός ότι το πρόγραμμα περιήγησης έχει κάνει τη μετάβαση μεταξύ σελίδων φαίνεται στη γραμμή διευθύνσεων:
header("Τοποθεσία: /page2.php");
Έτσι, ανοίγουμε τη σελίδα page1.php και η σελίδα2.php είναι γραμμένη στη γραμμή διευθύνσεων, και το όλο θέμα είναι ότι το πρόγραμμα περιήγησης ΠΡΩΤΑ φόρτωσε τη σελίδα page1.php και μετά έλαβε πληροφορίες με ανακατεύθυνση και ΦΟΡΤΩΣΕ τη δεύτερη σελίδα page2.php. Σε αυτήν την περίπτωση, η ανακατεύθυνση ήταν στην πλευρά του προγράμματος-πελάτη (πρόγραμμα περιήγησης), που σημαίνει ότι χρησιμοποιούμε τους κανόνες που σχετίζονται με την HTML (διεύθυνση Ιστού).

Απόλυτη διαδρομή στην PHP

Μια απόλυτη διαδρομή στην PHP αντιμετωπίζεται ως απόλυτη διαδρομή από τον κατάλογο στον οποίο είναι εγκατεστημένος ο διακομιστής web. Αυτή η διαδρομή μπορεί να ληφθεί από:
$_SERVER["DOCUMENT_ROOT"]
Αν πάρουμε ως παράδειγμα αυτόν τον διακομιστή, η διαδρομή του είναι: /home/school/public_html/schoolphp, που σημαίνει ότι για να καθορίσετε την πλήρη διαδρομή προς τη φωτογραφία "/photo/img1.jpg", πρέπει να καθορίσετε τα εξής μονοπάτι:
getimagesize("/home/school/public_html/schoolphp/photo/img1.jpg"); getimagesize($_SERVER["DOCUMENT_ROOT"]."/photo/img1.jpg");
Θα ήθελα να σημειώσω ότι ο ιστότοπος μπορεί να βρίσκεται σε έναν υποκατάλογο, δηλαδή για:
http://site/forum/
Μπορεί να είναι εξαιρετικά δύσκολο να χρησιμοποιήσετε το DOCUMENT_ROOT, επειδή το φόρουμ (ως εξωτερικό σενάριο) δεν γνωρίζει ακόμα πού θα βρίσκεται στον ιστότοπο. Υπάρχουν διάφοροι τρόποι αντιμετώπισης αυτού του προβλήματος, ας απαριθμήσουμε ένα ζευγάρι:

1) Δημιουργήστε μια σελίδα ως υποτομέα.

2) Γράψτε την απόλυτη διαδρομή στο config στο config.php, δηλαδή:
Πυρήνας::$ROOT = $_SERVER["DOCUMENT_ROOT"]; getimagesize(Core::$ROOT."/photo/img1.jpg"); // χρησιμοποιήστε μια απόλυτη διαδρομή που μπορεί να τροποποιηθεί
Τώρα μπορείτε να συνδέσετε ολόκληρο τον ιστότοπό σας στο Core::$ROOT χωρίς τύψεις και εάν κατά λάθος χρειαστεί να αλλάξετε τη διαδρομή προς το αρχείο που περιλαμβάνεται, μπορείτε να παρακάμψετε την τιμή του Core::$ROOT;

Σε σχέση με το αρχικό αρχείο (βάση)

Σε πολλά συστήματα index.php υπάρχει ένα μόνο σημείο εισόδου, δηλαδή ανοίγει το index.php και συνδέονται άλλα αρχεία από αυτό.
συμπεριλάβετε "./modules/allpages.php"?
Σε αυτήν την περίπτωση, το allpages.php θα συνδεθεί κατά μήκος της διαδρομής: /home/school/public_html/schoolphp/modules/allpages.php. Αυτή η μέθοδος είναι βολική γιατί αν γράψετε include στο αρχείο allpages.php: include "./modules/module/page.php";, τότε θα εξακολουθήσει να γίνεται αναζήτηση σε σχέση με το σημείο εισόδου, δηλαδή index.php:
/home/school/public_html/schoolphp/modules/module/page.php
Αυτή είναι μια αρκετά βολική υλοποίηση, δεδομένου ότι γνωρίζουμε ξεκάθαρα τη δομή της εφαρμογής μας σε σχέση με το root index.php. Ακόμα κι αν καλέσουμε οποιοδήποτε άλλο αρχείο εκτός από το index.php, οι διαδρομές θα λειτουργούν ακριβώς το ίδιο. Καλέσαμε dir.php , που σημαίνει ότι οι διαδρομές θα ληφθούν σε σχέση με το αρχείο dir.php!

Τι άλλο πρέπει να ξέρετε;

Δεν μπορούσα να μην υπενθυμίσω σε όσους ξέχασαν ή προτείνω σε όσους δεν ξέρουν ότι μπορείτε να επιστρέψετε όχι μόνο βαθιά σε καταλόγους, αλλά και επάνω (φακέλους πίσω) και η σύνταξή τους είναι αρκετά απλή:
συμπεριλάβετε "../file.php"?
Σε αυτήν την περίπτωση, θα ληφθεί ο κατάλογος αυτού του αρχείου ή του root index.php και θα επιστραφεί 1 φάκελος πίσω, όπου θα γίνει αναζήτηση του αρχείου "file.php".

Το DOCUMENT_ROOT δεν είναι η μόνη επιλογή για να λάβετε τη διαδρομή ρίζας του ιστότοπου. Ας ρίξουμε μια ματιά στο εγχειρίδιο: "Ο ριζικός κατάλογος του εγγράφου στον οποίο εκτελείται η τρέχουσα δέσμη ενεργειών είναι ακριβώς αυτός που καθορίζεται στο αρχείο διαμόρφωσης διακομιστή." . Αυτό σημαίνει ότι εάν η διαδρομή είναι γραμμένη εσφαλμένα στο αρχείο ρυθμίσεων, ολόκληρη η τοποθεσία δεν θα λειτουργήσει. Τι να κάνω; Μπορείτε να γράψετε στους διαχειριστές και τους κατόχους του hosting που φιλοξενεί τον διακομιστή με την ελπίδα ότι θα διορθώσουν τις ελλείψεις τους. Ή αναζητήστε μια σταθερή εναλλακτική, η οποία είναι __DIR__, αυτή είναι η απόλυτη διαδρομή προς το δεδομένο αρχείο όπου εκτελείται ο κώδικας. Ας υποθέσουμε ότι έχουμε ένα αρχείο διαμόρφωσης στο φάκελο config, και έτσι ώστε χρησιμοποιώντας __DIR__ να μην χρειάζεται να επιστρέφουμε έναν φάκελο στην κορυφή κάθε φορά γράφοντας __DIR__"/../" μπορούμε να γράψουμε με ασφάλεια __DIR__ στη μεταβλητή μας, στο παρακάτω παράδειγμα το έγραψα σε μια ιδιότητα κλάσης (μάθημα Νο. 24 , ποιος δεν το κατάλαβε, χρησιμοποιήστε μια κανονική μεταβλητή):
Core::$ROOT = __DIR__; // Ή για παλιά PHP - dirname(__FILE__);
Ήθελα επίσης να σας υπενθυμίσω κάτι ενδιαφέρον και σημαντικό. Σύμφωνα με την ασφάλεια, ο διακομιστής ιστού απαγορεύει τη μετακίνηση μέσω καταλόγων πάνω από τη ρίζα του ιστότοπου. Δηλαδή, ο ιστότοπος βρίσκεται στην ακόλουθη διαδρομή: /home/school/public_html/schoolphp, αλλά τα περιεχόμενα των φακέλων /home ή /home/school δεν θα είναι διαθέσιμα για ανάγνωση.

Μπορεί η PHP να χρησιμοποιήσει διαδρομές HTML; Ναι, σε ειδικές λειτουργίες, για παράδειγμα:
file_get_contets("http://site");

Πρακτική

Στα παλιά μου έργα χρησιμοποιούσα το DOCUMENT_ROOT, τώρα άλλαξα σε σχετικές διαδρομές index.php "./folder/file".

Το Zend2, ένα προϊόν από προγραμματιστές PHP, ένα από τα πιο περίπλοκα FrameWork αυτή τη στιγμή χρησιμοποιεί επίσης σχετικές διαδρομές με διαφορετική σύνταξη από τη δική μου, δηλαδή "φάκελο/αρχείο".

Το φόρουμ IPB.3 χρησιμοποιεί dirname(__FILE__).

Συμπεράσματα:

1) Στην HTML χρησιμοποιούμε διαδρομές που σχετίζονται με τη ρίζα του ιστότοπου, δηλαδή "/file.php" (Η γραμμή ξεκινά με εγκοπή).
2) στην PHP χρησιμοποιούμε σε σχέση με το ριζικό αρχείο "./file.php" (Η γραμμή ξεκινά με τελεία και κάθετο), μια εναλλακτική θα ήταν η χρήση μιας ιδιότητας που έχει αρχικοποιηθεί στη ρίζα: __DIR__;
3) Η ανακατεύθυνση κεφαλίδας χρησιμοποιεί διαδρομές από HTML. Η PHP λειτουργεί με το σύστημα αρχείων (σύνδεση αρχείων, αποθήκευση και επεξεργασία εικόνων) - με διαδρομές PHP.

Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: