StartPowiadomieniaDyskusyjna łatka w kodzie

Dyskusyjna łatka w kodzie polecany

Oceń ten artykuł
(0 głosów)

Dyskusję na polskim forum użytkowników wywołało stanowisko JoomlaTools zalecające wstrzymanie się z aktualizacją Joomla! w związku z dodaniem do kodu Joomla! pewnej funkcji - interesującej, acz powodującej czasem problemy. Zapraszamy do zapoznania się ze stanowiskiem JoomlaTools (uwaga! to nie jest oficjalne stanowisko joomla.org)

Oświadczenie JoomlaTools

Oficjalnie doradzamy naszym klientom i użytkownikom, aby nie aktualizowali Joomla! do wersji 1.5.16/1.5.17. Nowe wydanie Joomla zawiera w kodzie funkcję wyłączającą wadliwe dodatki, co może prowadzić witryny do nieoczekiwanych zachowań lub w najgorszym wypadku do awarii.

Funkcja automatycznego wyłączania pluginów została wprowadzona, ponieważ:

"Chciałbym stworzyć łatkę do rdzenia Joomla! tak, aby nie następował błąd krytyczny w momencie, gdy nie będzie on potrafił włączyć pliku dodatku (innymi słowy dodatek istnieje w bazie danych, ale pliki są skasowane)".

Źródło: Graceful handling of missing plugins

Wprowadzenie takiego rozwiązania problemu spowodowało, że Joomla 1.5.16 oraz 1.5.17 wyłącza każdy dodatek, który podczas uruchomienia powoduje błąd. Łatka zakłada że dodatek będzie wyrzucał błąd, który zawsze dotyczyć będzie brakującego pliku, jednakże błąd może być tylko warunkowy i wyrzucony w innych okolicznościach.

W zależności od sposobu działania dodatku warunków może być kilka. Zamiast wyrzucenia  błędu dodatek jest wyłączany, choć mógłby być uruchomiony i działać w normalny sposób.  Może to prowadzić do nieoczekiwanego zachowywania się stron.

Napisaliśmy o wycofanie tego dodatku. Do tego czasu radzimy nie uaktualniać do Joomla 1.5.16/1.5.17 Jeśli używasz którejś z wyżej wymienionych wersji i pojawią się jakieś dziwne problemy z dodatkami, poinformuj nas o tym.

Możesz wyłączyć dodatek. Znajdź w pliku helper.php w katalogu libraries/joomla/plugin poniższy kod, a następnie usuń linie 122-136

 
 if(!$shutdown_handler_installed)  
 {  
  // only register the shutdown function if we are capable of checking the errors (reqs PHP 5.2+)  
  if (version_compare("5.2", phpversion(), "<="))  
  {  
   // you can only register a static method if it is declared static  
   // we can't declare static b/c it breaks on PHP4  
   // therefore we instantiate the helper for this one purpose  
   $pluginHelper = new JPluginHelper;  
   register_shutdown_function(array($pluginHelper, 'shutdown'));  
  }  
  // we may not have installed the handler, but setting this to true  
  // will prevent us from continually running the version compare  
  $shutdown_handler_installed = true;  
 }  
 

Nasz komentarz

Takie rozwiązanie ma swoje zalety. Dodatek zostanie wyłączony automatycznie w różnych sytuacjach - gdy uszkodzony jest plik, gdy niepoprawny jest kod dodatku bądź nie ma fizycznie pliku/plików dodatku albo ich nazwa została zmieniona. Każda z wspomnianych sytuacji może przysporzyć wielu problemów całemu serwisowi, gdyż dodatki mogą ingerować prawie we wszystkie czynności. Wyłączenie niedziałającego poprawnie dodatku jest zatem bardzo sensownym zabezpieczeniem. Przyczynia się to również do łatwiejszej lokalizacji problemu, gdyż jeśli jakaś funkcja, jakieś zdarzenie lub proces obsługiwany przez dodatek nie działa, należy naprawić lub zaktualizować wadliwy dodatek.
Taka funkcja jest również przydatna osobom, które tworzą własne rozwiązania dla Joomla!, jako test sprawdzający czy plugin działa.

Należy na spokojnie podejść to rady, jaką jest wstrzymanie się z aktualizacjami, gdyż osoba niezorientowana w temacie może uznać do za błąd Joomla! Tak naprawdę ma on nam uzmysłowić, że trzeba do tej kwestii podejść poważnie, a mianowicie, sprawdzić działanie każdego dodatku, który jest zainstalowany, bo może się okazać, że wszystkie dodatki działają poprawnie. Najlepiej jest sprawdzić, jakie dodatki były włączone przed aktualizacją, a następnie po aktualizacji i korzystaniu z serwisu, czy któreś z nich zostały wyłączone. W przypadku, gdy jakiś dodatek zostanie wyłączony, to będzie oznaczało konieczność jego naprawy, wymiany lub aktualizacji, tą ostatnią można wykonać nawet, jeśli wszystkie pluginy działają poprawnie.

To działanie można uznać za system wykrywania błędów i zabezpieczenia serwisu.

Ostatnio zmieniany Śr. 28 Mar 2012
comments powered by Disqus Powrót na górę

Aktualności - spis treści

Kalendarz publikacji

2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
Oglądasz teraz:   StartPowiadomieniaDyskusyjna łatka w kodzie

Twoje konto