En un proyecto en el que estoy trabajando, xdebug tarda aproximadamente 1 hora en generar cobertura. He experimentado con phpdbg , pero encuentro el siguiente error en mi conjunto de pruebas:
stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE. It is set to 1024, but you have descriptors numbered at least as high as 7228. --enable-fd-setsize=8192 is recommended, but you may want to set it to equal the maximum number of open files supported by your system, in order to avoid seeing this error again at a later date. Estoy usando php:7.0.33-fpm (sí, lo sé, estamos trabajando para actualizar las versiones de PHP :))
Usando ulimit en la línea de comando o confiando en docker-compose para configurarlo , la salida todavía cree que está configurada en 1024. En realidad, la salida actual de ulimit -n dentro de mi contenedor es más de 1 millón si no intento configurar a través de otro mecanismo.
¿Hay algún mecanismo en el que esto se pueda configurar a través del tiempo de ejecución sin tener que compilar nuestro propio contenedor php desde cero?
Esta advertencia se puede activar con el siguiente fragmento de PHP:
<?php $fds = []; for ($i = 0; $i < PHP_FD_SETSIZE; $i++) { // PHP_FD_SETSIZE how FD_SETSIZE is exposed to userland $fds[] = fopen(__FILE__, 'r'); } $read = $fds; $write = []; $except = []; echo sprintf("FD_SETSIZE=%d", PHP_FD_SETSIZE) . "\n"; stream_select($read, $write, $except, 0); /* * Warning: stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE. * It is set to 1024, but you have descriptors numbered at least as high as 1027. * --enable-fd-setsize=2048 is recommended, but you may want to set it * to equal the maximum number of open files supported by your system, * in order to avoid seeing this error again at a later date. in /in/ZfBsg on line 14 */FD_SETSIZE es una constante definida por POSIX (consulte la página de manual de select(2) ). Si bien la advertencia lo lleva a creer que esta advertencia puede mitigarse recompilando php con --enable-fd-setsize=[algún valor más grande], esto no es cierto. FD_SETSIZE no se puede cambiar en tiempo de ejecución, ya que su valor se determina al compilar el núcleo.
Miré el código fuente de PHP por un momento y no estoy seguro de por qué existe --enable-fd-setsize, ya que no parece hacer nada (aunque no probé esto en Windows).
Las únicas soluciones a este problema parecen ser: