Autor Tópico: An error has occurred-Call to undefined method JApplicationAdministrator::isClie  (Lida 34 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline candidosa2

  • Suporte Tecnico
  • Fundador
  • *
  • Mensagens: 4816
  • Sexo: Masculino
  • Suporte
    • Hosting Moçambique

Um novo cliente nos abordou ontem e nos disse que eles estavam vendo uma página em branco no frontend e no back-end de seu site Joomla depois de atualizá-la para a versão 3.8.0. Como uma página em branco é um sinal de erro fatal, definimos o relatório de erros no site do cliente como "máximo" no arquivo configuration.php e verificamos o frontend do site, que mostrava o seguinte:


Erro fatal: Chame para o método indefinido JApplicationSite :: isClient () em /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94


O back-end do website estava exibindo o seguinte erro:


Erro fatal: Chame para o método indefinido JApplicationAdministrator :: isClient () em /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94


(Nota: Ativar a depuração exibiu o seguinte erro no backend e no front do site Joomla: Erro fatal: Chame para o método indefinido JProfiler :: setStart () em / home / [cpanel-user] / public_html / administrator / index. php na linha 45)


Se olhar de perto os erros acima, notará que o problema é que 2 classes básicas do Joomla, JApplicationSite e JApplicationAdministrator, não estão sendo carregadas. Mas por que?


Nós investigamos o problema muito bem. Analisamos todos os ficheiros que foram usados ​​para carregar classes principais ou suportamos o carregamento de classes principais, notavelmente os seguintes 2 arquivos:


O ficheiro loader.php que está localizado sob as bibliotecas / cms / class / folder.
O ficheiro ClassLoader.php que está localizado na pasta libraries / vendor / composer.
Não conseguimos encontrar nada.


Nós então pensamos que poderia ser um problema com a versão do PHP que o cliente estava usando, que era o PHP 5.4, e então nós mudamos para 5.6, e depois para 7.0, e depois para 7.1. Nenhum funcionou!


Então começamos a pensar sobre o ambiente de alojamento, poderia ser? Bem, o cliente estava usando o GoDaddy, o que deve fazer com que qualquer desenvolvedor decente fique um pouco cético no mínimo (na verdade, podemos culpar o GoDaddy pela onda de calor que estamos tendo agora em Maputo e todos acreditariam em nós! ). Então, nós copiamos o site para um dos nossos servidores, e testamos lá. O mesmo problema exato!


Eventualmente, decidimos copiar uma nova cópia do Joomla 3.8 para o site. Então, nós baixamos o Joomla 3.8, então removemos as imagens e a pasta templates do arquivo zip baixado, extraímos o ficheiro  zip para o site, e tentamos carregar o site, ainda, o mesmo erro.


Então, de repente, nos atingiu, e se o problema é semelhante a este outro problema que resolvemos há um tempo atrás, que foi causado pelo Joomla carregando arquivos de biblioteca antigos em vez dos novos? Então, nós renomeamos a pasta de bibliotecas existentes para libraries_old e copiamos uma nova cópia da pasta de bibliotecas para o site (do arquivo zip do Joomla 3.8 que acabamos de baixar) e então testamos. Desta vez deu certo!


Aha! Então, o problema foi causado pelo (s) ficheiro (s) de biblioteca errado (s) sendo carregado (s)? Mas qual (is)? Estávamos determinados a descobrir a resposta para nossa pergunta, então, nós imprimimos todos os arquivos incluídos no site fixo, e então, revertíamos e imprimíamos todos os arquivos incluídos no site quebrado, e comparamos a lista de ficheiros.


Havia, de fato, muitos, muitos arquivos que foram incluídos dos lugares errados no site quebrado do Joomla. Por exemplo, o ficheiro factory.php foi incluído na pasta libraries / joomla, em vez da pasta libraries / src. Também havia muitos ficheiros incluídos na pasta libraries / cms, e esses ficheiros foram incluídos em pastas que não deveriam mais existir na pasta libraries / cms. De fato, a pasta libraries / cms no Joomla 3.8 possui apenas 3 pastas dentro dele (o Joomla 3.7.5 possui 30 pastas dentro da pasta libraries / cms).


Parece que o cliente atualizou o site manualmente (por exemplo, sobrescrevendo os ficheiros de uma nova instalação do Joomla), ou o cliente atualizou o site do back-end, mas de um site antigo do Joomla onde o processo de atualização não inclui a remoção desses ficheiros / pastas da biblioteca. Em qualquer caso, achamos que o problema é realmente causado pelo Joomla, que deve levar em consideração qualquer cenário de atualização. O problema também é irônico, uma vez que destaca o fato de que há uma grande mudança na estrutura de arquivos do Joomla 3.8, contradizendo completamente uma afirmação de um desenvolvedor do Joomla de que “a diferença do 3.7.5 é relativamente pequena”.


Então, se está vendo o erro Call for undefined method JApplicationSite :: isClient () no seu site Joomla, tente renomear a pasta libraries para libraries_old e então copie a pasta libraries de uma nova instalação do Joomla 3.8. Se isso não funcionar ou se você estiver vendo um erro diferente, entre em contato. Estamos sempre prontos para ajudar, nossos honorários são muito razoáveis, e nós realmente amamos trabalhar em sites Joomla!