/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Serverside Include
Fra : Peter Linde


Dato : 25-03-03 13:41

Jeg har tidligere rodet lidt med ASP og har i den forbindelse sat stor pris
på serverside includes (SSI). Nu skal jeg lave noget SSI i php. Det er
imidlertid noget vanskeligere end jeg havde forestillet mig. Mine problemer
starter når jeg ønsker en rod-relativ sti til en fil, som skal inkluderes.

Denne dokument-relative kode virker:
<?php require_once('../Include/modul_topmenu.php'); ?>

Denne rod-relative kode virker IKKE:
<?php require_once('/Include/modul_topmenu.php'); ?>

Skal man virkelig lave en komplet sti for at få den samme kode til at virke
overalt på sitet (i alle mapper - på alle niveauer)?

Med komplet sti mener jeg en sti som denne:
<?php include 'http://www.sitename.dk/Include/modul_topmenu.php'; ?>

Mange hilsner

Peter



 
 
Jesper Brunholm (25-03-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 25-03-03 14:11

Peter Linde wrote:
> Denne dokument-relative kode virker:
> <?php require_once('../Include/modul_topmenu.php'); ?>
>
> Denne rod-relative kode virker IKKE:
> <?php require_once('/Include/modul_topmenu.php'); ?>

nej - når du ikke skriver nogen ../ så går php ud fra at 'Include/' er
på samme niveau som du står på!

(jeg ved at man på en del servere (men ikke alle) kan bruge '/' til at
fortælle at der skal regnes fra roden, sådan virker php-enginen ikke)

Problemet bliver rigtigt stort når en fil som inkluderer filer
inkluderes på forskellige niveauer. Så regnes stien nemlige ikke fra
filen, men fra den som den er inkluderet i.

En løsning kan være at sætte en $DocRoot variabel ved alle includes, og
sørge for at denne altid er tilstede med det rette indhold...

require_once($DocRoot.'Include/modul_topmenu.php');

$DocRoot kan fx sættes med
$DocRoot='';
for($i=0; $i<(substr_count($PHP_SELF, '/')-1); $i++){
$DocRoot .= '../';
}

> Skal man virkelig lave en komplet sti for at få den samme kode til at virke
> overalt på sitet (i alle mapper - på alle niveauer)?

Det synes jeg er en dårlig løsning, men det er en mulighed.

mvh

Jesper Brunholm

--
H.C. Andersen-Centret med nyt design: <http://www.andersen.sdu.dk/>
Phønix - dansk folk-musik fra unge musikere - <http://www.phonixfolk.dk/>


Allan E (25-03-2003)
Kommentar
Fra : Allan E


Dato : 25-03-03 21:37

"Peter Linde" <iznogood2002@mail.dk> wrote in message
news:3e804e55$0$24666$edfadb0f@dread14.news.tele.dk...
> Denne dokument-relative kode virker:
> <?php require_once('../Include/modul_topmenu.php'); ?>
>
> Denne rod-relative kode virker IKKE:
> <?php require_once('/Include/modul_topmenu.php'); ?>
>
> Skal man virkelig lave en komplet sti for at få den samme kode til at
virke
> overalt på sitet (i alle mapper - på alle niveauer)?
>
> Med komplet sti mener jeg en sti som denne:
> <?php include 'http://www.sitename.dk/Include/modul_topmenu.php'; ?>

Umiddelbart skulle du evt overveje ikke at include via http, når nu filerne
alligevel ligger i det samme filsystem. Det mest normale, og også det
hurtigste, er at include filerne direkte fra filsystemet.
Her kan variablen $_SERVER['DOCUMENT_ROOT'], komme dig til hjælp, da den
indeholder den komplette sti til roden af dit webhotel. Herfra er det jo så
blot at tilføje stierne til filerne udfra roden.
Se evt mere i manualen:
http://www.php.net/manual/en/reserved.variables.php#reserved.variables.serve
r

Mvh Allan E



Larz (26-03-2003)
Kommentar
Fra : Larz


Dato : 26-03-03 09:15

"Peter Linde" <iznogood2002@mail.dk> wrote in
news:3e804e55$0$24666$edfadb0f@dread14.news.tele.dk:
> Jeg har tidligere rodet lidt med ASP og har i den forbindelse sat stor
> pris på serverside includes (SSI). Nu skal jeg lave noget SSI i php.
> Det er imidlertid noget vanskeligere end jeg havde forestillet mig.
> Mine problemer starter når jeg ønsker en rod-relativ sti til en fil,
> som skal inkluderes.
>
> Denne dokument-relative kode virker:
> <?php require_once('../Include/modul_topmenu.php'); ?>
>
> Denne rod-relative kode virker IKKE:
> <?php require_once('/Include/modul_topmenu.php'); ?>

Jo, men det er ikke den rod du regner med, det er roden i filsystemet,
ikke i websitet.

> Skal man virkelig lave en komplet sti for at få den samme kode til at
> virke overalt på sitet (i alle mapper - på alle niveauer)?
>
> Med komplet sti mener jeg en sti som denne:
> <?php include 'http://www.sitename.dk/Include/modul_topmenu.php'; ?>

Den vil ikke virke, da modul_topmenu.php vil blive parset af serveren før
inkluderingen ;P

Der er flere måder at gøre det på

   $_SERVER['DOCUMENT_ROOT']

Indeholder website roden...

Du kan evt også inkludere dine include filer i include path'en, f.eks. i
php.ini eller i .htaccess så kan du nøjes med at skrive:

   require('modul_topmenu.php');

--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
To mail me remove your pants.

Peter (30-03-2003)
Kommentar
Fra : Peter


Dato : 30-03-03 16:55

"Larz" <lp@your-pants-coder.dk> skrev"
> Der er flere måder at gøre det på
>
> $_SERVER['DOCUMENT_ROOT']
>
> Indeholder website roden...
>
> Du kan evt også inkludere dine include filer i include path'en, f.eks. i
> php.ini eller i .htaccess så kan du nøjes med at skrive:
>
> require('modul_topmenu.php');

Der er åbenbart enighed om første forslag...men hvor indsætter jeg i praksis
koden
$_SERVER['DOCUMENT_ROOT']

Den anden mulighed tror jeg vil passe rigtig godt i det aktuelle tilfælde.
Men det skaber 2 nye spørgsmål:

1. Hvordan virker en php.ini?

2. Hvordan skriver jeg mine nclude-filer ind i php.ini'en?

Mange hilsner

Peter



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste