[PHP] Lastig probleem met includen Header & Footer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een lastig probleem en zal proberen het zo duidelijk mogelijk uit te leggen.

Al mijn PHP files zijn volgens de volgende globale structuur opgebouwd:

<?PHP
include ("includes/config.php");
include ("$include_dir/header.php");

<variabele body>

include ("$include_dir/footer.php");
?>

In de config.php file worden diverse globale var. gedefineerd met onder andere diverse directories.

Het probleem doet zich voor op het moment dat de website naar een andere server verplaatst wordt en als de website in een subdirectory geplaatst word. Op dit moment kloppen de paden niet meer naar de include directory waar de config.php file in staat. Dit is namelijk de enige file die ik direct moet aanroepen en waarbij ik moet aangeven in welke directory deze staat.
Als nu de website verplaats word moet ik in elke file het pad naar de config file aanpassen.
Bv: www.3pinter.nl/include/config.php
Nu wordt de site verplaatst naar: www.3pinter.nl/test
Dan veranderd het pad naar: www.3pinter.nl/test/include/config.php

Btw. www.3pinter.nl is fictief.

En moet ik elke file aanpassen, dit wil ik niet.
Ook wil ik niet dat ik bij elke file met bv ../../../include moet werken.
Hoe kan ik automatisch het pad laten aanpassen? Iemand een oplossing?

[ Voor 10% gewijzigd door Verwijderd op 11-10-2004 15:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Relatieve padnamen :> .

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar heb ik ook mee gespeeld, maar ik krijg het niet goed werkend.
Ik blijf het probleem ondervinden dat als de root van de website verandert naar bv. een submap dat ik in elke file het pad naar de config.php moet aanpassen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap het hele probleem niet. Waarom gooi je die config.php niet gewoon in een include directory onder de directory waar al je php files in staan? Dan hoef je alleen maar include ("includes/config.php"); te doen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-09 21:03

Sosabowski

nerd

php bestandje
PHP:
1
2
3
$rootdir = "http://www.mijnsite.nl/";
// of gebruik relatieve paden :)
include ("includes/config.php");

config.php:
PHP:
1
echo '<a href="' . $rootdir . 'info.php" titel="informatie">linkje naar info</a>';

zoiets?

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


Acties:
  • 0 Henk 'm!

Verwijderd

Als je geen relatieve paden wilt gebruiken kan je $GLOBALS["DOCUMENT_ROOT"] gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
IorGie schreef op 11 oktober 2004 @ 15:29:
php bestandje
PHP:
1
2
3
$rootdir = "http://www.mijnsite.nl/";
// of gebruik relatieve paden :)
include ("includes/config.php");

config.php:
PHP:
1
echo '<a href="' . $rootdir . 'info.php" titel="informatie">linkje naar info</a>';

zoiets?
Ok, wil ik best doen.
Maar als dan de root veranderd? Moet ik in elke file die rootdir var aanpassen.
Ok, zeg jij "stop deze dan in een config file en pas het daar aan."
Ook goed. Maar het feit blijft dat je die configfile moet aanroepen en ook daarvoor met een pad aangeven. Verander de root en het pad naar de config verander ook.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Als je nou eens een scriptje maakt waar je het volgende inzet:
PHP:
1
2
3
<?php
phpinfo();
?>

Dan krijg je een mooi overzicht met globale variabelen te zien. Dan zul je ook zien dat:
PHP:
1
2
3
$rootdir = 'http://' .$_SERVER['SERVER_ADDR'];
//en:
$rootdir = 'http://' .$_SERVER['SERVER_NAME'];

Precies doen wat je wil. Overigens snap ik nog steeds niet waarom je het zo zou willen doen. Het pad naar je include directory ligt toch vast vanaf de huidige scriptlokatie.
PHP:
1
include '../includes/config.php';

Werk altijd

[ Voor 8% gewijzigd door T-MOB op 11-10-2004 16:46 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Heb je toevallig toegang tot de php.ini file? Dan zou je nl met de "include_path" directive deze kunnen instellen en hoef je dus nooit meer deze aan te passen. Kan je ook de includes buiten de webroot houden. :)

Edit: met ini_set kan het overigens ook. ;)

[ Voor 23% gewijzigd door Banpei op 11-10-2004 16:55 ]

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
IorGie schreef op 11 oktober 2004 @ 15:29:
PHP:
1
$rootdir = "http://www.mijnsite.nl/";
Als je dat nou meteen even splitst in domain en dir, dan kun je meteen die settings ook voor cookies gebruiken. :)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

niet zo netjes, maar werkt wel:
PHP:
1
2
3
error_reporting(0);
if(include "../functions.inc.php"){}
else include "functions.inc.php";

met else ifjes kun je elke mogelijke manier afvangen :+

[ Voor 24% gewijzigd door Verwijderd op 11-10-2004 21:02 ]


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 21:22
Verwijderd schreef op 11 oktober 2004 @ 21:01:
niet zo netjes, maar werkt wel:
PHP:
1
2
3
error_reporting(0);
if(include "../functions.inc.php"){}
else include "functions.inc.php";

met else ifjes kun je elke mogelijke manier afvangen :+
Eh... Dat is wel erg vies }:O

Zowiezo hoeven die {} er niet in. Verder kun je beter checken of het bestand readable is ofzo, en als 'ie dat is includen, anders niet includen.

Dan nog is het gewoon vies om het zo te doen.

[ Voor 4% gewijzigd door Mithrandir op 11-10-2004 21:08 ]

Verbouwing


Acties:
  • 0 Henk 'm!

Verwijderd

Als noodoplossing zou je natuurlijk een extra file kunnen aanmaken die je config.php include op de plaats waar al die andere files de config.php verwachten. (In die file include je je config.php die dus verhuist is)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
T-MOB schreef op 11 oktober 2004 @ 16:45:
Als je nou eens een scriptje maakt waar je het volgende inzet:
PHP:
1
2
3
<?php
phpinfo();
?>

Dan krijg je een mooi overzicht met globale variabelen te zien. Dan zul je ook zien dat:
PHP:
1
2
3
$rootdir = 'http://' .$_SERVER['SERVER_ADDR'];
//en:
$rootdir = 'http://' .$_SERVER['SERVER_NAME'];

Precies doen wat je wil. Overigens snap ik nog steeds niet waarom je het zo zou willen doen. Het pad naar je include directory ligt toch vast vanaf de huidige scriptlokatie.
PHP:
1
include '../includes/config.php';

Werk altijd
Idd werkt $rootdir = 'http://' .$_SERVER['SERVER_ADDR/NAME']; heel goed, en dit gebruik ik nu ook.
Maar het blijft dat ik dan overal de directory moet aangeven. Je krijgt namelijk ziets van: $rootdir = 'http://' .$_SERVER['SERVER_ADDR'].'directory';

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Verwijderd schreef op 11 oktober 2004 @ 22:12:
[...]


Idd werkt $rootdir = 'http://' .$_SERVER['SERVER_ADDR/NAME']; heel goed, en dit gebruik ik nu ook.
Maar het blijft dat ik dan overal de directory moet aangeven. Je krijgt namelijk ziets van: $rootdir = 'http://' .$_SERVER['SERVER_ADDR'].'directory';
Ik schreef niet voor niets over PHPinfo. Daar staat bijvoorbeeld ook $_SERVER['PHP_SELF'] tussen. De naam van het script waarin je hem aanroept vanaf de rootdir. Daar kun je vanalles mee, als je bijvoorbeeld explode op '/'....

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
T-MOB schreef op 11 oktober 2004 @ 22:17:
[...]


Ik schreef niet voor niets over PHPinfo. Daar staat bijvoorbeeld ook $_SERVER['PHP_SELF'] tussen. De naam van het script waarin je hem aanroept vanaf de rootdir. Daar kun je vanalles mee, als je bijvoorbeeld explode op '/'....
Kijk hier heb ik iets aan, alhoewel ik niet helemaal begrijp hoe ik dat moet aanpakken met explode. Kun je misschien een voorbeeld geven waar ik op verder kan gaan?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

In plaats van zelf moeilijk te gaan zitten exploden kun je beter gebruik maken van de functies dirname () en basename ()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heeft er toevallig ook iemand een goed werkend voorbeeld?
Pagina: 1