PHPackages                             ghoulphp/ghoul - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. ghoulphp/ghoul

ActiveLibrary

ghoulphp/ghoul
==============

26PHP

Since May 8Pushed 11y agoCompare

[ Source](https://github.com/ghoulphp/ghoul)[ Packagist](https://packagist.org/packages/ghoulphp/ghoul)[ RSS](/packages/ghoulphp-ghoul/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

`ghoul`
=======

[](#ghoul)

###### Not yet working

[](#not-yet-working)

ghoul is a "native" filesystem abstraction library for PHP. It is not your grandmother's abstraction library.

### Installation

[](#installation)

```
$ composer require ghoulphp/ghoul
$ composer require ghoulphp/[adapter-name]
```

### Usage

[](#usage)

```
(new ghoul)
    ->with(new MemoryAdapter()) // Attaches a MemoryAdapter to the ghoul instance
    ->bind(); // Filesystem functions now point to this ghoul

file_put_contents("file.txt", "Hello World!"); // Stored in memory
echo file_get_contents("file.txt"); // Prints "Hello World"

ghoul::halt(true); // Halts and cleans up the active ghoul
```

### Binding

[](#binding)

ghoul binding is really simple. Only one instance can be bound at a time and if another instance tries to bind over it, an exception will be thrown. ghoul allows you to manage binding statically or through a ghoul object. Here are some examples.

```
$g = new ghoul; // NOT BOUND | NOT STORED
$g->bind(); // BOUND | STORED
$g->release(); // NOT BOUND | STORED
ghoul::resume(); // BOUND | STORED
ghoul::halt(true); // NOT BOUND | NOT STORED
```

The two static method control the currently stored object. It is impossible to statically bind a ghoul, you can only halt or resume an already stored instance.

#### Note

[](#note)

When you release or halt a release ghoul, a reference is still held until another one is bound over it. This will prevent the object from being garbage collected. If you want to ensure speedy garbage collection pass `true` as the first argument to either method. Doing this means you can't call `ghoul::resume()` method, you will be able to call `ghoul->bind()` and bind from scratch/

### Compatibility with flysystem

[](#compatibility-with-flysystem)

flysystem by the PHP league is a far better abstraction library and is backed by many more contributors and experience. For this reason ghoul is built as an extension to it and not as a standalone library. ghoul depends on flysystem and can use all flysystem adapters out of the box. The issue with these adapters is they don't expose all the features needed by ghoul. For this reason ghoul has its own adapter system which extends flysystem's. ghoul adapters allow you to use all filesystem functions.

### Interacting with underlying static management classes

[](#interacting-with-underlying-static-management-classes)

ghoul has a couple of static classes which do the work to make everything appear non-static from the outside. Interaction with these classes is discouraged and features should be available in a higher level object.

#### `StaticInstance`

[](#staticinstance)

StaticInstance allows for one instance to be "bound" across the entire program. All it does is store that instance and allow setting and getting. Really simple.

#### `MethodRouter`

[](#methodrouter)

MethodRouter statically routes function calls to the currently bound instance. It depends on `StaticInstance` to function, but either one can init the other automatically.

### What does this do?

[](#what-does-this-do)

ghoul overrides built-in filesystem methods, so you don't need to change any code.

### But that is evil, what happened to proper code standards?

[](#but-that-is-evil-what-happened-to-proper-code-standards)

You're using PHP.

### Can I turn off goul?

[](#can-i-turn-off-goul)

Yes. But that wouldn't be fun.

### What methods are currently supported?

[](#what-methods-are-currently-supported)

- basename — Returns trailing name component of path
- chgrp — Changes file group
- chmod — Changes file mode
- chown — Changes file owner
- clearstatcache — Clears file status cache
- copy — Copies file
- delete — See unlink or unset
- dirname — Returns parent directory's path
- disk\_free\_space — Returns available space on filesystem or disk partition
- disk\_total\_space — Returns the total size of a filesystem or disk partition
- diskfreespace — Alias of disk\_free\_space
- fclose — Closes an open file pointer
- feof — Tests for end-of-file on a file pointer
- fflush — Flushes the output to a file
- fgetc — Gets character from file pointer
- fgetcsv — Gets line from file pointer and parse for CSV fields
- fgets — Gets line from file pointer
- fgetss — Gets line from file pointer and strip HTML tags
- file\_exists — Checks whether a file or directory exists
- file\_get\_contents — Reads entire file into a string
- file\_put\_contents — Write a string to a file
- file — Reads entire file into an array
- fileatime — Gets last access time of file
- filectime — Gets inode change time of file
- filegroup — Gets file group
- fileinode — Gets file inode
- filemtime — Gets file modification time
- fileowner — Gets file owner
- fileperms — Gets file permissions
- filesize — Gets file size
- filetype — Gets file type
- flock — Portable advisory file locking
- fnmatch — Match filename against a pattern
- fopen — Opens file or URL
- fpassthru — Output all remaining data on a file pointer
- fputcsv — Format line as CSV and write to file pointer
- fputs — Alias of fwrite
- fread — Binary-safe file read
- fscanf — Parses input from a file according to a format
- fseek — Seeks on a file pointer
- fstat — Gets information about a file using an open file pointer
- ftell — Returns the current position of the file read/write pointer
- ftruncate — Truncates a file to a given length
- fwrite — Binary-safe file write
- glob — Find pathnames matching a pattern
- is\_dir — Tells whether the filename is a directory
- is\_executable — Tells whether the filename is executable
- is\_file — Tells whether the filename is a regular file
- is\_link — Tells whether the filename is a symbolic link
- is\_readable — Tells whether a file exists and is readable
- is\_uploaded\_file — Tells whether the file was uploaded via HTTP POST
- is\_writable — Tells whether the filename is writable
- is\_writeable — Alias of is\_writable
- lchgrp — Changes group ownership of symlink
- lchown — Changes user ownership of symlink
- link — Create a hard link
- linkinfo — Gets information about a link
- lstat — Gives information about a file or symbolic link
- mkdir — Makes directory
- move\_uploaded\_file — Moves an uploaded file to a new location
- parse\_ini\_file — Parse a configuration file
- parse\_ini\_string — Parse a configuration string
- pathinfo — Returns information about a file path
- pclose — Closes process file pointer
- popen — Opens process file pointer
- readfile — Outputs a file
- readlink — Returns the target of a symbolic link
- realpath\_cache\_get — Get realpath cache entries
- realpath\_cache\_size — Get realpath cache size
- realpath — Returns canonicalized absolute pathname
- rename — Renames a file or directory
- rewind — Rewind the position of a file pointer
- rmdir — Removes directory
- set\_file\_buffer — Alias of stream\_set\_write\_buffer
- stat — Gives information about a file
- symlink — Creates a symbolic link
- tempnam — Create file with unique file name
- tmpfile — Creates a temporary file
- touch — Sets access and modification time of file
- umask — Changes the current umask
- unlink — Deletes a file

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/1b28d8c98f8e051450da1d42aa54cf15a6624e49399469cc012a660347e953b6?d=identicon)[Falkirks](/maintainers/Falkirks)

![](https://www.gravatar.com/avatar/1117af78b7eea1fdc6d16b27544d37290116a2c93cefc27da3a09c8798579ba1?d=identicon)[ghoulphp](/maintainers/ghoulphp)

---

Top Contributors

[![falkirks](https://avatars.githubusercontent.com/u/5827558?v=4)](https://github.com/falkirks "falkirks (8 commits)")

### Embed Badge

![Health badge](/badges/ghoulphp-ghoul/health.svg)

```
[![Health](https://phpackages.com/badges/ghoulphp-ghoul/health.svg)](https://phpackages.com/packages/ghoulphp-ghoul)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
