Files
decpdf.site/lib/Process.php
2026-01-18 00:53:18 +00:00

83 lines
1.4 KiB
PHP
Executable File

<?php
class Process {
private $_command = null;
private $_args = [];
private $_env = [];
private $_cwd = null;
private $_pipes = [];
private $_stdout = [];
private $_stderr = [];
private $_fd = null;
private $_status = null;
public function __construct($command) {
$this->_command = $command;
$this->_env = $_ENV;
}
public function arg($v) {
$this->_args[] = $v;
}
public function env($k, $v) {
$this->_env[$k] = $v;
}
public function cwd($p) {
$this->_cwd = $p;
}
public function execute() {
$command = [];
$command[] = escapeshellcmd($this->_command);
foreach ($this->_args as $a) {
$command[] = escapeshellarg($a);
}
$desc = [
["pipe", "r"],
["pipe", "w"],
["pipe", "w"]
];
$this->_fd = proc_open(
implode(" ", $command),
$desc,
$this->_pipes,
$this->_cwd,
$this->_env
);
fclose($this->_pipes[0]); // stdin
$this->_status = proc_get_status($this->_fd);
while ($this->_status["running"]) {
$this->_stdout[] = stream_get_contents($this->_pipes[1]);
$this->_stderr[] = stream_get_contents($this->_pipes[2]);
$this->_status = proc_get_status($this->_fd);
}
proc_close($this->_fd);
return $this->_status["exitcode"];
}
public function stdout() {
return explode("\n", implode("", $this->_stdout));
}
public function stderr() {
return explode("\n", implode("", $this->_stderr));
}
}