Lokal PHP-drift på Windows
XAMPP, PHP og MariaDB
En praktisk guide til at køre PHP-programmer og en SQL-database på din egen Windows PC.
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
- Hent Windows-versionen fra Apache Friends' officielle XAMPP-side.
- Installer eksempelvis i
C:\xampp. En kort sti uden mellemrum gør lokal fejlfinding lettere. - Åbn XAMPP Control Panel.
- Start Apache og MySQL. XAMPP bruger MariaDB som databaseserver, selv om knappen hedder MySQL.
- Å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
| Problem | Kontrol |
|---|---|
| Apache starter ikke | Kontrollér om en anden tjeneste bruger port 80 eller 443, og læs Apache-loggen fra XAMPP Control Panel. |
| MariaDB starter ikke | Kontrollér port 3306 og MariaDB-loggen. Tag en kopi af datamappen før reparation. |
| Siden findes ikke | Kontrollér at projektet ligger i C:\xampp\htdocs, og at URL og mappenavn er ens. |
| PHP-ændring virker ikke | Gem filen, genindlæs siden, kontrollér PHP-loggen, og genstart Apache efter ændringer i php.ini. |
| Databaseforbindelse fejler | Kontrollér at MariaDB kører, og verificér host, databasenavn, bruger og rettigheder. |
8. Sikker lokal drift
- Hold XAMPP, PHP og anvendte biblioteker opdateret.
- Brug separate databasebrugere med mindst mulige rettigheder.
- Hold secrets og rigtige konfigurationsfiler uden for webroot.
- Eksponér ikke phpMyAdmin eller MariaDB direkte mod internettet.
- Brug forberedte SQL-forespørgsler og valider alt brugerinput.
- Tag både fil- og databasebackup før opdateringer.
- Brug en egentlig produktionsopsætning med HTTPS og hardening, hvis et program senere skal være offentligt tilgængeligt.