php-spark/src/Pipe/Pipeline.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();
}
}