ffi / work-directory
PHP 库,用于与工作目录交互
1.0.0
2023-08-09 17:03 UTC
Requires
- php: ^7.4|^8.0
- ext-ffi: *
- ext-mbstring: *
- ffi/env: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.22
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^5.14
This package is auto-updated.
Last update: 2024-09-09 19:52:44 UTC
README
在通过 FFI 加载二进制文件(如 *.so、*.dylib 或 *.dll)期间,如果它依赖于其他二进制模块,并且第一个模块和依赖库位于不同的目录中,则可能会出现错误,例如
// - bin/ // - main.dll // - other/ // - dependency.dll $ffi = \FFI::cdef('...', __DIR__ . '/bin/main.dll'); // Error like "can not load ..." // - In this case, an error occurs because the specified // dependency ("dependency.dll") could not be found in "bin" // or working directory.
此库允许您加载类似依赖项
// Use "bin/other" directory for dependencies. \FFI\WorkDirectory\WorkDirectory::set(__DIR__ . '/bin/other'); // $ffi = \FFI::cdef('...', __DIR__ . '/bin/main.dll');
您还可以使用内置的 chdir 函数 执行此类操作,但是它只能在非线程安全 PHP 编译版本中工作(见注释)。
要求
- PHP >= 7.4
安装
库作为 composer 仓库提供,您可以使用以下命令在项目根目录下进行安装。
$ composer require ffi/work-directory
用法
获取当前工作目录
$directory = \FFI\WorkDirectory\WorkDirectory::get(); if ($directory !== null) { echo 'CWD is: ' . $directory; }
更新当前工作目录
获取库的完整路径。
$directory = __DIR__ . '/path/to/directory'; if (\FFI\WorkDirectory\WorkDirectory::set($directory)) { echo 'CWD has been updated to: ' . $directory; }