PHP: chdir - Manual (original) (raw)
(PHP 4, PHP 5, PHP 7, PHP 8)
chdir — Change directory
Description
Parameters
directory
The new current directory
Return Values
Returns [true](reserved.constants.php#constant.true) on success or [false](reserved.constants.php#constant.false) on failure.
Errors/Exceptions
Throws an error of level [E_WARNING](errorfunc.constants.php#constant.e-warning) on failure.
Examples
Example #1 chdir() example
<?php// current directory echo getcwd() . "\n";chdir('public_html');// current directory echo getcwd() . "\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 (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 usingphp -i or the built-in constant**[PHP_ZTS](reserved.constants.php#constant.php-zts)**.
See Also
- getcwd() - Gets the current working directory
Found A Problem?
5 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;
}
?>