Pregunta

Tengo el siguiente código de trabajo:

$test = '123456';

$int = preg_match('/^\d+$/', $test, $matches);

print_r(array($int, $matches));

Sin embargo, cuando yo Ejecutarlo en CodePad Recibo el error:

Advertencia: preg_match (): Error interno de pcre_fullinfo () -3 en la línea 5

Pero el código se ejecuta en mi propia máquina (y el código debería estar bien en mi humilde opinión).

Necesito distribuir mi código en el futuro para que fuera malo si se rompiera dependiendo de alguna configuración. Entonces, ¿cuál es la razón por la cual Codepad se rompe?

¿Fue útil?

Solución

El código ejecutado a través de Codepad se ejecuta en un entorno muy restringido:

La ejecución del código es manejada por un supervisor basado en Geordi. La estrategia es Ejecute todo en Ptrace, con muchas llamadas del sistema no permitidas o ignoradas. Los compiladores y los ejecutables finales se ejecutan en una cárcel de chroot, con estrictos límites de recursos. El supervisor está escrito en Haskell.

Si bien no es nada que esperarías romper un motor regex, es muy posible que la biblioteca PCRE use algo internamente que esté bloqueado por el entorno Codepad. Ningún sistema de producción utiliza restricciones tan graves, por lo que debe ser seguro para usar ese código en su aplicación.

El código de error significa "PCRE_ERROR_BADOPTION: el valor de qué no fue válido ". Sin embargo, el código en la fuente de PHP donde ocurre el error es rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); que usa una constante para qué. Por lo tanto, significa claramente que la biblioteca PCRE está rota en Codepad.

Si quisiera estar completamente seguro, podría escribir un pequeño programa C que use libpcre para llamar a esa función en la misma regex.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top