Treci la conținut

Gazde cu procese restricționate

Găzduirea partajată, containerele securizate și unele platforme PaaS dezactivează funcțiile de proces prin disable_functions. Operațiile de căutare, rescriere și indexare ale Greph rulează în procesul PHP (scanările paralele creează copii worker ale acestuia când pot), așa că funcționează în continuare în aceste medii.

Ce pornește procese

Cod Funcție Utilizare
Greph\Support\ToolResolver shell_exec() Localizarea binarelor externe grep, rg, sg (sau npm) și gh pe PATH
Greph\Support\CommandRunner proc_open() Rularea acelor binare și a executabilelor Greph ca subprocese
Greph\Parallel\WorkerPool pcntl_fork() Workeri paraleli pentru -j N / jobs: N

ToolResolver și CommandRunner sunt folosite doar de instrumentele de comparare: generatorul matricei de funcționalități, cadrul de benchmark și cadrul de testare oracle. Greph::search*(), Greph::rewriteAst(), constructorii de indexuri și cele patru executabile nu le apelează niciodată.

Pool-ul de workeri verifică function_exists('pcntl_fork') înainte de a crea procese. O funcție listată în disable_functions nu există din perspectiva PHP, așa că pe o astfel de gazdă fiecare fragment rulează în proces, cu același rezultat ca -j 1. Consultați Workeri paraleli.

Cu proc_open, shell_exec, exec, system, passthru, popen și pcntl_fork toate dezactivate, căutarea textului cu jobs: 4, rescrierea AST, greph-index build, greph-index ast-cache build și search, precum și wrapper-ele rg și sg funcționează normal.

Ajutoare pentru modul fără procese

Când încorporați ajutoarele de comparare într-o astfel de gazdă, construiți-le cu o politică explicită fără procese:

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

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

Aceste instanțe eșuează în siguranță: fiecare căutare sau comandă aruncă o RuntimeException în loc să încerce să pornească un proces.

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

Transmiteți-le oriunde este acceptat un ToolResolver sau CommandRunner, de exemplu ca argumente toolResolver: și commandRunner: ale Greph\FeatureMatrix\FeatureMatrixGenerator. Generatorul se încheie fără să pornească un proces, dar nu poate produce un raport util: verificările instrumentelor din amonte sunt raportate ca Unavailable, iar cele care rulează executabilele proprii ale Greph ca Fail, deoarece fiecare verificare este o comandă. Generați matricea de funcționalități pe o mașină care permite procesele.