Noget om include

1 view
Skip to first unread message

Bertel Lund Hansen

unread,
May 1, 2020, 3:25:02 PM5/1/20
to
Forestil jer et PHP-modul opbygget således:

--------------------------------
function A () {...kode...}
function B () {...kode...}
function C () {...kode...}
// -------- Main
A(1,2,3);
B(4,5,6);
C(7,8,9);
--------------------------------

Hvis jeg inkluderer det med

include_once 'modul.inc.php'

fra en index.php der styrer mange sider (a la fiduso.dk), er det
så ikke rigtigt at main-delen kun aktiveres én gang og f.eks.
ikke vil virke når man beder om en ny side i samme session?

--
/Bertel

Jan Hansen

unread,
May 1, 2020, 4:37:24 PM5/1/20
to
Bertel Lund Hansen skrev:
Hvis en fil indeholder funktioner, kan den kun includeres én gang.
Anden gang kommer der fejl, fordi funktionen findes i forvejen.
Hvis filen også indeholder variabler, der skal "nulstilles" ind
imellem, kan du så ikke dele det op i to filer, en med funktioner,
og en med variabler?


--
mvh Jan.
Help Microsoft stamp out piracy. Give
Linux to a friend today!

Jan Hansen

unread,
May 1, 2020, 5:02:33 PM5/1/20
to
Jan Hansen skrev:

> Hvis en fil indeholder funktioner, kan den kun includeres én gang.

Det var vist noget sludder, jeg fik skrevet, det har jo ikke meget
med sessioner at gøre.

Arne Vajhøj

unread,
May 1, 2020, 7:19:00 PM5/1/20
to
Jeg er ikke sikker på hvad du spørger om.

En request er for en PHP fil.

Den PHP fil kan inkludere andre PHP filer.

include 'modul.inc.php'

inkluderer modul.inc.php.

include_once 'modul.inc.php'

inkluderer modul.inc.php *hvis* den ikke er inkluderet tidligere (i
request).

Så hvis du har:
* index.php inkluderer modul.inc.php og foobar.php
* foobar.php inkluderer modul.inc.php
så er det vigtigt at du bruger include_once og ikke include,
fordi dine funktionskald kan godt udføres to gange men
det kan dine funktions definitioner ikke.

Alt det her er per request.

En session kan bestå af mange requests, men hvordan en request
håndterer include påvirkes ikke af om requesten er en del af
en session eller af hvad der er sket i tidligere requests
i samme session.

Arne

PS: Hvorfor ikke bruge require_once fromfor include_once? Du ønsker
vel ikke at fortsætte hvis modul.inc.php mangler?






Bertel Lund Hansen

unread,
May 2, 2020, 2:34:24 AM5/2/20
to
Arne Vajhøj skrev:

> Jeg er ikke sikker på hvad du spørger om.

Et eksempel:

Hvis man har nogle brugere som man ikke bryder sig om, kan man
ønske at der på hver webside de vælger fra menuen, står "Du er en
uønsket gæst".

index.php inkluderer så et modul der tjekker om IP-nummeret er
uønsket og skriver beskeden hvis det er.

Modulet er opbygget som beskrevet før. Hvis main-delen ikke
aktiveres, sker der intet tjek af brugeren.

Nu er mit spørgsmål:

Hvis jeg bruger "require_once", så hentes modulet når man åbner
index.php og ellers ikke. Hvis man så i menuen åbner en underside
(som styres af index.php), vil der så stå "Du er en uønsket gæst"
igen - altså på hver side man åbner fra menuen - fordi tjekket
aktiveres, eller bliver det kun aktiveret allerførste gang
modulet inkluderes?

Jeg har ikke et praktisk problem. Og jeg har brugt "require" -
det havde jeg bare glemt.

--
/Bertel

Arne Vajhøj

unread,
May 2, 2020, 2:52:02 PM5/2/20
to
On 5/2/2020 2:34 AM, Bertel Lund Hansen wrote:
> Arne Vajhøj skrev:
>> Jeg er ikke sikker på hvad du spørger om.
>
> Et eksempel:
>
> Hvis man har nogle brugere som man ikke bryder sig om, kan man
> ønske at der på hver webside de vælger fra menuen, står "Du er en
> uønsket gæst".
>
> index.php inkluderer så et modul der tjekker om IP-nummeret er
> uønsket og skriver beskeden hvis det er.
>
> Modulet er opbygget som beskrevet før. Hvis main-delen ikke
> aktiveres, sker der intet tjek af brugeren.
>
> Nu er mit spørgsmål:
>
> Hvis jeg bruger "require_once", så hentes modulet når man åbner
> index.php og ellers ikke. Hvis man så i menuen åbner en underside
> (som styres af index.php), vil der så stå "Du er en uønsket gæst"
> igen - altså på hver side man åbner fra menuen - fordi tjekket
> aktiveres, eller bliver det kun aktiveret allerførste gang
> modulet inkluderes?

Det afhænger helt af hvad "underside som styres af index.php" dækker over.

Browser sender en reqest for index.php, index.php laver require_once
som inkluderer dit modul, index.php laver require_once igen
efter underside.php, underside.php laver require_once
som inkluderer dit modul - her vil PHP ikke gøre noget da det er
inkluderet allerede.


Browser sender en reqest for index.php, index.php laver require_once
som inkluderer dit modul, index.php outputter <a href='underside.php'>,
bruger klikker på link, browser sender 1 request for underside.php,
underside.php laver require_once som inkluderer dit modul - her vil
PHP udføre inkludering, da denne request ikke har noget med den
foregående request at gøre.

Arne

Bertel Lund Hansen

unread,
May 3, 2020, 2:21:23 AM5/3/20
to
Arne Vajhøj skrev:

> Browser sender en reqest for index.php, index.php laver require_once
> som inkluderer dit modul, index.php outputter <a href='underside.php'>,
> bruger klikker på link, browser sender 1 request for underside.php,
> underside.php laver require_once som inkluderer dit modul - her vil
> PHP udføre inkludering, da denne request ikke har noget med den
> foregående request at gøre.

Tak, det besvarede mit spørgsmål.

--
/Bertel

Martin Larsen

unread,
May 4, 2020, 6:05:28 AM5/4/20
to
On 01.05.2020 21.25, Bertel Lund Hansen wrote:

> fra en index.php der styrer mange sider (a la fiduso.dk), er det
> så ikke rigtigt at main-delen kun aktiveres én gang og f.eks.
> ikke vil virke når man beder om en ny side i samme session?

Arne har allerede svaret, men meget kort: includes bliver loadet hver
gang, uanset sessionen.

--
tv4ever.dk
bedrevejr.dk
Reply all
Reply to author
Forward
0 new messages