Dosyanın mutlak ve göreli yolu. PHP'de mutlak ve göreli dosya yolu

  • 02.08.2019

siteniz deyim yerindeyse iki boyutta var olur.
Gerçek ve sanal.

Tüm ziyaretçiler için bu sanal bir web sunucusudur. Diğer şeylerin yanı sıra, üzerinde HİÇBİR DOSYA olmamasıyla farklılık gösterir. eğer yazarsan %20" target="_blank">http://site.ru/file.html bir dosya değildir. Bu bir URI, sanal bir adres. Sunucuda file.html adında bir dosya olmayabilir. Bunların hepsi dosya değil, sanal adreslerdir.
Ve tarayıcı adreslerle çalışır.

Bir geliştirici için site, çok özel bir gerçek bilgisayarda çalışan bir programdır. Çok özel bir sabit sürücü, dizinler ve dosyalar ile. Ve kendi verileriyle çalışan, diğer komut dosyalarını yükleyen komut dosyası, fiziksel bir DISK üzerinde gerçek DOSYALAR ile çalışır.

Yeni başlayanların sıklıkla karşılaştığı zorluklar bu farkta yatmaktadır.
Dosyaları kaybederler, bağlantıları dosyalarla karıştırırlar, yerel dosyalara HTTP aracılığıyla erişirler veya web sunucusunun kökünden dosyalar içerirler.

Ve iki şeyi açıkça anlamanız gereken tek şey:
1. Tarayıcının gördüğü şekliyle web sunucusunun kökünü ve diskteki dosya sisteminin kökünü ayırt edin.
2. Göreceli ve mutlak yollar arasındaki fark.

İkincisinden başlayalım.
Çok basit. Yol, sistemin kökünden belirtilirse, bu yol mutlaktır. Gerçek hayatta bir posta adresi gibidir - nereden geldiğiniz önemli değildir, ancak tam adreste her zaman tam olarak doğru yeri bulacaksınız.
mutlak yol örnekleri:
/var/www/site/forum/index.php
/img/frame.gif
nereden:\windows\command.com

Unix sistemlerinde ve web sitelerinde kök, eğik çizgi - "/" ile gösterilir.
Bu önemli. Bu sadece bir çubuk değil, bağımsız bir ADRES, bir yoldur.
adreste %20" target="_blank">http://www.site.ru/ son eğik çizgi güzellik için değil! Çok özel bir adresi belirtir - sitenin başlangıcı.
Unix sistemlerinde bir disk üzerine de "cd /" yazabilirsiniz ve kök dizine yönlendirilirsiniz.
Windows sistemlerinde dosya sistemi disklere bölünmüştür, bu nedenle mutlak adreste diskin adını belirtmelisiniz. Windows'ta tüm dosya sisteminin mutlak kökü yoktur, her diskin kendine ait vardır. Örneğin, C:\ E:\
bu nedenle, Windows'taki yol bir eğik çizgi ile başlasa bile, bu mutlak bir yol değil, göreceli bir yoldur. Geçerli diske göre. Ve mutlak bir harfle başlar.

Yolun başında kök belirtilmemişse, bu yol göreceli olacaktır ve mevcut konumdan alınır. Gerçek hayatta bu, içki dükkanına giden yol gibidir - "iki blok sola ve her zaman dümdüz orada." Bu yola sadece belirli bir noktadan ulaşılabilir. Diğerinden tamamen farklı bir yere gideceksiniz.
Göreceli yolun en basit örneği yalnızca bir dosya adıdır.
Dosya, programın çalıştığı dizindeyse, dosya adına geçerli yolu ekleyerek onu bulur.
göreli yol örnekleri:
file.php (dosya aynı klasördedir)
./file.php (dosya aynı klasördedir. Böyle bir giriş bazen bazı Unix sistemlerinde gereklidir)
images/picture.jpg (dosya, mevcut klasörde bulunan resimler klasöründedir)
../file.php (dosya mevcut olanın bir seviye üstündeki klasördedir)
../../file.php (dosya, mevcut olanın iki seviye üzerinde bulunan bir klasörde bulunur)

Göreceli bir yolla karşılaşan işletim sistemi ve tarayıcı, onu mutlak bir yola tamamlar. ama her biri kendi yolunda.

Şimdi ilk noktaya geçelim.
Tarayıcı tarafından görülen web sunucusunun kökü ile diskteki dosya sisteminin kökü arasındaki fark.
Genel olarak, önceki açıklamalardan her şey açık olmalıdır.
Diskte, komut dosyasının yolu aşağıdaki gibi olabilir:
/var/www/site/forum/index.php
Aynı zamanda, bir tarayıcı aracılığıyla görüntülendiğinde bu betiğin sanal adresi şöyle olacaktır:
%20" target="_blank">http://www.site.ru/forum/index.php
Bu örnekte, iki boyutun kesiştiği yeri görmek kolaydır: bu iki adresin ortak bir parçası vardır - /forum/index.php - ve bu da kafa karışıklığına neden olur.
Tarayıcı için bu, olabilecek en eksiksiz yoldur. Sitenin kökünden başlar.
Sunucuda çalışan bir komut dosyası için bu, yolun yalnızca BÖLÜMÜ'dür.
komut dosyası için /forum/index.php yolu mevcut olmayacak - diskin kökünde forum dizini yok!
/forum/index.php'nin sitede nasıl göründüğünün tam yolunu elde etmek için, tüm web sunucusunun kökü olarak kabul edilen soldaki klasörün yolunu ekleyin.
bizim örneğimizde öyle
/var/www/site
Bu yol, web sunucusu yapılandırmasında ayarlanır ve PHP sistem değişkeninde bulunan yoldur. $_SERVER["DOCUMENT_ROOT"]

Sanal sunucuda - kullanıcının gördüğü - aksine, disk yoktur. Site kökü var. Yani herhangi bir bağlantının sitede nereden çağrılırsa çağrılsın çalışacağının garanti edilebilmesi için mutlaka mutlak olması gerekir.
Sitenizde diyelim ki iki bölüm varsa:
%20" target="_blank">http://www.site.ru/about/info.php
ve
%20" target="_blank">http://www.site.ru/job/vacancy.php
o zaman, info.php dosyasında basitçe vacancy.php'ye bir bağlantı yaparsanız, tarayıcı onu bulamaz - adresi arar %20," target="_blank">http://www.site.ru/about/vacancy.php, geçerli dizinden yol oluşturma.
Bu nedenle, site kökünden tam yolu yazmanız gerekir - /job/vacancy.php
Bütün bunlar elbette sadece etiketlerle ilgili değil ama aynı zamanda ve diğer dosyalara bağlantıların kullanıldığı diğerleri.

Yerel adreslere bağlantılar, protokol ve etki alanı belirtilmeden yazılmalıdır - yalnızca site kökünden gelen yol - /job/vacancy.php . Diğer sitelere bağlantılar tam olarak yazılmalıdır - %20." target="_blank">http://www.site1.ru/job/vacancy.php .

PHP, dosyalar, dizinler ve URL'lerle çalışmak için birçok olanak sağlar.

__FILE__ sabiti, geçerli yürütülebilir dosyanın adını içerir.
PHP_SELF'den farklı olarak, yürütülmekte olan dosyanın adını içerir.
çok kullanışlı tasarım dizinadı(__FILE__ )çağıran komut dosyasıyla aynı dizinde bulunan dosyalara yapılan tüm çağrıların değiştirilmesinin istendiği . Örneğin:
dirname(__FILE__ ) gerektirir. "/init.php"
dirname() işlevi, basename() ile birlikte dosya ve dizinlerle çalışmak için en sık kullanılan işlevlerden biridir.

Not:
Komut dosyalarını Windows'tan Unix'e aktarırken yollarda sorun yaşıyorsanız, öncelikle harf durumuna dikkat edin. Unix sunucularında, dosya adındaki harflerin durumu önemlidir, File.txt ve file.txt iki farklı dosyadır ve Windows altında aynıdırlar. Dosya adını büyük/küçük harfe saygı duyarak her zaman tam olarak yazmak en iyisidir.

Bildiğiniz gibi etiketin href parametresinde () bağlantının yapıldığı dosyanın yolunu belirtmelisiniz.
Birçoğu http://somesite.ru/catalog/doc.html gibi bir şeyler yazar. Evet, kimse tartışmıyor, işe yarıyor. Ama bir "ama" var. Bir örneğe bakalım.

Örneğin, sitenizin bazı ücretsiz barındırmalarda barındırılmasına izin verin ve adresi şuydu: http://fsite.freehosting.ru.
Sunucuda yaklaşık 100 belge var. Böylece sitenizi başka bir alana aktarmaya karar verdiniz,
ru bölgesinde barındırma ödenmesine izin verin: http://site.ru. Peki, şimdi http://fsite.freehosting.ru'yu her yerde http://site.ru olarak değiştirelim mi?
Evet, homesite gibi editörler sayesinde bu mümkün. Ama bu çıkış yolu değil.
Sunucuya bir sayfa yüklemeden önce performansını kontrol ettiğinizi varsayalım.
ev apache sunucunuzda ("ev sunucusu"nun ne olduğunu henüz bilmeyenler için - burada (Apache sunucusunu kurma ve yapılandırma) ve http://localhost yerine http://site yazmanız gerekecek .ru her yerde Bunu kabul edin, en azından rahatsız edici.

Çıkış yolu, dosyanın yolunu belirlerken sitedeki konumunu değil, sunucudaki konumunu dikkate almaktır.

Kesin yol

Örneğin, şu adreste bulunan doc.html dosyasını alın: http://somesite.ru/catalog/doc.html. Sunucuda bildiğiniz gibi bir www klasörü var. Adresten de görebileceğimiz gibi bu klasör katalog klasörünü içerir ve doc.html dosyası zaten içindedir.

Bir dosyanın yolunu belirtirken, adresin önüne / ile eklenirse, aşağıdakine benzer olacaktır: dosyanın root_directory_north/www/path.
Yani, http://somesite.ru/catalog/doc.html şuna benzer: /catalog/doc.html.
Yani adresin önünde / olması "count" un www dizininden başladığı anlamına gelir.
Artık herhangi bir belgeden http://localhost/index.html yerine /index.html yazabilirsiniz.
Ancak cgi dizinine ulaşmak için şöyle yazmanız gerekir: / cgi-bin / dosyanın yolu.

Sunucudaki dosyanın mutlak (tam) yolu belirtildiğinden, yukarıda açıklanan yöntemler kullanılarak oluşturulan yollara mutlak denir.

Göreceli yol

Ayrıca, bağlantının geldiği belgenin kendisine göre göreceli yollar da vardır.
Örneğin, doc.html'de bir newcat/new.html bağlantısı oluşturursanız, bu, new.html dosyasının newcat dizininde olduğunu ve bunun da doc.html dosyasıyla aynı dizinde olduğunu gösterir. Gördüğünüz gibi, bu yol doc.html dosyasına göredir. Bu dosya nerede bulunursa bulunsun, doc.html dosyası ve newcat dizini aynı seviyedeyse (yani aynı dizinde) newcat/new.html yolu her zaman geçerli olacaktır.

Ayrıca bir belgeye göre bir dizini yukarı taşıyabilirsiniz. Bunu yapmak için ../ yazın.
Örneğin, büyük bir dizin var, iki dizin içeriyor: birincil ve ikincil. Birincil dizin, tanıdık doc.html dosyasını içerir; ve ikincil dizinde new.html dosyası bulunur. doc.html dosyasından new.html dosyasına link oluşturmak için ../secondary/new.html yazmanız gerekir. Ancak büyük dizin www dizininde bulunuyorsa, yeni.html dosyasının yolu şu şekilde belirtilebilir: /big/secondary/new.html

Bir sonuç çıkarmak yerine, mutlak ve göreceli yolların kullanılmasının, ister yeni başlayanlar ister profesyoneller olsun, web yöneticilerinin çalışmalarını büyük ölçüde kolaylaştırdığı söylenmelidir. Bu yüzden, dedikleri gibi, bu fırsatı sonuna kadar kullanın ve http://site.ru/catalog/file.file gibi yollardan kaçınmaya çalışın veya en azından onların yardımına mümkün olduğunca az başvurun.

İyi kötü

Bu derste, yeni başlayanlara bir dosyanın mutlak ve göreli yolunun ne olduğunu ve hangi durumda hangisinin daha iyi kullanılacağını açıklayacağız. Bu konuya zaten aşina iseniz, bir sonraki derse geçebilirsiniz.

Öyleyse, "yol" teriminin tanımıyla başlayalım:

Yol (İngilizce yol) - dosya sistemindeki dosyanın konumunu, dizinin adresini gösteren bir dizi karakter.

Vikipedi

Siteler hakkında konuşursak, yol bağlantı ile aynıdır. Bağlantılar mutlak veya göreceli olabilir. Her iki seçeneği de daha ayrıntılı olarak ele alalım.

Bir dosyanın mutlak yolu nedir

https://www.google.com/images/branding/googlelogo.png

CSS'de mutlak bir yol kullanılabilir. Örneğin, bir görüntüyü arka plan olarak ayarlamak için, görüntü dosyasının mutlak URL'sini alabilir VE bunu stil sayfasında belirtebilirsiniz:

Arka plan resmi: url(http://www.example.com/img/bg.png);

Göreceli dosya yolu nedir

Göreceli bir adresle her şey çok daha ilginç - hem site kökünden hem de mevcut belgeden sayılabilir. Kök göreli yol dosyanın sitenin kök dizinine göre konumunu gösteren bir yoldur. Bu durumda, adres ne bir protokol ne de bir etki alanı adı içerir ve kök klasörü gösteren bir eğik çizgi karakteri / ile başlar. Bu adres şöyle görünür:

Arka plan resmi: url(/img/bg.png);

Kök göreli adresi nasıl kolayca belirlenir? Sadece mutlak bir bağlantı alın ve eğik çizgiyi ve takip eden tüm karakterleri bırakarak protokolü ve alan adını ondan kaldırın.

Belgeden göreli dosya yolu geçerli belgeye göre dosyanın yoludur. Böyle bir adres, yazıldığı dosyanın konumuna bağlıdır. Örneğin, bir stil sayfasında göreli bir bağlantı belirtildiğinde, dosya yolunu geçerli web sayfası veya kök klasöre göre değil, stil sayfasına göre hesaplar. Birkaç örnek verelim.

Örnek I

Stil sayfamız style.css ve arka plan resim dosyası bg.png aynı klasördeyse (mutlaka kök değil), tablodan resme giden göreli yol şöyle görünecektir:

Arka plan resmi: url(bg.png); /* sadece dosya adını yazarsın */

Örnek II

Stil sayfası kökteyse ve resim img klasöründeyse, ilgili bağlantı şöyle olur:

Arka plan resmi: url(img/bg.png); /* başında eğik çizgi gerekli değil */

Örnek III

Stil sayfası bir klasördeyse ve resim bu klasöre bitişikse, ilgili yol şöyle olacaktır:

Arka plan resmi: url(../bg.png); /* iki nokta - bir seviye yukarı çık */

Örnek IV

Stil sayfası iki klasörde bulunuyorsa ve resim ilk klasöre bitişikse, ilgili yol aşağıdaki gibi olacaktır:

Arka plan resmi: url(../../bg.png); /* iki seviye yukarı çık */

Göreli bir yolun başlangıcındaki iki nokta ve bir eğik çizgi, bir seviye yukarı çıkmak anlamına gelir. Tırmanmanız gereken seviye (dizin) sayısına bağlı olarak, gerekli sayıda noktayı eğik çizgi ile yazmanız gerekir. Örneğin, stil sayfası iki değil dört klasördeyse, giriş sırasıyla aşağıdaki gibi olacaktır:

Arka plan resmi: url(../../../../bg.png);

Resim img klasöründe gizliyse ve stil sayfası css klasöründeyse, css klasöründen çıkmanız ve img klasörüne gitmeniz gerekecektir. Bunun gibi:

Arka plan resmi: url(../img/bg.png);

Birkaç klasör varsa, bunları da kaydetmeniz gerekir. Önceki örneği değiştirelim: img klasöründe resmimizi içeren başka bir arka plan klasörü olduğunu hayal edin. Göreceli yol şöyle olacaktır:

Arka plan resmi: url(../img/backgrounds/bg.png);

Hangi yolu kullanmak daha iyidir

Mutlak bağlantı adresi bağlantı verdiğiniz dosya başka bir sitede bulunuyorsa kullanılması gerekecektir. Aynı site içinde, mutlak yol pratik olarak kullanılmaz (işe yarayacak olmasına rağmen). Bu, birkaç noktadan kaynaklanmaktadır: ilk olarak, bu tür bağlantılar çok hantal olabilir ve ikincisi, alan adı değişirse, o zaman bir sorun olacaktır - tüm bağlantılar, birçok hataya ve kopuk bağlantılara yol açabilecek eski alana yönlendirecektir. .

Kök göreli yol bir web sunucusunda çalışacak, ancak yerel bir makinede geliştirirken işe yaramaz. Ancak bu tür bağlantıların avantajı, stil sayfanızı sitedeki herhangi bir klasöre taşıyabilmeniz ve arka plan resim adreslerinin kırılmasından korkmamanızdır.

Belgeden göreli yol- bir sunucu kullanmadan yerel bir makinede web geliştirme için en iyi seçenek. Bir tarayıcıda, bilgisayarınızda depolanan web sayfalarını normal şekilde görüntüleyebileceksiniz ve dosya adresleri çalışacaktır. Ayrıca canlı bir sitede de çalışacaklar, ancak bir koşulla - stil sayfasını başka bir yere taşımazsanız (aksi takdirde yolları ayarlamanız gerekir).

Hem yerel makinenizde hem de web sunucusunda göreli yolları kullanarak alıştırma yapmayı deneyin. Nasıl çalıştığını anlamak, herhangi bir projede kesinlikle kullanışlı olacaktır.

Öğreticide ayrıca: background-repeat özelliği, arka plan görüntüsünün tekrarını kontrol eder.

Bağlantı adresi mutlak veya göreli olabilir. Mutlak adresler bir protokolle (genellikle http://) başlamalı ve sitenin adını içermelidir. Göreli bağlantılar, sitenin köküne veya mevcut belgeye dayanır.

Örnek 8-2, başka bir siteye nasıl mutlak bir bağlantı oluşturulacağını gösterir.

Örnek 8.2. Mutlak referansları kullanma

Mutlak adres

HTML öğrenmek



Bağlantı olarak bir site dizini belirttiğinizde (örneğin, http://site/css/), bir dizin dosyası görüntülenir. Bu, açık bir dosya adı olmadan bir dizine erişildiğinde varsayılan olarak yüklenen dosyadır. Genellikle dizin dosyası, index.html adlı bir belgedir.

Mutlak bağlantılar genellikle başka bir ağ kaynağındaki bir belgeye işaret etmek için kullanılır, ancak mevcut site içinde mutlak bağlantılar yapılmasına izin verilir. Bununla birlikte, bu tür bağlantılar oldukça uzun ve hantal olduğu için nadiren uygulanmaktadır. Bu nedenle site içerisinde daha çok göreceli linkler kullanılmaktadır.

Geçerli belgeye göre bağlantılar

Göreli bağlantılar oluştururken, dosyaların orijinal konumuna bağlı olduğundan, href özniteliği için hangi değerin belirtilmesi gerektiğini anlamanız gerekir. Birkaç tipik seçeneğe bakalım.

1. Dosyalar bir klasörde bulunur (Şekil 8.4).

Böyle bir dosya adı sadece örnek olarak alınmıştır, sitede boşluklu Rusça karakterler dosya adlarında ve hatta farklı durumlarda kullanılmamalıdır.

2. Dosyalar farklı klasörlere yerleştirilir (Şekil 8.5).

Orijinal belge aynı klasörde saklanıyorsa ve referans verilen belge sitenin kökündeyse, aşağıda gösterildiği gibi bağlantı adresinde dosya adının önüne iki nokta ve bir bölü (/) yerleştirilmelidir.

Bu durumda iki nokta, mevcut klasörden daha yüksek bir seviyeye çıkmak anlamına gelir.

3. Dosyalar farklı klasörlere yerleştirilir (Şekil 8.6).

Şimdi kaynak dosya iki alt klasörde ve sitenin kökündeki belgeye başvurmak için önceki örneği iki kez tekrarlamanız gerekiyor.

Bağlantı

Aynısı, herhangi bir sayıda iç içe klasör için de geçerlidir.

4. Dosyalar farklı klasörlere yerleştirilir (Şekil 8.7).

Artık durum değişiyor, kaynak dosya sitenin kök dizininde, link vermek istediğiniz dosya ise klasörde. Bu durumda dosyanın yolu aşağıdaki gibi olacaktır.

Bağlantı

Klasör adından önce ek nokta veya eğik çizgi olmadığına dikkat edin. Dosya bir değil iki klasörün içindeyse, yolu bu şekilde yazılır.

Bağlantı

Site köküne göre bağlantılar

Bazen dosyanın yolunu sitenin köküne göre bulabilirsin, öyle görünüyor ki "/Klasör/Dosya adı" başında bir eğik çizgi ile. Evet, kaydet Dersler bağlantının, sitenin kökünde bulunan kurs adlı bir klasöre yönlendirdiği ve içinde dizin dosyasını indirmeniz gerektiği anlamına gelir.

Lütfen bu kayıt biçiminin yerel bilgisayarda çalışmadığını, yalnızca web sunucusunun kontrolü altında çalıştığını unutmayın.