php / php/php-src

proc_open inaccessible cwd behavior change in 8.3

Ouverte
#13,743 18 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Category: Program Execution Extension: standard
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

As of PHP8.3, the following code:

<?php
$descriptorspec = array();
$cwd = '/inaccessible/dir/';
$process = proc_open('/usr/bin/env php -r ""', $descriptorspec, $pipes, $cwd);
proc_close($process);

Resulted in this output:

PHP Warning:  proc_open(): posix_spawn() failed: No such file or directory in /home/hans/test/test.php on line 4
PHP Fatal error:  Uncaught TypeError: proc_close(): Argument #1 ($process) must be of type resource, false given in /home/hans/test/test.php:5
Stack trace:
#0 /home/hans/test/test.php(5): proc_close()
#1 {main}
  thrown in /home/hans/test/test.php on line 5

But in PHP<8.3, it results in no output whatsoever, and proc_open succeeds.

This behavior change breaks real code in the wild: https://github.com/chrome-php/wrench/pull/20

While I think the behavior change is good, I also think a E_DEPRECATED period is warranted, something like

Requesting an inaccessible working dir ($cwd) has been deprecated and will stop working in a future version of PHP

  • Also for some unknown reason, when I test this locally, i get the posix_spawn() error, but when I test on Github CI, i don't get the posix_spawn() error (but proc_open() still fails.. silently.)
PHP Version

PHP8.3.0

Operating System

Ubuntu (both 22.04 and 24.04-beta)

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction fournie de proc_open() et proc_close() sur Ubuntu avec PHP 8.3, en utilisant le cwd inaccessible et en comparant les résultats locaux à ceux de GitHub CI. Suivez le comportement de proc_open() autour de l’échec de posix_spawn(), puis définissez le comportement attendu en cas de dépréciation ou d’échec et ajoutez une couverture pour les résultats différents.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
c, php
Domaine
operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.