CMS Made Simple na Home.pl a dostęp do /tmp/cache

Osoby wdrażające CMS Made Simple na serwerach wirtualnych Home.pl mogą napotkać pewien problem. Po instalacji strona wyświetlała się bez żadnego formatowania, bez przetwarzania arkuszy styli CSS. Dostęp do nich kończy się na zwróceniu błędu 403 Forbidden. Podobna sytuacja ma miejsce przy działaniu niektórych pluginów, np. Captcha. Problem ten może wystąpić także na innych serwerach, a ma związek z prawami dostępu do katalogu /tmp/cache, w którym CMS zapisuje różnego rodzaju dane.

W momencie pisania artykułu CMS Made Simple był dostępny w wersji 1.10 i i takiej dotyczą niniejsze informacje. Oczywiście problem występuje we wcześniejszych, oraz może się pojawić w późniejszych edycjach.

Na czym polega problem?

Na wirtualnych serwerach Home.pl, ale taka sytuacja może mieć miejsce na innych, dostęp do katalogu tmp jest ograniczony. Z założenia ma on służyć do zapisu różnych danych tymczasowych, takich jak np. sesje. Ze względów bezpieczeństwa jest on niedostępny z zewnątrz.

Cały problem polega na tym, że od wersji 1.8 CMS Made Simple generuje arkusze CSS do statycznych plików i umieszcza je w katalogu /tmp/cache. O ile potrafi je w tym przypadku bez problemu zapisać, to już przy dostępie z zewnątrz po HTTP otrzymujemy wspomniany wcześniej błąd 403 Forbidden, czyli brak dostępu.

Rozwiązanie problemu nr 1 – inny sposób generowania CSS

Pierwszym i najszybszym sposobem na niedogodność, jest zmiana sposobu generowania plików CSS, a konkretnie do powrócenia do starej możliwości stosowanej w CMS Made Simple. Wystarczy więc zamienić w szablonie wywołanie {cms_stylesheet} na {stylesheet}.

Możemy to zrobić w panelu administracyjnym, wchodząc w menu w Wygląd -> Szablony i wybrać odpowiedni/e szablon/y.

W ten sposób zamiast dołączenia CSS z katalogu /tmp/cache w postaci

<link rel="stylesheet" type="text/css" href="http://www.moja-strona.pl/cache/stylesheet_50_132723884.css" media="all">

w wygenerowanym pliku HTML otrzymamy:

<link rel="stylesheet" type="text/css" media="all" href="http://www.fmoja-strona.pl/stylesheet.php?cssid=50&mediatype=all" />

Rozwiązanie problemu nr 2 – zmiana w konfiguracji

I tu pojawia się drobny problem. Pierwszym krokiem w zmianie jest oczywiście sprawdzenie zawartości pliku config.php. Tu niestety możemy się rozczarować – nie ma w nim odpowiedniej opcji, umożliwiającej szybką zmianę. Jedyną związaną z tym katalogiem zmienną jest ustawienie

$config['previews_path'] = '/tmp/cache';

Założenie katalogu /cache i nadanie mu praw do zapisu, a następnie zmiana powyższej zmiennej nie spowoduje poprawnego dostępu do plików CSS. Jest to bowiem związane z tym, że wykorzystywana w wielu miejscach CMSa ścieżka jest zapisana w pliku fileloc.php oraz niestety „na twardo” w innych.

UWAGA: wszelkie opisane poniżej zmiany ingerują bezpośrednio w kod CMS Made Simple. W takim wypadku tracimy możliwość oficjalnego supprotu oraz utrudniamy sobie aktualizacje. Musimy pamiętać, że po jej wykonaniu będziemy musieli ponownie wprowadzić nasze poprawki.

W linii nr 3 w pliku fileloc.php  znajduje się następująca definicja:

define("TMP_CACHE_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'cache');

Wystarczy więc wpisać tu swoją własną ścieżkę, czyli w naszym przypadku /cache:

define("TMP_CACHE_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cache');

Po tej zmianie pliki CSS będą zapisywane w nowej lokacji, jednak niestety CMS będzie ich nadal szukał w poprzedniej. Cóż, jest to ewidentny błąd programistów, którzy „na twardo: wpisali ścieżkę, zamiast skorzystać z odpowiedniej zmiennej konfiguracyjnej. Musimy więc zająć się plikiem /plugins/function.cms_stylesheet.php i odnaleźć odpowiedniwpis (linie 117 i 121 lub w ich pobliżu). Najlepiej w nich po prostu podać swoje ścieżki do katalogu, w którym zapisywane są obecnie pliki CSS. Poniższe linie:

$stylesheet .= '<link rel="stylesheet" type="text/css" href="' . $root_url . '/tmp/cache/' . $filename . '"/>' . "\n";

$stylesheet .= '<link rel="stylesheet" type="text/css" href="' . $root_url . '/tmp/cache/' . $filename.'" media="' . $media_type.'"/>'."\n";

należy więc zamienić na

$stylesheet .= '<link rel="stylesheet" type="text/css" href="' . $root_url . $config['previews_path'] . '/' . $filename.'" media="' . $media_type . '"/>' . "\n";

$stylesheet .= '<link rel="stylesheet" type="text/css" href="' . $root_url . $config['previews_path'] . '/' . $filename . '"/>' . "\n";

W ten sposób problem z dostępem do CSS zostanie rozwiązany i arkusze stylów będą mogły być wczytane przez naszą stronę.

Problem z pluginami, np. Captcha 0.4.5

Część dodatków pisanych do CMS Made Simple przez zewnętrznych programistów zawiera podobny do opisanego powyżej błąd. Niestety, ale ścieżki dostępu do katalogów cache zostały w nich zapisane „na twardo”, a nie z wykorzystaniem zmiennej konfiguracyjnej. Musimy być zatem czujni i gdy występuje problem z dostępem do tworzonych plików, przeglądać ich kod.

Przykładowo występuje on we wtyczce Captcha (w momencie pisania artykułu w wersji 0.4.5), z której korzysta między innymi doskonałe rozszerzenie Form Builider. Zapisuje ona wygenerowane do przepisania przez użytkownika obrazki w katalogu /tmp/cache, jednak na stronie nie jest możliwe ich poprawne wyświetlenie.

Rozwiązanie jest proste, czyli poprawienie odpowiedniej linijki w pliku wtyczki modules/Captcha/lib/classes/class.captchalib.php w liniach 81 oraz 82 (lub pobliskich). W następującym kodzie:

$this->setImagePath(cms_join_path($this->cmsconfig['root_path'],'tmp','cache'));
$this->setImageUrl($this->cmsconfig['root_url'] . '/tmp/cache');

musimy podać swój katalog, czyli /cache:

$this->setImagePath(cms_join_path($this->cmsconfig['root_path'],'cache'));
$this->setImageUrl($this->cmsconfig['root_url'] . '/cache');

Komentarze: 3

  • adr
    9 lut 2012 | Permalink | Odpowiedz

    w nowym CMSMS nie ma juz {stylesheet} wiec dalej jest lipa

  • Ifo
    17 lut 2012 | Permalink | Odpowiedz

    Dziękuje dziękuje! tyłek mi uratowałeś!!!!!! Sposób 2gi jest super! :)

  • Luke
    26 mar 2012 | Permalink | Odpowiedz

    Dzięki za poradę, miałem też to nieszczęście że przenosiłem stronę na home.pl

Dodaj komentarz