Jak korzystać z baz aplikacyjnych?

Przygotowaliśmy dla was dostęp do baz aplikacyjnych - MongoDB, Redis, Memcached oraz PostgreSQL z poziomu DirectAdmin.

W tym poradniku pokażemy najprostszy sposób połączenia z każdą z tych usług. Nie musisz znać zaawansowanego programowania - wystarczy umieć utworzyć plik PHP i wkleić do niego kod.

1. Utwórz bazę w DirectAdminie

  1. Zaloguj się do DirectAdmina.
  2. Przejdź do sekcji Dodatkowe funkcje.
  3. Otwórz pozycję Bazy aplikacyjne.
  4. Kliknij przycisk pozwalający utworzyć nową bazę.
  5. Wybierz usługę, na przykład PostgreSQL 16, MongoDB 7, Redis 7 albo Memcached 1.6.
  6. Utwórz bazę i zapisz wyświetlone dane dostępowe.

W zależności od wybranej usługi panel może wyświetlić między innymi:

  • adres serwera, nazywany też hostem,
  • port,
  • nazwę bazy,
  • nazwę użytkownika,
  • hasło.

Ważne: w przykładach wpisz dokładnie adres i port podane w DirectAdminie. Nie zakładaj, że adresem zawsze będzie localhost ani że usługa używa standardowego portu.

2. Którą usługę wybrać?

  • PostgreSQL - klasyczna baza danych do przechowywania użytkowników, zamówień, wpisów, produktów i innych ważnych informacji.
  • MongoDB - baza dokumentowa. Dobrze sprawdza się przy danych o zmiennej budowie, na przykład ustawieniach, logach albo danych przesyłanych jako JSON.
  • Redis - bardzo szybki magazyn danych używany najczęściej do pamięci podręcznej, sesji, liczników i kolejek.
  • Memcached - prosta pamięć podręczna, która może przyspieszyć stronę i ograniczyć liczbę zapytań do głównej bazy.

Jeśli chcesz przechowywać ważne dane swojej strony, na początek wybierz PostgreSQL. Redis i Memcached najlepiej traktować jako pamięć tymczasową - zapisane w nich wartości mogą wygasnąć lub zostać usunięte.

3. PostgreSQL w PHP

PostgreSQL jest dobrym wyborem dla zwykłej aplikacji internetowej. W PHP najłatwiej połączyć się z nim za pomocą PDO.

Utwórz w katalogu swojej strony plik test-postgresql.php i wklej do niego poniższy kod. Następnie zamień przykładowe wartości na dane z DirectAdmina.

<?php
$host = 'ADRES_Z_DIRECTADMINA';
$port = 12345;
$database = 'NAZWA_BAZY';
$username = 'NAZWA_UZYTKOWNIKA';
$password = 'TWOJE_HASLO';

try {
    $pdo = new PDO(
        "pgsql:host={$host};port={$port};dbname={$database}",
        $username,
        $password,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    $pdo->exec(
        'CREATE TABLE IF NOT EXISTS wiadomosci (
            id SERIAL PRIMARY KEY,
            tresc VARCHAR(255) NOT NULL
        )'
    );

    $dodaj = $pdo->prepare('INSERT INTO wiadomosci (tresc) VALUES (:tresc)');
    $dodaj->execute(['tresc' => 'Połączenie z PostgreSQL działa!']);

    $wiadomosci = $pdo->query('SELECT id, tresc FROM wiadomosci ORDER BY id DESC')->fetchAll();

    foreach ($wiadomosci as $wiadomosc) {
        echo (int) $wiadomosc['id'] . ': '
            . htmlspecialchars($wiadomosc['tresc'], ENT_QUOTES, 'UTF-8')
            . '<br>';
    }
} catch (Throwable $e) {
    echo 'Nie udało się połączyć z PostgreSQL: '
        . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
}

Otwórz ten plik w przeglądarce, na przykład pod adresem:

https://twoja-domena.pl/test-postgresql.php

Skrypt utworzy prostą tabelę, zapisze w niej wiadomość, a następnie ją wyświetli. Jeśli pojawi się informacja o braku sterownika, sprawdź, czy dla używanej wersji PHP jest włączone rozszerzenie pdo_pgsql.

4. MongoDB w PHP

MongoDB przechowuje dokumenty podobne do obiektów JSON. Nie trzeba wcześniej tworzyć tabeli ani określać wszystkich kolumn.

Do wygodnej obsługi MongoDB potrzebne są rozszerzenie PHP mongodb oraz oficjalna biblioteka instalowana przez Composer. W katalogu strony uruchom:

composer require mongodb/mongodb

Jeżeli nie masz dostępu do Composera albo PHP zgłasza brak rozszerzenia mongodb, skontaktuj się z administratorem hostingu.

Następnie utwórz plik test-mongodb.php:

<?php
require __DIR__ . '/vendor/autoload.php';

$host = 'ADRES_Z_DIRECTADMINA';
$port = 12345;
$database = 'NAZWA_BAZY';
$username = 'NAZWA_UZYTKOWNIKA';
$password = 'TWOJE_HASLO';

$uri = sprintf(
    'mongodb://%s:%s@%s:%d/%s?authSource=%s',
    rawurlencode($username),
    rawurlencode($password),
    $host,
    $port,
    rawurlencode($database),
    rawurlencode($database)
);

try {
    $client = new MongoDB\Client($uri);
    $collection = $client->selectCollection($database, 'wiadomosci');

    $collection->insertOne([
        'tresc' => 'Połączenie z MongoDB działa!',
        'utworzono' => new MongoDB\BSON\UTCDateTime(),
    ]);

    $wiadomosc = $collection->findOne([], ['sort' => ['_id' => -1]]);

    echo htmlspecialchars($wiadomosc['tresc'], ENT_QUOTES, 'UTF-8');
} catch (Throwable $e) {
    echo 'Nie udało się połączyć z MongoDB: '
        . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
}

Po otwarciu pliku w przeglądarce skrypt utworzy kolekcję wiadomosci, doda jeden dokument i wyświetli jego treść.

Jeżeli DirectAdmin pokazuje gotowy adres połączenia rozpoczynający się od mongodb://, możesz użyć go bezpośrednio jako wartości zmiennej $uri. W takim przypadku nie trzeba samodzielnie budować adresu za pomocą sprintf().

5. Redis w PHP

Redis nadaje się między innymi do przechowywania wyników czasochłonnych operacji. Zamiast generować tę samą informację przy każdym wejściu na stronę, aplikacja może zapisać ją w Redisie na kilka minut.

Utwórz plik test-redis.php:

<?php
$host = 'ADRES_Z_DIRECTADMINA';
$port = 12345;
$username = 'NAZWA_UZYTKOWNIKA';
$password = 'TWOJE_HASLO';

try {
    $redis = new Redis();
    $redis->connect($host, $port, 3);

    if ($username !== '') {
        $redis->auth([$username, $password]);
    } elseif ($password !== '') {
        $redis->auth($password);
    }

    $redis->setEx(
        'przyklad:wiadomosc',
        300,
        'Połączenie z Redisem działa!'
    );

    echo htmlspecialchars(
        (string) $redis->get('przyklad:wiadomosc'),
        ENT_QUOTES,
        'UTF-8'
    );
} catch (Throwable $e) {
    echo 'Nie udało się połączyć z Redisem: '
        . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
}

Wartość zostanie zapisana na 300 sekund, czyli 5 minut. Po tym czasie Redis automatycznie ją usunie. Jeżeli panel nie podaje nazwy użytkownika, pozostaw zmienną $username pustą:

$username = '';

Do działania przykładu PHP musi mieć włączone rozszerzenie redis.

6. Memcached w PHP

Memcached działa podobnie do prostej pamięci podręcznej. Można w nim na krótko zapisać gotowy wynik, na przykład listę popularnych produktów lub rezultat rozbudowanego zapytania do bazy.

Utwórz plik test-memcached.php:

<?php
$host = 'ADRES_Z_DIRECTADMINA';
$port = 12345;
$username = '';
$password = '';

try {
    $cache = new Memcached();

    if ($username !== '' && $password !== '') {
        $cache->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
        $cache->setSaslAuthData($username, $password);
    }

    $cache->addServer($host, $port);
    $cache->set('przyklad:wiadomosc', 'Połączenie z Memcached działa!', 300);

    $wartosc = $cache->get('przyklad:wiadomosc');

    if ($wartosc === false && $cache->getResultCode() !== Memcached::RES_SUCCESS) {
        throw new RuntimeException($cache->getResultMessage());
    }

    echo htmlspecialchars((string) $wartosc, ENT_QUOTES, 'UTF-8');
} catch (Throwable $e) {
    echo 'Nie udało się połączyć z Memcached: '
        . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
}

Jeśli w DirectAdminie otrzymasz login i hasło do Memcached, wpisz je w zmiennych $username oraz $password. Jeżeli panel ich nie podaje, pozostaw obie wartości puste. PHP musi mieć włączone rozszerzenie memcached.

7. Co zrobić, gdy pojawi się błąd?

Najczęściej problem wynika z jednej z poniższych przyczyn:

  • w kodzie wpisano inny adres lub port niż w DirectAdminie,
  • nazwa bazy, użytkownik albo hasło zawiera literówkę,
  • dla wybranej wersji PHP nie jest włączone potrzebne rozszerzenie,
  • w przypadku MongoDB nie zainstalowano biblioteki poleceniem composer require mongodb/mongodb,
  • aplikacja używa innej wersji PHP niż ta skonfigurowana w panelu.

Najpierw porównaj dane w kodzie z informacjami widocznymi w sekcji Bazy aplikacyjne. Jeżeli są identyczne, sprawdź moduły PHP albo prześlij administratorowi hostingu pełną treść otrzymanego błędu.

8. Ważne zasady bezpieczeństwa

  • Nigdy nie pokazuj nikomu hasła do bazy.
  • Nie wklejaj prawdziwych danych dostępowych na forum ani do publicznego repozytorium.
  • Po wykonaniu testu usuń pliki test-postgresql.php, test-mongodb.php, test-redis.php i test-memcached.php.
  • W gotowej aplikacji przechowuj dane połączenia w jej pliku konfiguracyjnym lub pliku .env, a nie w kodzie udostępnianym publicznie.
  • Komunikaty zawierające szczegóły błędów wyświetlaj tylko podczas testów. Na działającej stronie zapisuj je do prywatnego dziennika błędów.

Podsumowanie

Baza utworzona w DirectAdminie jest gotowa do użycia od razu po podaniu jej danych w aplikacji. PostgreSQL służy przede wszystkim do przechowywania ważnych danych, MongoDB do dokumentów o elastycznej budowie, a Redis i Memcached do szybkiej pamięci podręcznej.

Na początek najlepiej utworzyć jeden plik testowy i sprawdzić, czy pojawi się komunikat o prawidłowym połączeniu. Gdy test zadziała, ten sam sposób połączenia można przenieść do właściwej aplikacji PHP.

Czy ta informacja była pomocna?

Podobne artykuły

Dodawanie bazy danych

Tworzę skrypt korzystający z MySQL. W jaki sposób utworzyć bazę danych? Zaloguj się do...

Dodawanie kont pocztowych w DirectAdmin

Chciałbym wysyłać wiadomości e-mail. W jaki sposób dodać konto pocztowe? Zaloguj się do...

Dodawanie zdalnego hosta do bazy danych

Potrzebuję dostęp do bazy danych na serwerze z zewnątrz. Jak to zrobić? Zaloguj się do...

Szybki import bazy danych

Najpopularniejszą metodą importu baz danych jest po prostu wrzucenie pliku wyeksportowanego przez...