Ik zit nu met een vrij complex probleempje, waarvoor ik uiteraard de search al heb gebruikt. De daar genoemde $DOCUMENT_ROOT is geen optie, later meer hierover
De directory tree van een site is als volgt:
site/index.php
site/shared/header.php
site/shared/functions.php
Nu include ik in index.php allereerst header.php, op de volgende manier:
include "shared/header.php"; [dit staat dus in site/index.php]
Tot zover is er uiteraard niets mis, header.php wordt netjes ge-include. Maar nu heb ik in header.php ook nog wat functies nodig, die ik uit functions.php haal. Omdat header.php en functions.php zich in dezelfde directory bevinden, kan je op een Windows-based systeem volstaan met deze include:
include "functions.php"; [dit staat dus in site/shared/header.php]
Op Linux-based hosts worden includes echter bekeken vanaf het primaire script, dat door de client wordt aangeroepen. De bovenstaande header.php kan, indien deze direct wordt aangeroepen, dus zonder problemen het functie-script includen. Echter, wanneer header.php door index.php wordt ge-include, zoekt PHP naar functions.php in de directory waar index.php zich bevindt, site/, en niet in site/shared/
Daarvoor wordt op het forum de volgende oplossing gegeven:
include($DOCUMENT_ROOT."/site/shared/functies.php");
Dit werkt probleemloos onder Windows. Onder Linux heb ik echter de volgende situatie:
De files bevinden zich in /home/user/, dus /home/user/public_html/site/ en /home/user/public_html/site/shared/
De site kan op 2 manieren worden aangeroepen, namelijk:
http://IP-ADRES/~user/site/
of
http://user.blablabla/site/
Hostname is hierbij een virtuele host, die in httpd.conf gedefinieerd is met een rootdir op /home/user/public_html. Wanneer de site via de hostname wordt aangeroepen, zal de volgende include dus als volgt verlopen:
$DOCUMENT_ROOT."/site/shared/functies.php
/home/user/public_html/site/shared/functies.php
Perfect dus.
Maar nu gaan we het nog even hebben over het accessen van de site met het IP-adres. Wanneer de server op alleen het IP-adres wordt aangeroepen, dan kom je op de normale site, die zich ook op de server bevindt. De root daarvan is /var/www/htdocs . Wanneer je dus naar http://IP-ADRES/~user/site/ gaat, dan ziet de include er als volgt uit:
$DOCUMENT_ROOT."/site/shared/functies.php
/var/www/htdocs/site/shared/functies.php
Tsja, en dat werkt niet.
Aangezien de site volledig server-onafhankelijk moet zijn, is het per server aanpassen van het script absoluut geen optie. Daarom hoop ik, dat er een andere oplossing is. Iemand een idee?
De directory tree van een site is als volgt:
site/index.php
site/shared/header.php
site/shared/functions.php
Nu include ik in index.php allereerst header.php, op de volgende manier:
include "shared/header.php"; [dit staat dus in site/index.php]
Tot zover is er uiteraard niets mis, header.php wordt netjes ge-include. Maar nu heb ik in header.php ook nog wat functies nodig, die ik uit functions.php haal. Omdat header.php en functions.php zich in dezelfde directory bevinden, kan je op een Windows-based systeem volstaan met deze include:
include "functions.php"; [dit staat dus in site/shared/header.php]
Op Linux-based hosts worden includes echter bekeken vanaf het primaire script, dat door de client wordt aangeroepen. De bovenstaande header.php kan, indien deze direct wordt aangeroepen, dus zonder problemen het functie-script includen. Echter, wanneer header.php door index.php wordt ge-include, zoekt PHP naar functions.php in de directory waar index.php zich bevindt, site/, en niet in site/shared/
Daarvoor wordt op het forum de volgende oplossing gegeven:
include($DOCUMENT_ROOT."/site/shared/functies.php");
Dit werkt probleemloos onder Windows. Onder Linux heb ik echter de volgende situatie:
De files bevinden zich in /home/user/, dus /home/user/public_html/site/ en /home/user/public_html/site/shared/
De site kan op 2 manieren worden aangeroepen, namelijk:
http://IP-ADRES/~user/site/
of
http://user.blablabla/site/
Hostname is hierbij een virtuele host, die in httpd.conf gedefinieerd is met een rootdir op /home/user/public_html. Wanneer de site via de hostname wordt aangeroepen, zal de volgende include dus als volgt verlopen:
$DOCUMENT_ROOT."/site/shared/functies.php
/home/user/public_html/site/shared/functies.php
Perfect dus.
Maar nu gaan we het nog even hebben over het accessen van de site met het IP-adres. Wanneer de server op alleen het IP-adres wordt aangeroepen, dan kom je op de normale site, die zich ook op de server bevindt. De root daarvan is /var/www/htdocs . Wanneer je dus naar http://IP-ADRES/~user/site/ gaat, dan ziet de include er als volgt uit:
$DOCUMENT_ROOT."/site/shared/functies.php
/var/www/htdocs/site/shared/functies.php
Tsja, en dat werkt niet.
Aangezien de site volledig server-onafhankelijk moet zijn, is het per server aanpassen van het script absoluut geen optie. Daarom hoop ik, dat er een andere oplossing is. Iemand een idee?
"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR