PHP 8.4.0 RC4 available for testing

chdir

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

chdirChange directory

Опис

chdir(string $directory): bool

Changes PHP's current directory to directory.

Параметри

directory

The new current directory

Значення, що повертаються

Повертає true у разі успіху або false в разі помилки.

Помилки/виключення

Throws an error of level E_WARNING on failure.

Приклади

Приклад #1 chdir() example

<?php

// current directory
echo getcwd() . "\n";

chdir('public_html');

// current directory
echo getcwd() . "\n";

?>

Поданий вище приклад виведе щось схоже на:

/home/vincent
/home/vincent/public_html

Примітки

Застереження

If the PHP interpreter has been built with ZTS (Zend Thread Safety) enabled, any changes to the current directory made through chdir() will be invisible to the operating system. All built-in PHP functions will still respect the change in current directory; but external library functions called using FFI will not. You can tell whether your copy of PHP was built with ZTS enabled using php -i or the built-in constant PHP_ZTS.

Прогляньте також

  • getcwd() - Gets the current working directory

add a note

User Contributed Notes 1 note

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

?>
To Top