Определение местоположения файлов в среде PHP

Раздел: -> Работа с файлами

Пути файлов в PHP: от абсолютных до относительных

Надёжный способ получения пути к текущему скрипту (например, index.php) – использование констант __FILE__ и __DIR__. Они всегда содержат абсолютный путь к файлу, в котором написаны, вне зависимости от того, откуда был вызван скрипт.


// index.php
// Определяем корневую директорию проекта (на уровень выше)
define('ROOT_DIR', dirname(__DIR__));

// Подключаем файл конфигурации
include ROOT_DIR . '/config/app.php';

echo 'Текущий файл: ' . __FILE__;

Index php path (пути файлов в php)

Текущий файл: /var/www/html/index.php

Php tmp files (временные файлы php)

Такой подход гарантирует, что пути не сломаются при смене рабочей директории или при вызове скрипта из другого места.

Типичная ошибка: использование относительных путей вида "config/app.php". При подключении такого файла из другого скрипта, рабочая директория может отличаться, и путь станет неверным. Решение – всегда опираться на __DIR__ или __FILE__.

Как получить путь к исполняемому скрипту в веб-окружении?

Суперглобальный массив $_SERVER['SCRIPT_FILENAME'] содержит полный путь к основному скрипту, который обрабатывает запрос.


// index.php
echo 'Скрипт: ' . $_SERVER['SCRIPT_FILENAME'];

Edit file php (редактирование php файла)

Скрипт: /var/www/html/index.php

Php file get html (получение html файла через php)

Ошибка: $_SERVER['SCRIPT_FILENAME'] не определён или содержит некорректное значение при запуске из командной строки (CLI), а также в некоторых нестандартных конфигурациях веб-сервера.

Как определить текущую рабочую директорию?

Функция getcwd() возвращает рабочую директорию, установленную в момент выполнения скрипта. Она может измениться после вызова chdir().


echo 'Текущая директория: ' . getcwd();
chdir('../');
echo 'После смены: ' . getcwd();

Root php (корневая директория сервера в php)

Текущая директория: /var/www/html
После смены: /var/www

Include system php (включение системного файла)

Проблема: getcwd() не всегда совпадает с директорией самого скрипта. Если скрипт был вызван из другого места, рабочая директория может указывать на родительский каталог. Использовать её для подключения файлов опасно.

Как получить канонический абсолютный путь?

Функция realpath() преобразует относительный путь в абсолютный, разрешая символические ссылки и нормализуя слеши.


$path = realpath('../config/app.php');
echo $path;

Php index вопрос (вопрос по index.php)

/var/www/html/config/app.php

Php open file (открытие файла в php)

Ошибка: если путь не существует, realpath() возвращает false. Необходимо проверять результат перед использованием.

Как правильно ссылаться на файлы из подключаемого скрипта?

В подключаемом файле (например, config.php) удобно использовать __DIR__, чтобы обращаться к соседним файлам или к корню проекта через dirname(__DIR__).


// config.php
echo 'Я в: ' . __DIR__;
echo 'Мой родитель: ' . dirname(__DIR__);

Ru reading php line (чтение строки из файла php)

Я в: /var/www/html/config
Мой родитель: /var/www/html

Php path (пути в php)

Как подняться на несколько уровней вверх?

Функция dirname() вызывается цепочкой: dirname(dirname(__FILE__)) или с аргументом levels (начиная с PHP 7.0).


// index.php в /var/www/html/subdir/
echo dirname(__FILE__, 2); // уровней: 2

Start php include (подключение файлов)

/var/www/html
- Php attachments (работа с вложениями файлов в php)
- Files php name (получение имени файла в php)
- Archive php file (php: работа с архивными файлами (zip, tar))

Расширенные примеры работы с путями

Ниже приведены более сложные сценарии использования функций и констант для работы с путями в PHP.

Построение конфигурации с абсолютным корнем

Пример

// index.php
define('APP_ROOT', dirname(__DIR__));
define('CONFIG_DIR', APP_ROOT . '/config');
define('LOG_DIR', APP_ROOT . '/logs');

include CONFIG_DIR . '/database.php';
echo 'Логи будут сохраняться в: ' . LOG_DIR;
Логи будут сохраняться в: /var/www/html/logs

Обработка символических ссылок

Пример

// /var/www/html/link -> /home/user/project/index.php
$real = realpath(__FILE__); // разрешает ссылку
echo 'Реальный путь: ' . $real;
Реальный путь: /home/user/project/index.php

Кроссплатформенное построение путей

Пример

$path = '/var' . DIRECTORY_SEPARATOR . 'www' . DIRECTORY_SEPARATOR . 'index.php';
echo $path;
// На Windows DIRECTORY_SEPARATOR = '\\', на остальных '/'
/var/www/index.php

Получение URL-пути из файловой системы

Пример

// index.php
$base_url = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
echo 'Базовый URL: ' . $base_url;
Базовый URL: /subfolder

Проверка существования и нормализация

Пример

$relative = '../../config/db.php';
$absolute = realpath($relative);
if ($absolute === false) {
    echo 'Файл не найден по пути: ' . $relative;
} else {
    echo 'Абсолютный путь: ' . $absolute;
}
Абсолютный путь: /var/www/html/config/db.php

Использование регулярных выражений для разбора пути

Пример

$path = '/var/www/html/index.php';
$parts = pathinfo($path);
print_r($parts);
Array
(
    [dirname] => /var/www/html
    [basename] => index.php
    [extension] => php
    [filename] => index
)

Пути файлов в PHP - comments

En
Index php path (php)