Pipe improvements, misc cleanup
* Pipe improvements; better filter code, pipeline etc. * Moved commands in PDO plugin to dedicated namespace
This commit is contained in:
55
src/Pipe/Pipeline.php
Normal file
55
src/Pipe/Pipeline.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?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();
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user