Per a PHP 7.4 o posterior, manteniu separats els arguments de l'ordre i l'entorn del procés fill:

$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 i $descriptorSpec provenen del tractament de sortida existent de l'aplicació. Comproveu si l'inici ha fallat, gestioneu les canonades i tanqueu el procés durant aquest cicle de vida.

array_replace(getenv(), ...) conserva l'entorn pare mentre substitueix aquests dos valors per al fill. Reviseu les variables heretades de proxy i de bypass en majúscules quan puguin canviar la ruta prevista.

L'array d'arguments evita que un intèrpret d'ordres interpreti els ampersands, els signes de dòlar o els espais de les credencials. No hi ha cap assignació que aporti comptes incrustada en una ordre d'intèrpret.

Aquest exemple tria curl perquè admet les variables mostrades. Una adreça de la llista de proxys HTTP pot omplir aquests valors d'entorn per a una ruta HTTP pública. Un altre executable necessita la seva pròpia interfície de proxy compatible; les opcions cURL del propi PHP no configuren aquest programa extern.

Articles relacionats