(PHP 4, PHP 5, PHP 7, PHP 8)
chdir — Изменяет рабочий каталог
Функция изменяет текущий рабочий каталог PHP на каталог
directory.
directoryНовый текущий каталог.
Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.
В случае неудачного выполнения функция выдаёт ошибку уровня E_WARNING .
Пример #1 Пример использования функции chdir()
<?php
// Текущий рабочий каталог
echo getcwd() . "\n";
chdir('public_html');
// Текущий рабочий каталог
echo getcwd() . "\n";
?>Вывод приведённого примера будет похож на:
/home/vincent /home/vincent/public_html
Операционная система не заметит изменений в текущем каталоге, которые сделали через функцию chdir(),
если PHP-интерпретатор собрали с поддержкой потокобезопасного режима ZTS (Zend Thread Safety). Все встроенные PHP-функции по-прежнему будут учитывать изменения
в текущем каталоге; это не относится к вызываемым функциям внешних библиотек, которые подключили через модуль
FFI.
Собрали ли PHP с поддержкой ZTS, покажет команда php -i или встроенная константа PHP_ZTS .
When working with FFI under a PHP ZTS environment, there is no standard way to change the directory with libraries (dll/so/dylib/etc), so to get around this problem, you should use something like this polyfill:
<?php
$directory = 'path/to/libraries';
switch (\PHP_OS_FAMILY) {
case 'Windows':
\FFI::cdef('extern unsigned char SetDllDirectoryA(const char* lpPathName);', 'kernel32.dll')
->SetDllDirectoryA($directory)
;
break;
case 'Linux':
case 'BSD':
\FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
->setenv('LD_LIBRARY_PATH', $directory, 1)
;
break;
case 'Darwin':
\FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
->setenv('DYLD_LIBRARY_PATH', $directory, 1)
;
break;
}
?>