აბსოლუტური და ფარდობითი ბილიკის სახელი. ბილიკების აღწერა: აბსოლუტური, ფარდობითი, UNC და URL

მარტივია წვდომა ფაილზე, რომელიც მდებარეობს იმავე საქაღალდეში, სადაც ჩვენი სკრიპტია. მაგრამ როდესაც საქმე ეხება ფაილებთან მუშაობას სხვადასხვა საქაღალდეებში, დამწყებთათვის გიჟდებიან.

ამ სტატიიდან ჩვენ ვისწავლით:

  • - რა არის ფაილის აბსოლუტური და ფარდობითი გზა,
  • - როგორ განსხვავდებიან ისინი სერვერზე და ბრაუზერზე,
  • - რა შეცდომებს უშვებენ დამწყები ფაილის ბილიკების შექმნისას და როგორ ავიცილოთ თავიდან ისინი.

სერვერზე ფაილებისკენ მიმავალი გზები

სერვერის აბსოლუტური გზა არის სრული გზა root-დან სკრიპტამდე. თქვენ შეგიძლიათ გაიგოთ სკრიპტის სრული გზა „ჯადოსნური“ მუდმივის __FILE__ გამოყენებით:

ოპერაციული სისტემის მიხედვით, შედეგი შეიძლება განსხვავდებოდეს:

D:\OpenServer\domains\site\index.php- Windows-ზე OpenServer-ისთვის

/var/www/site/index.php - UNIX-ისთვის

რა თქმა უნდა, include() ფუნქციას და მის ანალოგებს შეიძლება შეიცავდეს ფაილი მისი აბსოლუტური გზით:

სერვერის შედარებითი გზა არის გზა საქაღალდედან, რომელშიც მდებარეობს მიმდინარე სკრიპტი. წარმოვიდგინოთ, რომ ჩვენს საიტზე არის 2 სკრიპტი: index.php და config.php. შემდეგ შეგიძლიათ დააკავშიროთ მეორე პირველიდან როგორც აბსოლუტური, ისე ფარდობითი გზების გამოყენებით:

ჯერჯერობით ყველაფერი მარტივია. მაგრამ თუ გადავწყვეტთ ჩავრთოთ ფაილი, რომელიც თავისთავად შეიცავს სხვა ფაილს, სიტუაცია ცოტა უფრო გართულდება. წარმოვიდგინოთ, რომ გვაქვს სკრიპტების საქაღალდე სკრიპტებით script1.php და script2.php, სტრუქტურა სიცხადისთვის:

Index.php სკრიპტები script1.php script2.php

ფაილების შინაარსი ასეთი იქნება:

გაუშვით index.php ფაილი თქვენს ბრაუზერში. თუ ყველაფერი სწორად გაკეთდა, შეტყობინება გამოჩნდება კავშირი წარმატებით დასრულდა. ახლა სცადეთ script2.php ფაილის გადატანა საიტის ძირში, იმავე დონეზე, როგორც index.php.

არაფერი შეცვლილა, საიტი მაინც აჩვენებს კავშირი წარმატებით დასრულდა. Როგორ მოხდა ეს? ფაქტია, რომ PHP ცდილობს ფაილის პოვნას როგორც დამაკავშირებელ საქაღალდეში, ასევე დამაკავშირებელ სკრიპტის საქაღალდეში. როგორც გესმით, თუ თქვენ გაქვთ ორი ფაილი სხვადასხვა საქაღალდეში, შეგიძლიათ შემთხვევით დააკავშიროთ არასწორი სკრიპტი და დაარღვიოთ საიტი.

ნავიგაცია შედარებითი ბილიკების გამოყენებით.

გაითვალისწინეთ, რომ ფარდობითი ბილიკები არასოდეს იწყება ხაზებით / . თუ არის წამყვანი ხაზი, PHP ჩათვლის გზას აბსოლუტურად.

folder1/folder2/folder3/script1.php- მოძებნეთ ფაილი ქვესაქაღალდეში

../index.php - გადაიტანეთ ერთი საქაღალდე ზემოთ

../../../index.php - გადადით 3 საქაღალდეზე ზემოთ

როგორ მივუთითოთ სერვერზე ფაილის გზა?

დაივიწყეთ შედარებითი გზები. ყოველთვის მიუთითეთ მხოლოდ ფაილის აბსოლუტური ბილიკები. რადიკალი, არა? არ ინერვიულოთ, PHP საზოგადოებამ მოიფიქრა 2 მარტივი (არის რთულიც :)) გზა სრული გზის დასაზუსტებლად... სრული ბილიკის მითითების გარეშე.

პირველი გზა არის dirname() ფუნქციის გამოყენება. ის იღებს გზას ფაილისკენ და აბრუნებს გზას ფაილის სახელის გარეშე, ე.ი. საქაღალდე, რომელშიც ფაილი მდებარეობს. __FILE__-ისა და dirname()-ის კომბინაციით ჩვენ შეგვიძლია მივიღოთ მიმდინარე სკრიპტის საქაღალდე:

ახლა ჩვენ ზუსტად ვიცით, რომ script2.php ფაილი იქნება ჩართული, რომელიც მდებარეობს იმავე საქაღალდეში, როგორც მიმდინარე სკრიპტი.

მეორე გზა არის მუდმივების გამოყენება. ის გამოიყენება ბევრ პოპულარულ CMS-ში და ასე გამოიყურება:

იქმნება მუდმივი DIR_ROOT, რომელშიც ჩვენ ვინახავთ სრულ გზას საიტის root საქაღალდემდე. თქვენ ასევე შეგიძლიათ სურვილისამებრ შექმნათ მრავალი მუდმივი ხშირად გამოყენებული საქაღალდეების ბმულებით. Include()-ში ჩვენ ვაძლევთ მუდმივას და საჭირო ფაილისკენ მიმავალ გზას ემატება მასთან შედარებით.

ფაილების ბილიკები ბრაუზერში

ბრაუზერს არ აქვს წვდომა თქვენი სერვერის მყარ დისკზე. მისი „ფარგლები“ ​​იწყება საიტის ძირეული საქაღალდედან. ამრიგად, სერვერისა და ბრაუზერისთვის აბსოლუტური და ფარდობითი ბილიკები სრულიად განსხვავებულად გამოიყურება.

ბრაუზერში ფაილის აბსოლუტური გზა იწყება ხაზით /, მაგალითად, /images/logo.jpg. ეს გზა ნიშნავს, რომ ფაილი მდებარეობს site.ru/images/logo.jpg.

ფაილის ფარდობითი გზა ზუსტად იგივე გამოიყურება, მაგრამ წამყვანი ზოლის გარეშე, მაგალითად images/logo.jpg.

ჩვეულებრივი შეცდომა დამწყებთათვის არის შედარებითი გზის გამოყენება აბსოლუტურის ნაცვლად. წარმოვიდგინოთ, რომ საიტის ლოგო განთავსებულია site.ru/images/logo.jpg. შევეცადოთ მისი დაკავშირება შედარებითი ბილიკით:

როგორც ჩანს, ყველაფერი კარგად არის და მუშაობს. მაგრამ ეს მოხდება მანამ, სანამ მომხმარებელი გადავა რომელიმე საქაღალდეში, მაგალითად site.ru/products/15/. როგორც მიხვდით, ბრაუზერი შეეცდება ლოგოს ჩატვირთვას site.ru/products/15/images/logo.jpg.

ყოველთვის გამოიყენეთ ფაილის აბსოლუტური ბილიკები. ამ გზით თქვენ თავიდან აიცილებთ ნავიგაციის ყველაზე შესაძლო პრობლემებს.

სტატია შეიცავს კოდის ნაწილებს. სრული ვერსია შეგიძლიათ ჩამოტვირთოთ აქ - https://bitbucket.org/okiseleva/html-and-css-learn/src. საქაღალდეები - “absolute_path_lvl_1” და ყველა ქვესაქაღალდე.

გზა შეიძლება იყოს აბსოლუტური ან ფარდობითი.

აბსოლუტური გზა

აბსოლუტური გზა არის გზა root საქაღალდედან ფაილამდე.

ბილიკი შედგება ყველა საქაღალდისგან, რომელსაც უნდა შევხედოთ, გამოყოფილი ხაზებით. მოდით შევხედოთ მაგალითს:

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

ფაილის აბსოლუტური გზა

შედარებითი გზა

ფარდობითი გზა არის ბმული, რომელიც მიუთითებს თქვენი საიტის სხვა გვერდებზე იმ ვებ გვერდთან შედარებით, რომელზეც ბმული უკვე არსებობს.

თუ საქაღალდეებს ქვემოთ გადავიტანთ, ასევე გამოვყოფთ მათ „/“-ის გამოყენებით. თუ გჭირდებათ დონის ასვლა, დაწერეთ ".."

1. შედარებითი ბილიკის უმარტივესი მაგალითია მხოლოდ ფაილის სახელი. თუ ფაილი ახლოს არის, უბრალოდ მიუთითეთ მისი სახელი

გამარჯობა.png

შედარებითი გზა, ფაილი ახლოს


2. ადით ერთი საქაღალდე

../Kevin_lvl_2.png

შედარებითი გზა 2

3. უფრო რთული მაგალითი, დან Diff_paths.htmlკევინთან ერთად სურათზე

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

შედარებითი გზა 3


რა განსხვავებაა აბსოლუტურ და ფარდობით ბილიკებს შორის?

ძალიან მარტივია. თუ ბილიკი მითითებულია სისტემის ფესვიდან, მაშინ ეს არის აბსოლუტური გზა. ეს ჰგავს საფოსტო მისამართს რეალურ ცხოვრებაში - სადაც არ უნდა წახვიდეთ, მაგრამ ზუსტი მისამართით ყოველთვის იპოვით სწორ ადგილს.

თუ ფესვი არ არის მითითებული ბილიკის დასაწყისში, მაშინ ეს ბილიკი შედარებითი იქნება და ის აშენდება მიმდინარე პოზიციიდან. რეალურ ცხოვრებაში ეს გზას ჰგავს ალკოჰოლური სასმელების მაღაზიისკენ – „ორი ბლოკი მარცხნივ და სწორი მთელი გზა“. ამ ბილიკის მიღწევა შესაძლებელია მხოლოდ კონკრეტული წერტილიდან. მეორისგან სულ სხვა ადგილას აღმოჩნდებით.

ფაილში absolute_path_lvl_1/level_2.2/Diff_paths.htmlთქვენ შეგიძლიათ ნახოთ HTML გვერდის მაგალითი სხვადასხვა ფაილის ბილიკებით.

აქ არის აბსოლუტური და ფარდობითი გზის მაგალითი ერთი და იგივე ფაილის კევინთან.


D:/hgprojects → აქ გადმოვწერე პროექტი „html-and-css-learn“. შეიძლება სხვა გზა გქონდეს


PS - დაწვრილებით წიგნში "

მოგეხსენებათ, ტეგის href პარამეტრში () უნდა მიუთითოთ მითითებულ ფაილის გზა.
ბევრი ადამიანი წერს მსგავსი რამ http://somesite.ru/catalog/doc.html. დიახ, არავინ კამათობს, მუშაობს. მაგრამ არის ერთი "მაგრამ". მოდით შევხედოთ მაგალითს.

მიეცით თქვენი საიტის ჰოსტინგი, მაგალითად, ზოგიერთ უფასო ჰოსტინგზე და მისი მისამართი იყო შემდეგი: http://fsite.freehosting.ru.
სერვერზე 100-მდე დოკუმენტია. ასე რომ, თქვენ გადაწყვიტეთ თქვენი ვებსაიტის სხვა დომენში გადატანა,
დაე, ფასიანი ჰოსტინგი იყოს ru ზონაში: http://site.ru. აბა, ახლა ყველგან უნდა შევცვალოთ http://fsite.freehosting.ru http://site.ru-ზე?
დიახ, რედაქტორების წყალობით, როგორიცაა homesite, ეს შესაძლებელია. მაგრამ ეს არ არის გამოსავალი.
დავუშვათ, რომ სერვერზე გვერდის ატვირთვამდე თქვენ ამოწმებთ მის ფუნქციონირებას
თქვენს სახლის აპაჩი სერვერზე (მათთვის, ვინც ჯერ არ იცის რა არის „სახლის სერვერი“, გადადით აქ (აპაჩი სერვერის ინსტალაცია და კონფიგურაცია) და http://localhost-ის ნაცვლად დაგჭირდებათ დაწეროთ http:// site.ru ყველგან ვეთანხმები, ყოველ შემთხვევაში ეს მოუხერხებელია.

გამოსავალი არის ის, რომ ფაილის გზის მითითებისას მხედველობაში მივიღოთ არა მისი პოზიცია საიტზე, არამედ სერვერზე.

აბსოლუტური გზა

ავიღოთ, მაგალითად, ფაილი doc.html, რომელიც მდებარეობს მისამართზე: http://somesite.ru/catalog/doc.html. მოგეხსენებათ, სერვერზე არის www საქაღალდე. როგორც მისამართიდან ვხედავთ, ეს საქაღალდე შეიცავს კატალოგის საქაღალდეს და ის უკვე შეიცავს doc.html ფაილს.

თუ ფაილის გზის მითითებისას მისამართის წინ დააყენებთ /, მაშინ ის მსგავსი იქნება: root_directory_in_the_north/www/გზა ფაილისკენ.
ანუ, http://somesite.ru/catalog/doc.html მსგავსია შემდეგი: /catalog/doc.html.
ასე რომ, როდესაც მისამართის წინ არის /, ეს ნიშნავს, რომ "უკუთვლა" იწყება www დირექტორიადან.
ახლა, http://localhost/index.html-ის ნაცვლად, შეგიძლიათ დაწეროთ /index.html ნებისმიერი დოკუმენტიდან.
მაგრამ cgi დირექტორიაში მისასვლელად თქვენ უნდა დაწეროთ ასე: /cgi-bin/path ფაილისკენ.

ზემოთ აღწერილი მეთოდებით შექმნილ ბილიკებს ეწოდება აბსოლუტური, რადგან მითითებულია სერვერზე ფაილის აბსოლუტური (სრული) გზა.

შედარებითი გზა

ასევე არის შედარებითი ბილიკები, რომლებიც მითითებულია თავად დოკუმენტთან შედარებით, საიდანაც მოდის ბმული.
მაგალითად, თუ თქვენ შექმნით ბმულს doc.html newcat/new.html-ში, ეს ნიშნავს, რომ ფაილი new.html მდებარეობს newcat დირექტორიაში, რომელიც, თავის მხრივ, იმავე დირექტორიაშია, როგორც doc.html ფაილი. როგორც ხედავთ, ეს გზა შეესაბამება doc.html ფაილს. სადაც არ უნდა იყოს ეს ფაილი, ბილიკი newcat/new.html ყოველთვის იქნება მოქმედი, თუ doc.html ფაილი და newcat დირექტორია ერთსა და იმავე დონეზე არიან (ანუ იმავე დირექტორიაში).

თქვენ ასევე შეგიძლიათ გადაიტანოთ დირექტორია დოკუმენტთან შედარებით. ამისათვის თქვენ უნდა დაწეროთ ../.
მაგალითად, არის დიდი დირექტორია, ის შეიცავს ორ დირექტორიას: პირველადი და მეორადი. პირველადი დირექტორია შეიცავს უკვე ნაცნობ doc.html ფაილს; ხოლო მეორად დირექტორიაში არის ფაილი new.html. იმისათვის, რომ გააკეთოთ ბმული doc.html ფაილიდან new.html ფაილზე, თქვენ უნდა დაწეროთ ../secondary/new.html. მაგრამ თუ დიდი დირექტორია განთავსებულია www დირექტორიაში, მაშინ new.html ფაილის გზა შეიძლება იყოს მითითებული ასე: /big/secondary/new.html

დასკვნის ნაცვლად, ღირს იმის თქმა, რომ აბსოლუტური და ფარდობითი გზების გამოყენება მნიშვნელოვნად უწყობს ხელს ვებ ოსტატების მუშაობას, იქნება ეს დამწყები თუ პროფესიონალი. ასე რომ, გამოიყენეთ ეს შესაძლებლობა, როგორც ამბობენ, მაქსიმალურად და შეეცადეთ თავიდან აიცილოთ ისეთი გზები, როგორიცაა http://site.ru/catalog/file.file, ან თუნდაც რაც შეიძლება ნაკლებად მიმართოთ მათ დახმარებას.


თქვენი საიტი არსებობს ორ განზომილებაში, როგორც ეს იყო.
რეალური და ვირტუალური.

ყველა ვიზიტორისთვის ეს არის ვირტუალური ვებ სერვერი. რაც, სხვა საკითხებთან ერთად, განსხვავდება იმით, რომ მასზე ფაილები არ არსებობს. თუ წერ %20" target="_blank">http://site.ru/file.html- ეს არ არის ფაილი. ეს არის URI, ვირტუალური მისამართი. სერვერზე შეიძლება საერთოდ არ იყოს ფაილი სახელად file.html. ეს ყველაფერი ვირტუალური მისამართებია და არა ფაილები.
და ბრაუზერი მუშაობს კონკრეტულად მისამართებით.

დეველოპერისთვის ვებსაიტი არის პროგრამა, რომელიც მუშაობს კონკრეტულ რეალურ კომპიუტერზე. ძალიან სპეციფიკური მყარი დისკით, დირექტორიებით და ფაილებით. და სკრიპტი, რომელიც მუშაობს თავის მონაცემებთან, იტვირთება სხვა სკრიპტები, მუშაობს რეალურ FILES-ით, ფიზიკურ დისკზე.

სწორედ ამ განსხვავებაში მდგომარეობს სირთულეები, რომლებსაც დამწყებთათვის ხშირად აწყდებიან.
ისინი კარგავენ ფაილებს, აბნევენ ბმულებს ფაილებთან, წვდებიან ლოკალურ ფაილებს HTTP-ის საშუალებით ან მოიცავს ფაილებს ვებ სერვერის ძირიდან.

მაგრამ თქვენ უბრალოდ უნდა გესმოდეთ ორი რამ:
1. განასხვავეთ ვებ სერვერის ფესვი, როგორც ჩანს ბრაუზერში, და ფაილური სისტემის ფესვი დისკზე.
2. განსხვავება ფარდობით ბილიკებსა და აბსოლუტურ ბილიკებს შორის.

დავიწყოთ მეორეთი.
ძალიან მარტივია. თუ ბილიკი მითითებულია სისტემის ფესვიდან, მაშინ ეს არის აბსოლუტური გზა. ეს ჰგავს საფოსტო მისამართს რეალურ ცხოვრებაში - სადაც არ უნდა წახვიდეთ, მაგრამ ზუსტი მისამართით ყოველთვის იპოვით სწორ ადგილს.
აბსოლუტური გზების მაგალითები:
/var/www/site/forum/index.php
/img/frame.gif
მდებარეობა:\windows\command.com

Unix სისტემებში და ვებსაიტებზე ფესვი აღინიშნება ხაზით - "/".
Ეს არის მნიშვნელოვანი. ეს არ არის მხოლოდ ჯოხი, არამედ დამოუკიდებელი ADDRESS, გზა.
მისამართში %20" target="_blank">http://www.site.ru/ბოლო ხაზი არ არის სილამაზისთვის! ის აღნიშნავს ძალიან კონკრეტულ მისამართს - საიტის დასაწყისს.
Unix სისტემების დისკზე ასევე შეგიძლიათ აკრიფოთ „cd /“ და გადაგიყვანთ root დირექტორიაში.
Windows სისტემებში ფაილური სისტემა იყოფა დისკებად, ამიტომ აბსოლუტური მისამართი უნდა მიუთითებდეს დისკის სახელზე. Windows-ში არ არსებობს მთელი ფაილური სისტემის აბსოლუტური ფესვი; მაგალითად, C:\ E:\
ამიტომ, თუკი Windows-ში ბილიკი იწყება ხაზით, ეს არ არის აბსოლუტური გზა, არამედ შედარებითი. მიმდინარე დისკთან შედარებით. და აბსოლუტური იწყება ასოთი.

თუ ფესვი არ არის მითითებული ბილიკის დასაწყისში, მაშინ ეს გზა იქნება ფარდობითი და იგი მიღებულია მიმდინარე პოზიციიდან. რეალურ ცხოვრებაში ეს გზას ჰგავს ალკოჰოლური სასმელების მაღაზიისკენ – „ორი ბლოკი მარცხნივ და სწორი მთელი გზა“. ამ ბილიკის მიღწევა შესაძლებელია მხოლოდ კონკრეტული წერტილიდან. მეორისგან სულ სხვა ადგილას აღმოჩნდებით.
შედარებითი ბილიკის უმარტივესი მაგალითია უბრალოდ ფაილის სახელი.
თუ ფაილი არის იმავე დირექტორიაში, რომლითაც მუშაობს პროგრამა, ის იპოვის მას ფაილის სახელზე მიმდინარე ბილიკის დამატებით.
შედარებითი გზების მაგალითები:
file.php (ფაილი იმავე საქაღალდეშია)
./file.php (ფაილი იმავე საქაღალდეშია. ასეთი ჩანაწერი ზოგჯერ საჭიროა ზოგიერთ Unix სისტემაში)
images/picture.jpg (ფაილი არის სურათების საქაღალდეში, რომელიც არის მიმდინარე საქაღალდეში)
../file.php (ფაილი არის საქაღალდეში, რომელიც მდებარეობს მიმდინარეზე ერთი დონით ზემოთ)
../../file.php (ფაილი არის საქაღალდეში, რომელიც მდებარეობს მიმდინარეზე ორი დონის ზემოთ)

როგორც ოპერაციული სისტემა, ასევე ბრაუზერი, როდესაც ისინი ხვდებიან შედარებით გზას, აშენებენ მას აბსოლუტურ გზაზე. მაგრამ თითოეული თავისებურად.

ახლა გადავიდეთ პირველ პუნქტზე.
სხვაობა ბრაუზერის მიერ დანახული ვებ სერვერის ფესვსა და დისკზე არსებული ფაილური სისტემის ფესვს შორის.
ზოგადად, ყველაფერი ნათელი უნდა იყოს წინა ახსნა-განმარტებიდან.
დისკზე, სკრიპტის ფაილის გზა შეიძლება იყოს ასეთი:
/var/www/site/forum/index.php
ამავდროულად, ბრაუზერის საშუალებით ამ სკრიპტის ვირტუალური მისამართი იქნება:
%20" target="_blank">http://www.site.ru/forum/index.php
ამ მაგალითში ადვილია იმის დანახვა, თუ სად იკვეთება ეს ორი განზომილება: ორ მისამართს აქვს საერთო ნაწილი - /forum/index.php - და ეს არის დაბნეულობის მიზეზი.
ბრაუზერისთვის ეს არის ყველაზე სრულყოფილი გზა, რაც შეიძლება იყოს. ის იწყება საიტის ძირიდან.
სერვერზე გაშვებული სკრიპტისთვის, ეს მხოლოდ ბილიკის ნაწილია.
სკრიპტისთვის ბილიკი /forum/index.php არ იქნება - დისკის ძირში არ არის ფორუმის დირექტორია!
იმისათვის, რომ მიიღოთ სრული ბილიკი, რომელიც გამოიყურება /forum/index.php საიტზე, თქვენ უნდა დაამატოთ მარცხნივ გზა საქაღალდეში, რომელიც ითვლება root მთელი ვებ სერვერისთვის.
ჩვენს მაგალითში ეს არის
/var/www/site
ეს გზა დაყენებულია ვებ სერვერის კონფიგურაციაში და შეიცავს PHP სისტემის ცვლადში $_SERVER["DOCUMENT_ROOT"]

ვირტუალურ სერვერზე - ის, რომელსაც მომხმარებელი ხედავს - პირიქით, დისკი არ არის. არსებობს საიტის ფესვი. ანუ იმისათვის, რომ ნებისმიერი ბმული იყოს გარანტირებული იმუშაოს, მიუხედავად იმისა, საიდან არის ის დარეკილი საიტზე, ის უნდა იყოს აბსოლუტური.
თუ თქვენ გაქვთ, ვთქვათ, ორი განყოფილება თქვენს ვებსაიტზე:
%20" target="_blank">http://www.site.ru/about/info.php
და
%20" target="_blank">http://www.site.ru/job/vacancy.php
მაშინ, თუ info.php ფაილში ლინკს გააკეთებთ უბრალოდ vacancy.php-ზე, ბრაუზერი ვერ იპოვის - ის ეძებს მისამართს. %20," target="_blank">http://www.site.ru/about/vacancy.php, სრულდება გზა მიმდინარე დირექტორიადან.
ამიტომ, თქვენ უნდა დაწეროთ სრული გზა საიტის ძირიდან - /job/vacancy.php
ეს ყველაფერი, რა თქმა უნდა, ეხება არა მხოლოდ ტეგებს
მაგრამ ასევე და ნებისმიერი სხვა, სადაც გამოიყენება სხვა ფაილების ბმულები.

ლოკალური მისამართების ლინკები უნდა დაიწეროს პროტოკოლისა და დომენის მითითების გარეშე - მხოლოდ გზა საიტის ფესვიდან - /job/vacancy.php. სხვა საიტების ლინკები სრულად უნდა იყოს დაწერილი - %20." target="_blank">http://www.site1.ru/job/vacancy.php .

PHP გთავაზობთ მრავალ ინსტრუმენტს ფაილებთან, დირექტორიებთან და URL-ებთან მუშაობისთვის.

__FILE__ მუდმივი შეიცავს მიმდინარე შესრულებადი ფაილის სახელს.
PHP_SELF-ისგან განსხვავებით, ის შეიცავს ამჟამად შესრულებული ფაილის სახელს.
დიზაინი ძალიან სასარგებლო ჩანს dirname (__FILE__), რომლითაც სასურველია შეცვალოს ყველა ზარი ფაილებზე, რომლებიც მდებარეობს იმავე დირექტორიაში, სადაც დარეკვის სკრიპტი. Მაგალითად:
მოითხოვს dirname (__FILE__). "/init.php"
dirname() ფუნქცია, basename()-თან ერთად ერთ-ერთი ყველაზე ხშირად გამოიყენება ფაილებთან და დირექტორიებთან მუშაობისთვის.

Შენიშვნა:
თუ სკრიპტების Windows-დან Unix სისტემაში გადატანისას პრობლემები გაქვთ ბილიკებთან, პირველ რიგში ყურადღება მიაქციეთ ასოების შემთხვევას. Unix სერვერებზე, ფაილის სახელის ასოებს მნიშვნელობა აქვს File.txt და file.txt ორი განსხვავებული ფაილია, მაგრამ Windows-ში ისინი ერთნაირია. უმჯობესია ყოველთვის დაწეროთ ფაილის სახელი ზუსტად, საქმის გათვალისწინებით.

აბსოლუტური ბილიკები


ამ შემთხვევაში, ყველაფერი ძალიან მარტივია, ჩვენ მივუთითებთ სხვა დომენზე მდებარე ფაილის პირდაპირ გზას. შესაძლებელია შემცირებული ბილიკის დაზუსტება დასაწყისში ორი დახრილის გამოყენებით http ან https ცალსახად მითითების გარეშე და თავად სერვერი ჩაანაცვლებს საჭირო პროტოკოლს (გაფართოებას) სერვერის პარამეტრების მიხედვით. მნიშვნელოვანია აღინიშნოს, რომ ეს ხედი აუცილებელია საიტებს შორის ნავიგაციისთვის:
http://google.com

საიტის ფესვთან შედარებით


ამ შემთხვევაში, ბრაუზერი იღებს საიტის დომენს და ცვლის მის მითითებულ ბმულს. ამ შემთხვევაში იმუშავებს http://site/css/style.css. http-ის შემთხვევაში, https-ზე ფიქრი არ არის საჭირო, რადგან ის იქნება მიღებული იმ ფორმით, რომელშიც გვერდი ამჟამად ღიაა, ანუ http-ით იქნება http. ასევე ძალიან მოსახერხებელია გარკვეული ფუნქციების გადასატანად სხვადასხვა საიტებს შორის ან საიტის ერთი დომენიდან მეორეზე გადასატანად, კოდის შეხების გარეშე. პრიორიტეტული გზა გვერდებისა და ფაილებისკენ მიმავალი გზების დასაზუსტებლად.

რაც შეეხება ამ გვერდს


ნაკლებად პოპულარული მეთოდი, რადგან ის იღებს მიმდინარე გვერდს და ამატებს ახალ მისამართს მის გზაზე ..com/trick/css/style.css . თითქმის შეუძლებელია გამოყენება იმ შემთხვევებში, როდესაც ჩვენ ვიყენებთ CNC.

ბაზის ტეგის გამოყენებით


ამ შემთხვევაში, დომენის სტანდარტული ჩანაცვლების ნაცვლად, ბილიკი ბაზიდან შეიცვლება ფარდობითი ბილიკით. ანუ, ჩვენ მივიღებთ ფაილს, რომელიც მდებარეობს:
http://site/tricks/css/style.css

ფარდობითი და აბსოლუტური ბილიკები PHP-ში

ყველაფერი ძალიან მარტივია, ფაილურ სისტემაში მუშაობისას ჩვენ ვიცავთ PHP-ში ბილიკებთან მუშაობის წესებს. თუ ბრძანებას გადავცემთ კლიენტის ბრაუზერს, მაშინ გამოიყენება HTML ბილიკები. ანუ, შემდეგ მაგალითში, ჩვენ გადავდივართ PHP-დან ბრაუზერისკენ მიმავალ გზაზე იმ გვერდით, სადაც მას სჭირდება წასვლა. ის ფაქტი, რომ ბრაუზერმა გააკეთა გადასვლა გვერდებს შორის, ჩანს მისამართების ზოლში:
header ("Location: /page2.php");
ასე რომ, ჩვენ ვხსნით გვერდს page1.php და page2.php იწერება მისამართების ზოლში და მთელი საქმე იმაშია, რომ ბრაუზერმა ჯერ ატვირთა page1.php გვერდი და შემდეგ მიიღო ინფორმაცია გადამისამართებით და LOADED მეორე გვერდი page2.php. ამ შემთხვევაში, გადამისამართება მოხდა კლიენტის (ბრაუზერის) მხარეს, რაც ნიშნავს, რომ ჩვენ ვიყენებთ HTML-თან დაკავშირებულ წესებს (ვებ მისამართს).

აბსოლუტური გზა PHP-ში

PHP-ში აბსოლუტური გზა განიხილება, როგორც აბსოლუტური გზა იმ დირექტორიადან, რომელშიც დაინსტალირებულია ვებ სერვერი. ამ ბილიკის მიღება შესაძლებელია:
$_SERVER["DOCUMENT_ROOT"]
თუ ავიღოთ ეს სერვერი, როგორც მაგალითი, მისი გზაა: /home/school/public_html/schoolphp, რაც ნიშნავს, რომ იმისათვის, რომ მიუთითოთ სრული გზა ფოტოზე “/photo/img1.jpg”, თქვენ უნდა მიუთითოთ შემდეგი. გზა:
getimagesize("/home/school/public_html/schoolphp/photo/img1.jpg"); getimagesize($_SERVER["DOCUMENT_ROOT"]."/photo/img1.jpg");
მინდა აღვნიშნო, რომ საიტი შეიძლება განთავსდეს ქვედირექტორიაში, ანუ:
http://site/forum/
შეიძლება ძალიან რთული იყოს DOCUMENT_ROOT-ის გამოყენება, რადგან ფორუმმა (როგორც გარე სკრიპტი) ჯერ არ იცის სად განთავსდება იგი საიტზე. ამ პრობლემის გადასაჭრელად რამდენიმე გზა არსებობს, მოდით ჩამოვთვალოთ რამდენიმე:

1) შექმენით გვერდი, როგორც ქვედომენი.

2) ჩაწერეთ კონფიგურაციის აბსოლუტური გზა config.php-ში, ანუ:
Core::$ROOT = $_SERVER["DOCUMENT_ROOT"]; getimagesize(Core::$ROOT."/photo/img1.jpg"); // გამოიყენეთ აბსოლუტური გზა, რომელიც შეიძლება შეიცვალოს
ახლა თქვენ შეგიძლიათ მთელი თქვენი საიტი დააკავშიროთ Core::$ROOT-ს ყოველგვარი სინანულის გარეშე, და თუ შემთხვევით დაგჭირდათ შეცვალოთ გზის შეცვლა მოყვანილი ფაილისკენ, შეგიძლიათ გადალახოთ Core::$ROOT-ის მნიშვნელობა;

საწყის ფაილთან შედარებით (ბაზა)

ბევრ index.php სისტემაში არის ერთი შესვლის წერტილი, ანუ იხსნება index.php და მისგან არის დაკავშირებული სხვა ფაილები.
მოიცავს "./modules/allpages.php";
ამ შემთხვევაში, allpages.php დაკავშირებული იქნება ბილიკის გასწვრივ: /home/school/public_html/schoolphp/modules/allpages.php. ეს მეთოდი მოსახერხებელია, რადგან თუ თქვენ ჩაწერთ include in allpages.php ფაილში: მოიცავს "./modules/module/page.php";, მაშინ ის მაინც მოიძებნება შესვლის წერტილთან, კერძოდ, index.php:
/home/school/public_html/schoolphp/modules/module/page.php
ეს საკმაოდ მოსახერხებელი განხორციელებაა იმის გათვალისწინებით, რომ ჩვენ ნათლად ვიცით ჩვენი აპლიკაციის სტრუქტურა root index.php-თან შედარებით. მაშინაც კი, თუ index.php-ის გარდა სხვა ფაილს გამოვიძახებთ, ბილიკები ზუსტად იგივენაირად იმუშავებს. ჩვენ დავარქვათ dir.php, რაც ნიშნავს, რომ ბილიკები გაივლება dir.php ფაილთან შედარებით!

კიდევ რა უნდა იცოდეთ?

არ შემეძლო არ შევახსენო მათ, ვინც დაივიწყეს, ან ვთავაზობ მათ, ვინც არ იცის, რომ შეგიძლიათ დაბრუნდეთ არა მხოლოდ დირექტორიებში, არამედ ზემოთ (საქაღალდეების უკან) და მათი სინტაქსი საკმაოდ მარტივია:
მოიცავს "../file.php";
ამ შემთხვევაში, ამ ფაილის დირექტორია ან root index.php იქნება აღებული და დაბრუნდება 1 საქაღალდე, სადაც მოიძებნება ფაილი “file.php”.

DOCUMENT_ROOT არ არის ერთადერთი ვარიანტი საიტის ძირეული ბილიკის მისაღებად. მოდით გადავხედოთ სახელმძღვანელოს: „დოკუმენტის ძირეული დირექტორია, რომელშიც შესრულებულია მიმდინარე სკრიპტი, ზუსტად ისაა, რომელიც მითითებულია სერვერის კონფიგურაციის ფაილში“. . ეს ნიშნავს, რომ თუ ბილიკი არასწორად არის ჩაწერილი კონფიგურაციის ფაილში, მთელი საიტი არ იმუშავებს. Რა უნდა ვქნა? შეგიძლიათ მისწეროთ ადმინისტრატორებს და ჰოსტინგის მფლობელებს, რომელიც მასპინძლობს სერვერს იმ იმედით, რომ ისინი გამოასწორებენ თავიანთ ხარვეზებს. ან მოძებნეთ სტაბილური ალტერნატივა, რომელიც არის __DIR__, ეს არის აბსოლუტური გზა მოცემულ ფაილამდე, სადაც გაშვებულია კოდი. ვთქვათ, ჩვენ გვაქვს კონფიგურაციის ფაილი კონფიგურაციის საქაღალდეში და ისე, რომ __DIR__-ის გამოყენებით ჩვენ არ მოგვიწევს ყოველ ჯერზე დაბრუნება ერთი საქაღალდის ზევით __DIR__"/../" ჩაწერით, ჩვენ შეგვიძლია უსაფრთხოდ ჩავწეროთ __DIR__ ჩვენს ცვლადში, ქვემოთ მოცემულ მაგალითში დავწერე კლასის თვისებაში (გაკვეთილი No24, ვინც ვერ გაიგო, გამოიყენეთ რეგულარული ცვლადი):
Core::$ROOT = __DIR__; // ან ძველი PHP-სთვის - dirname(__FILE__);
ასევე მინდოდა შეგახსენოთ რაღაც საინტერესო და მნიშვნელოვანი. უსაფრთხოების მიხედვით, ვებ სერვერი კრძალავს საიტის ფესვის ზემოთ არსებული დირექტორიების გადაადგილებას. ანუ, საიტი მდებარეობს შემდეგ გზაზე: /home/school/public_html/schoolphp, მაგრამ /home ან /home/school საქაღალდეების შიგთავსი არ იქნება ხელმისაწვდომი წასაკითხად.

შეუძლია თუ არა PHP-ს გამოიყენოს HTML ბილიკები? დიახ, სპეციალურ ფუნქციებში, მაგალითად:
file_get_contets ("http://site");

ივარჯიშე

ჩემს ძველ პროექტებში ვიყენებდი DOCUMENT_ROOT, ახლა გადავედი შედარებით index.php ბილიკებზე "./folder/file".

Zend2, პროდუქტი PHP დეველოპერებისგან, ერთ-ერთი ყველაზე რთული FrameWork ამ მომენტში, ასევე იყენებს შედარებით ბილიკებს ჩემისგან განსხვავებული სინტაქსით, ანუ „საქაღალდე/ფაილი“.

IPB.3 ფორუმი იყენებს dirname(__FILE__).

დასკვნები:

1) HTML-ში ჩვენ ვიყენებთ ბილიკებს საიტის ფესვთან მიმართებაში, კერძოდ "/file.php" (სტრიქონი იწყება დახრილი).
2) PHP-ში ვიყენებთ root ფაილთან შედარებით "./file.php" (სტრიქონი იწყება წერტილი და ხაზი), ალტერნატივა იქნება ძირში ინიციალიზებული თვისების გამოყენება: __DIR__;
3) Header გადამისამართება იყენებს ბილიკებს HTML-დან. PHP ფაილურ სისტემასთან მუშაობა (ფაილების დაკავშირება, სურათების შენახვა და რედაქტირება) - PHP ბილიკებით.

გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: