include og require - PHP

Lær at inkluder filer i andre filer med include, require, include_once og require_once statements

Introduktion

include og require bruges til at inkluder en fil.

Det kan for eksempel bruges til at have den samme menu på alle sine HTML sider.
Så inkluder man filen med menuen på alle sine HTML sider og når der skal rettes på menuen så skal der kun rettes i én fil.

include og require fungere ens bortset fra når filen ikke bliver fundet.

include tillader at den efterfølgende kode udføres selvom filen ikke findes.
require stopper udførslen af den efterfølgende kode hvis filen ikke findes.

Man kan tænke på include og require som at de tager den angivne fil og sætter hele filen ind på den linje.

include_once og require_once undersøger om filen har været indlæst før så man undgår at filen ved en fejl indlæses flere gange.

include og require 1

include og require 2

Når man inkluder filer er der flere måder man kan skrive stien til filen på.

Fordelen ved at bruge den fulde sti er at så er man helt sikker på hvilken fil der vælges.
Ulempen er at hvis man flytter eller ændre navn på sin hjemmesidemappe så skal man også rette stien.
Desuden er stien nok ikke den samme på ens egen computer og på webhotellet hvor man eventuelt skal uploade sin kode.

Det virker for det meste fint med relative stier og man behøver ikke ændre stien hvis man flytter eller ændre navn på sin hjemmesidemappe.

Hvis man inkluder filer som inkluder andre filer med relative stier så skal man være opmærksom på at include og require gerne tager udgangspunkt i den mappe hvor den første PHP fil blev kaldt fra.

include og require med relative stier tager udgangspunkt i de stier som er angivet i include_path.
På min computer returner get_include_path() .;C:\php5\pear, det vil side der er 2 stier (adskilt med semikolon på Windows, kolon på Unix).
Den første sti . (punktum) tager udgangspunkt i den mappe hvor filen med koden er.
Hvis filen som ønskes med include og require ikke findes her så ledes der i den næste mappe som er C:\php5\pear.

include og require 3

Når vi inkluder en fil skal vi være opmærksom på at tomme linjer (og alt andet) før <?php og efter ?> vil komme med i outputtet.

Altså før <!DOCTYPE> hvis vi laver en HTML fil.

PHP accepter et valgfrit linjeskifte efter ?> som ikke vil være en del af outputtet.

Her ses et eksempel på en fil med et linjeskift for meget og teksten "hov" i slutningen af filen.

Hvis filen inkluderes fra en anden fil vil ét linjeskift og teksten "hov" blive vist før <!DOCTYPE>.

include og require 4

Når man inkluder en fil så svare det til at koden fra den fil indsættes der hvor den bliver inkluderet.
Og at variablerne er tilgængelige som var det kun var én fil.

Lad os sige vi har følgende kode i en fil som hedder eksempel0022.php.

Filen inkluder vi i følgende script med include.
62
Resultatet ovenfor er skabt af følgende kode

Variablen $kilometer er også tilgængelig i den inkluderet fil.

Scriptet svare altså til at include linjen bliver erstattet med indholdet af den angivne fil så der kommer til at stå følgende.
62
Resultatet ovenfor er skabt af følgende kode

Problem med relative stier

Der er en ting som har irriteret mig på min hjemmeside i længere tid og som det tog mig et godt stykke tid at finde en løsning på.

Problem

Hvis de filer man inkluder også selv inkluder andre filer med relative stier så virker det ikke hvis de kaldte filer ligger i forskellige mapper.


Eksempel...

Vi har 4 filer :
hjemmeside/a.php
hjemmeside/php/b.php
hjemmeside/php/funktioner.php
hjemmeside/php/flerefunktioner.php

I mappen "hjemmeside" har vi denne fil (a.php).

I mappen "hjemmeside/php" har vi denne fil (b.php).

Så langt så godt. Både a.php og b.php inkluder den samme fil (funktioner.php).

Men hvad så hvis filen vi har inkluderet (funktioner.php) selv inkluder andre filer med relative stier.

Så bliver det et problem at bruge relative stier fordi...

Den første fil (hjemmeside/a.php) vil forsøge at inkluder disse filer.

Den anden fil (hjemmeside/php/b.php) vil forsøge at inkluder disse filer.

Scriptet tager hele tiden udgangspunkt i den mappe hvor det første script kaldes fra (a.php og b.php).
Scriptet skifter altså ikke mappe på noget tidspunkt.

Hvis filen "hjemmeside/a.php" kaldes, så tager alle include udgangspunkt i "hjemmeside" mappen.
Hvis filen "hjemmeside/php/b.php" kaldes, så tager alle include udgangspunkt i "hjemmeside/php" mappen.
Så selvom scriptet inkluder filer som inkluder filer i andre mapper så tager include altid udgangspunkt i den mappe det først script blev startet i.

En løsning på dette problem er at lade scriptet "hjemmeside/php/b.php" skifter til den forrige mappe før den bruger include.
På den måde tager både "hjemmeside/a.php" og "hjemmeside/php/b.php" udgangspunkt i samme mappe før de kalder include.

Det lader til at virke som jeg ønsker.

En anden løsning kunne være at tilføje ./ først i stien som her så der tages udgangspunkt i samme mappe.
Jeg mangler er eksperimentere noget mere med dette.

include_path

Her ses to måde at inkluder en fil hvor det ene eksempel starter med ./.
Begge eksempler kan virke men det kan være en smule mere effektiv at skrive ./ først fordi så ledes der kun i den aktuelle mappe.
Hvor imod hvis man ikke skriver ./ først så bliver der søgt i de mapper som er angivet i include_path (kan ses med get_include_path()).

include_path = .:/usr/share/php
Resultatet ovenfor er skabt af følgende kode

2 måder at skrive på

Man kan både skrive med og uden paranteser.

Skriv din kommentar

Spørg mig om hvad som helst
Du kan også skrive direkte til mig på
Stem
Søg
Language

Select English to navigate the website in English. Things like the navigation menu and contact form will be in English, but the main content on each page will not be translated.