PHP Conference Japan 2024

chdir

(PHP 4、PHP 5、PHP 7、PHP 8)

chdir更改目录

描述

chdir(字符串 $directory): 布尔值

将 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 线程安全)的情况下构建的,则通过 chdir() 对当前目录所做的任何更改都将对操作系统不可见。所有内置的 PHP 函数仍将尊重当前目录的更改;但使用 FFI 调用的外部库函数将不会。您可以使用 php -i 或内置常量 PHP_ZTS 来判断您的 PHP 副本是否是在启用 ZTS 的情况下构建的。

参见

添加注释

用户贡献的注释 1 条注释

9
nesk at xakep dot ru
4 年前
在 PHP ZTS 环境下使用 FFI 时,没有标准的方法来更改库(dll/so/dylib/等)的目录,因此要解决此问题,您应该使用类似以下的 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