proc_open inaccessible cwd behavior change in 8.3
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 96
Descripción
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)
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comience ejecutando la reproducción proporcionada de proc_open() y proc_close() en Ubuntu con PHP 8.3, usando el cwd inaccesible y comparando los resultados locales con los de GitHub CI. Rastree el comportamiento de proc_open() alrededor del fallo de posix_spawn(), luego defina el comportamiento esperado de deprecación o fallo y añada cobertura para los resultados diferentes.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, php
- Área
- operating-systems
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100