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;
}
?>| CARVIEW |
Select Language
HTTP/2 200
server: myracloud
date: Wed, 28 Jan 2026 02:34:48 GMT
content-type: text/html; charset=utf-8
content-language: en
permissions-policy: interest-cohort=()
x-frame-options: SAMEORIGIN
status: 200 OK
link: ; rel=shorturl
last-modified: Wed, 28 Jan 2026 02:08:21 GMT
vary: accept-encoding
content-encoding: gzip
expires: Wed, 28 Jan 2026 02:34:48 GMT
cache-control: max-age=0
PHP: chdir - Manual
update page now
chdir
(PHP 4, PHP 5, PHP 7, PHP 8)
chdir — Change directory
Parameters
directory-
The new current directory
Errors/Exceptions
Throws an error of level 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 using
php -i or the built-in constant
PHP_ZTS.
+add a note
User Contributed Notes 1 note
nesk at xakep dot ru ¶
5 years ago
↑ and ↓ to navigate •
Enter to select •
Esc to close • / to open
Press Enter without
selection to search using Google