Abstraction for most of the operating system the PHP code run on.
The goal is to deal with the operating system in a more abstract way (instead of dealing with concrete, low level, details).
Important
you must use vimeo/psalm
to make sure you use this library correctly.
composer require innmind/operating-system
Documentation is located in the documentation/
folder.
use Innmind\OperatingSystem\Factory;
$os = Factory::build();
$os->clock()
will return an instance of Innmind\TimeContinuum\Clock
.
use Innmind\Url\Path;
$adapter = $os
->filesystem()
->mount(Path::of('/var/data/'))
->unwrap();
$adater
is an instance of Innmind\Filesystem\Adapter
.
$os->status()->processes()->all()
will return a map of Inmmind\Immutable\Set<Innmind\Server\Status\Server\Process>
.
use Innmind\Server\Control\Server\Command;
$process = $os
->control()
->processes()
->execute(Command::foreground('echo foo'))
->unwrap();
$process
is an instance of Innmind\Server\Control\Server\Process
.
use Innmind\Socket\Internet\Transport;
use Innmind\IP\IPv4;
use Innmind\Url\Authority\Port;
$server = $os
->ports()
->open(
Transport::tcp(),
IPv4::localhost(),
Port::of(1337),
)
->unwrap();
$server
is an instance of Innmind\IO\Sockets\Servers\Server
.
# process A
use Innmind\Socket\Address\Unix;
$server = $os
->sockets()
->open(Unix::of('/tmp/foo.sock'))
->unwrap();
$server
is an instance of Innmind\IO\Sockets\Servers\Server
.
# process B
use Innmind\Socket\Address\Unix;
$client = $os
->sockets()
->connectTo(Unix::of('/tmp/foo.sock'))
->unwrap();
$client
is an instance of Innmind\IO\Sockets\Clients\Client
.
use Innmind\Url\Url;
use Innmind\Server\Control\Server\Command;
$process = $os
->remote()
->ssh(Url::of('ssh://user@server-address:1337'))
->processes()
->execute(Command::foreground('ls'))
->unwrap();
$process
is an instance of Innmind\Server\Control\Server\Process
.
use Innmind\Http\{
Request,
Method,
ProtocolVersion,
};
use Innmind\Url\Url;
$response = $os
->remote()
->http()(Request::of(
Url::of('http://example.com'),
Method::get,
ProtocolVersion::v20,
));
$os->process()->id()->unwrap();
use Innmind\TimeContinuum\Period;
$os->process()->halt(Period::minute(1));
use Innmind\Signals\Signal;
$os->process()->signals()->listen(Signal::terminate, function() {
// handle the signal here
});