https://github.com/php-ffi/work-directory
Library to interact with current working directory
https://github.com/php-ffi/work-directory
Last synced: 8 months ago
JSON representation
Library to interact with current working directory
- Host: GitHub
- URL: https://github.com/php-ffi/work-directory
- Owner: php-ffi
- License: mit
- Created: 2023-08-09T13:08:51.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-17T00:28:04.000Z (about 1 year ago)
- Last Synced: 2025-05-20T17:29:09.999Z (9 months ago)
- Language: PHP
- Size: 23.4 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Work Directory
In the case that during the loading of a binary (like `*.so`, `*.dylib` or `*.dll`)
through FFI it depends on some other binary module, then errors may occur if the
first one and dependent libraries are in different directories, like:
```php
// - 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.
```
This library allows you to load similar dependencies:
```php
// Use "bin/other" directory for dependencies.
\FFI\WorkDirectory\WorkDirectory::set(__DIR__ . '/bin/other');
//
$ffi = \FFI::cdef('...', __DIR__ . '/bin/main.dll');
```
You can also use the built-in [chdir function](https://www.php.net/manual/en/function.chdir.php)
for such operations, however it will only work in case of a Non-Thread Safe PHP
build ([see remark](https://www.php.net/manual/en/function.chdir.php#refsect1-function.chdir-notes)).
## Requirements
- PHP >= 7.4
## Installation
Library is available as composer repository and can be installed using the
following command in a root of your project.
```sh
$ composer require ffi/work-directory
```
## Usage
### Get Current Work Directory
```php
$directory = \FFI\WorkDirectory\WorkDirectory::get();
if ($directory !== null) {
echo 'CWD is: ' . $directory;
}
```
### Update Current Work Directory
Getting the full path to the library.
```php
$directory = __DIR__ . '/path/to/directory';
if (\FFI\WorkDirectory\WorkDirectory::set($directory)) {
echo 'CWD has been updated to: ' . $directory;
}
```