proc_open inaccessible cwd behavior change in 8.3
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.2k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
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)
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie damit, die bereitgestellte Reproduktion mit proc_open() und proc_close() unter Ubuntu mit PHP 8.3 auszuführen, wobei Sie das nicht zugängliche cwd verwenden und die lokalen Ergebnisse mit den Ergebnissen von GitHub CI vergleichen. Verfolgen Sie das Verhalten von proc_open() rund um den Fehler von posix_spawn(), definieren Sie anschließend das erwartete Deprecation- oder Fehlerverhalten und fügen Sie Tests für die unterschiedlichen Ergebnisse hinzu.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, php
- Bereich
- operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100