Gå til indhold

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:

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

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