Intereting Posts

Предупреждение: preg_match (): Внутренний pcre_fullinfo ()

У меня есть следующий рабочий код:

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

Однако, когда я выполняю его на кодовом коде, я получаю сообщение об ошибке:

Предупреждение: preg_match (): внутренняя ошибка pcre_fullinfo () -3 в строке 5

Но код работает на моей машине (и код должен быть в порядке IMHO).

Мне нужно распространять мой код в будущем, поэтому было бы плохо, если бы он сломался в зависимости от некоторой конфигурации. Так в чем причина, по которой колладод ломается?

Код, выполняемый с помощью кодека, работает в очень ограниченной среде:

Исполнение кода обрабатывается супервизором на основе geordi. Стратегия заключается в том, чтобы запускать все под управлением ptrace, при этом многие системные вызовы запрещены или игнорируются . Компиляторы и конечные исполняемые файлы выполняются в chroot-тюрьме со строгими ограничениями ресурсов. Надзор написан в Haskell.

Хотя вы ничего не ожидаете, чтобы разорвать механизм регулярных выражений, очень возможно, что библиотека pcre использует что-то внутренне, которое блокируется средой кодирования. Никакая система производства не использует такие жесткие ограничения, поэтому вы должны быть в безопасности, чтобы использовать этот код в своем приложении.

Код ошибки означает «PCRE_ERROR_BADOPTION – значение недопустимого». Однако код в источнике PHP, где происходит ошибка, – rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); который использует константу для чего . Таким образом, это явно означает, что библиотека pcre разбита на кодовое слово.

Если вы хотите быть в полной безопасности, вы можете написать небольшую программу на C, используя libpcre, чтобы вызвать эту функцию в том же регулярном выражении.