php / php/php-src

proc_open inaccessible cwd behavior change in 8.3

Abierto
#13,743 18 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Category: Program Execution Extension: standard
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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.