W3docs

getcwd()

Узнайте, как функция getcwd() в PHP возвращает текущий рабочий каталог, когда она возвращает false и чем отличается от __DIR__ и chdir().

Функция PHP getcwd()

getcwd() — встроенная функция PHP, которая возвращает текущий рабочий каталог — каталог, относительно которого PHP разрешает относительные пути к файлам. Она не принимает аргументов и возвращает абсолютный путь в виде строки или false в случае ошибки.

На этой странице рассматриваются синтаксис, реальное значение возвращаемого значения, случаи, когда функция возвращает false, а также отличия getcwd() от магической константы __DIR__ и функции chdir().

Синтаксис

getcwd(): string|false
  • Параметры: отсутствуют.
  • Возвращаемое значение: абсолютный путь текущего рабочего каталога при успехе или false при ошибке (например, если у родительского каталога текущего пути снят бит разрешения на чтение или поиск).

Рабочий каталог является общим состоянием процесса. Изначально он совпадает с каталогом, из которого был запущен PHP, а не с каталогом, в котором находится выполняемый скрипт. На веб-сервере это обычно корневой каталог документов или стартовый каталог сервера; в CLI — тот каталог, из которого вы запустили скрипт.

Базовый пример

<?php
echo getcwd();

Вывод (точный путь зависит от места запуска скрипта):

/home/user/public_html

Обработка ошибок

Поскольку getcwd() может вернуть false, обрабатывайте результат как string|false, а не предполагайте, что это всегда строка. Это важно при формировании путей на основе этого значения — конкатенация с false беззвучно даёт пустой префикс.

<?php
$dir = getcwd();

if ($dir === false) {
    echo "Unable to determine the current working directory.";
} else {
    echo "Working in: $dir";
}

Формирование путей к файлам

Распространённое применение — разрешение пути относительно места запуска скрипта с последующими файловыми операциями. Всегда проверяйте, что файл успешно открылся, прежде чем писать в него:

<?php
$current_dir = getcwd();
$file_path = $current_dir . DIRECTORY_SEPARATOR . 'test.txt';

$file_handle = fopen($file_path, 'w');

if ($file_handle === false) {
    echo "Could not open file for writing.";
} else {
    fwrite($file_handle, 'This is a test file.');
    fclose($file_handle);
    echo "File written to: $file_path";
}

Использование константы DIRECTORY_SEPARATOR вместо жёстко заданного символа / обеспечивает корректность пути в разных операционных системах. Доступные режимы открытия файлов описаны в документации fopen().

getcwd() и DIR

Это наиболее распространённый источник ошибок. getcwd() возвращает рабочий каталог времени выполнения, который может изменяться. __DIR__ разрешается на этапе компиляции и всегда указывает на каталог текущего исходного файла — он никогда не меняется, даже после вызова chdir().

  • Используйте __DIR__ для подключения файлов или загрузки ресурсов, расположенных рядом со скриптом (require __DIR__ . '/config.php';). Это почти всегда правильный выбор для путей, относительных к проекту.
  • Используйте getcwd(), когда вам действительно важно откуда был запущен процесс, например, в CLI-инструменте, работающем с текущей папкой пользователя.

Рабочий каталог можно изменить с помощью chdir():

<?php
echo getcwd(), PHP_EOL;   // e.g. /home/user/project
chdir('..');
echo getcwd(), PHP_EOL;   // parent directory, e.g. /home/user

Связанные функции

  • chdir() — изменить текущий рабочий каталог.
  • realpath() — развернуть относительный путь до канонического абсолютного пути.
  • dirname() — получить родительскую часть пути.
  • scandir() — вывести список записей внутри каталога.

Заключение

getcwd() возвращает абсолютный путь текущего рабочего каталога процесса или false, если каталог не может быть прочитан. Проверяйте результат на false перед использованием, отдавайте предпочтение DIRECTORY_SEPARATOR при объединении путей и используйте __DIR__, когда вам нужен путь относительно файла скрипта, а не рабочего каталога времени выполнения.

Практика

Практика
Что делает функция getcwd() в PHP?
Что делает функция getcwd() в PHP?
Was this page helpful?