W3 Total Cache – problem z Minify (css/js)

Jeśli po włączeniu scalania plików strona przestaje wyświetlać się prawidłowo (css) lub traci dynamikę (js) to znak, że coś jest nie tak ze sklejaczem. W panelu można włączyć pokazywanie komunikatów o błędach (raczej bezużyteczne) i zobaczyć tekst w czerwonej ramce: „Niektóre pliki nie dały się odczytać”. Należy upewnić się, że ścieżka do plików generowana przez w3_get_document_root() jest taka jak trzeba. Najprościej będzie zrobić to modyfikując plik wp-content/plugins/w3-total-cache/lib/W3/Minify.php. W pliku szukamy function get_groups , a w niej linijki $path = w3_get_document_root() . '/’ . $file; Dodajemy własną linijkę zaraz po:


echo $path."\r\n" ;

Samo generowanie sklejonych plików ustawiamy tak, żeby w nagłówku bloga pojawił się odnośnik do pliku php ([ ] Rewrite URL structure). Po załadowaniu bloga oglądamy źródło i wchodzimy przez kliknięcie (Firefox) na skrypt tworzący sklejony plik i sprawdzamy co się pokaże. Prawidłowość ścieżek można sprawdzić kopiując jedną z widocznych na ekranie i doklejając do adresu bloga. Przykładowo:

http://www.moj_adres_bloga.pl/SKOPIOWANA_ŚCIEŻKA

Jeśli jest dobrze, to zobaczymy zawartość pliku. W przeciwnym wypadku przeglądarka uroczy nas komunikatem: 404 File not found. WordPress ma sztywną strukturę, zatem ścieżka powinna ograniczać się do: wp-content/plugins/NAZWA_PLUGINU/NAZWA_JS.js (ew. z / na samym początku). W razie nieprawidłowego działania zobaczymy coś w rodzaju /w3tc/min/. W tym przypadku debug jest bezużyteczny, bo nie pokazuje przyczyn problemu.

Robimy małą podmianę:


//   $path = w3_get_document_root() . '/' . $file;
 $path = '/'.$file ;

(dodatkowe // na początku linii z w3_get_document_root()).

Wszystko powinno zacząć działać jak należy. Teraz już można ustawić z powrotem [x] Rewrite URL structure i po przeładowaniu strony sprawdzić zawartość katalogu wp-content/w3tc/min/SUBKATALOG/. Wewnątrz katalogu powinny znajdować się pliki: default.include.cyfry.js oraz default.include.js.id.

Jaka jest przyczyna tego wszystkiego ? PHP może być odpalane jako cgi (fast-cgi) i otrzymywać jako roboczy katalog coś innego niż spodziewany / (albo /var/user/public_html/ i inne wariacje). Po otrzymaniu niewłaściwej ścieżki skrypt sprawdza istnienie pliku (if (file_exists($path)) {). Ścieżka jest nieprawidłowa, więc plik zostaje pominięty (jako niedostępny). Po pominięciu wszystkich plików skrypt przechodzi do sklejania, które na wejściu dostaje pustą listę. Wynikiem jest automatyczne zakończenie działania sklejacza i usunięcie wskazanych wpisów z nagłówka (pomimo błędu). Nie ma pliku, nie ma definicji styli i skryptów zarządzających dynamiką strony.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*