Transmettre un environnement proxy à une commande enfant PHP
Utilisez l'environnement séparé et le tableau d'arguments de proc_open pour un seul téléchargeur, en préservant délibérément les valeurs héritées.
Pour PHP 7.4 ou version ultérieure, gardez les arguments de la commande et l'environnement du processus enfant séparés :
$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 et $descriptorSpec proviennent de la gestion de sortie existante de l'application. Vérifiez un échec de lancement, gérez les tubes et fermez le processus au cours de ce cycle de vie.
array_replace(getenv(), ...) préserve l'environnement parent tout en remplaçant ces deux valeurs pour l'enfant. Vérifiez les variables héritées de proxy et de contournement en majuscules lorsqu'elles pourraient modifier l'itinéraire prévu.
Le tableau d'arguments empêche un shell d'interpréter les ampersands, les signes dollar ou les espaces des identifiants. Aucune affectation porteuse de compte n'est intégrée à une commande shell.
Cet exemple choisit curl car il prend en charge les variables indiquées. Une adresse issue de la liste de proxys HTTP peut renseigner ces valeurs d'environnement pour une route HTTP publique. Un autre exécutable a besoin de sa propre interface proxy prise en charge ; les options cURL de PHP ne configurent pas ce programme externe.