Introduktion till PHP
PHP (Hypertext Preprocessor) är ett populärt skriptspråk med öppen källkod som främst används för webbutveckling på serversidan. Det skapades ursprungligen av Rasmus Lerdorf 1994 och har sedan dess utvecklats till ett kraftfullt och flexibelt språk som driver en stor del av webben, inklusive välkända plattformar som WordPress och Facebook.
PHP i modern webbutveckling
Trots framväxten av nyare teknologier förblir PHP ett relevant och ofta använt språk inom webbutveckling. Några anledningar till detta är:
- Stor community och ekosystem: Det finns ett enormt bibliotek av ramverk (t.ex. Laravel, Symfony), paket och verktyg tillgängliga för PHP.
- Enkelhet och snabb inlärningskurva: Många utvecklare anser att PHP är relativt lätt att komma igång med jämfört med andra serverspråk.
- Integration med databaser: PHP har utmärkt stöd för att interagera med olika databaser, särskilt MySQL.
- Kostnadseffektivt: PHP är gratis att använda och många webbhotell erbjuder prisvärda PHP-hostingalternativ.
Utvecklingsmiljö setup
För att utveckla med PHP lokalt behöver du installera:
- PHP-tolken: Själva kärnan i PHP som exekverar din kod. Den kan laddas ner från php.net.
- En webbserver: T.ex. Apache eller Nginx, som hanterar HTTP-förfrågningar och serverar dina PHP-filer.
- En databas: Ofta MySQL eller MariaDB om din applikation behöver lagra data.
Ett enkelt sätt att få allt detta är att installera ett paket som XAMPP, MAMP eller WAMP, som buntar ihop Apache, MySQL och PHP (och ofta Perl/Python) för enkel installation på Windows, macOS eller Linux.
Alternativt kan du använda verktyg som Docker för att skapa isolerade och konfigurerbara utvecklingsmiljöer.
PHP och webbservrar
När en användare begär en PHP-sida från en webbserver händer följande:
- Webbservern (t.ex. Apache) tar emot förfrågan.
- Om filen har ändelsen
.php
, skickar servern filen till PHP-tolken. - PHP-tolken exekverar koden i filen. Detta kan innebära att hämta data från en databas, bearbeta formulärdata, eller utföra annan logik.
- Resultatet av PHP-skriptet (vanligtvis HTML, men kan vara JSON, XML etc.) skickas tillbaka till webbservern.
- Webbservern skickar det slutliga resultatet (HTML) till användarens webbläsare.
sequenceDiagram participant B as Webbläsare participant WS as Webbserver (t.ex. Apache) participant PHP as PHP-Tolk participant DB as Databas (Valfritt) B->>+WS: Begär PHP-sida (t.ex. GET /sida.php) WS->>+PHP: Överlämnar sida.php för bearbetning alt Databasinteraktion PHP->>+DB: Skickar databasfråga DB-->>-PHP: Returnerar resultat end PHP-->>-WS: Returnerar genererad HTML/Output WS-->>-B: Skickar HTML-svar
Grundläggande koncept och syntax
PHP-kod bäddas oftast in direkt i HTML-dokument med hjälp av speciella taggar: <?php
och ?>
.
<!DOCTYPE html>
<html>
<head>
<title>Min första PHP-sida</title>
</head>
<body>
<h1>Välkommen!</h1>
<p>Dagens datum är <?php echo date('Y-m-d'); ?>.</p>
<?php
// Detta är en PHP-kommentar
$greeting = "Hej från PHP!";
echo "<p>" . $greeting . "</p>";
$num1 = 5;
$num2 = 10;
$sum = $num1 + $num2;
echo "<p>Summan av $num1 och $num2 är: $sum</p>";
?>
</body>
</html>
I exemplet ovan:
<?php ... ?>
: Taggarna som omger PHP-koden.echo
: Används för att skriva ut data till HTML-outputen.date('Y-m-d')
: En inbyggd PHP-funktion som returnerar dagens datum.$greeting
,$num1
,$num2
,$sum
: Variabler (börjar alltid med$
i PHP)..
: Konkateneringsoperatorn för att slå ihop strängar.//
: En enkelradskommentar i PHP.
PHP vs. JavaScript
Det är viktigt att förstå skillnaden mellan PHP och JavaScript, två vanliga språk inom webbutveckling:
-
PHP (Server-side):
- Körs på webbservern.
- Används för att hantera data, interagera med databaser, hantera användarsessioner, och generera dynamiskt HTML innan det skickas till webbläsaren.
- Användaren ser aldrig själva PHP-koden, bara resultatet (oftast HTML).
- Bra för backend-logik, databashantering, säkerhetskritiska operationer.
-
JavaScript (Client-side):
- Körs i användarens webbläsare.
- Används för att göra webbsidor interaktiva, manipulera HTML och CSS (DOM-manipulation), göra asynkrona anrop (t.ex. med Fetch API) och validera formulärdata utan att behöva ladda om sidan.
- Användaren kan se JavaScript-koden (oftast).
- Bra för användargränssnitt, interaktivitet, realtidsuppdateringar på klientsidan.
Analogi: Tänk på en restaurang. PHP är som kocken som förbereder maten (datan) i köket (servern) baserat på beställningen (HTTP-förfrågan). JavaScript är som servitören som interagerar med gästen (användaren) vid bordet (webbläsaren), tar emot specifika önskemål (användarinteraktioner) och justerar presentationen (webbsidan) direkt.
Även om JavaScript ursprungligen var ett klientspråk, kan det idag även köras på serversidan med plattformar som Node.js (vilket tas upp i kapitel 9). Men när man pratar om traditionell webbutveckling är PHP ett serverspråk och JavaScript (i webbläsaren) ett klientspråk. PHP och JavaScript kompletterar ofta varandra för att skapa rika och dynamiska webbapplikationer.
Kom igång med PHP-utveckling
För att bygga och köra PHP-applikationer lokalt behöver du en utvecklingsmiljö som inkluderar PHP-tolken, en webbserver och ofta en databas. En traditionell "stack" (samling mjukvara) för detta är LAMP (Linux, Apache, MySQL, PHP) eller LEMP (Linux, Nginx, MySQL, PHP). Istället för att installera dessa tjänster direkt på ditt operativsystem, kommer vi i den här boken att använda Docker.
Docker låter oss definiera och köra applikationer i isolerade "containrar". Detta gör det enklare att:
- Sätta upp en konsekvent utvecklingsmiljö oavsett ditt operativsystem.
- Hantera olika versioner av mjukvara (PHP, MySQL etc.) för olika projekt.
- Simulera produktionsmiljön mer exakt.
- Dela miljökonfigurationen med andra utvecklare.
Vi kommer att använda en docker-compose.yml
-fil för att definiera de tjänster (services) som vår PHP-applikation behöver. I vårt fall är det:
- Webbserver (Apache): Apache är en mycket populär och väletablerad webbserver som ansvarar för att ta emot HTTP-förfrågningar från webbläsare och skicka dem vidare till PHP-tolken för bearbetning av
.php
-filer. Den serverar också statiska filer som HTML, CSS och JavaScript. - Databas (MariaDB): MariaDB är en populär relationsdatabas med öppen källkod, skapad av de ursprungliga utvecklarna av MySQL. Den används för att lagra och hämta applikationens data på ett strukturerat sätt. PHP har utmärkt stöd för att kommunicera med MariaDB/MySQL.
- Databashanterare (phpMyAdmin): phpMyAdmin är ett webbaserat verktyg skrivet i PHP som ger ett grafiskt gränssnitt för att administrera MariaDB/MySQL-databaser. Det är praktiskt för att titta på data, köra SQL-frågor manuellt och hantera databasstrukturen under utveckling.
- PHP: Själva PHP-tjänsten som kör vår applikationskod.
Nedan följer ett exempel på hur en docker-compose.yml
-fil kan se ut för att sätta upp denna miljö. (Detaljer kring Docker och Docker Compose täcks mer ingående i andra sammanhang, men detta ger en grundläggande uppfattning).
docker-compose.yml
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./app/public:/var/www/html
ports:
- 8060:80
mysql:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: db_root_password
MYSQL_USER: db_user
MYSQL_PASSWORD: db_password
MYSQL_DATABASE: db_fullstack
volumes:
- mysqldata:/var/lib/mysql
ports:
- 38060:3306
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 8061:80
environment:
- PMA_ARBITRARY=1
depends_on:
- mysql
volumes:
mysqldata: {}
Dockerfile
FROM php:8-apache
RUN a2enmod ssl && a2enmod rewrite
RUN service apache2 restart
RUN apt-get update && apt-get install -y
RUN docker-php-ext-install mysqli pdo pdo_mysql
Mappstruktur för exemplet ovan
project
├───app
│ └───public
│ └───index.php
├───Dockerfile
├───docker-compose.yml
Demo: Server-side vs Client-side
För att illustrera skillnaden mellan kod som körs på servern (PHP) och kod som körs i klienten (JavaScript), kan vi skapa en enkel index.php
-fil:
<!DOCTYPE html>
<html>
<head>
<title>PHP & JS Demo</title>
</head>
<body>
<h1>PHP säger:</h1>
<?php
// Denna PHP-kod körs på servern
$serverMessage = "Jag körs på servern!";
echo "<p>" . htmlspecialchars($serverMessage) . "</p>";
?>
<script>
// Denna JavaScript-kod körs i klientens webbläsare
console.log("Jag körs på klienten (i webbläsarens konsol)!");
alert("Hej från JavaScript!"); // Visar en popup i webbläsaren
</script>
</body>
</html>
När du besöker denna sida i webbläsaren:
- PHP-koden (
echo ...
) exekveras på servern och genererar HTML-texten<p>Jag körs på servern!</p>
. - Den kompletta HTML-koden (inklusive
<script>
-taggarna) skickas till webbläsaren. - Webbläsaren renderar HTML:en och exekverar JavaScript-koden inuti
<script>
-taggarna, vilket skriver ut meddelandet till webbläsarkonsolen och visar enalert
-ruta.
Detta visar tydligt hur PHP genererar innehållet på serversidan medan JavaScript hanterar interaktivitet och logik på klientsidan.