Eu uso bastante a diretiva virtual()
do PHP em um dos meus sites, incluindo elementos centrais. Isso funcionou bem durante os últimos ~ 10 anos - mas depois de atualizar (ou melhor, mover-se, como está em uma nova máquina) para o Ubuntu 12.04, ele de alguma forma quebrou.
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é terminou 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 um "último ressort", mudei o comando PHP para <? virtual("central/foobar.html"); ?>
- e esse mesmo arquivo foi de fato incluído. Portanto, a função virtual()
do PHP basicamente funcionou - mas o material dependente da linguagem obviamente não funcionava mais como antes.
Como a "tagarelice binária" mencionada acima me deixou curioso, copiei e colei em um arquivo chamado foo.gz
e executei gzip -d foo.gz
. Como já se suspeitava, isso não gerou nenhuma mensagem de erro (embora a saída ainda fosse algo sem sentido - apenas um jargão diferente). Comparando o /etc/apache2/mods-enabled
em minha nova máquina com uma configuração semelhante em uma máquina mais antiga, o mod_deflate
foi ativado na nova máquina. Então eu removi isso dos mods habilitados (simplesmente apagando os links simbólicos), o problema do Apache ... recarregado parecia resolvido: o virtual
do PHP agora incluía a variante correta do idioma. Mas o Firefox agora se recusa a exibir os conjuntos de quadros (se a chamada virtual()
estivesse na parte alternativa), mas simplesmente se comporta como se não suportasse mais - embora eles apareçam bem na fonte ( Ctrl - U - mas com o conteúdo do arquivo "virtual" incluído movido na frente da tag <HEAD>
!). Tentando novamente com o nome completo do arquivo em virtual("central/foobar.html")
, o conjunto de quadros foi interpretado corretamente novamente (e o conteúdo incluído está no lugar correto).
Estou totalmente confuso agora.
Claro que tentei encontrar alguma mudança, 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 ...