Přejít k obsahu

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:

PHP
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.

Text
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.