ffi/work-directory

PHP 库,用于与工作目录交互

1.0.0 2023-08-09 17:03 UTC

This package is auto-updated.

Last update: 2024-09-09 19:52:44 UTC


README

PHP 8.1+ Latest Stable Version Latest Unstable Version Total Downloads License MIT

在通过 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;
}