PHP 7.4 이상에서는 명령 인수와 자식 프로세스의 환경을 분리해 두십시오.

$environment = array_replace(getenv(), [
    'http_proxy' => 'http://proxy.example:8080',
    'https_proxy' => 'http://proxy.example:8080',
]);

$process = proc_open(
    ['/usr/bin/curl', '--fail', '--max-time', '30',
     '--output', $outputFile, 'https://downloads.example/data.csv'],
    $descriptorSpec,
    $pipes,
    null,
    $environment
);

$outputFile 와 $descriptorSpec는 애플리케이션의 기존 출력 처리에서 가져옵니다. 실행 실패 여부를 확인하고, 파이프를 관리하며, 그 수명 주기에 따라 프로세스를 닫으십시오.

array_replace(getenv(), ...) 부모 환경을 유지하면서 자식 프로세스에 대해 이 두 값을 교체합니다. 상속된 대문자 프록시 및 우회 변수가 의도한 경로를 바꿀 수 있는 경우 검토하십시오.

인수 배열은 셸이 자격 증명의 앰퍼샌드, 달러 기호, 공백을 해석하지 못하게 합니다. 셸 명령에 계정을 담은 할당이 삽입되지 않습니다.

이 예제는 표시된 변수를 지원하기 때문에 curl을 선택합니다. HTTP 프록시 목록의 주소로 공용 HTTP 경로에 필요한 해당 환경 값을 채울 수 있습니다. 다른 실행 파일은 자체적으로 지원되는 프록시 인터페이스가 필요합니다. PHP 자체의 cURL 옵션은 그 외부 프로그램을 구성하지 않습니다.

관련 글