본문으로 건너뛰기

프로세스 제한 호스트

공유 호스팅, 보안이 강화된 컨테이너 및 일부 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(), 인덱스 빌더 및 네 가지 실행 파일은 이를 호출하지 않습니다.

작업자 풀은 포크하기 전에 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로 보고됩니다. 프로세스 실행이 허용되는 머신에서 기능 매트릭스를 생성하세요.