Tente atualizar sua extensão libxml. (2.7.7 - > 2.7.8 pode ter resolvido o problema no meu caso)
apenas esta manhã eu atualizei meu servidor debian para php 5.3.9 , log de alterações (último item na lista) tem uma correção para este bug e agora ao executar qualquer site hospedado usando transformações XSL eu recebo:
Warning: XSLTProcessor::transformToXml(): Can't set libxslt security properties, not doing transformation for security reasons
Eu não estou usando nenhuma tag <sax:output>
no meu xslt.
Alguém tem alguma informação sobre isso, a conversa atual sobre isso é magra, então eu estou um pouco perdido.
Usando a sugestão sobre como ativar e desativar as configurações ini em ambos os lados de - > transformToXml ():
ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)
ou
$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)
me traz de volta ao mesmo erro
Muito obrigado.
Progresso:
- Atualizar a libxml e recompilar a libxslt contra a nova versão foi uma boa sugestão, embora não tenha corrigido o problema.
- Compilar o último snapshot do php5.3 não corrige o problema.
Solução:
Não tenho certeza do que realmente resolveu isso, sinto muito por mais alguém ter o mesmo problema. Primeiramente eu atualizei o libxml, então apliquei alguns patches, então entrei no php source para o analisador xsl e adicionei algumas depurações e alguns tweaks, depois de algumas compilações recebendo os argumentos de configuração corretamente o erro desapareceu e não foi reproduzível. >
Eu recomendaria definitivamente atualizar o libxml como sugerido por Petr abaixo e depois pegar o último snapshot do php.net.
Eu gostaria que isso fosse melhor documentado (veja php bug # 61233), mas pelo código fonte parece que o nome do método para o PHP 5.4+ é "setSecurityPrefs" ao invés de "setSecurityPreferences" e a constante é "XSL_SECPREF_NONE" ao invés de "XSL_SECPREFS_NONE" (ao contrário do que você pode ler em um comentário para o bug # 54446). Em vez disso, eu prefiro usar 0 caso eles mudem de ideia sobre a ortografia.
Agora mesmo estou tentando algo assim:
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);
e depois da transformação:
if ($oldval != 0 && $oldval != '0') {
if (version_compare(PHP_VERSION, '5.4', '<'))
ini_set('xsl.security_prefs', $oldval);
else
$xsltproc->setSecurityPrefs($oldval);
}