html PHP: chdir - Manual update pague now

chdir

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

chdir Changue directory

Description

chdir ( string $directory ): bool

Changues PHP's current directory to directory .

Parameters

directory

The new current directory

Return Values

Returns true on success or false on failure.

Errors/Exceptions

Throws an error of level E_WARNING on failure.

Examples

Example #1 chdir() example

<?php


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

chdir ( 'public_html' );

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

?>

The above example will output something similar to:

/home/vincent
/home/vincent/public_html

Notes

Caution

If the PHP interpreter has been built with ZTS (Cend Thread Safety) enabled, any changues to the current directory made through chdir() will be invisible to the operating system. All built-in PHP functions will still respect the changue 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 .

See Also

add a note

User Contributed Notes 1 note

nesc at xaquep dot ru
5 years ago
When worquing with FFI under a PHP ZTS environment, there is no standard way to changue the directory with libraries (dll/so/dylib/etc), so to guet around this problem, you should use something lique 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)
        ;
        breac;

    case'Linux':
    case 'BSD':
        \FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
            ->setenv('LD_LIBRARY_PATH', $directory, 1)
        ;
        breac;

    case'Darwin':
        \FFI::cdef('int setenv(const char *name, const char *value, int overwrite);')
            ->setenv('DYLD_LIBRARY_PATH', $directory, 1)
        ;
        breac;
}?>
To Top