Relative at absolute path sa linux. Absolute at relative path sa isang file sa PHP

Tulad ng alam mo, sa href parameter ng tag () dapat mong tukuyin ang landas sa file na tinutukoy.
Maraming tao ang sumusulat ng isang bagay tulad ng http://somesite.ru/catalog/doc.html. Oo, walang nagtatalo, gumagana ito. Ngunit mayroong isang "ngunit". Tingnan natin ang isang halimbawa.

Hayaang ma-host ang iyong site, halimbawa, sa ilang libreng pagho-host at ang address nito ay ang sumusunod: http://fsite.freehosting.ru.
Mayroong tungkol sa 100 mga dokumento sa server. At kaya nagpasya kang ilipat ang iyong website sa isa pang domain,
hayaan itong mabayaran sa pagho-host sa ru zone: http://site.ru. Well, dapat ba nating baguhin ngayon ang http://fsite.freehosting.ru sa http://site.ru kahit saan?
Oo, salamat sa mga editor tulad ng homesite, posible ito. Ngunit hindi ito solusyon.
Ipagpalagay natin na bago mag-upload ng page sa server, suriin mo ang functionality nito
sa iyong home apache server (para sa mga hindi pa nakakaalam kung ano ang "home server", pumunta dito (Pag-install at pag-configure ng isang apache server), at sa halip na http://localhost kailangan mong isulat ang http:// site.ru kahit saan Sumang-ayon dito, hindi bababa sa ito ay hindi maginhawa.

Ang solusyon ay, kapag tinukoy ang landas sa isang file, isaalang-alang hindi ang posisyon nito sa site, ngunit ang posisyon nito sa server.

Ganap na landas

Kunin natin, halimbawa, ang file na doc.html, na matatagpuan sa: http://somesite.ru/catalog/doc.html. Tulad ng alam mo, mayroong isang www folder sa server. Tulad ng nakikita natin mula sa address, naglalaman ang folder na ito ng folder ng catalog, at naglalaman na ito ng doc.html file.

Kung, kapag tinukoy ang path sa isang file, inilagay mo / sa harap ng address, ito ay magiging katulad ng sumusunod: root_directory_in_the_north/www/path sa file.
Ibig sabihin, ang http://somesite.ru/catalog/doc.html ay katulad ng sumusunod: /catalog/doc.html.
Kaya, kapag mayroong isang / sa harap ng address, nangangahulugan ito na ang "countdown" ay nagsisimula mula sa direktoryo ng www.
Ngayon, sa halip na http://localhost/index.html, maaari mong isulat ang /index.html mula sa anumang dokumento.
Ngunit upang makarating sa direktoryo ng cgi kailangan mong sumulat ng ganito: /cgi-bin/path sa file.

Ang mga landas na nilikha gamit ang mga pamamaraan na inilarawan sa itaas ay tinatawag na absolute, dahil ang absolute (full) path sa file sa server ay ipinahiwatig.

Kamag-anak na landas

Mayroon ding mga kamag-anak na landas, na tinukoy na nauugnay sa mismong dokumento kung saan nagmumula ang link.
Halimbawa, kung gagawa ka ng link sa doc.html newcat/new.html, ipinahihiwatig nito na ang file na new.html ay matatagpuan sa direktoryo ng newcat, na, sa turn, ay nasa parehong direktoryo ng doc.html file. Gaya ng nakikita mo, ang path na ito ay nauugnay sa doc.html file. Saanman matatagpuan ang file na ito, ang path na newcat/new.html ay palaging magiging wasto kung ang doc.html file at ang direktoryo ng newcat ay nasa parehong antas (ibig sabihin, sa parehong direktoryo).

Maaari ka ring magtaas ng isang direktoryo na nauugnay sa isang dokumento. Upang gawin ito kailangan mong isulat ang ../.
Halimbawa, mayroong isang direktoryo na malaki, naglalaman ito ng dalawang direktoryo: pangunahin at pangalawa. Ang pangunahing direktoryo ay naglalaman ng pamilyar na doc.html file; at sa pangalawang direktoryo ay mayroong isang file na bago.html. Upang makagawa ng link mula sa doc.html file patungo sa new.html file, kailangan mong isulat ang ../secondary/new.html. Ngunit kung ang malaking direktoryo ay matatagpuan sa www na direktoryo, ang landas patungo sa new.html file ay maaaring tukuyin tulad nito: /big/secondary/new.html

Sa halip na isang konklusyon, nararapat na sabihin na ang paggamit ng ganap at kamag-anak na mga landas ay lubos na nagpapadali sa gawain ng mga web master, maging sila ay isang baguhan o isang propesyonal. Kaya't gamitin ang pagkakataong ito, gaya ng sinasabi nila, nang buo, at subukang iwasan ang mga landas tulad ng http://site.ru/catalog/file.file, o hindi bababa sa gumamit ng kanilang tulong hangga't maaari.

Mabuti Masama

Mga ganap na landas


Sa kasong ito, ang lahat ay napaka-simple, ipinapahiwatig namin ang direktang landas sa isang file na matatagpuan sa isa pang domain. Posibleng tukuyin ang isang pinaikling landas sa pamamagitan ng paggamit ng dalawang slash sa simula nang hindi tahasang tinukoy ang http o https, at ang server mismo ang papalit sa kinakailangang protocol (extension) ayon sa mga setting ng server. Mahalagang tandaan na ang view na ito ay kinakailangan upang mag-navigate sa pagitan ng mga site:
http://google.com

May kaugnayan sa ugat ng site


Sa kasong ito, kinukuha ng browser ang domain ng site at pinapalitan ang tinukoy na link dito. Sa kasong ito ito ay gagana http://site/css/style.css. Sa kaso ng http, hindi na kailangang mag-alala tungkol sa https, dahil kukunin ito sa form kung saan kasalukuyang bukas ang pahina, iyon ay, sa http ito ay magiging http. Ito rin ay napaka-maginhawa para sa paglilipat ng ilang partikular na pag-andar sa pagitan ng iba't ibang mga site o paglilipat ng isang site mula sa isang domain patungo sa isa pa nang hindi hinahawakan ang code. Isang priority na paraan upang tukuyin ang mga path sa mga pahina at mga file.

Tungkol sa page na ito


Isang hindi gaanong sikat na paraan, dahil kinukuha nito ang kasalukuyang pahina at nagdaragdag ng bagong address sa landas nito ..com/trick/css/style.css . Halos imposibleng gamitin sa mga kaso kung saan ginagamit namin ang CNC.

Gamit ang base tag


Sa kasong ito, sa halip na ang karaniwang pagpapalit ng domain, ang path mula sa base ay papalitan para sa kamag-anak na landas. Iyon ay, makakatanggap kami ng isang file na matatagpuan:
http://site/tricks/css/style.css

Mga kamag-anak at ganap na landas sa PHP

Ang lahat ay napaka-simple, kapag nagtatrabaho sa file system ay susundin namin ang mga patakaran para sa pagtatrabaho sa mga landas sa PHP. Kung ipapasa namin ang command sa client browser, gagamitin ang mga HTML path. Iyon ay, sa sumusunod na halimbawa, ipinapasa namin mula sa PHP ang landas patungo sa browser kasama ang pahina kung saan kailangan nitong puntahan. Ang katotohanan na ang browser ay gumawa ng paglipat sa pagitan ng mga pahina ay makikita sa address bar:
header("Lokasyon: /page2.php");
Kaya, binubuksan namin ang page na page1.php, at ang page2.php ay nakasulat sa address bar, at ang buong punto ay UNANG na-load ng browser ang page na page1.php, at pagkatapos ay nakatanggap ng impormasyon na may redirection at NA-LOAD ang pangalawang page na page2. php. Sa kasong ito, ang pag-redirect ay nasa panig ng kliyente (browser), na nangangahulugang ginagamit namin ang mga panuntunang nauugnay sa HTML (web address).

Ganap na landas sa PHP

Ang isang ganap na landas sa PHP ay itinuturing bilang isang ganap na landas mula sa direktoryo kung saan naka-install ang web server. Ang landas na ito ay maaaring makuha mula sa:
$_SERVER["DOCUMENT_ROOT"]
Kung gagawin namin ang server na ito bilang isang halimbawa, ang landas nito ay: /home/school/public_html/schoolphp, na nangangahulugan na upang matukoy ang buong path sa larawang "/photo/img1.jpg", kailangan mong tukuyin ang sumusunod landas:
getimagesize("/home/school/public_html/schoolphp/photo/img1.jpg"); getimagesize($_SERVER["DOCUMENT_ROOT"]."/photo/img1.jpg");
Nais kong tandaan na ang site ay matatagpuan sa isang subdirectory, iyon ay, para sa:
http://site/forum/
Maaaring napakahirap gamitin ang DOCUMENT_ROOT, dahil hindi pa alam ng forum (bilang isang panlabas na script) kung saan ito matatagpuan sa site. Mayroong ilang mga paraan upang harapin ang problemang ito, ilista natin ang ilang:

1) Lumikha ng isang pahina bilang isang subdomain.

2) Isulat ang ganap na landas sa config sa config.php, iyon ay:
Core::$ROOT = $_SERVER["DOCUMENT_ROOT"]; getimagesize(Core::$ROOT."/photo/img1.jpg"); // gumamit ng ganap na landas na maaaring baguhin
Ngayon ay maaari mo nang i-link ang iyong buong site sa Core::$ROOT nang walang anumang pagsisisi, at kung hindi mo sinasadyang kailanganing baguhin ang path sa kasamang file, maaari mong i-override ang halaga ng Core::$ROOT;

May kaugnayan sa panimulang file (base)

Sa maraming index.php system mayroong isang entry point, iyon ay, index.php ay bubukas, at iba pang mga file ay konektado mula dito.
isama ang "./modules/allpages.php";
Sa kasong ito, ang allpages.php ay ikokonekta sa landas: /home/school/public_html/schoolphp/modules/allpages.php. Maginhawa ang pamamaraang ito dahil kung isusulat mo ang isama sa allpages.php file: isama ang "./modules/module/page.php";, pagkatapos ay hahanapin pa rin ito kaugnay ng entry point, katulad ng index.php:
/home/school/public_html/schoolphp/modules/module/page.php
Ito ay isang medyo maginhawang pagpapatupad kung isasaalang-alang na malinaw na alam namin ang istraktura ng aming aplikasyon na nauugnay sa root index.php. Kahit na tumawag kami ng anumang iba pang file maliban sa index.php, ang mga path ay gagana nang eksakto pareho. Tinawag namin ang dir.php , na nangangahulugan na ang mga path ay dadalhin kaugnay sa dir.php file!

Ano pa ang kailangan mong malaman?

Hindi ko maiwasang paalalahanan ang mga nakakalimutan o nagmumungkahi sa mga hindi nakakaalam na maaari kang bumalik hindi lamang malalim sa mga direktoryo, kundi pati na rin sa itaas (mga folder pabalik), at ang kanilang syntax ay medyo simple:
isama ang "../file.php";
Sa kasong ito, kukunin ang direktoryo ng file na ito o ang root index.php at ibabalik ang 1 folder pabalik, kung saan hahanapin ang file na "file.php".

Ang DOCUMENT_ROOT ay hindi lamang ang opsyon para makuha ang root path ng site. Tingnan natin ang manu-manong: "Ang direktoryo ng ugat ng dokumento kung saan isinasagawa ang kasalukuyang script ay eksaktong tinukoy sa file ng pagsasaayos ng server." . Nangangahulugan ito na kung ang path ay naisulat nang hindi tama sa configuration file, ang buong site ay hindi gagana. Ano ang gagawin? Maaari kang sumulat sa mga admin at may-ari ng hosting na nagho-host ng server na may pag-asa na itatama nila ang kanilang mga pagkukulang. O maghanap ng isang matatag na alternatibo, na __DIR__ , ito ang ganap na landas sa ibinigay na file kung saan tumatakbo ang code. Sabihin nating mayroon tayong configuration file sa config folder, at para sa paggamit ng __DIR__ hindi na natin kailangang bumalik ng isang folder sa bawat oras sa pamamagitan ng pagsulat ng __DIR__"/../" ligtas nating maisulat ang __DIR__ sa ating variable, sa halimbawa sa ibaba ay isinulat ko ito sa isang pag-aari ng klase (aralin Blg. 24 , na hindi nakakuha nito, gumamit ng regular na variable):
Core::$ROOT = __DIR__; // O para sa lumang PHP - dirname(__FILE__);
Nais ko ring ipaalala sa iyo ang isang bagay na kawili-wili at mahalaga. Ayon sa seguridad, ipinagbabawal ng web server ang paglipat sa mga direktoryo sa itaas ng ugat ng site. Iyon ay, ang site ay matatagpuan sa sumusunod na landas: /home/school/public_html/schoolphp, ngunit ang mga nilalaman ng /home o /home/school folder ay hindi magagamit upang basahin.

Maaari bang gumamit ang PHP ng mga HTML path? Oo, sa mga espesyal na function, halimbawa:
file_get_contets("http://site");

Magsanay

Sa aking mga lumang proyekto ginamit ko ang DOCUMENT_ROOT, ngayon ay lumipat ako sa mga kamag-anak na index.php na landas "./folder/file".

Ang Zend2, isang produkto mula sa mga developer ng PHP, isa sa pinaka kumplikadong FrameWork sa ngayon ay gumagamit din ng mga kamag-anak na landas na may ibang syntax mula sa akin, iyon ay, "folder/file".

Ang forum ng IPB.3 ay gumagamit ng dirname(__FILE__).

Mga konklusyon:

1) Sa HTML gumagamit kami ng mga landas na nauugnay sa ugat ng site, katulad ng "/file.php" (Nagsisimula ang linya sa slash).
2) sa PHP ginagamit namin na may kaugnayan sa root file na "./file.php" (Ang linya ay nagsisimula sa tuldok at slash), ang isang alternatibo ay ang paggamit ng isang property na sinimulan sa ugat: __DIR__;
3) Gumagamit ang pag-redirect ng header ng mga path mula sa HTML. Gumagana ang PHP sa file system (pagkonekta ng mga file, pag-save at pag-edit ng mga larawan) - na may mga path ng PHP.

Tulad ng alam mo, sa href parameter ng tag () dapat mong tukuyin ang landas sa file na tinutukoy.
Maraming tao ang sumusulat ng isang bagay tulad ng http://somesite.ru/catalog/doc.html. Oo, walang nagtatalo, gumagana ito. Ngunit mayroong isang "ngunit". Tingnan natin ang isang halimbawa.

Hayaang ma-host ang iyong site, halimbawa, sa ilang libreng pagho-host at ang address nito ay ang sumusunod: http://fsite.freehosting.ru.
Mayroong tungkol sa 100 mga dokumento sa server. At kaya nagpasya kang ilipat ang iyong website sa isa pang domain,
hayaan itong mabayaran sa pagho-host sa ru zone: http://site.ru. Well, dapat ba nating baguhin ngayon ang http://fsite.freehosting.ru sa http://site.ru kahit saan?
Oo, salamat sa mga editor tulad ng homesite, posible ito. Ngunit hindi ito solusyon.
Ipagpalagay natin na bago mag-upload ng page sa server, suriin mo ang functionality nito
sa iyong home apache server (para sa mga hindi pa nakakaalam kung ano ang "home server", pumunta dito (Pag-install at pag-configure ng isang apache server), at sa halip na http://localhost kailangan mong isulat ang http:// site.ru kahit saan Sumang-ayon dito, hindi bababa sa ito ay hindi maginhawa.

Ang solusyon ay, kapag tinukoy ang landas sa isang file, isaalang-alang hindi ang posisyon nito sa site, ngunit ang posisyon nito sa server.

Ganap na landas

Kunin natin, halimbawa, ang file na doc.html, na matatagpuan sa: http://somesite.ru/catalog/doc.html. Tulad ng alam mo, mayroong isang www folder sa server. Tulad ng nakikita natin mula sa address, naglalaman ang folder na ito ng folder ng catalog, at naglalaman na ito ng doc.html file.

Kung, kapag tinukoy ang path sa isang file, inilagay mo / sa harap ng address, ito ay magiging katulad ng sumusunod: root_directory_in_the_north/www/path sa file.
Ibig sabihin, ang http://somesite.ru/catalog/doc.html ay katulad ng sumusunod: /catalog/doc.html.
Kaya, kapag mayroong isang / sa harap ng address, nangangahulugan ito na ang "countdown" ay nagsisimula mula sa direktoryo ng www.
Ngayon, sa halip na http://localhost/index.html, maaari mong isulat ang /index.html mula sa anumang dokumento.
Ngunit upang makarating sa direktoryo ng cgi kailangan mong sumulat ng ganito: /cgi-bin/path sa file.

Ang mga landas na nilikha gamit ang mga pamamaraan na inilarawan sa itaas ay tinatawag na absolute, dahil ang absolute (full) path sa file sa server ay ipinahiwatig.

Kamag-anak na landas

Mayroon ding mga kamag-anak na landas, na tinukoy na nauugnay sa mismong dokumento kung saan nagmumula ang link.
Halimbawa, kung gagawa ka ng link sa doc.html newcat/new.html, ipinahihiwatig nito na ang file na new.html ay matatagpuan sa direktoryo ng newcat, na, sa turn, ay nasa parehong direktoryo ng doc.html file. Gaya ng nakikita mo, ang path na ito ay nauugnay sa doc.html file. Saanman matatagpuan ang file na ito, ang path na newcat/new.html ay palaging magiging wasto kung ang doc.html file at ang direktoryo ng newcat ay nasa parehong antas (ibig sabihin, sa parehong direktoryo).

Maaari ka ring magtaas ng isang direktoryo na nauugnay sa isang dokumento. Upang gawin ito kailangan mong isulat ang ../.
Halimbawa, mayroong isang direktoryo na malaki, naglalaman ito ng dalawang direktoryo: pangunahin at pangalawa. Ang pangunahing direktoryo ay naglalaman ng pamilyar na doc.html file; at sa pangalawang direktoryo ay mayroong isang file na bago.html. Upang makagawa ng link mula sa doc.html file patungo sa new.html file, kailangan mong isulat ang ../secondary/new.html. Ngunit kung ang malaking direktoryo ay matatagpuan sa www na direktoryo, ang landas patungo sa new.html file ay maaaring tukuyin tulad nito: /big/secondary/new.html

Sa halip na isang konklusyon, nararapat na sabihin na ang paggamit ng ganap at kamag-anak na mga landas ay lubos na nagpapadali sa gawain ng mga web master, maging sila ay isang baguhan o isang propesyonal. Kaya't gamitin ang pagkakataong ito, gaya ng sinasabi nila, nang buo, at subukang iwasan ang mga landas tulad ng http://site.ru/catalog/file.file, o hindi bababa sa gumamit ng kanilang tulong hangga't maaari.

Anumang web page, larawan, video, atbp. ay, una sa lahat, isang file na may sarili ganap o kamag-anak landas (address). Ang file mismo sa Internet ay matatagpuan sa isang computer na tinatawag na server. Kaya, dapat mong isaalang-alang kung paano ipinakita ang file sa server at sa Internet. Sa artikulong ito nais kong linawin ang mga punto sa itaas at linawin ang isyung ibinangon. Subukan natin?

Ganap na landas (address)

Ano ang isang ganap na landas sa isang file?

Ganap na landas o tirahan ay ang buong landas o address, na nauugnay sa home folder sa server o Pangalan ng domain sa internet.

sinasabi" folder ng bahay"Ang ibig kong sabihin ay ang simula ng puwang na inilaan ng hosting provider. Halimbawa, kung pinag-uusapan natin ang tungkol sa isang lokal na server sa operating system ng Windows, ang drive mismo ay magsisilbing home folder, ibig sabihin, C:/. Kasabay nito, kadalasan ang hosting provider ay naglalaan lamang ng isang partikular na virtual (kondisyon) na espasyo sa user, kung saan ang isang partikular na folder, madalas na tinatawag na /home, ay nagsisilbing home folder.

sinasabi" domain name"Ang ibig kong sabihin ay isang URL na nagsisimula sa pagbanggit ng protocol, halimbawa: http://sitename.ru/. Sa Internet, ito ang home folder para sa bawat isa sa mga ipinakitang mapagkukunan.

Paano malalaman ang ganap na landas sa server sa PHP?

Kung ang lahat ay higit pa o hindi gaanong malinaw sa URL address, pagkatapos ay sa home folder sa server ang sitwasyon ay medyo mas kumplikado. Sa huli, ang bawat provider ay may sariling mga problema at dapat itong isaalang-alang.

Hayaan akong magsimula sa katotohanan na ang ganap na landas sa server ay karaniwang tinutukoy na may kaugnayan sa lokasyon ng script kung saan ito nangyayari. Halimbawa, ang config.php file ay matatagpuan sa root folder ng site at kailangan nating malaman ang ganap na landas patungo dito.

Hayaan akong linawin sa pagsasabing " root folder"Ang ibig kong sabihin ay isang folder sa server na nakatuon sa site. Ito ang nagsisilbing panimulang punto ng URL kaugnay ng domain name.

Upang gawin ito, maaari mong gamitin ang __FILE__ constant, na naglalaman ng buong path at pangalan ng kasalukuyang file kung saan ito tinawag. Upang makuha lamang ang buong path at alisin ang pangalan ng kasalukuyang file, maaari mong gamitin ang dirname() function, na nagbabalik ng parent directory ng tinukoy na path. Halimbawa:

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

Sa PHP 5.3 at mas bago, magagamit mo na ang __DIR__ constant:

$abspath = __DIR__

Kaya, napakaginhawang isama ang config.php file sa hinaharap at gamitin ang absolute path ng $abspath variable na nakuha dito bilang panimulang punto. Halimbawa, ipagpalagay na ang script test.php ay matatagpuan sa folder: path/ - at ang gustong file na data.txt ay nasa folder: data/. Sa kasong ito, ang tawag ay maaaring magmukhang:

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

Pakitandaan na ikinonekta ko ang config.php file gamit ang isang kamag-anak na landas, ngunit higit pa doon sa ibang pagkakataon.

Kaugnay na landas (address)

Ano ang isang kamag-anak na landas ng file?

Kamag-anak na landas o tirahan ay isang path o address na nauugnay sa lokasyon ng file kung saan na-access ang isa pang file.

Ang anumang file system ay isang mahigpit na hierarchy ng mga folder at file ng magulang at anak. Halimbawa: C:\folder\file.php – dito ang folder\ folder ay anak ng C:\ drive at magulang ng file file.php file.

Para sa kalinawan, isaalang-alang natin ang sumusunod na hierarchy:

  • file1.php
  • folder\
    • file.php
    • subfolder\
      • file3.php

Upang ma-access ang file C:\file2.php mula sa file C:\folder\file.php, kailangan naming lumabas sa kasalukuyang folder folder\, i.e. umakyat ng isang antas. Para dito maaari mong gamitin, folder (Sasabihin ko pa nga pseudo-folder) direktoryo ng magulang, na kumakatawan sa dalawang tuldok (..) . Sa madaling salita, makukuha natin ang path: ..\file2.php - relative to the file file.php .

Upang ma-access ang file C:\folder\subfolder\file3.php mula sa file C:\folder\file.php, kailangan nating ilagay ang subfolder\ subfolder, i.e. bumaba ng isang antas. Sa ganitong paraan makukuha natin ang landas: subfolder\file3.php - kaugnay ng file file.php .

Gawin nating mas kumplikado ang mga bagay at pumunta mula sa file C:\folder\subfolder\file3.php hanggang sa file C:\file2.php . Ang kamag-anak na landas ay magmumukhang: ..\..\file2.php - napunta kami sa dalawang antas na mas mataas. Gawin ang kabaligtaran, ibig sabihin, mula sa file na C:\file2.php ay bumaling tayo sa file na C:\folder\subfolder\file3.php. Ang kamag-anak na landas ay magmumukhang: folder\subfolder\file3.php - bababa tayo ng dalawang antas.

Mga kalamangan at kawalan ng kamag-anak na landas (address)

Malinaw, ang kamag-anak na landas ay hindi naglalaman ng folder ng tahanan at mga folder ng magulang. Kaya, ang huling address ay mas maikli. Bukod dito, kung kailangan mong lumipat mula sa isang domain patungo sa isa pa, hindi na kailangang magrehistro ng bagong ganap na address.

Sa kabilang banda, kung sisipiin namin ang nilalaman ng isang site sa isa pang mapagkukunan, na may parehong mga larawan kung saan tinukoy ang kamag-anak na landas, makakatanggap kami ng isang error, dahil Walang mga folder at file ng site sa mapagkukunan ng third-party. Mangyayari ito kung titingnan ang pahina sa cache ng search engine. Muli, ang paggamit ng kamag-anak na landas ay madaling magkamali, na magreresulta sa problema sa pag-index ng site.

Upang buod, dapat tandaan na ipinapayong bawasan ang paggamit ng mga kamag-anak na landas o address at gumamit ng ganap na mga landas at address.

Konklusyon

Sa aking artikulo, sinubukan kong isaalang-alang ang pangunahing isyu na may kaugnayan sa ganap at kamag-anak na mga landas (mga address) sa mga file at folder. Sa katunayan, kung nagtatrabaho ka sa isang computer, pagkatapos ay isang priori mayroon ka nang ideya tungkol sa file system, ngunit nang hindi isinasaalang-alang ang ilang mga nuances, medyo mahirap na bumaba sa lupa at itaas ang isang bilang ng mga isyu na hindi maiiwasang nauugnay sa tamang addressing. Yun lang ang meron ako. Salamat sa iyong pansin. Good luck!

sa 8:00 I-edit ang mensahe 5 komento

ang iyong site ay umiiral sa dalawang dimensyon, kumbaga.
Totoo at virtual.

Para sa lahat ng bisita, isa itong virtual web server. Na naiiba, bukod sa iba pang mga bagay, dahil WALANG FILES ang umiral dito. kung magsusulat ka %20" target="_blank">http://site.ru/file.html- ito ay hindi isang file. Ito ay isang URI, isang virtual na address. Maaaring walang anumang file na pinangalanang file.html sa server. Lahat ito ay mga virtual na address, hindi mga file.
At partikular na gumagana ang browser sa mga address.

Para sa isang developer, ang isang website ay isang program na tumatakbo sa isang napaka partikular na totoong computer. Sa isang napaka-tiyak na hard drive, mga direktoryo at mga file. At ang script, nagtatrabaho sa data nito, naglo-load ng iba pang mga script, ay gumagana sa totoong FILES, sa pisikal na DISK.

Nasa pagkakaibang ito ang mga paghihirap na madalas na nararanasan ng mga nagsisimula.
Nawawalan sila ng mga file, nalilito ang mga link sa mga file, nag-a-access ng mga lokal na file sa pamamagitan ng HTTP, o nagsasama ng mga file mula sa ugat ng web server.

Ngunit kailangan mo lamang na malinaw na maunawaan ang dalawang bagay:
1. Matukoy ang pagkakaiba sa pagitan ng ugat ng web server, tulad ng nakikita ng browser, at ang ugat ng file system sa disk.
2. Pagkakaiba sa pagitan ng mga relatibong landas at ganap na landas.

Magsimula tayo sa pangalawa.
Ito ay napaka-simple. Kung ang landas ay tinukoy mula sa ugat ng system, ito ay isang ganap na landas. Ito ay tulad ng isang postal address sa totoong buhay - saan ka man pumunta, ngunit sa eksaktong address ay lagi mong mahahanap ang tamang lugar.
mga halimbawa ng ganap na landas:
/var/www/site/forum/index.php
/img/frame.gif
mula sa:\windows\command.com

Sa mga sistema ng Unix at sa mga website, ang ugat ay tinutukoy ng isang slash - "/".
Ito ay mahalaga. Ito ay hindi lamang isang stick, ngunit isang malayang ADDRESS, isang landas.
Sa address %20" target="_blank">http://www.site.ru/ ang huling slash ay hindi para sa kagandahan! Ito ay nagpapahiwatig ng isang napaka-tiyak na address - ang simula ng site.
Sa isang disk sa Unix system maaari mo ring i-type ang "cd /" at dadalhin ka sa root directory.
Sa mga sistema ng Windows, ang file system ay nahahati sa mga disk, samakatuwid, ang ganap na address ay dapat magpahiwatig ng pangalan ng disk. Walang ganap na ugat ng buong file system sa Windows; Halimbawa, C:\ E:\
samakatuwid, kahit na ang landas sa Windows ay nagsisimula sa isang slash, ito ay hindi isang ganap na landas, ngunit isang kamag-anak. May kaugnayan sa kasalukuyang disk. At ang ganap ay nagsisimula sa isang liham.

Kung ang ugat ay hindi tinukoy sa simula ng landas, ang landas na ito ay magiging kamag-anak, at ito ay nagmula sa kasalukuyang posisyon. Sa totoong buhay, ito ay tulad ng daan patungo sa tindahan ng alak - "dalawang bloke sa kaliwa at tuwid sa lahat ng oras." Ang landas na ito ay maaabot lamang mula sa isang partikular na punto. Mula sa iba ay mapupunta ka sa isang ganap na naiibang lugar.
Ang pinakasimpleng halimbawa ng isang kamag-anak na landas ay simpleng pangalan ng file.
Kung ang file ay nasa parehong direktoryo kung saan gumagana ang program, mahahanap ito sa pamamagitan ng pagdaragdag ng kasalukuyang landas sa pangalan ng file.
mga halimbawa ng mga relatibong landas:
file.php (ang file ay nasa parehong folder)
./file.php (ang file ay nasa parehong folder. Ang ganitong entry ay minsan kinakailangan sa ilang Unix system)
images/picture.jpg (ang file ay nasa folder ng mga imahe, na nasa kasalukuyang folder)
../file.php (ang file ay nasa isang folder na matatagpuan isang antas na mas mataas kaysa sa kasalukuyang)
../../file.php (ang file ay nasa isang folder na matatagpuan dalawang antas na mas mataas kaysa sa kasalukuyang)

Parehong ang operating system at ang browser, kapag nakatagpo sila ng isang kamag-anak na landas, palawakin ito sa isang ganap na landas. ngunit ang bawat isa sa kanyang sariling paraan.

Ngayon ay lumipat tayo sa unang punto.
Ang pagkakaiba sa pagitan ng ugat ng web server, tulad ng nakikita ng browser, at ang ugat ng file system sa disk.
Sa pangkalahatan, dapat na malinaw ang lahat mula sa mga naunang paliwanag.
Sa disk, ang path sa script file ay maaaring maging ganito:
/var/www/site/forum/index.php
Kasabay nito, ang virtual address ng script na ito kapag tiningnan sa pamamagitan ng browser ay magiging:
%20" target="_blank">http://www.site.ru/forum/index.php
Sa halimbawang ito, madaling makita kung saan nagsalubong ang dalawang dimensyon: ang dalawang address ay may isang karaniwang bahagi - /forum/index.php - at ito ang dahilan ng pagkalito.
Para sa browser, ito ang pinaka kumpletong path na maaaring. Nagsisimula ito sa ugat ng site.
Para sa isang script na tumatakbo sa server, ito ay BAHAGI lamang ng landas.
para sa script, ang path /forum/index.php ay hindi na umiiral - walang forum directory sa ugat ng disk!
upang makuha ang buong landas para sa kung ano ang hitsura ng /forum/index.php sa site, kailangan mong idagdag sa kaliwa ang landas sa folder na itinuturing na ugat para sa buong web server.
sa aming halimbawa ito ay
/var/www/site
Nakatakda ang path na ito sa configuration ng web server at nakapaloob sa variable ng PHP system $_SERVER["DOCUMENT_ROOT"]

Sa isang virtual server - ang isa na nakikita ng gumagamit - sa kabaligtaran, walang disk. May ugat ng site. Iyon ay, upang ang anumang link ay garantisadong gumagana, hindi alintana kung saan sa site na ito ay tinawag mula sa, ito ay dapat na ganap.
Kung mayroon ka, sabihin nating, dalawang seksyon sa iyong website:
%20" target="_blank">http://www.site.ru/about/info.php
At
%20" target="_blank">http://www.site.ru/job/vacancy.php
pagkatapos, kung gumawa ka ng isang link sa info.php file para lamang sa vacancy.php , hindi ito mahahanap ng browser - hahanapin nito ang address %20," target="_blank">http://www.site.ru/about/vacancy.php, pagkumpleto ng landas mula sa kasalukuyang direktoryo.
Samakatuwid, kailangan mong isulat ang buong landas mula sa ugat ng site - /job/vacancy.php
Nalalapat ang lahat ng ito, siyempre, hindi lamang sa mga tag
ngunit din at anumang iba pa kung saan ginagamit ang mga link sa iba pang mga file.

Ang mga link sa mga lokal na address ay dapat isulat nang hindi tinutukoy ang protocol at domain - tanging ang path mula sa root ng site - /job/vacancy.php. Ang mga link sa iba pang mga site ay dapat na nakasulat nang buo - %20." target="_blank">http://www.site1.ru/job/vacancy.php .

Nagbibigay ang PHP ng maraming tool para sa pagtatrabaho sa mga file, direktoryo, at URL.

Ang __FILE__ constant ay naglalaman ng pangalan ng kasalukuyang executable file.
Hindi tulad ng PHP_SELF, naglalaman ito ng pangalan ng file na kasalukuyang isinasagawa.
Ang disenyo ay tila lubhang kapaki-pakinabang diname(__FILE__), kung saan ito ay kanais-nais na palitan ang lahat ng mga tawag sa mga file na matatagpuan sa parehong direktoryo ng script ng pagtawag. Halimbawa:
nangangailangan ng diname(__FILE__). "/init.php"
Ang dirname() function, kasama ang basename(), ay isa sa pinakakaraniwang ginagamit para sa pagtatrabaho sa mga file at direktoryo.

Tandaan:
Kung mayroon kang mga problema sa mga landas kapag naglilipat ng mga script mula sa Windows patungo sa isang Unix system, una sa lahat ay bigyang pansin ang kaso ng mga titik. Sa mga server ng Unix, ang kaso ng mga titik sa pangalan ng file ay mahalaga, ang File.txt at file.txt ay dalawa
iba't ibang mga file, at sa ilalim ng Windows - pareho. Pinakamainam na palaging isulat ang pangalan ng file nang eksakto, igalang ang kaso.