Hur man anger en relativ sökväg. Absolut och relativ sökväg till filen


Artikeln innehåller kodbitar. Full version du kan få det här - https://bitbucket.org/okiseleva/html-and-css-learn/src. Mappar - "absolute_path_lvl_1" och alla undermappar.

Vägen kan vara absolut eller relativ.

Absolut väg

En absolut sökväg är sökvägen från rotmappen till filen.

Sökvägen består av alla mappar som vi behöver titta på, åtskilda av ett snedstreck. Låt oss titta på ett exempel:

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

Absolut sökväg till filen

Relativ väg

En relativ sökväg är en länk som pekar till andra sidor på din webbplats i förhållande till webbsidan där länken redan finns.

Om vi ​​flyttar ner i mapparna separerar vi dem också med "/". Om du behöver gå upp en nivå, skriv ".."

1. Det enklaste exemplet på en relativ sökväg är bara ett filnamn. om filen är i närheten, ange bara dess namn

Hej.png

Relativ sökväg, fil i närheten


2. Gå upp en mapp

../Kevin_lvl_2.png

Relativ väg 2

3. Ett mer komplicerat exempel, från Diff_paths.html till bilden med Kevin

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

Relativ väg 3


Vad är skillnaden mellan absoluta och relativa banor?

Det är väldigt enkelt. Om sökvägen anges från systemroten är detta en absolut sökväg. Hur kommer det sig postadress V verkliga livet– oavsett vart du går, men på exakt adress hittar du alltid rätt plats.

Om roten inte anges i början av sökvägen kommer denna väg att vara relativ och den kommer att byggas från den aktuella positionen. I verkligheten är det som vägen till spritbutiken – "två kvarter till vänster och rakt hela vägen". Denna väg kan endast nås från en specifik punkt. Från den andra kommer du att hamna på en helt annan plats.

I fil absolute_path_lvl_1/level_2.2/Diff_paths.html du kan se ett exempel HTML-sidor med olika sökvägar till filer.

Här är ett exempel på absolut och relativ sökväg för samma fil med Kevin.


D:/hgprojects → Jag laddade ner projektet "html-and-css-learn" här. Du kanske har ett annat sätt


PS - mer detaljer i boken "

Som du vet, i href-parametern för taggen () måste du ange sökvägen till filen som refereras till.
Många skriver något som http://somesite.ru/catalog/doc.html. Ja, ingen bråkar, det fungerar. Men det finns ett "men". Låt oss titta på ett exempel.

Låt din webbplats vara värd, till exempel, på något gratis värd och dess adress var följande: http://fsite.freehosting.ru.
Det finns cirka 100 dokument på servern. Så du bestämmer dig för att flytta din webbplats till en annan domän,
låt det vara betald värd i ru-zonen: http://site.ru. Tja, ska vi nu ändra http://fsite.freehosting.ru till http://site.ru överallt?
Ja, tack vare redaktörer som homesite är detta möjligt. Men detta är ingen lösning.
Låt oss anta att du kontrollerar dess funktionalitet innan du laddar upp en sida till servern
på din apache-hemserver (för de som ännu inte vet vad en "hemserver" är, gå hit (Installera och konfigurera en apache-server), och istället för http://localhost måste du skriva http:// site.ru överallt Håller med om detta, det är åtminstone obekvämt.

Lösningen är att, när du anger sökvägen till en fil, inte ta hänsyn till dess position på webbplatsen, utan dess position på servern.

Absolut väg

Låt oss ta till exempel filen doc.html, som finns på: http://somesite.ru/catalog/doc.html. På servern finns det som bekant en www-mapp. Som vi kan se från adressen innehåller den här mappen katalogmappen, och den innehåller redan filen doc.html.

Om du, när du anger sökvägen till en fil, sätter / före adressen, kommer den att likna följande: root_directory_in_the_north/www/sökväg till filen.
Det vill säga, http://somesite.ru/catalog/doc.html liknar följande: /catalog/doc.html.
Så när det finns en / framför adressen betyder det att "nedräkningen" börjar från www-katalogen.
Nu, istället för http://localhost/index.html, kan du skriva /index.html från vilket dokument som helst.
Men för att komma till cgi-katalogen måste du skriva så här: /cgi-bin/sökväg till filen.

Sökvägar skapade med metoderna som beskrivs ovan kallas absoluta, eftersom den absoluta (fullständiga) sökvägen till filen på servern anges.

Relativ väg

Det finns också relativa sökvägar, som specificeras i förhållande till själva dokumentet som länken kommer ifrån.
Om du till exempel skapar en länk i doc.html newcat/new.html, innebär detta att filen new.html finns i newcat-katalogen, som i sin tur finns i samma katalog som filen doc.html. Som du kan se är denna sökväg relativt till filen doc.html. Var denna fil än finns kommer sökvägen newcat/new.html alltid att vara giltig om doc.html-filen och newcat-katalogen är på samma nivå (dvs. i samma katalog).

Du kan också flytta upp en katalog i förhållande till ett dokument. För att göra detta måste du skriva ../.
Till exempel finns det en stor katalog, den innehåller två kataloger: primära och sekundära. Den primära katalogen innehåller den redan bekanta doc.html-filen; och i den sekundära katalogen finns en fil new.html. För att göra en länk från doc.html-filen till new.html-filen måste du skriva ../secondary/new.html. Men om den stora katalogen finns i www-katalogen, kan sökvägen till filen new.html anges så här: /big/secondary/new.html

Istället för en slutsats är det värt att säga att användningen av absoluta och relativa vägar i hög grad underlättar arbetet för webbmästare, oavsett om det är en nybörjare eller en professionell. Så använd denna möjlighet, som de säger, till fullo, och försök att undvika vägar som http://site.ru/catalog/file.file, eller åtminstone ta till deras hjälp så lite som möjligt.

Bra dålig

Länkadressen kan vara antingen absolut eller relativ. Absoluta adresser måste börja med protokollet (vanligtvis http://) och innehålla webbplatsens namn. Relativa länkar är baserade på roten till webbplatsen eller det aktuella dokumentet.

Exempel 8.2 visar hur man skapar en absolut länk till en annan webbplats.

Exempel 8.2. Använder absoluta referenser

Absolut adress

Att lära sig HTML

När du anger en webbplatskatalog som en länk (till exempel http://site/css/), visas indexfilen. Det här är filen som laddas som standard när du kommer åt en katalog utan att uttryckligen ange filnamnet. Vanligtvis är indexfilen ett dokument som heter index.html.

Absoluta länkar används vanligtvis för att peka på ett dokument på en annan nätverksresurs, men det är också möjligt att göra absoluta länkar inom den aktuella webbplatsen. Detta praktiseras dock inte ofta, eftersom sådana länkar är ganska långa och besvärliga. Därför används främst relativa länkar på webbplatsen.

Länkar i förhållande till det aktuella dokumentet

När du skapar relativa länkar måste du förstå vilket värde du ska ange för href-attributet, eftersom det beror på den ursprungliga platsen för filerna. Låt oss titta på några typiska alternativ.

1. Filerna finns i en mapp (Fig. 8.4).

Detta filnamn tas endast som ett exempel på webbplatsen, ryska tecken med mellanslag bör inte användas i filnamn, och även i olika fall.

2. Filerna finns i olika mappar(Fig. 8.5).

När källdokumentet är lagrat i en mapp och den länkade finns i roten av webbplatsen, ska två punkter och ett snedstreck (/) placeras före filnamnet i länkadressen, som visas nedan.

Två poäng in I detta fall innebär att avsluta den aktuella mappen till en högre nivå.

3. Filerna placeras i olika mappar (Fig. 8.6).

Nu originalfil finns i två undermappar, och för att länka till dokumentet i roten av webbplatsen måste du upprepa föregående exempel två gånger.

Länk

Situationen är liknande med hur många undermappar som helst.

4. Filerna placeras i olika mappar (fig. 8.7).

Nu förändras situationen, källfilen finns i roten på webbplatsen och filen som du behöver länka till finns i mappen. I det här fallet blir sökvägen till filen som följer.

Länk

Observera att det inte finns några ytterligare punkter eller snedstreck före mappnamnet. Om filen inte finns i en, utan i två mappar, skrivs sökvägen till den så här.

Länk

Länkar i förhållande till webbplatsroten

Ibland kan du hitta sökvägen till filen i förhållande till roten på webbplatsen, ser det ut som "/Mapp/Filnamn" med ett snedstreck i början. Ja, spela in Kurser innebär att länken leder till en mapp som heter kurs, som finns i roten av webbplatsen, och i den måste du ladda ner indexfilen.

Observera att denna anmälningsform inte fungerar på lokal dator, men endast under kontroll av en webbserver.

Absoluta vägar


I det här fallet är allt väldigt enkelt, vi anger den direkta sökvägen till en fil som finns på en annan domän. Det är möjligt att ange en förkortad sökväg genom att använda två snedstreck i början utan att explicit specificera http eller https, och servern själv kommer att ersätta det nödvändiga protokollet (tillägget) enligt serverinställningarna. Det är viktigt att notera det den här typenär nödvändigt för att navigera mellan webbplatser:
http://google.com

I förhållande till webbplatsens rot


I det här fallet tar webbläsaren webbplatsdomänen och ersätter den angivna länken till den. I det här fallet kommer det att fungera http://site/css/style.css. I fallet med http behöver du inte oroa dig för https, eftersom det kommer att tas i den form som sidan är öppen för närvarande, det vill säga med http blir det http. Det är också mycket praktiskt för att överföra viss funktionalitet mellan olika sajter eller för att överföra en sida från en domän till en annan utan att röra koden. Ett prioriterat sätt att ange sökvägar till sidor och filer.

Angående denna sida


En mindre populär metod, eftersom den tar den aktuella sidan och lägger till en ny adress till dess sökväg ..com/trick/css/style.css . Nästan omöjligt att använda i de fall vi använder CNC.

Använder bastaggen


I det här fallet, istället för standarddomänsubstitutionen, kommer sökvägen från bas att ersätta den relativa sökvägen. Det vill säga, vi kommer att få en fil som ligger:
http://site/tricks/css/style.css

Relativa och absoluta vägar i PHP

Allt är väldigt enkelt, när vi arbetar i filsystemet kommer vi att följa reglerna för att arbeta med sökvägar i PHP. Om vi ​​skickar kommandot till klientens webbläsare används HTML-sökvägar. Det vill säga i följande exempel Vi skickar från PHP vägen till webbläsaren med sidan den behöver gå till. Det faktum att webbläsaren utförde övergången mellan sidor kan ses i adressfält:
header("Plats: /page2.php");
Så, vi öppnar sidan page1.php, och page2.php skrivs i adressfältet, och hela poängen är att webbläsaren FÖRST laddade sidan page1.php, och sedan fick information med omdirigering och LADDE den andra sidan page2. php. I det här fallet var omdirigeringen på klientsidan (webbläsaren), vilket innebär att vi använder reglerna relaterade till HTML (webbadress).

Absolut väg i PHP

En absolut sökväg i PHP behandlas som en absolut sökväg från katalogen där webbservern är installerad. Denna väg kan erhållas från:
$_SERVER["DOCUMENT_ROOT"]
Om vi ​​tar den här servern som ett exempel är dess sökväg: /home/school/public_html/schoolphp, vilket betyder att för att ange hela sökvägen till fotot “/photo/img1.jpg”, måste du ange följande väg:
getimagesize("/home/school/public_html/schoolphp/photo/img1.jpg"); getimagesize($_SERVER["DOCUMENT_ROOT"]."/photo/img1.jpg");
Jag skulle vilja notera att webbplatsen kan finnas i en underkatalog, det vill säga för:
http://site/forum/
det kan vara extremt svårt att använda DOCUMENT_ROOT, eftersom forumet (som externt manus) vet ännu inte var den kommer att läggas ut på sajten. Det finns flera sätt att hantera detta problem, låt oss lista ett par:

1) Skapa en sida som en underdomän.

2) Skriv den absoluta sökvägen i config i config.php, det vill säga:
Core::$ROOT = $_SERVER["DOCUMENT_ROOT"]; getimagesize(Core::$ROOT."/photo/img1.jpg"); // använd en absolut sökväg som kan ändras
Nu kan du länka hela din webbplats till Core::$ROOT utan ånger, och om du av misstag behöver ändra sökvägen till den inkluderade filen, kan du åsidosätta värdet på Core::$ROOT;

I förhållande till startfilen (bas)

I många index.php-system finns det en enda ingångspunkt, det vill säga index.php öppnas och andra filer kopplas från den.
inkludera "./modules/allpages.php";
I det här fallet kommer allpages.php att anslutas längs vägen: /home/school/public_html/schoolphp/modules/allpages.php. Den här metoden det är bekvämt eftersom om du skriver include i allpages.php-filen: include "./modules/module/page.php";, så kommer den fortfarande att sökas i förhållande till ingångspunkten, nämligen index.php:
/home/school/public_html/schoolphp/modules/module/page.php
Detta är en ganska bekväm implementering med tanke på att vi tydligt känner till strukturen för vår applikation i förhållande till roten index.php. Även om vi anropar någon annan fil än index.php, kommer sökvägarna att fungera exakt likadant. Vi kallade dir.php , vilket betyder att sökvägarna kommer att tas i förhållande till dir.php-filen!

Vad mer behöver du veta?

Jag kunde inte låta bli att påminna de som glömt eller föreslå för dem som inte vet att du inte bara kan gå tillbaka djupt in i kataloger utan också upp (mappar tillbaka), och deras syntax är ganska enkel:
inkludera "../file.php";
I det här fallet kommer katalogen för denna fil eller roten index.php att tas och returneras 1 mapp tillbaka, där filen "file.php" kommer att sökas.

DOCUMENT_ROOT är inte det enda alternativet för att få webbplatsens rotsökväg. Låt oss ta en titt på manualen: "Dokumentets rotkatalog där det aktuella skriptet körs är exakt den som anges i konfigurationsfil server." Detta betyder att om sökvägen är felaktigt skriven i konfigurationsfilen, kommer inte hela webbplatsen att fungera. Vad ska man göra? Du kan skriva till administratörerna och ägarna av hostingen som är värd för servern med hopp om att de kommer att korrigera deras brister Eller leta efter ett stabilt alternativ, som är __DIR__ , som är den absoluta vägen till den här filen, där filkoden körs. Låt oss säga att vi har en konfigurationsfil i config-mappen, och så att vi med __DIR__ inte behöver gå tillbaka en mapp till toppen varje gång genom att skriva __DIR__"/../" kan vi säkert skriva __DIR__ i vår variabel, i exemplet nedan skrev jag det i en klassegenskap (lektion nr 24, som inte förstod det, använd en vanlig variabel):
Core::$ROOT = __DIR__; // Eller för gammal PHP - dirname(__FILE__);
Jag ville också påminna dig om något intressant och viktigt. Enligt säkerheten förbjuder webbservern att flytta genom kataloger ovanför webbplatsens rot. Det vill säga, sajten ligger på följande sökväg: /home/school/public_html/schoolphp, men innehållet i mapparna /home eller /home/school kommer inte att vara tillgängligt att läsa.

Kan PHP använda HTML-sökvägar? Ja, i specialfunktioner, till exempel:
file_get_contets("http://webbplats");

Öva

I mina gamla projekt använde jag DOCUMENT_ROOT, nu bytte jag till relativa index.php-sökvägar "./folder/file".

Zend2, en produkt från PHP-utvecklare, är en av de mest komplexa FrameWorks på det här ögonblicket använder samma relativa vägar med en annan syntax än min, dvs "mapp/fil".

IPB.3-forumet använder dirname(__FILE__).

Slutsatser:

1) I HTML använder vi sökvägar relativt webbplatsroten, nämligen "/file.php" (raden börjar med snedstreck).
2) i PHP använder vi relativt rotfil"./file.php" (raden börjar med prick och snedstreck), ett alternativ skulle vara att använda en egenskap som initierats vid roten: __DIR__;
3) Rubrikomdirigering använder sökvägar från HTML. PHP arbetar med filsystem(ansluta filer, spara och redigera bilder) - med PHP-sökvägar.

Det är lätt att komma åt en fil som finns i samma mapp som vårt skript. Men när det kommer till att arbeta med filer i olika mappar börjar nybörjare bli galna.

Från den här artikeln kommer vi att lära oss:

  • - vad är en absolut och relativ sökväg till en fil,
  • - hur skiljer de sig åt för servern och webbläsaren,
  • - vilka misstag nybörjare gör när de bygger filvägar och hur man undviker dem.

Sökvägar till filer på servern

Den absoluta sökvägen för servern är den fullständiga sökvägen från roten till skriptet. Du kan ta reda på den fullständiga sökvägen för skriptet med den magiska konstanten __FILE__ :

Beroende på operativ system resultatet kan variera:

D:\OpenServer\domains\site\index.php- för OpenServer på Windows

/var/www/site/index.php - för UNIX

Naturligtvis kan funktionen include() och dess analoger inkludera en fil med dess absoluta sökväg:

Den relativa sökvägen för servern är sökvägen från mappen där det aktuella skriptet finns. Låt oss föreställa oss att det finns två skript på vår webbplats: index.php och config.php. Sedan kan du koppla den andra från den första med både absoluta och relativa vägar:

Än så länge är allt enkelt. Men om vi bestämmer oss för att inkludera en fil som i sig innehåller någon annan fil, blir situationen lite mer komplicerad. Låt oss föreställa oss att vi har en skriptmapp med skripten script1.php och script2.php , strukturen för klarhet:

Index.php-skript script1.php script2.php

Innehållet i filerna blir så här:

Starta filen index.php i din webbläsare. Om allt är gjort på rätt sätt kommer meddelandet att visas Anslutningen lyckades. Försök nu att flytta filen script2.php till roten på webbplatsen, på samma nivå som index.php .

Inget har förändrats, sajten visar fortfarande Anslutningen lyckades. Hur hände det här? Faktum är att PHP försöker hitta filen både i den anslutande mappen och i mappen för det anslutna skriptet. Som du förstår, om du har två filer i olika mappar, kan du av misstag ansluta fel skript och bryta platsen.

Navigering med hjälp av relativa vägar.

Observera att relativa sökvägar aldrig börjar med ett snedstreck / . Om det finns ett ledande snedstreck kommer PHP att betrakta vägen som absolut.

folder1/folder2/folder3/script1.php- sök efter en fil i en undermapp

../index.php - flytta upp en mapp

../../../index.php - flytta upp 3 mappar

Hur anger man sökvägen till en fil på servern?

Glöm relativa vägar. Ange alltid endast absoluta filsökvägar. Radikal, eller hur? Oroa dig inte, PHP-communityt har kommit på 2 enkla (det finns också svåra :)) sätt att specificera den fullständiga sökvägen... utan att ange den fullständiga sökvägen.

Det första sättet är att använda dirname()-funktionen. Den tar en sökväg till en fil och returnerar sökvägen utan filnamnet, dvs. mappen där filen finns. Genom att kombinera __FILE__ och dirname() kan vi få den aktuella skriptmappen:

Nu vet vi med säkerhet att filen script2.php kommer att inkluderas, som ligger i samma mapp som det aktuella skriptet.

Det andra sättet är att använda konstanter. Det används i många populärt CMS och ser ut så här:

En konstant DIR_ROOT skapas, där vi kommer att lagra hela sökvägen till webbplatsens rotmapp. Du kan också valfritt skapa flera konstanter med länkar till ofta använda mappar. I include() skickar vi en konstant och sökvägen till den önskade filen läggs till i förhållande till den.

Sökvägar till filer i webbläsaren

Webbläsaren har inte åtkomst till din servers hårddisk. Dess "omfattning" börjar från webbplatsens rotmapp. Därför ser de absoluta och relativa sökvägarna för servern och för webbläsaren helt olika ut.

Den absoluta sökvägen till en fil i webbläsaren börjar med ett snedstreck /, till exempel /images/logo.jpg. Denna sökväg betyder att filen finns på site.ru/images/logo.jpg.

Den relativa sökvägen till filen ser exakt likadan ut, men utan det inledande snedstrecket, till exempel images/logo.jpg.

Ett vanligt misstag nybörjare gör är att använda en relativ väg istället för en absolut. Låt oss föreställa oss att webbplatsens logotyp finns på site.ru/images/logo.jpg. Låt oss försöka ansluta den via en relativ väg:

Allt verkar vara bra och fungera. Men detta kommer att hända tills användaren går till någon mapp, till exempel site.ru/products/15/. Som du kanske gissar kommer webbläsaren att försöka ladda logotypen på site.ru/products/15/images/logo.jpg.

Använd alltid absoluta filsökvägar. På så sätt undviker du de flesta möjliga navigeringsproblem.







2024 gtavrl.ru.