Zum Inhalt springen

Hosts mit Prozesseinschränkungen

Shared Hosting, gehärtete Container und einige PaaS-Plattformen deaktivieren Prozessfunktionen über disable_functions. Die Such-, Umschreib- und Indexoperationen von Greph laufen im PHP-Prozess (parallele Scans starten nach Möglichkeit Kopien davon als Worker) und funktionieren daher auch dort.

Was Prozesse startet

Code Funktion Verwendet für
Greph\Support\ToolResolver shell_exec() Auffinden der externen grep-, rg-, sg- (oder npm-) und gh-Binärdateien auf dem PATH
Greph\Support\CommandRunner proc_open() Ausführen dieser Binärdateien und der Greph-Programme als Unterprozesse
Greph\Parallel\WorkerPool pcntl_fork() Parallele Worker für -j N / jobs: N

ToolResolver und CommandRunner dienen ausschließlich den Vergleichswerkzeugen: dem Generator der Funktionsmatrix, dem Benchmark-Harness und dem Oracle-Test-Harness. Greph::search*(), Greph::rewriteAst(), die Index-Builder und die vier ausführbaren Programme rufen sie niemals auf.

Der Worker-Pool prüft function_exists('pcntl_fork'), bevor er einen Fork erstellt. Eine unter disable_functions aufgeführte Funktion existiert aus Sicht von PHP nicht. Auf einem solchen Host läuft daher jeder Chunk im selben Prozess und liefert dasselbe Ergebnis wie -j 1. Siehe Parallele Worker.

Wenn proc_open, shell_exec, exec, system, passthru, popen und pcntl_fork alle deaktiviert sind, laufen die Textsuche mit jobs: 4, AST-Rewrite, greph-index build, greph-index ast-cache build und search sowie die Wrapper für rg und sg normal weiter.

Hilfsfunktionen ohne Prozessausführung

Wenn du die Vergleichshelfer in einen solchen Host einbindest, erstelle sie mit einer Richtlinie, die Prozessausführung ausdrücklich deaktiviert:

PHP
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();

Diese Instanzen schlagen sicher fehl: Jede Suche oder jeder Befehl löst einen RuntimeException aus, statt einen Prozess zu starten.

Text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version

Übergib sie überall dort, wo ein ToolResolver oder CommandRunner akzeptiert wird, zum Beispiel als Argumente toolResolver: und commandRunner: von Greph\FeatureMatrix\FeatureMatrixGenerator. Der Generator wird dann ohne Prozessstart ausgeführt, kann aber keinen brauchbaren Bericht erstellen: Suchen in den vorgelagerten Werkzeugen werden als Unavailable gemeldet, Suchen, die die eigenen ausführbaren Programme von Greph aufrufen, als Fail, da jede Suche ein Befehl ist. Erzeuge die Funktionsmatrix auf einem Rechner, auf dem Prozesse gestartet werden dürfen.