Eu uso bastante a diretiva virtual()
do PHP em um dos meus sites, incluindo elementos centrais. Isso funcionou bem nos últimos 10 anos - mas depois de atualizar para o 12.04, de alguma forma ele foi quebrado.
Exemplo de configuração (simplificado)
Para facilitar o entendimento, simplifico algumas coisas (conteúdo). Então, eu digo que preciso de um fragmento HTML como <P>For further instructions, please look <A HREF='foobar'>here</P>
em várias páginas. 10 anos atrás, eu usei o SSI para isso, então ele é colocado em um arquivo em um lugar central - então se, por exemplo, as alterações de URL segmentadas, eu só preciso atualizá-lo em um só lugar. Para servir vários idiomas, tenho o MultiViews
habilitado do Apache - e em $DOCUMENT_ROOT/central/
estão os arquivos:
-
foobar.html
(variante em inglês e o padrão)
-
foobar.html.de
(variante alemã).
Agora no código PHP, eu simplesmente coloquei:
<? virtual("/central/foobar"); ?>
e deixe o Apache tomar cuidado para entregar a variante de idioma correta.
O problema
Como dito, isso funcionou bem por cerca de 10 anos: os visitantes alemães obtiveram a variante alemã, todos os outros, o inglês (dependendo do idioma preferido). Mas depois de atualizar para o Ubuntu 12.04, ele não funcionou mais: ou nada foi entregue a partir do comando virtual()
, ou (em conexão com conjuntos de quadros) ele até acabou em código binário.
Tentando descobrir o que acontece, eu brinquei com muitas coisas. Primeiro, achei que MultiViews
não estava (de alguma forma) disponível, mas chamar http://<server>/central/foobar
mostrou a variante correta, dependendo das preferências de idioma configuradas. Isso também provou que não havia nada de errado com as permissões de arquivo. O error.log
também não deu pistas (nenhuma mensagem de erro foi lançada).
Finalmente, apenas como uma "última ressort", mudei o comando PHP para <? virtual("central/foobar.html"); ?>
- e esse mesmo arquivo foi de fato incluído. Mas as coisas dependentes da linguagem obviamente não funcionavam mais.
É claro que tentei encontrar alguma alteração (provavelmente no comando virtual()
do PHP), usando muito o Google e também pesquisando as questões aqui - infelizmente sem sucesso.
Finalmente: a questão
Colocando "questões de design" de lado (certamente hoje eu projetaria as coisas de forma diferente - mas pelo menos atualmente sinto falta do tempo para mudar isso para uma quantidade enorme de páginas): O que pode ser feito para que funcione de novo? Eu certamente perdi alguma coisa - mas não consigo descobrir o que ...
Adição (EDIT)
Meu problema remanescente agora é que, assim que o documento precisar ser negociado (por exemplo, tem diferentes variantes de idioma), virtual()
sempre adiciona o conteúdo no início do documento gerado (ou seja, na frente do <HTML>
tag) - independentemente de onde foi colocado. No entanto, é colocado corretamente quando nenhuma negociação está envolvida.
Alguma ideia do que está acontecendo lá e como consertá-lo?