Подтвердить что ты не робот

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

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

$test = '123456';

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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