Hostitelia s obmedzenými procesmi
Zdieľaný hosting, zabezpečené kontajnery a niektoré platformy PaaS zakazujú procesové funkcie prostredníctvom disable_functions. Vyhľadávanie, prepisovanie a indexovanie v Greph prebieha v procese PHP (paralelné skenovania vytvárajú jeho pracovné kópie, keď je to možné), takže tam naďalej fungujú.
Čo spúšťa procesy
| Kód | Funkcia | Použitie |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Vyhľadanie externých binárnych súborov grep, rg, sg (alebo npm) a gh v systéme PATH |
Greph\Support\CommandRunner |
proc_open() |
Spúšťanie týchto binárnych súborov a spustiteľných súborov Greph ako podprocesov |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Paralelní pracovníci pre -j N / jobs: N |
ToolResolver a CommandRunner slúžia iba na porovnávacie nástroje: generátor matice funkcií, testovací nástroj benchmarkov a testovací nástroj oracle. Greph::search*(), Greph::rewriteAst(), zostavovače indexov a štyri spustiteľné súbory ich nikdy nevolajú.
Fond pracovníkov pred vytvorením procesu skontroluje function_exists('pcntl_fork'). Funkcia uvedená v disable_functions z pohľadu PHP neexistuje, takže na takomto hostiteľovi sa každý blok spracuje v rámci procesu, rovnako ako v -j 1. Pozrite si Paralelní pracovníci.
Keď sú proc_open, shell_exec, exec, system, passthru, popen a pcntl_fork zakázané, textové vyhľadávanie pomocou jobs: 4, prepisovanie AST, greph-index build, greph-index ast-cache build a search, ako aj obaly rg a sg fungujú normálne.
Pomocné nástroje bez procesov
Ak vkladáte porovnávacie pomocné nástroje do takéhoto hostiteľa, vytvorte ich s výslovnou politikou bez procesov:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Tieto inštancie pri zlyhaní postupujú bezpečne: každé vyhľadanie alebo príkaz vyvolá RuntimeException namiesto pokusu spustiť proces.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Odovzdajte ich všade tam, kde sa prijíma ToolResolver alebo CommandRunner, napríklad ako argumenty toolResolver: a commandRunner: v Greph\FeatureMatrix\FeatureMatrixGenerator. Generátor sa potom dokončí bez spustenia procesu, ale nedokáže vytvoriť užitočný report: kontroly nadväzujúcich nástrojov sa označia ako Unavailable a kontroly spúšťajúce vlastné spustiteľné súbory Greph ako Fail, pretože každá kontrola je príkaz. Matice funkcií vygenerujte na počítači, ktorý povoľuje spúšťanie procesov.