PHP 7.4:ssä tai uudemmassa pidä komennon argumentit ja aliprosessin ympäristö erillään:

$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 ja $descriptorSpec tulevat sovelluksen nykyisestä tulosteen käsittelystä. Tarkista epäonnistunut käynnistys, hallinnoi putkia ja sulje prosessi tämän elinkaaren kautta.

array_replace(getenv(), ...) säilyttää pääympäristön ja korvaa nämä kaksi arvoa aliprosessille. Tarkista perityt isoilla kirjaimilla kirjoitetut välityspalvelin- ja ohitusmuuttujat, kun ne voivat muuttaa aiottua reittiä.

Argumenttitaulukko estää kuorta tulkitsemasta tunnistetietojen ampersand-merkkejä, dollarimerkkejä tai välilyöntejä. Kuorikomennossa ei ole yhtään tiliä kantavaa määritystä.

Tämä esimerkki valitsee curlin, koska se tukee näytettyjä muuttujia. Osoite HTTP-välityspalvelinluettelosta voi täyttää nämä ympäristöarvot julkiselle HTTP-reitille. Toinen suoritettava tiedosto tarvitsee oman tuetun välityspalvelinrajapintansa; PHP:n omat cURL-asetukset eivät määritä tätä ulkoista ohjelmaa.

Aiheeseen liittyvät artikkelit