arrel/mediadb.php

41 lines
945 B
PHP

<?php
class MediaDB
{
private $handler;
private array $lines = [];
public function __construct()
{
// Just initialize the file handler
$this->handler = fopen($GLOBALS['path_mediadb'], 'r');
if ($this->handler === false)
Json::error('Error opening media DB');
}
private function getLine(): ?array
{
$ret = fgetcsv($this->handler, 0, ' ');
if ($ret === false)
return null;
return $ret;
}
public function map(callable $func)
{
// First read from what's already in memory
foreach ($this->lines as $i_line) {
if ($func($i_line) === true) return;
}
// If we run out, read from the file and append to array so the next lookup
// is fast
while ($line = $this->getLine()) {
$this->lines[] = $line;
if ($func($line) === true) return;
}
}
}