chdir
(PHP 4, PHP 5, PHP 7, PHP 8)
chdir — 改变目录
说明
chdir(string
$directory
): bool
将 PHP 的当前目录改为
directory
。
参数
-
directory
-
新的当前目录
返回值
成功时返回 true
, 或者在失败时返回 false
。
错误/异常
Throws an error of level E_WARNING
on failure.
范例
示例 #1 chdir() 例子
<?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
.

User Contributed Notes 3 notes
nesk at xakep dot ru ¶
1 year 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;
}
?>
php dot duke at qik dot nl ¶
13 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"
herwin at snt dot utwente dot nl ¶
15 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)