* Pipe improvements; better filter code, pipeline etc. * Moved commands in PDO plugin to dedicated namespace
55 lines
1.2 KiB
PHP
55 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Spark\Pipe;
|
|
|
|
use Spark\Pipe\Filters\FilterInterface;
|
|
|
|
class Pipeline
|
|
{
|
|
|
|
private $fdin;
|
|
|
|
private $fdout;
|
|
|
|
private array $filters = [];
|
|
|
|
public function setInputFile(string $filename)
|
|
{
|
|
if (ctype_digit($filename) && !file_exists($filename)) {
|
|
$filename = "php://fd/" . $filename;
|
|
}
|
|
$this->fdin = fopen($filename, 'rb');
|
|
}
|
|
|
|
public function setOutputFile(string $filename)
|
|
{
|
|
if (ctype_digit($filename) && !file_exists($filename)) {
|
|
$filename = "php://fd/" . $filename;
|
|
}
|
|
$this->fdout = fopen($filename, 'wb');
|
|
}
|
|
|
|
public function addFilter(FilterInterface $filter)
|
|
{
|
|
$this->filters[] = $filter;
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
while (!feof($this->fdin)) {
|
|
ob_start();
|
|
$buf = fread($this->fdin, 8192);
|
|
foreach ($this->filters as $filter) {
|
|
$buf = $filter->pipe($buf);
|
|
}
|
|
ob_end_clean();
|
|
fwrite($this->fdout, $buf);
|
|
}
|
|
ob_start();
|
|
foreach ($this->filters as $filter) {
|
|
$filter->pipe(null);
|
|
}
|
|
ob_end_clean();
|
|
}
|
|
|
|
} |