Procesbegrænsede værter
Delt hosting, hærdede containere og nogle PaaS-platforme deaktiverer procesfunktioner via disable_functions. Grephs søge-, omskrivnings- og indekseringsoperationer kører i PHP-processen (parallelle scanninger forgrener arbejdskopier af den, når de kan), så de fungerer fortsat dér.
Hvad starter processer
| Kode | Funktion | Bruges til |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
At finde de eksterne grep-, rg-, sg- (eller npm-) og gh-binærfiler på PATH |
Greph\Support\CommandRunner |
proc_open() |
At køre disse binærfiler og Greph-eksekverbare filer som underprocesser |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Parallelle arbejdere til -j N / jobs: N |
ToolResolver og CommandRunner bruges kun af sammenligningsværktøjerne: generatoren til funktionsmatrixen, benchmarkværktøjet og oracle-testværktøjet. Greph::search*(), Greph::rewriteAst(), indeksbyggerne og de fire eksekverbare filer kalder dem aldrig.
Arbejderpuljen kontrollerer function_exists('pcntl_fork'), før den forgrener processen. En funktion, der er angivet i disable_functions, findes ikke set fra PHPs perspektiv, så på en sådan vært kører hver del i processen med samme resultat som -j 1. Se Parallelle arbejdere.
Når proc_open, shell_exec, exec, system, passthru, popen og pcntl_fork alle er deaktiveret, fungerer tekstsøgning med jobs: 4, AST-omskrivning, greph-index build, greph-index ast-cache build og search samt wrapperne rg og sg stadig normalt.
Hjælpefunktioner uden procesadgang
Når du indlejrer sammenligningshjælperne på en sådan vært, skal du oprette dem med en udtrykkelig politik uden procesadgang:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Disse instanser fejler lukket: hvert opslag eller hver kommando udløser en RuntimeException i stedet for at forsøge at starte en proces.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Videregiv dem, hvor der accepteres en ToolResolver eller CommandRunner, for eksempel argumenterne toolResolver: og commandRunner: for Greph\FeatureMatrix\FeatureMatrixGenerator. Generatoren fuldføres derefter uden at starte en proces, men kan ikke producere en brugbar rapport: sonder mod de opstrøms værktøjer rapporteres som Unavailable, og sonder, der kører Grephs egne eksekverbare filer, som Fail, fordi hver sonde er en kommando. Generér funktionsmatrixen på en maskine, der tillader processer.