Với PHP 7.4 trở lên, hãy tách các đối số của lệnh và môi trường của tiến trình con:

$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 và $descriptorSpec đến từ phần xử lý đầu ra sẵn có của ứng dụng. Kiểm tra việc khởi chạy thất bại, quản lý các ống và đóng tiến trình theo vòng đời đó.

array_replace(getenv(), ...) giữ nguyên môi trường gốc trong khi thay hai giá trị này cho tiến trình con. Hãy rà soát các biến proxy và bỏ qua kế thừa viết hoa khi chúng có thể thay đổi tuyến đường dự kiến.

Mảng đối số ngăn shell diễn giải các dấu và, ký hiệu đô la hoặc khoảng trắng trong thông tin đăng nhập. Không có phép gán mang tài khoản nào được nhúng trong lệnh shell.

Ví dụ này chọn curl vì nó hỗ trợ các biến được hiển thị. Một địa chỉ từ danh sách proxy HTTP có thể điền các giá trị môi trường đó cho một tuyến HTTP công khai. Một tệp thực thi khác cần giao diện proxy được hỗ trợ của riêng nó; các tùy chọn cURL của chính PHP không cấu hình chương trình bên ngoài đó.

Bài viết liên quan