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ą:
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ą.
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.