O czym powinien pamiętać początkujący programista - konfiguracja PHP

Treść dodana: 14 listopada 2017. Ostatnia modyfikacja: 14 listopada 2017.

Zazwyczaj początki przygody z językiem PHP nie są zbyt trudne. Zaczynamy od podstawowych wyrażeń, przez `echo`, instrukcje warunkowe, bazy danych. Z czasem kod się rozrasta i jesteśmy gotowi do publikacji naszego dzieła na serwerze produkcyjnym. Po wgraniu danych na serwer nagle okazuje się że coś nie działa, kodowanie znaków jest nieprawidłowe a zamiast właściwej strony serwer wyświetla masę błędów. Czym to może być spowodowane? Odmienną konfiguracją naszej maszyny deweloperskiej oraz serwera. Trzeba mieć świadomość, iż spora część firm hostingowych zupełnie nie zawraca sobie głowy konfiguracją – administrator nie jest programistą i może nawet nie mieć świadomości poprawnych ustawień. Sporo firm działa po prostu na domyślnych ustawieniach które były dostępne w panelu (jak Direct Admin czy Plesk) a ustawienia te, jak kodowanie znaków, nie są przeznaczone na nasz rodzimy rynek. Dlatego bardzo ważne jest aby zawsze, bezwzględnie konfigurować wszystkie ustawienia we własnym zakresie. Przykładowa konfiguracja może mieć postać:

<?php
// APPLICATION_ENV to zdefiniowana wcześniej stała np.: development / production
$env = APPLICATION_ENV ?: 'development';

// różne ustawienia wyświetlania błędów dla obu środowisk
if ('production' === $env) {
    error_reporting(0);
    ini_set('display_errors', 'off');
    ini_set('display_startup_errors', false);
} else {
    error_reporting(-1);
    ini_set('display_errors', 'on');
    ini_set('display_startup_errors', true);
}

// ustawienia ogólne oraz sesji
ini_set('arg_separator.output', '&amp;');
ini_set('session.use_cookies', true);
ini_set('session.use_only_cookies', true);
ini_set('session.use_trans_sid', false);
ini_set('session.name', 'sessid');
ini_set('url_rewriter.tags', 'a=href,area=href,frame=src,fieldset=fakeentry');

// ustawienia związane ze strefą czasową i locale
ini_set('date.timezone', 'Europe/Warsaw');
setlocale(LC_ALL, 'pl_PL.UTF8');

// ustawienia kodowania znaków dla różnych rozszerzeń
ini_set('mbstring.language', 'uni');

ini_set('default_charset', 'UTF-8');
ini_set('input_encoding', 'UTF-8');
ini_set('output_encoding', 'UTF-8');

Przedstawiona konfiguracja zakłada, że korzystasz Czytelniku z kodowania UTF-8. Odmienną kwestią są nagłówki wysyłane przez serwer oraz kodowanie znaków w bazie danych. Te omawiałem już we wcześniejszym artykule.

Innym częstym problemem jest błędnie skonfigurowana sesja. Należy pamiętać że dane sesji zapisywane są zazwyczaj w katalogu `/tmp` przez proces PHP. Katalog ten może być czyszczony znacznie częściej niż wynosi czas życia sesji dlatego zostanie ona utracona wcześniej niż zakładał programista. W skrajnych przypadkach, zdawanie się na domyślne ustawienie może nawet stworzyć lukę dla włamywacza lub kolizję nazw.

// patrz także ustawienia sesji we wcześniejszym kodzie
// katalog do którego tylko nasz użytkownik ma dostęp (najczęściej w obrębie konta)
session_save_path('katalog');
// Garbage collector
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
ini_set('session.gc_maxlifetime', 1440);

Taka konfiguracja powinna zapewnić nam bezpieczne i stabilne działanie skryptu niezależnie od środowiska.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.