1. Hvad XAMPP indeholder

XAMPP samler de vigtigste dele, der skal til for at køre et PHP-program lokalt:

Apache
Webserveren, som modtager browserens forespørgsel og leverer siden.
PHP
Programmeringssproget, som udfører programmets logik på computeren.
MariaDB
Databaseserveren i XAMPP. Kontrolpanelet kan stadig vise betegnelsen “MySQL”.
SQL
Sproget, som bruges til at oprette, læse og ændre data i databasen.
phpMyAdmin
Et browserbaseret værktøj til administration af MariaDB.

Browseren bruger normalt adressen http://localhost/. Ordet localhost betyder denne computer.

2. Installation og start

  1. Hent Windows-versionen fra Apache Friends' officielle XAMPP-side.
  2. Installer eksempelvis i C:\xampp. En kort sti uden mellemrum gør lokal fejlfinding lettere.
  3. Åbn XAMPP Control Panel.
  4. Start Apache og MySQL. XAMPP bruger MariaDB som databaseserver, selv om knappen hedder MySQL.
  5. Åbn http://localhost/ i browseren og kontrollér, at XAMPP-siden vises.

Windows Firewall kan spørge, om Apache må kommunikere på netværket. Til almindelig lokal brug bør adgangen begrænses til private netværk.

3. Dit første PHP-program

Opret en projektmappe under XAMPPs dokumentmappe:

C:\xampp\htdocs\mit-program\

Opret derefter filen index.php i mappen:

<?php
declare(strict_types=1);

$navn = 'Morten';
?>
<!doctype html>
<html lang="da">
<head>
    <meta charset="utf-8">
    <title>Mit lokale program</title>
</head>
<body>
    <h1>Hej <?= htmlspecialchars($navn, ENT_QUOTES, 'UTF-8') ?></h1>
</body>
</html>

Programmet åbnes på http://localhost/mit-program/. PHP-koden udføres af Apache; browseren modtager kun det færdige HTML-resultat.

Du kan kontrollere en PHP-fil for syntaksfejl fra Kommandoprompt eller PowerShell:

C:\xampp\php\php.exe -l C:\xampp\htdocs\mit-program\index.php

4. Opret en MariaDB-database med SQL

Åbn lokalt http://localhost/phpmyadmin/, vælg SQL-fanen, og kør et eksempel som dette. Udskift dummy-passwordet med et stærkt, lokalt password:

CREATE DATABASE mit_program
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

CREATE USER 'mit_program_user'@'localhost'
    IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';

GRANT ALL PRIVILEGES ON mit_program.*
    TO 'mit_program_user'@'localhost';

FLUSH PRIVILEGES;

Brug en særskilt databasebruger til hvert program. Lad ikke selve programmet forbinde som root, og læg aldrig et rigtigt password i en fil, der kan downloades fra webserveren.

En enkel tabel kan oprettes sådan:

USE mit_program;

CREATE TABLE kunder (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    navn VARCHAR(150) NOT NULL,
    oprettet_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

5. Forbind PHP til databasen

PHPs PDO-udvidelse giver en ensartet databaseforbindelse og understøtter forberedte SQL-forespørgsler:

<?php
declare(strict_types=1);

$dsn = 'mysql:host=127.0.0.1;dbname=mit_program;charset=utf8mb4';
$bruger = 'mit_program_user';
$password = 'CHANGE_ME_STRONG_PASSWORD';

try {
    $database = new PDO($dsn, $bruger, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ]);
} catch (PDOException $exception) {
    error_log($exception->getMessage());
    exit('Databasen kunne ikke åbnes.');
}

Eksemplet bruger bevidst en dummyværdi. I et rigtigt program skal password og andre secrets ligge uden for C:\xampp\htdocs, så de ikke er en del af webroot eller Git.

6. Backup og gendannelse

Stop ikke ved en enkelt kopi af projektmappen: databaseindholdet skal eksporteres separat. Følgende kommando spørger efter databasebrugerens password og opretter en SQL-backup:

C:\xampp\mysql\bin\mysqldump.exe -u mit_program_user -p mit_program > C:\backup\mit_program.sql

Gendan til en allerede oprettet, tom database med:

C:\xampp\mysql\bin\mysql.exe -u mit_program_user -p mit_program < C:\backup\mit_program.sql

Gem backup på et andet drev eller et andet sikkert medie, og afprøv jævnligt, at den kan gendannes.

7. Almindelig fejlfinding

ProblemKontrol
Apache starter ikkeKontrollér om en anden tjeneste bruger port 80 eller 443, og læs Apache-loggen fra XAMPP Control Panel.
MariaDB starter ikkeKontrollér port 3306 og MariaDB-loggen. Tag en kopi af datamappen før reparation.
Siden findes ikkeKontrollér at projektet ligger i C:\xampp\htdocs, og at URL og mappenavn er ens.
PHP-ændring virker ikkeGem filen, genindlæs siden, kontrollér PHP-loggen, og genstart Apache efter ændringer i php.ini.
Databaseforbindelse fejlerKontrollér at MariaDB kører, og verificér host, databasenavn, bruger og rettigheder.

8. Sikker lokal drift

Officielle kilder