Spis treści artykułu:
Z bogatą paletą konfiguracji PHP na różnych hostach może być ciężko sprawić, by wszystkie funkcjonalności PrestaShop działały poprawnie. Poniżej znajdziecie 12 wskazówek mających na celu optymalizację pliku php.ini dla skryptu PrestaShop.
Wymagania instalacyjne
PrestaShop wymaga serwera Apache 1.3 lub IIS 6 (lub tych lepszych) z zainstalowanymi bibliotekami PHP 5.1.0 oraz MySQL 5 (co najmniej), jak również włączoną biblioteką GD. Większość serwerów hostingowych spełnia te wymagania, ale sprawdźcie na stronie głównej Waszego dostawcy, by upewnić się, że zakupywany przez Was pakiet posiada te funkcjonalności. Podczas instalowania PrestaShop instalator sprawdzi każde z wymagań – jeżeli serwer je spełni, przy każdym z wymagań pojawią się charaktetystyczne zielone haczyki:
Jeżeli zamiast nich zobaczycie czerwony X dla którejkolwiek z opcji, nie będzie możliwości zainstalowania PrestaShop. Jeżeli ten krzyżyk pojawi się przy opcjach związanych z PHP czy MySQL, serwer nie jest w stanie obsłużyć skryptu. Jeżeli X dotyczy biblioteki GD, trzeba będzie poprosić usługodawcę o jej instalację. Jeżeli skrypt nie jest w stanie tworzyć plików i folderów, trzeba upewnić się, że nasze konto ma uprawnienia umożliwiające właśnie takie działania. Jeżeli z kolei uploadowanie plików jest niemożliwe, domyślne ustawienia PHP będą uniemożliwiać instalację PrestaShop.
Na szczęście większość hostów pozwala nam na zmianę domyślnej konfiguracji PHP. Gdy plik PHP jest wywoływany, będzie poszukiwał skryptu php.ini w miejscu, w którym się znajduje. Jeżeli go znajdzie, przeczyta go i zastąpi ustawienia domyślne tymi zawartymi w pliku. PrestaShop nie tworzy tego typu pliku automatycznie, gdyż część ustawień jest po prostu opcjonalna, a niektórzy użytkownicy mogą chcieć na przykład zainstalować WordPressa, a zatem nie zechcą mieszać w ustawieniach PHP.
Dlatego właśnie trzeba będzie skopiować plik php.ini w trzy różne miejsca. Po pierwsze, trzeba go umieścić w głównym folderze, który jest odczytywany z każdym otwarciem strony głównej sklepu. Po drugie, należy go wrzucić do folderu (którego nazwę wcześniej zmieniliśmy) administracji, by był czytany przy dostępie do panelu administracyjnego. Na końcu wrzuć go także do folderu instalacji, by instalator poprawnie odczytywał konfigurację (i zaznaczał haczyki zamiast krzyżyków, pozwalając na kontynuowanie instalacji). To, co wpisujemy w php.ini zależy od tego, które elementy mają „X”.
Wskazówka 1: Jeżeli opcja związana z uploadem plików zaznaczona jest krzyżykiem, powinieneś poszukać i zmienić ustawienie file_uploads w php.ini, lub dodać je, jeżeli nie istnieje:
; Allow files to be uploaded
file_uploads = On
Jeżeli zrobiłeś to poprawnie, krzyżyk powinien zmienić się na haczyk i będziesz w stanie kontynuować instalację. Nie oznacza to jednak, że na pewno wszystkie funkcjonalności będą działać. Istnieje sekcja ustawień opcjonalnych z większą ilością opcji konfiguracyjnych, które pozwolą PrestaShop działać optymalnie.
Ustawienia opcjonalne
Wskazówka 2: opcja otwierania zewnętrznych URLi zaznacza się wtedy, gdy PrestaShop jest w stanie łączyć się z innymi serwerami, na przykład celem pobierania newsów czy kursu walut. Jeżeli masz tutaj krzyżyk, powinieneś poszukać w php.ini opcji allow_url_fopen, lub dodać ją, jeżeli nie istnieje:
; Allow external URLs to be opened
allow_url_fopen = On
Wskazówka 3: Jeżeli opcja PHP register global jest zaznaczona X, oznacza to, że funkcja ta jest włączona – zaleca się jej wyłączenie w PHP, by zwiększyć bezpieczeństwo. Funkcja ta automatycznie zamienia wartości PHP używane w URLach na globalne zmienne. Jeżeli zapomnisz zainicjalizować danej zmiennej, każda inna osoba może to zrobić jakąkolwiek wartością po prostu dodając ją do adresu URL. Może to zostać zastosowane przez hackerów, a z tego powodu należy to po prostu wyłączyć. Po prostu znajdź ustawienie register_globals w pliku php.ini lub dodaj je, jeśli nie istnieje:
; Disable PHP register globals
register_globals = Off
Wskazówka 4: opcja związana z aktywacją kompresji GZIP. Zalecane jest jej włączenie, co umożliwia wypakowywanie plików GZIP na serwerze, co jest robione między innymi przy instalacji modułów czy paczek językowych przez panel administracyjny. Jeżeli masz tutaj krzyżyk, poszukaj w php.ini opcji zlib.output_compression lub dodaj ją, jeżeli jej nie masz:
; Enable GZIP compression at the default level
zlib.output_compression = On
zlib.output_compression_level = 6
Stopień kompresji może być ustalony między 1 a 9, przy czym 1 oznacza najmniejszą kompresję, a 9 największą. Najlepiej zachować domyślną „szóstkę”, która zapewnia dobrą kompresję bez zbytniego obciążania serwera.
Wskazówka 5: opcja związana z rozszerzeniem Mcrypt – haczyk pojawia się wtedy, gdy PrestaShop jest w stanie szyfrować cookies metodą Mcrypt, która jest szybsza od domyślnej (Blowfish). Jeżeli tutaj masz krzyżyk, poszukaj i zamień lub dodaj poniższe ustawienie:
; Load mcrypt extension
extension=mcrypt.so
Wskazówka 6: następna opcja tyczy się tak zwanych „magic quotes” – sprawia to, że cytaty i apostrofy, a więć ’ i ” są zamieniane automatycznie w \’ oraz \”
. Pomimo, że automatycznie może to wyglądać na użyteczne, lepiej jest wyłączyć tę opcję, by manualnie „uciekać” z powodujących błędy apostrofów i cytatów – w ten sposób możemy sami wybrać, w jakich sytuacjach to robić. Aby wyłączyć ustawienie musisz poszukać go (magic_quotes) w ustawieniach, lub dodać, jeżeli nie istnieje:
; Disable PHP magic quotes
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
Wskazówka 7: Rozszerzenie „Dom” pozwala PrestaShop odczytywać pliki XML przy pomocy rozszerzenia PHP Dom, które posiada więcej funkcjonalności, niż SimpleXML. Jeżeli opcja jest zaznaczona „iksem”, powinieneś skontaktować się z usługodawcą, by ten zainstalował rozszerzenie na serwerze.
Wskazówka 8: Rozszerzenie „PDO” do MySQL dostarcza unikalnego API, dzięki któremu kod SQL jest w stanie kontynuować pracę nawet po zmianie typu bazy danych. Jeżeli masz to zaznaczone krzyżykiem, zmień tę opcję lub dodaj ją, jeśli w ogóle jej nie masz:
; Load PDO MySQL extension
extension=pdo.so
extension=pdo_mysql.so
Pamięć i ograniczenia rozmiaru
Czasem zdarza się sytuacja, w której spotykamy się z błędem uniemożliwiającym wykonanie zapytania ze względu na przekroczenie limitu ustalonego przez serwer. Ten limit możemy zmienić przy użyciu php.ini.
Wskazówka 9: Jednym z najczęściej spotykanych błędów jest ten związany z przekroczeniem limitu pamięci. Często wyskakuje on podczas wrzucania pliku dużej rozdzielczości, podczas którego PHP nie jest w stanie załadować jego całego do pamięci. W takiej sytuacji można zredukować rozmiar obrazu, albo też zwiększyć limit pamięci poszukując opcji memory_limit, bądź dodając ją, jeśli nie istnieje:
; Set memory limit in megabytes
memory_limit = 128M
Jeżeli przebywasz na hostingu współdzielonym, lepiej ustawić ten limit tuż nad ten potrzebny nam. Gdy ustalimy ten limit na zbyt duży, nieefektywny kod będzie spowalniał pracę serwera również dla innych użytkowników, a usługodawca może zablokować nam serwer. Sytuacja zmienia się, gdy mamy serwer dedykowany lub VPS. Wtedy nie dzielimy się pamięcią serwera, mogąc ją zwiększać dowolnie, ale nie tak, by przekroczyć możliwości serwera.
Wskazówka 10: Kolejnym powszechnym błędem jest przekraczanie czasu na wykonanie skryptu. Pojawia się on na przykład wtedy, gdy importujemy bardzo dużą liczbę produktów. Gdy skrypt przekroczy maksymalny czas wykonywania, wyświetli błąd. Można zwiększyć ten czas dodając lub edytując opcję max_execution_time, tak, jak poniżej:
; Set maximum execution time in seconds
max_execution_time = 120
Podobnie, jak z limitem pamięci, na współdzielonym hostingu lepiej stawiać na mniejszy czas, taki, który pozwoli nam wykonywać skrypt bez błędu. Jeżeli ustawimy czas na zbyt wysoki będzie istniała możliwość, że niechciany kod / skrypt będzie sie wykonywał zbyt długo i zużywał dużo zasobów serwera – może to prowadzić do zawieszenia konta. Jeżeli potrzebujesz większego czasu wykonywania skryptów, przejdź na VPS lub serwer dedykowany.
Wskazówka 11: Gdy uploadujesz duży obrazek produktu, możesz spotkać się z błędem maksymalnego rozmiaru uploadowanego pliku. Powinieneś wtedy zmniejszyć rozmiar obrazka manualnie lub też poszukać opcji upload_max_filesize w php.ini i ustawić ją na większą:
; Set maximum file upload size in megabytes
upload_max_filesize = 32M
Ustaw taką wartość, żeby móc wrzucić największy plik, jaki chcesz, ale żeby jednocześnie uniknąć przypadkowego wrzucenia jakiegoś zbyt wielkiego pliku.
Wskazówka 12: dwoma kolejnymi limitami, które można napotkać to ten dotyczący maksymalnego rozmiaru post i czasu input. Przypadkiem, w którym możemy zobaczyć błąd jest zapisywanie dużej ilości tłumaczeń modułu. W takiej sytuacji trzeba będzie zmienić opcje post_max_size i max_input_time, lub dodać je, jeżeli nie istnieją:
; Set maximum post size in megabytes
post_max_size = 32M
; Set maximum input time in seconds
max_input_time = 180
Jeżeli używasz hostingu współdzielonego, spróbuj ustawić jak najmniejsze wartości, pozwalające jedynie pozbyć się błędów. Zbyt wysoka wartość może prowadzić do używania zbyt dużej ilości przestrzeni dyskowych lub innych zasobów i wywoływać problemy związane z wydajnością również dla innych użytkowników.