CakeFest 2024: The Official CakePHP Conference

chdir

(PHP 4, PHP 5, PHP 7, PHP 8)

chdirИзменяет каталог

Описание

chdir(string $directory): bool

Изменяет текущий каталог 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

Примечания

Предостережение

Если PHP-интерпретатор собран с поддержкой ZTS (Zend Thread Safety), любые изменения в текущем каталоге, сделанные с помощью chdir(), не будут обнаружены операционной системой. Все встроенные функции PHP будут по-прежнему учитывать изменения в текущем каталоге; это не относится к вызываемым функциям внешних библиотек, подключённых через FFI. Используйте php -i или встроенную константу PHP_ZTS, чтобы узнать, собран ли PHP с ZTS.

Смотрите также

  • getcwd() - Получает имя текущего рабочего каталога

add a note

User Contributed Notes 3 notes

up
9
nesk at xakep dot ru
3 years ago
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;
}

?>
up
-14
php dot duke at qik dot nl
15 years ago
When changing dir's under windows environments:

<?php
$path
="c:\temp"';
chdir($path);
/* getcwd() gives you back "c:\temp" */

$path="c:\temp\"'
;
chdir($path);
/* getcwd() gives you back "c:\temp\" */
?>

to work around this inconsistency
doing a chdir('.') after the chdir always gives back "c:\temp"
up
-30
herwin at snt dot utwente dot nl
17 years ago
When using PHP safe mode and trying to change to a dir that is not accessible due to the safe mode restrictions, the function simply fails without generating any kind of error message.

(Tested in PHP 4.3.10-16, Debian Sarge default)
To Top