только сегодня утром я обновил свой сервер Debian до php 5.3.9 , в журнале изменений (последний элемент в списке) есть исправление для этой ошибки, и теперь при запуске любого размещенного сайта с использованием XSL-преобразований я получаю:

Warning: XSLTProcessor::transformToXml(): Can't set libxslt security properties, not doing transformation for security reasons

Я не использую теги <sax:output> в моем xslt вообще.

У кого-нибудь есть какая-либо информация по этому поводу, нынешняя болтовня о ней невелика, так что я немного растерялся.

Используя предложение о включении и выключении настроек ini по обе стороны от -> transformToXml():

ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)

или же

$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)

возвращает меня к той же ошибке

Большое спасибо.

Прогресс:
- Обновление libxml и перекомпиляция libxslt для новой версии было хорошим предложением, хотя и не устранило проблему.
- Компиляция последнего снимка php5.3 не решает проблему.

Решение:
Я не уверен, что на самом деле решило эту проблему, очень жаль, что у кого-то есть такая же проблема. сначала я обновил libxml, затем применил несколько патчей, затем зашел в исходный код php для парсера xsl и добавил некоторые отладки и несколько настроек, после нескольких компиляций, получивших правильные аргументы конфигурации, ошибка исчезла и не воспроизводилась.
Я определенно рекомендую обновить libxml, как предложил Петр ниже, а затем получить последний снимок с php.net.

2 ответа2

2

Я хотел бы, чтобы это было лучше задокументировано (см. Php bug # 61233), но из исходного кода похоже, что имя метода для PHP 5.4+ - это "setSecurityPrefs" вместо "setSecurityPreferences", а константа - "XSL_SECPREF_NONE" вместо "XSL_SECPREFS_NONE" (в отличие от того, что вы можете прочитать в комментарии к ошибке # 54446). Хотя я бы предпочел использовать 0 на случай, если они передумают об написании.

Прямо сейчас я пытаюсь что-то вроде этого:

    if (version_compare(PHP_VERSION, '5.4', '<')) {
        $oldval = ini_get('xsl.security_prefs');
        if ($oldval != '0') {
            $oldval = ini_set('xsl.security_prefs', '0');
            if ($oldval === false)
                ;//manage the error
        }
    } else
        $oldval = $xsltproc->setSecurityPrefs(0);

и после преобразования:

    if ($oldval != 0 && $oldval != '0') {
        if (version_compare(PHP_VERSION, '5.4', '<'))
            ini_set('xsl.security_prefs', $oldval);
        else
            $xsltproc->setSecurityPrefs($oldval);
    }
0

Попробуйте обновить расширение libxml. (2.7.7 -> 2.7.8, возможно, решили проблему в моем случае)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .