Relatief en absoluut pad naar Linux. Absoluut en relatief pad naar een bestand in PHP

Zoals u weet, in de href-parameter van de tag () moet u het pad opgeven naar het bestand waarnaar wordt verwezen.
Veel mensen schrijven zoiets als http://somesite.ru/catalog/doc.html. Ja, niemand beweert, het werkt. Maar er is één ‘maar’. Laten we eens kijken naar een voorbeeld.

Laat uw site bijvoorbeeld hosten op een gratis hosting en het adres was als volgt: http://fsite.freehosting.ru.
Er staan ​​ongeveer 100 documenten op de server. En dus besluit u uw website naar een ander domein te verhuizen,
laat het betaalde hosting zijn in de ru-zone: http://site.ru. Moeten we nu http://fsite.freehosting.ru overal in http://site.ru veranderen?
Ja, dankzij editors als homesite is dit mogelijk. Maar dit is geen oplossing.
Laten we aannemen dat u, voordat u een pagina naar de server uploadt, de functionaliteit ervan controleert
op uw thuis-apache-server (voor degenen die nog niet weten wat een “thuisserver” is, ga hierheen (Een apache-server installeren en configureren), en in plaats van http://localhost moet u http:// schrijven site.ru overal. Ben het hiermee eens, het is tenminste lastig.

De oplossing is om bij het opgeven van het pad naar een bestand niet rekening te houden met de positie op de site, maar met de positie op de server.

Absoluut pad

Laten we bijvoorbeeld het bestand doc.html nemen, dat zich bevindt op: http://somesite.ru/catalog/doc.html. Zoals u weet, bevindt zich een www-map op de server. Zoals we aan het adres kunnen zien, bevat deze map de catalogusmap en bevat deze al het bestand doc.html.

Als u bij het opgeven van het pad naar een bestand / voor het adres plaatst, ziet het er als volgt uit: root_directory_in_the_north/www/pad naar het bestand.
Dat wil zeggen, http://somesite.ru/catalog/doc.html is vergelijkbaar met het volgende: /catalog/doc.html.
Dus als er een / voor het adres staat, betekent dit dat het “aftellen” begint vanuit de www-directory.
In plaats van http://localhost/index.html kunt u nu vanuit elk document /index.html schrijven.
Maar om naar de cgi-map te gaan, moet je dit schrijven: /cgi-bin/pad naar het bestand.

Paden die met de hierboven beschreven methoden zijn gemaakt, worden absoluut genoemd, omdat het absolute (volledige) pad naar het bestand op de server wordt aangegeven.

Relatief pad

Er zijn ook relatieve paden, die worden opgegeven ten opzichte van het document zelf waar de link vandaan komt.
Als u bijvoorbeeld een link maakt in doc.html newcat/new.html, betekent dit dat het bestand new.html zich in de map newcat bevindt, die zich op zijn beurt in dezelfde map bevindt als het bestand doc.html. Zoals u kunt zien, is dit pad relatief ten opzichte van het doc.html-bestand. Waar dit bestand zich ook bevindt, het pad newcat/new.html zal altijd geldig zijn als het doc.html-bestand en de map newcat zich op hetzelfde niveau bevinden (d.w.z. in dezelfde map).

U kunt ook een map hoger gaan ten opzichte van een document. Om dit te doen, moet u ../.
Er is bijvoorbeeld een map groot, deze bevat twee mappen: primair en secundair. De primaire map bevat het reeds bekende doc.html-bestand; en in de secundaire map staat een bestand new.html. Om een ​​link te maken van het doc.html-bestand naar het new.html-bestand, moet je ../secundair/new.html schrijven. Maar als de grote map zich in de www-map bevindt, kan het pad naar het new.html-bestand als volgt worden gespecificeerd: /big/secondary/new.html

In plaats van een conclusie te trekken, is het de moeite waard om te zeggen dat het gebruik van absolute en relatieve paden het werk van webmasters enorm vergemakkelijkt, of ze nu een beginner of een professional zijn. Maak dus optimaal gebruik van deze mogelijkheid, zoals ze zeggen, en probeer paden als http://site.ru/catalog/file.file te vermijden, of gebruik in ieder geval zo min mogelijk hun hulp.

Goed slecht

Absolute paden


In dit geval is alles heel eenvoudig: we geven het directe pad aan naar een bestand dat zich op een ander domein bevindt. Het is mogelijk om een ​​verkort pad op te geven door aan het begin twee schuine strepen te gebruiken zonder expliciet http of https op te geven, en de server zelf zal het vereiste protocol (extensie) vervangen volgens de serverinstellingen. Het is belangrijk op te merken dat deze weergave nodig is om tussen sites te navigeren:
http://google.com

Ten opzichte van de hoofdmap van de site


In dit geval neemt de browser het websitedomein en vervangt de opgegeven link ernaar. In dit geval zal het werken http://site/css/style.css. In het geval van http hoeft u zich geen zorgen te maken over https, omdat het wordt weergegeven in de vorm waarin de pagina momenteel is geopend, dat wil zeggen: bij http is het http. Het is ook erg handig om bepaalde functionaliteit tussen verschillende sites over te dragen of een site van het ene domein naar het andere over te zetten zonder de code aan te raken. Een prioriteitsmanier om paden naar pagina's en bestanden op te geven.

Wat betreft deze pagina


Een minder populaire methode, omdat deze de huidige pagina neemt en een nieuw adres toevoegt aan het pad ..com/trick/css/style.css . Bijna onmogelijk te gebruiken in gevallen waarin we CNC gebruiken.

Met behulp van de basistag


In dit geval zal in plaats van de standaarddomeinvervanging het relatieve pad worden vervangen door het pad vanaf de basis. Dat wil zeggen, we zullen een bestand ontvangen met de volgende locatie:
http://site/tricks/css/style.css

Relatieve en absolute paden in PHP

Alles is heel eenvoudig, bij het werken in het bestandssysteem zullen we ons houden aan de regels voor het werken met paden in PHP. Als we de opdracht doorgeven aan de clientbrowser, worden HTML-paden gebruikt. Dat wil zeggen dat we in het volgende voorbeeld vanuit PHP het pad doorgeven aan de browser met de pagina waar deze naartoe moet. Dat de browser de overgang tussen pagina’s heeft gemaakt, kun je zien in de adresbalk:
header("Locatie: /pagina2.php");
We openen dus de pagina pagina1.php en pagina2.php wordt in de adresbalk geschreven, en het hele punt is dat de browser EERST de pagina pagina1.php heeft geladen en vervolgens informatie heeft ontvangen met omleiding en de tweede pagina pagina2 heeft GELADEN. php. In dit geval vond de omleiding plaats aan de clientzijde (browser), wat betekent dat we de regels gebruiken die verband houden met HTML (webadres).

Absoluut pad in PHP

Een absoluut pad in PHP wordt behandeld als een absoluut pad vanuit de map waarin de webserver is geïnstalleerd. Dit pad is te verkrijgen bij:
$_SERVER["DOCUMENT_ROOT"]
Als we deze server als voorbeeld nemen, is het pad: /home/school/public_html/schoolphp, wat betekent dat om het volledige pad naar de foto “/photo/img1.jpg” op te geven, je het volgende moet opgeven pad:
getimagesize("/home/school/public_html/schoolphp/photo/img1.jpg"); getimagesize($_SERVER["DOCUMENT_ROOT"]."/photo/img1.jpg");
Ik zou willen opmerken dat de site zich in een submap kan bevinden, dat wil zeggen voor:
http://site/forum/
Het kan uiterst moeilijk zijn om DOCUMENT_ROOT te gebruiken, omdat het forum (als extern script) nog niet weet waar het zich op de site zal bevinden. Er zijn verschillende manieren om dit probleem aan te pakken, laten we er een paar noemen:

1) Maak een pagina aan als subdomein.

2) Schrijf het absolute pad in de configuratie in config.php, dat wil zeggen:
Kern::$ROOT = $_SERVER["DOCUMENT_ROOT"]; getimagesize(Kern::$ROOT."/photo/img1.jpg"); // gebruik een absoluut pad dat kan worden gewijzigd
Nu kunt u uw hele site zonder enig spijt aan Core::$ROOT koppelen, en als u per ongeluk het pad naar het opgenomen bestand moet wijzigen, kunt u de waarde van Core::$ROOT overschrijven;

Ten opzichte van het startbestand (basis)

In veel index.php-systemen is er één enkel toegangspunt, dat wil zeggen dat index.php wordt geopend en dat er andere bestanden van worden verbonden.
neem "./modules/allpages.php" op;
In dit geval zal allpages.php verbonden worden langs het pad: /home/school/public_html/schoolphp/modules/allpages.php. Deze methode is handig omdat als u include in het allpages.php-bestand schrijft: include "./modules/module/page.php";, dan wordt er nog steeds gezocht relatief ten opzichte van het ingangspunt, namelijk index.php:
/home/school/public_html/schoolphp/modules/module/pagina.php
Dit is een redelijk gemakkelijke implementatie, aangezien we duidelijk de structuur van onze applicatie kennen ten opzichte van de rootindex.php. Zelfs als we een ander bestand dan index.php aanroepen, zullen de paden precies hetzelfde werken. We hebben dir.php aangeroepen, wat betekent dat de paden relatief aan het dir.php-bestand worden genomen!

Wat moet je nog meer weten?

Ik kon het niet helpen degenen die het vergeten waren eraan te herinneren, of aan degenen die het niet weten, eraan te herinneren dat je niet alleen diep in mappen terug kunt gaan, maar ook omhoog (mappen terug), en hun syntaxis is vrij eenvoudig:
neem "../bestand.php" op;
In dit geval zal de map van dit bestand of de hoofdmap index.php worden overgenomen en 1 map terug worden geretourneerd, waar het bestand “file.php” zal worden doorzocht.

DOCUMENT_ROOT is niet de enige optie om het hoofdpad van de site te achterhalen. Laten we de handleiding eens bekijken: "De hoofdmap van het document waarin het huidige script wordt uitgevoerd, is precies degene die is opgegeven in het serverconfiguratiebestand." . Dit betekent dat als het pad verkeerd in het configuratiebestand wordt geschreven, de hele site niet zal werken. Wat te doen? U kunt schrijven naar de beheerders en eigenaren van de hosting die de server host, in de hoop dat zij hun tekortkomingen zullen corrigeren. Of zoek naar een stabiel alternatief, namelijk __DIR__, dit is het absolute pad naar het opgegeven bestand waarin de code wordt uitgevoerd. Laten we zeggen dat we een configuratiebestand in de configuratiemap hebben, en zodat we met __DIR__ niet elke keer één map terug naar boven hoeven te gaan door __DIR__"/../" te schrijven, kunnen we veilig __DIR__ in onze variabele schrijven, in het onderstaande voorbeeld heb ik het in een klasse-eigenschap geschreven (les nr. 24, wie het niet heeft begrepen, gebruik een reguliere variabele):
Kern::$ROOT = __DIR__; // Of voor oude PHP - dirname(__FILE__);
Ik wilde je ook aan iets interessants en belangrijks herinneren. Volgens de beveiliging verbiedt de webserver het bladeren door mappen boven de hoofdmap van de site. Dat wil zeggen dat de site zich op het volgende pad bevindt: /home/school/public_html/schoolphp, maar de inhoud van de mappen /home of /home/school kan niet worden gelezen.

Kan PHP HTML-paden gebruiken? Ja, in speciale functies, bijvoorbeeld:
file_get_contets("http://site");

Oefening

In mijn oude projecten gebruikte ik DOCUMENT_ROOT, nu schakelde ik over naar relatieve index.php-paden "./folder/bestand".

Zend2, een product van PHP-ontwikkelaars, een van de meest complexe FrameWorks van dit moment, gebruikt ook relatieve paden met een andere syntaxis dan de mijne, namelijk “map/bestand”.

Het IPB.3-forum gebruikt mapnaam (__FILE__).

Conclusies:

1) In HTML gebruiken we paden ten opzichte van de hoofdmap van de site, namelijk “/file.php” (de regel begint met schuine streep).
2) in PHP gebruiken we relatief ten opzichte van het rootbestand "./file.php" (de regel begint met punt en schuine streep), zou een alternatief zijn om een ​​eigenschap te gebruiken die in de root is geïnitialiseerd: __DIR__;
3) Header-omleiding gebruikt paden uit HTML. PHP werkt met het bestandssysteem (bestanden verbinden, afbeeldingen opslaan en bewerken) - met PHP-paden.

Zoals u weet, in de href-parameter van de tag () moet u het pad opgeven naar het bestand waarnaar wordt verwezen.
Veel mensen schrijven zoiets als http://somesite.ru/catalog/doc.html. Ja, niemand beweert, het werkt. Maar er is één ‘maar’. Laten we eens kijken naar een voorbeeld.

Laat uw site bijvoorbeeld hosten op een gratis hosting en het adres was als volgt: http://fsite.freehosting.ru.
Er staan ​​ongeveer 100 documenten op de server. En dus besluit u uw website naar een ander domein te verhuizen,
laat het betaalde hosting zijn in de ru-zone: http://site.ru. Moeten we nu http://fsite.freehosting.ru overal in http://site.ru veranderen?
Ja, dankzij editors als homesite is dit mogelijk. Maar dit is geen oplossing.
Laten we aannemen dat u, voordat u een pagina naar de server uploadt, de functionaliteit ervan controleert
op uw thuis-apache-server (voor degenen die nog niet weten wat een “thuisserver” is, ga hierheen (Een apache-server installeren en configureren), en in plaats van http://localhost moet u http:// schrijven site.ru overal. Ben het hiermee eens, het is tenminste lastig.

De oplossing is om bij het opgeven van het pad naar een bestand niet rekening te houden met de positie op de site, maar met de positie op de server.

Absoluut pad

Laten we bijvoorbeeld het bestand doc.html nemen, dat zich bevindt op: http://somesite.ru/catalog/doc.html. Zoals u weet, bevindt zich een www-map op de server. Zoals we aan het adres kunnen zien, bevat deze map de catalogusmap en bevat deze al het bestand doc.html.

Als u bij het opgeven van het pad naar een bestand / voor het adres plaatst, ziet het er als volgt uit: root_directory_in_the_north/www/pad naar het bestand.
Dat wil zeggen, http://somesite.ru/catalog/doc.html is vergelijkbaar met het volgende: /catalog/doc.html.
Dus als er een / voor het adres staat, betekent dit dat het “aftellen” begint vanuit de www-directory.
In plaats van http://localhost/index.html kunt u nu vanuit elk document /index.html schrijven.
Maar om naar de cgi-map te gaan, moet je dit schrijven: /cgi-bin/pad naar het bestand.

Paden die met de hierboven beschreven methoden zijn gemaakt, worden absoluut genoemd, omdat het absolute (volledige) pad naar het bestand op de server wordt aangegeven.

Relatief pad

Er zijn ook relatieve paden, die worden opgegeven ten opzichte van het document zelf waar de link vandaan komt.
Als u bijvoorbeeld een link maakt in doc.html newcat/new.html, betekent dit dat het bestand new.html zich in de map newcat bevindt, die zich op zijn beurt in dezelfde map bevindt als het bestand doc.html. Zoals u kunt zien, is dit pad relatief ten opzichte van het doc.html-bestand. Waar dit bestand zich ook bevindt, het pad newcat/new.html zal altijd geldig zijn als het doc.html-bestand en de map newcat zich op hetzelfde niveau bevinden (d.w.z. in dezelfde map).

U kunt ook een map hoger gaan ten opzichte van een document. Om dit te doen, moet u ../.
Er is bijvoorbeeld een map groot, deze bevat twee mappen: primair en secundair. De primaire map bevat het reeds bekende doc.html-bestand; en in de secundaire map staat een bestand new.html. Om een ​​link te maken van het doc.html-bestand naar het new.html-bestand, moet je ../secundair/new.html schrijven. Maar als de grote map zich in de www-map bevindt, kan het pad naar het new.html-bestand als volgt worden gespecificeerd: /big/secondary/new.html

In plaats van een conclusie te trekken, is het de moeite waard om te zeggen dat het gebruik van absolute en relatieve paden het werk van webmasters enorm vergemakkelijkt, of ze nu een beginner of een professional zijn. Maak dus optimaal gebruik van deze mogelijkheid, zoals ze zeggen, en probeer paden als http://site.ru/catalog/file.file te vermijden, of gebruik in ieder geval zo min mogelijk hun hulp.

Elke webpagina, afbeelding, video, enz. is in de eerste plaats een bestand dat zijn eigen bestand heeft absoluut of relatief pad (adres). Het bestand zelf op internet bevindt zich op een computer genaamd server. U moet dus overwegen hoe het bestand op de server en op internet wordt gepresenteerd. In dit artikel wil ik de bovenstaande punten verduidelijken en de kwestie verduidelijken. Zullen we het proberen?

Absoluut pad (adres)

Wat is een absoluut pad naar een bestand?

Absoluut pad of adres is het volledige pad of adres, relatief ten opzichte van thuismap op de server of Internet-domeinnaam.

Zeggen " thuismap"Ik bedoel het begin van de ruimte die door de hostingprovider is toegewezen. Als we het bijvoorbeeld hebben over een lokale server op het Windows-besturingssysteem, zal de schijf zelf fungeren als de thuismap, d.w.z. C:/. Tegelijkertijd wijst de hostingprovider vaak slechts een bepaalde virtuele (voorwaardelijke) ruimte toe aan de gebruiker, waarvoor een bepaalde map, vaak /home genoemd, als thuismap fungeert.

Zeggen " domeinnaam"Ik bedoel een URL die begint met een vermelding van het protocol, bijvoorbeeld: http://sitenaam.ru/. Op internet is dit de thuismap voor elk van de gepresenteerde bronnen.

Hoe vind ik het absolute pad op de server in PHP?

Als alles min of meer duidelijk is met het URL-adres, dan is de situatie met de thuismap op de server iets gecompliceerder. Uiteindelijk heeft elke aanbieder zijn eigen problemen en daar moet rekening mee gehouden worden.

Laat ik beginnen met het feit dat het absolute pad op de server meestal wordt bepaald ten opzichte van de locatie van het script waarin dit gebeurt. Het bestand config.php bevindt zich bijvoorbeeld in de hoofdmap van de site en we moeten het absolute pad ernaartoe achterhalen.

Laat ik het verduidelijken door te zeggen: “ hoofdmap"Ik bedoel een map op de server die speciaal voor de site is bedoeld. Dit is wat dient als startpunt van de URL in relatie tot de domeinnaam.

Om dit te doen, kunt u de constante __FILE__ gebruiken, die het volledige pad en de naam bevat van het huidige bestand waarin het wordt aangeroepen. Om alleen het volledige pad te verkrijgen en de naam van het huidige bestand te verwijderen, kunt u de functie dirname() gebruiken, die de bovenliggende map van het opgegeven pad retourneert. Bijvoorbeeld:

$abspath = mapnaam(__FILE__) ."/";

In PHP 5.3 en hoger kun je de constante __DIR__ al gebruiken:

$abspath = __DIR__

Het is dus erg handig om in de toekomst het bestand config.php op te nemen en het absolute pad van de daarin verkregen $abspath-variabele als uitgangspunt te gebruiken. Stel bijvoorbeeld dat het script test.php zich in de map bevindt: path/ - en het gewenste bestand data.txt bevindt zich in de map: data/. In dit geval kan de oproep er als volgt uitzien:

Include_once("../config.php"); $fh = fopen($abspath ."/2013/12/data/data.txt", "r");

Houd er rekening mee dat ik het bestand config.php heb verbonden met behulp van een relatief pad, maar daarover later meer.

Relatief pad (adres)

Wat is een relatief bestandspad?

Relatief pad of adres is een pad of adres relatief aan de locatie van het bestand waarin een ander bestand wordt geopend.

Elk bestandssysteem is een strikte hiërarchie van bovenliggende en onderliggende mappen en bestanden. Bijvoorbeeld: C:\map\bestand.php – hier is de map\map een onderliggend onderdeel van station C:\ en een bovenliggende map van het bestand bestand.php.

Laten we voor de duidelijkheid de volgende hiërarchie bekijken:

  • bestand1.php
  • map\
    • bestand.php
    • submap\
      • bestand3.php

Om toegang te krijgen tot het bestand C:\file2.php vanuit het bestand C:\folder\file.php , moeten we de huidige map map\ verlaten, d.w.z. één niveau omhoog gaan. Hiervoor kunt u gebruik maken van, map (Ik zou zelfs pseudo-map zeggen) bovenliggende map, wat twee punten vertegenwoordigt (..) . Met andere woorden, we krijgen het pad: ..\file2.php - relatief ten opzichte van het bestand file.php .

Om toegang te krijgen tot het bestand C:\folder\subfolder\file3.php vanuit het bestand C:\folder\file.php, moeten we de submap\submap invoeren, d.w.z. één niveau naar beneden gaan. We krijgen dus het pad: submap\file3.php - relatief ten opzichte van het bestand file.php .

Laten we het ingewikkelder maken en van bestand C:\map\submap\bestand3.php naar bestand C:\bestand2.php gaan. Het relatieve pad ziet er als volgt uit: ..\..\file2.php - we zijn twee niveaus hoger gegaan. Doe het tegenovergestelde, d.w.z. van het bestand C:\file2.php gaan we naar het bestand C:\folder\subfolder\file3.php. Het relatieve pad ziet er als volgt uit: map\submap\bestand3.php - we gaan twee niveaus omlaag.

Voor- en nadelen van relatief pad (adres)

Het is duidelijk dat het relatieve pad niet de thuismap en de bovenliggende mappen bevat. Het uiteindelijke adres is dus korter. Bovendien hoeft u, als u van het ene domein naar het andere wilt verhuizen, geen nieuw absoluut adres te registreren.

Aan de andere kant, als we de inhoud van een site op een andere bron citeren, met dezelfde afbeeldingen waarin het relatieve pad is gespecificeerd, krijgen we een foutmelding, omdat Er zijn geen sitemappen en bestanden op de bron van derden. Dit gebeurt als de pagina wordt bekeken in de cache van de zoekmachine. Ook hier kan het gebruik van een relatief pad gemakkelijk een fout maken, wat zal resulteren in een probleem met de site-indexering.

Samenvattend moet worden opgemerkt dat het raadzaam is om het gebruik van relatieve paden of adressen te minimaliseren en absolute paden en adressen te gebruiken.

Conclusie

In mijn artikel heb ik geprobeerd de fundamentele kwestie met betrekking tot absolute en relatieve paden (adressen) naar bestanden en mappen te overwegen. Als je op een computer werkt, heb je a priori al een idee over het bestandssysteem, maar zonder rekening te houden met enkele nuances is het vrij moeilijk om van de grond te komen en een aantal problemen aan de orde te stellen die onvermijdelijk verband houden met juiste adressering. Dat is alles wat ik heb. Bedankt voor uw aandacht. Succes!

om 8.00 uur Bericht bewerken 5 opmerkingen

uw site bestaat als het ware in twee dimensies.
Echt en virtueel.

Voor alle bezoekers is dit een virtuele webserver. Wat onder andere verschilt doordat er GEEN BESTANDEN op BESTAAN. als je schrijft %20" target="_blank">http://site.ru/file.html- dit is geen bestand. Dit is een URI, een virtueel adres. Mogelijk staat er helemaal geen bestand met de naam file.html op de server. Dit zijn allemaal virtuele adressen, geen bestanden.
En de browser werkt specifiek met adressen.

Voor een ontwikkelaar is een website een programma dat op een heel specifieke echte computer draait. Met een zeer specifieke harde schijf, mappen en bestanden. En het script, dat met zijn gegevens werkt, andere scripts laadt, werkt met echte BESTANDEN, op de fysieke SCHIJF.

Het is in dit verschil dat de moeilijkheden liggen die beginners vaak tegenkomen.
Ze verliezen bestanden, verwarren koppelingen met bestanden, hebben toegang tot lokale bestanden via HTTP of nemen bestanden op uit de root van de webserver.

Maar je hoeft alleen maar twee dingen duidelijk te begrijpen:
1. Maak onderscheid tussen de root van de webserver, zoals gezien door de browser, en de root van het bestandssysteem op schijf.
2. Verschil tussen relatieve paden en absolute paden.

Laten we beginnen met de tweede.
Het is heel eenvoudig. Als het pad wordt opgegeven vanuit de systeemhoofdmap, is dit een absoluut pad. Het is net als een postadres in het echte leven - waar u ook heen gaat, maar met het exacte adres vindt u altijd de juiste plaats.
voorbeelden van absolute paden:
/var/www/site/forum/index.php
/img/frame.gif
van:\windows\command.com

In Unix-systemen en op websites wordt de root aangegeven met een schuine streep - "/".
Dit is belangrijk. Dit is niet zomaar een stok, maar een onafhankelijk ADRES, een pad.
Op het adres %20" target="_blank">http://www.site.ru/ de laatste schuine streep is niet voor schoonheid! Het duidt een heel specifiek adres aan: het begin van de site.
Op een schijf in Unix-systemen kunt u ook “cd /” typen, waarna u naar de hoofdmap wordt gebracht.
In Windows-systemen is het bestandssysteem verdeeld in schijven. Daarom moet het absolute adres de schijfnaam aangeven. Er is geen absolute root voor het hele bestandssysteem in Windows; elke schijf heeft zijn eigen root. Bijvoorbeeld C:\ E:\
Daarom is het pad in Windows, zelfs als het met een schuine streep begint, geen absoluut pad, maar een relatief pad. Ten opzichte van de huidige schijf. En absoluut begint met een letter.

Als de wortel niet aan het begin van het pad is opgegeven, is dit pad relatief en is het afgeleid van de huidige positie. In het echte leven is het net als de weg naar de slijterij: "twee blokken naar links en altijd rechtdoor." Dit pad is alleen vanaf een bepaald punt te bereiken. Van de ander kom je op een heel andere plek terecht.
Het eenvoudigste voorbeeld van een relatief pad is eenvoudigweg een bestandsnaam.
Als het bestand zich in dezelfde map bevindt waarmee het programma werkt, zal het het vinden door het huidige pad aan de bestandsnaam toe te voegen.
voorbeelden van relatieve paden:
file.php (het bestand bevindt zich in dezelfde map)
./file.php (het bestand bevindt zich in dezelfde map. Een dergelijke invoer is soms vereist in sommige Unix-systemen)
images/picture.jpg (het bestand bevindt zich in de map afbeeldingen, die zich in de huidige map bevindt)
../file.php (het bestand bevindt zich in een map die zich één niveau hoger bevindt dan de huidige)
../../file.php (het bestand bevindt zich in een map die zich twee niveaus hoger bevindt dan de huidige)

Wanneer zowel het besturingssysteem als de browser een relatief pad tegenkomen, bouwen dit op tot een absoluut pad. maar ieder op zijn eigen manier.

Laten we nu verder gaan met het eerste punt.
Het verschil tussen de root van de webserver, zoals gezien door de browser, en de root van het bestandssysteem op schijf.
Over het algemeen zou alles duidelijk moeten zijn uit de voorgaande uitleg.
Op schijf kan het pad naar het scriptbestand er als volgt uitzien:
/var/www/site/forum/index.php
Tegelijkertijd zal het virtuele adres van dit script, bekeken via een browser, het volgende zijn:
%20" target="_blank">http://www.site.ru/forum/index.php
In dit voorbeeld is het gemakkelijk te zien waar de twee dimensies elkaar kruisen: de twee adressen hebben een gemeenschappelijk deel - /forum/index.php - en dit is de reden voor de verwarring.
Voor de browser is dit het meest complete pad dat er kan zijn. Het begint vanaf de root van de site.
Voor een script dat op de server draait, is dit slechts een deel van het pad.
voor het script zal het pad /forum/index.php niet bestaan ​​- er is geen forummap in de root van de schijf!
om het volledige pad te krijgen voor wat er op de site uitziet als /forum/index.php, moet je aan de linkerkant het pad toevoegen naar de map die wordt beschouwd als de root voor de hele webserver.
in ons voorbeeld is dat zo
/var/www/site
Dit pad wordt ingesteld in de webserverconfiguratie en is opgenomen in de PHP-systeemvariabele $_SERVER["DOCUMENT_ROOT"]

Op een virtuele server – degene die de gebruiker ziet – is er daarentegen geen schijf. Er is een siteroot. Dat wil zeggen, om ervoor te zorgen dat een link gegarandeerd werkt, ongeacht waar op de site deze vandaan komt, moet deze absoluut zijn.
Als u bijvoorbeeld twee secties op uw website heeft:
%20" target="_blank">http://www.site.ru/about/info.php
En
%20" target="_blank">http://www.site.ru/job/vacancy.php
Als u vervolgens in het info.php-bestand eenvoudigweg een link naar vacature.php maakt, zal de browser deze niet vinden - hij zal op zoek gaan naar het adres %20," target="_blank">http://www.site.ru/about/vacancy.php, waarmee het pad vanuit de huidige map wordt voltooid.
Daarom moet u het volledige pad vanaf de hoofdmap van de site schrijven - /job/vacancy.php
Dit alles geldt uiteraard niet alleen voor tags
maar ook en alle andere waar links naar andere bestanden worden gebruikt.

Links naar lokale adressen moeten worden geschreven zonder het protocol en domein op te geven - alleen het pad vanaf de hoofdmap van de site - /job/vacancy.php. Links naar andere sites moeten volledig worden geschreven - %20." target="_blank">http://www.site1.ru/job/vacancy.php .

PHP biedt veel hulpmiddelen voor het werken met bestanden, mappen en URL's.

De constante __FILE__ bevat de naam van het huidige uitvoerbare bestand.
In tegenstelling tot PHP_SELF bevat het de naam van het bestand dat momenteel wordt uitgevoerd.
het ontwerp lijkt erg nuttig mapnaam(__FILE__), waarmee het wenselijk is om alle oproepen naar bestanden in dezelfde map als het aanroepscript te vervangen. Bijvoorbeeld:
vereist mapnaam (__FILE__). "/init.php"
De functie dirname() is, samen met basename(), een van de meest gebruikte functies voor het werken met bestanden en mappen.

Opmerking:
Als u problemen ondervindt met paden bij het overbrengen van scripts van Windows naar een Unix-systeem, let dan allereerst op het hoofdlettergebruik. Op Unix-servers is het hoofdlettergebruik van de letters in de bestandsnaam van belang: File.txt en file.txt zijn twee
verschillende bestanden, en onder Windows - hetzelfde. Het is het beste om de bestandsnaam altijd precies te schrijven, met respect voor de hoofdletters en kleine letters.