Pereiti prie turinio

Komandų vykdymą ribojančios aplinkos

Bendrojo prieglobos, sustiprinto saugumo konteineriuose ir kai kuriose PaaS platformose proceso funkcijos išjungiamos naudojant disable_functions. Greph paieškos, perrašymo ir indeksavimo operacijos vykdomos PHP procese (lygiagrečios peržiūros, kai įmanoma, išsišakoja ir sukuria darbines jo kopijas), todėl ten jos veikia.

Kas paleidžia procesus

Kodas Funkcija Paskirtis
Greph\Support\ToolResolver shell_exec() Išorinių grep, rg, sg (arba npm) ir gh dvejetainių failų paieška PATH sistemoje
Greph\Support\CommandRunner proc_open() Šių dvejetainių failų ir Greph vykdomųjų failų paleidimas kaip antrinių procesų
Greph\Parallel\WorkerPool pcntl_fork() Lygiagretūs -j N / jobs: N darbininkai

ToolResolver ir CommandRunner naudojami tik palyginimo įrankiuose: funkcijų matricos generatoriuje, našumo testų aplinkoje ir etaloninių testų aplinkoje. Greph::search*(), Greph::rewriteAst(), indeksų kūrimo įrankiai ir keturi vykdomieji failai jų niekada nekviečia.

Darbininkų telkinys prieš išsišakodamas patikrina function_exists('pcntl_fork'). Funkcijų, nurodytų disable_functions, PHP požiūriu nėra, todėl tokiame serveryje kiekviena dalis vykdoma tame pačiame procese ir gaunamas toks pat rezultatas kaip naudojant -j 1. Žr. Lygiagretūs darbininkai.

Kai išjungiamos proc_open, shell_exec, exec, system, passthru, popen ir pcntl_fork, teksto paieška su jobs: 4, AST perrašymas, greph-index build, greph-index ast-cache build ir search, taip pat rg ir sg apvalkalai veikia įprastai.

Pagalbinės priemonės, veikiančios be procesų

Įterpdami palyginimo pagalbines priemones į tokį serverį, sukurkite jas taikydami aiškią procesų išjungimo politiką:

PHP
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();

Šie objektai saugiai atsisako veiksmų: kiekviena paieška ar komanda pateikia RuntimeException, užuot bandžiusi paleisti procesą.

Text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version

Perduokite jas visur, kur priimama ToolResolver arba CommandRunner, pavyzdžiui, Greph\FeatureMatrix\FeatureMatrixGenerator argumentuose toolResolver: ir commandRunner:. Tada generatorius baigia darbą nepaleidęs proceso, tačiau naudingos ataskaitos parengti negali: užklausų rezultatai prieš pradinius įrankius nurodomi kaip Unavailable, o užklausų, vykdančių Greph vykdomuosius failus, rezultatai – kaip Fail, nes kiekviena užklausa yra komanda. Generuokite funkcijų matricą kompiuteryje, kuriame leidžiama paleisti procesus.