略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: chdir

2024-12-22

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.

参见

add a noteadd a note

User Contributed Notes 3 notes

up
2
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;
}

?>
up
-5
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"
up
-18
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)

官方地址:https://www.php.net/manual/en/function.chdir.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3