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;
}
?>chdir
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
chdir
Референца за `function.chdir.php` со подобрена типографија и навигација.
chdir
(PHP 4, PHP 5, PHP 7, PHP 8)
chdir — Промени директориум
Параметри
directory-
Новата тековна директориум
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Errors/Exceptions
Фрла грешка од ниво E_WARNING при неуспех.
Примери
Пример #1 chdir() example
<?php
// current directory
echo getcwd() . "\n";
chdir('public_html');
// current directory
echo getcwd() . "\n";
?>Горниот пример ќе прикаже нешто слично на:
/home/vincent /home/vincent/public_html
Белешки
Ако PHP интерпретерот е изграден со ZTS (Zend Thread Safety) овозможено, сите промени во тековната директорија направени преку chdir()
ќе бидат невидливи за оперативниот систем. Сите вградени PHP функции ќе ја почитуваат промената во тековната директорија; но надворешните библиотечни функции повикани преку FFI нема да бидат. Можете да кажете дали вашата копија од PHP е изградена со ZTS овозможено користејќи
на Windows) и стартувајте или вградената константа
PHP_ZTS.