コンテンツへスキップ

プロセスが制限されたホスト

共有ホスティング、強化されたコンテナ、一部のPaaSプラットフォームでは、disable_functionsを通じてプロセス関数が無効になっています。Grephの検索、書き換え、インデックス操作はPHPプロセス内で実行されるため、その環境でも動作します(並列スキャンでは可能な場合にワーカープロセスをフォークします)。

プロセスを起動する処理

コード 関数 用途
Greph\Support\ToolResolver shell_exec() PATH上で外部のgrep、rg、sg(またはnpm)およびghのバイナリを特定する
Greph\Support\CommandRunner proc_open() これらのバイナリとGreph実行ファイルをサブプロセスとして実行する
Greph\Parallel\WorkerPool pcntl_fork() -j N / jobs: N用の並列ワーカー

ToolResolverとCommandRunnerは、比較ツール、つまり機能マトリクス生成ツール、ベンチマークハーネス、オラクルテストハーネスでのみ使用されます。Greph::search*()、Greph::rewriteAst()、インデックスビルダー、および4つの実行ファイルはこれらを呼び出しません。

ワーカープールはフォークする前にfunction_exists('pcntl_fork')を確認します。disable_functionsに記載された関数はPHPからは存在しないものとして扱われるため、そのようなホストでは各チャンクがプロセス内で実行され、-j 1と同じ結果になります。並列ワーカーを参照してください。

proc_open、shell_exec、exec、system、passthru、popen、pcntl_forkをすべて無効にしても、jobs: 4を使ったテキスト検索、AST書き換え、greph-index build、greph-index ast-cache build、search、およびrgとsgのラッパーはすべて通常どおり動作します。

プロセス無効時のヘルパー

このようなホストに比較ヘルパーを組み込む場合は、プロセス無効ポリシーを明示して構築してください。

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

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

これらのインスタンスは安全側に倒して失敗します。検索やコマンドを実行すると、プロセスの起動を試みずにRuntimeExceptionをスローします。

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

ToolResolverまたはCommandRunnerを受け取る場所ならどこでも渡せます。たとえば、Greph\FeatureMatrix\FeatureMatrixGeneratorのtoolResolver:およびcommandRunner:引数です。これにより生成ツールはプロセスを起動せずに完了しますが、有用なレポートは生成できません。上流ツールへのプローブはUnavailableとして報告され、Greph自身の実行ファイルを実行するプローブはFailとして報告されます。すべてのプローブがコマンドだからです。プロセスを許可するマシンで機能マトリクスを生成してください。