İçeriğe geç

Süreç Kısıtlı Sunucular

Paylaşımlı barındırma, güvenliği sıkılaştırılmış kapsayıcılar ve bazı PaaS platformları, disable_functions üzerinden süreç işlevlerini devre dışı bırakır. Greph arama, yeniden yazma ve dizin işlemlerini PHP sürecinde yürütür (paralel taramalar mümkün olduğunda bu sürecin çalışan kopyalarını oluşturur); bu nedenle bu ortamlarda çalışmaya devam eder.

Süreç başlatanlar

Kod İşlev Kullanım amacı
Greph\Support\ToolResolver shell_exec() Harici grep, rg, sg (veya npm) ve gh ikili dosyalarını PATH üzerinde bulma
Greph\Support\CommandRunner proc_open() Bu ikili dosyaları ve Greph çalıştırılabilir dosyalarını alt süreçler olarak çalıştırma
Greph\Parallel\WorkerPool pcntl_fork() -j N / jobs: N için paralel çalışanlar

ToolResolver ve CommandRunner yalnızca karşılaştırma araçları tarafından kullanılır: özellik matrisi oluşturucu, kıyaslama çatısı ve doğruluk testi çatısı. Greph::search*(), Greph::rewriteAst(), dizin oluşturucular ve dört çalıştırılabilir dosya bunları hiçbir zaman çağırmaz.

Çalışan havuzu, süreç oluşturmadan önce function_exists('pcntl_fork') değerini denetler. disable_functions içinde listelenen bir işlev, PHP açısından mevcut değildir; bu nedenle böyle bir sunucuda her parça, -j 1 ile aynı sonucu verecek şekilde işlem içinde çalışır. Paralel Çalışanlar bölümüne bakın.

proc_open, shell_exec, exec, system, passthru, popen ve pcntl_fork tümüyle devre dışı olsa da jobs: 4 ile metin araması, AST yeniden yazma, greph-index build, greph-index ast-cache build ve search ile rg ve sg sarmalayıcıları normal şekilde çalışır.

Süreçlerin devre dışı olduğu yardımcılar

Karşılaştırma yardımcılarını böyle bir sunucuya yerleştirirken, süreçlerin devre dışı olduğu bir ilkeyi açıkça belirterek oluşturun:

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

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

Bu örnekler güvenli biçimde başarısız olur: her arama veya komut, süreç başlatmayı denemek yerine bir RuntimeException hatası fırlatır.

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

Bunları ToolResolver veya CommandRunner kabul edilen her yerde, örneğin Greph\FeatureMatrix\FeatureMatrixGenerator öğesinin toolResolver: ve commandRunner: argümanlarında kullanın. Oluşturucu böylece süreç başlatmadan tamamlanır ancak yararlı bir rapor üretemez: yukarı akış araçlarına yönelik yoklamalar Unavailable, Greph aracının kendi çalıştırılabilir dosyalarını çalıştıran yoklamalar ise Fail olarak raporlanır; çünkü her yoklama bir komuttur. özellik matrisi öğesini süreçlere izin verilen bir makinede oluşturun.