Preskočiť na obsah

Hostitelia s obmedzenými procesmi

Zdieľaný hosting, zabezpečené kontajnery a niektoré platformy PaaS zakazujú procesové funkcie prostredníctvom disable_functions. Vyhľadávanie, prepisovanie a indexovanie v Greph prebieha v procese PHP (paralelné skenovania vytvárajú jeho pracovné kópie, keď je to možné), takže tam naďalej fungujú.

Čo spúšťa procesy

Kód Funkcia Použitie
Greph\Support\ToolResolver shell_exec() Vyhľadanie externých binárnych súborov grep, rg, sg (alebo npm) a gh v systéme PATH
Greph\Support\CommandRunner proc_open() Spúšťanie týchto binárnych súborov a spustiteľných súborov Greph ako podprocesov
Greph\Parallel\WorkerPool pcntl_fork() Paralelní pracovníci pre -j N / jobs: N

ToolResolver a CommandRunner slúžia iba na porovnávacie nástroje: generátor matice funkcií, testovací nástroj benchmarkov a testovací nástroj oracle. Greph::search*(), Greph::rewriteAst(), zostavovače indexov a štyri spustiteľné súbory ich nikdy nevolajú.

Fond pracovníkov pred vytvorením procesu skontroluje function_exists('pcntl_fork'). Funkcia uvedená v disable_functions z pohľadu PHP neexistuje, takže na takomto hostiteľovi sa každý blok spracuje v rámci procesu, rovnako ako v -j 1. Pozrite si Paralelní pracovníci.

Keď sú proc_open, shell_exec, exec, system, passthru, popen a pcntl_fork zakázané, textové vyhľadávanie pomocou jobs: 4, prepisovanie AST, greph-index build, greph-index ast-cache build a search, ako aj obaly rg a sg fungujú normálne.

Pomocné nástroje bez procesov

Ak vkladáte porovnávacie pomocné nástroje do takéhoto hostiteľa, vytvorte ich s výslovnou politikou bez procesov:

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

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

Tieto inštancie pri zlyhaní postupujú bezpečne: každé vyhľadanie alebo príkaz vyvolá RuntimeException namiesto pokusu spustiť proces.

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

Odovzdajte ich všade tam, kde sa prijíma ToolResolver alebo CommandRunner, napríklad ako argumenty toolResolver: a commandRunner: v Greph\FeatureMatrix\FeatureMatrixGenerator. Generátor sa potom dokončí bez spustenia procesu, ale nedokáže vytvoriť užitočný report: kontroly nadväzujúcich nástrojov sa označia ako Unavailable a kontroly spúšťajúce vlastné spustiteľné súbory Greph ako Fail, pretože každá kontrola je príkaz. Matice funkcií vygenerujte na počítači, ktorý povoľuje spúšťanie procesov.