Hostitelé s omezeným spouštěním procesů
Sdílený hosting, zabezpečené kontejnery a některé platformy PaaS zakazují procesní funkce prostřednictvím disable_functions. Vyhledávání, přepisování a indexační operace Greph probíhají uvnitř procesu PHP (paralelní skenování vytváří kopie pracovních procesů, kdykoli je to možné), takže na těchto platformách dál fungují.
Co spouští procesy
| Kód | Funkce | Použití |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Vyhledání externích binárních souborů grep, rg, sg (nebo npm) a gh v PATH |
Greph\Support\CommandRunner |
proc_open() |
Spouštění těchto binárních souborů a spustitelných souborů Greph jako podprocesů |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Paralelní pracovní procesy pro -j N / jobs: N |
ToolResolver a CommandRunner slouží pouze nástrojům pro porovnávání: generátoru matice funkcí, testovacímu rámci benchmarků a testovacímu rámci oracle. Greph::search*(), Greph::rewriteAst(), tvůrci indexů a čtyři spustitelné soubory je nikdy nevolají.
Fond pracovních procesů kontroluje function_exists('pcntl_fork') před vytvořením nového procesu. Funkce uvedená v disable_functions podle PHP neexistuje, takže na takovém hostiteli se každý blok zpracuje v aktuálním procesu se stejným výsledkem jako -j 1. Viz Paralelní pracovní procesy.
Když jsou všechny funkce proc_open, shell_exec, exec, system, passthru, popen a pcntl_fork zakázané, vyhledávání textu pomocí jobs: 4, přepisování AST, greph-index build, greph-index ast-cache build a search i obaly rg a sg fungují normálně.
Pomocné nástroje bez procesů
Pokud do takového hostitele vkládáte pomocné nástroje pro porovnávání, vytvořte je s výslovnou zásadou zakazující procesy:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Tyto instance při chybě bezpečně selžou: každé vyhledání nebo příkaz vyvolá RuntimeException místo pokusu spustit proces.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Předejte je všude, kde se přijímá ToolResolver nebo CommandRunner, například jako argumenty toolResolver: a commandRunner: v Greph\FeatureMatrix\FeatureMatrixGenerator. Generátor se pak dokončí bez spuštění procesu, ale nedokáže vytvořit užitečný report: sondy vůči nástrojům upstream se označí jako Unavailable a sondy spouštějící vlastní spustitelné soubory Greph jako Fail, protože každá sonda je příkaz. Generujte matici funkcí na počítači, který dovoluje spouštět procesy.