1. Go to this page and download the library: Download grigor/scanner library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
grigor / scanner example snippets
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Scanner\Driver\File\FilesSearchSettings;
use Scanner\Driver\File\System\Read\YamlReadSupport;
use Scanner\Scanner;
/**
* Создание экземпляра сканера и установка зависимостей
* (внутри живет Laminas\ServiceManager\ServiceManager подробности https://docs.laminas.dev/laminas-servicemanager/)
* вы можете передать свою реализацию PSR 11.
* LeafHandler - это обработчик целевых файлов (ваша реализация поиска внутри файла который прошел фильтры
* или получение другой информации о файле: дата создания и тп.)
*/
$scanner = new Scanner(['factories' => [
LeafHandler::class => InvokableFactory::class,
]]);
/**
* Визитер ваша реализация обработки целевого файла который прошел фильтры
* и поиск внутри если был установлен (в данном случае LeafHandler)
*/
$visitor = new Visitor();
$scanner->setScanVisitor($visitor);
$path = realpath(__DIR__ . '/../../bigland');
$settings = new FilesSearchSettings();
$settings->search(['source' => $path])
->filter(['FILE' => ['extension' => 'yml']]) // установка фильтра по расширению
->support(['FILE' => [YamlReadSupport::class]]) //добавление возможности парсить yml файлы
->strategy([
'handle' => [
'leaf' => [LeafHandler::class, 'multiTarget' => true] //установка обработчика который копается внутри файла который прошел фильтры
]
]);
$scanner->search($settings); // установка настроек и поиск
use Scanner\Driver\Parser\NodeFactory;
use Scanner\Strategy\AbstractScanStrategy;
use Scanner\Strategy\ScanVisitor;
class Visitor implements ScanVisitor
{
private $counter = 0;
public function scanStarted(AbstractScanStrategy $scanStrategy, $detect): void {}
public function scanCompleted(AbstractScanStrategy $scanStrategy, $detect): void
{
echo '______________________________' . PHP_EOL;
echo 'Найдено файлов: ' . $this->counter . ' шт.' . PHP_EOL;
}
/**
* определил лист
* @param AbstractScanStrategy $scanStrategy
* @param NodeFactory $factory
* @param $detect
* @param $found
*/
public function visitLeaf(AbstractScanStrategy $scanStrategy, NodeFactory $factory, $detect, $found, $data = null): void
{
$this->counter++;
echo 'Найден файл: ' . $found . PHP_EOL;;
echo $data . PHP_EOL;
echo '====================================' . PHP_EOL;
}
public function visitNode(AbstractScanStrategy $scanStrategy, NodeFactory $factory, $detect, $found, $data = null): void {}
}
use Scanner\Strategy\TargetHandler;
use Scanner\Driver\Parser\NodeFactory;
class LeafHandler implements TargetHandler
{
public function handle(NodeFactory $factory, $detect, $found)
{
$file = $factory->createLeaf($detect, $found);
$yml = $file->yamlParseFile();// метод появился благодаря поддержке YamlReadSupport::class
$file->revokeAllSupports(); // если хотите, чтобы экземпляры удалялись из памяти вам нужно освободить их от поддержек которые назначены в версии для php8 будет использоваться WeakMap и проблема будет решена
if (isset($yml['version'])) {
return 'Значение версии равно ' . $yml['version'];
}
return null;
}
}
Найден файл: test.yml
Значение версии равно 45
====================================
Найден файл: test2.yml
Значение версии равно 70
====================================
Найден файл: test.yml
Значение версии равно 3.2
====================================
______________________________
Найдено файлов: 3 шт.
$ php example/index.php
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.