Главная » З'єднання і комутація » Як знайти шлях до файлу. Указаніе шляху до підключеного файлу

Як знайти шлях до файлу. Указаніе шляху до підключеного файлу

При використанні include / require, а так само інших файлових функцій, потрібно вказувати шлях до файлу.

Шляхи бувають двох видів: абсолютні і відносні.

Абсолютний шлях вказує шлях до файлу від кореня файлової системи:

Відносний шлях вказує файл щодо поточного каталогу:

Кожен що виконується сценарій має пов'язаний з ним поточний каталог, щодо якого і розрулювати відносні шляхи. Поточним каталогом призначається каталог в якому зберігається файл сценарію. У процесі роботи він може бути змінений за допомогою функції chDir ().

Дуже важливо розуміти, що є виконуючим сценарієм.

Наприклад, запитуємо з браузера документ Httр: // site. ru / script. php . web-сервер знаходить відповідний йому сценарій, припустимо / home / site. ru / www / script. php . Запускає його. У сценарії є інструкція:

У файлі file1.php є рядок:

Тобто початковий файл підключає інший файл, а той, у свою чергу, третій.

Так ось, подібних включень може бути скільки завгодно і який завгодно може бути ступінь вкладеності. Однак, виконуваний сценарії (процес операційної системи) буде тільки один - початковий сценарій / home / site. ru / www / script. php. А поточним каталогом буде / home / site. ru / www /. Буде на всьому протязі сценарію, незалежно від require ().

Таким чином, при виконанні require_once ( './ folder2 / file2.php') папка folder2 буде шукатися не в папці folder1, де лежить file1.php, а в папці початкового сценарію - / home / site. ru / www /.

Від нерозуміння даної речі дуже часто трапляються сложноуловімую помилки. Що ж робити, як уникнути геморою при вказівці шляху? Рецептів кілька.

Зміна поточного каталогу

Перед кожним require () змінювати поточний каталог за допомогою chDir () на каталог підключається файлу. Старе значення зберігати в будь-якої змінної (бажано в стеці) і відновлювати після require ().

Дане рішення я привів "до купи". Несоменно, займатися подібним маразмом не варто.

Вказівка ​​шляхів щодо

;

Поточного каталогу

Якщо використовує require () сценарій може бути тільки виконуваним (викликатися з браузера, але не підключатися через require) такий варіант цілком робочий.

Якщо сценарій може підключатися тільки з одного виконуваного файлу (або можливі виконувані файли лежать в одному каталозі), то даний варіант так само прокатує.

Однак, якщо файл може підключатися з різних місць, то так не вийде, т. К. Поточний каталог може бути щоразу різним.

Вказівка ​​абсолютних шляхів

Власне найбільш вірний і найбільш поширений спосіб. Однак, і тут можуть бути варіанти.

Можна кожен раз прописувати шлях явно:

Але так можна запаритися прописувати і тим більше перепрописують в разі зміни.

Можна винести в конфіг:

Багато хто так і робить. І дарма. Так як знову таки утруднений перенесення з папки в папку, з сервера на сервер. Кожен раз доведеться відшукувати всі подібні дефайни і виправляти.

У PHP є зумовлена змінна $ _SERVER [ 'DOCUMENT_ROOT'] . яка містить шлях до кореневої папці сайту. Найкраще танцювати від неї:

Використання DOCUMENT_ROOT є найбільш розумним способом при підключенні різних частин сайту з головного файлу або з інших частин.

Однак для вказівки файлів всередині якоїсь окремої частини (модуля) цей спосіб не зовсім зручний.

Наприклад, ви пишіть бібліотеку складається з декількох файлів і підключають один одного. Вона може використовуватися на безлічі сайтів і розташовуватися в різних каталогах. Очевидно, що тут набагато краще прив'язуватися ні до корені сайту, а до місця розташування самих файлів бібліотеки. Тут може допомогти "магічна" константа __FILE__ . Вона містить абсолютний шлях до поточного оброблюваного файлу, т. Е. До файлу в якому використовується. Таким чином, підключення файлу розташованого в тому ж каталозі, що і що підключає: