[PHP5] undefined constant. gebruik van de define() functie

Pagina: 1
Acties:

  • StevieNL
  • Registratie: April 2006
  • Laatst online: 11-08-2023
PHP: index.php
1
2
3
4
5
<?php    
  require_once('./constants.php'); 
  require_once(WEB_BIN . "header.bin.php"); 
?> 
<div id="logo"><?php Print "<img src=" .WEB_IMG . "plaatje.jpg>"?></div> 
PHP: constants.php
1
2
3
4
5
6
7
8
<?php 
  if (!defined('WWW_ROOT')){ 
    define('WWW_ROOT', 'http://' . $_SERVER['SERVER_NAME'] . '/concept/'); 
  } 
  define('WEB_IMG'      , WWW_ROOT . 'img/'); 
  define('WEB_INC'      , WWW_ROOT . 'inc/'); 
  define('WEB_BIN'      , WWW_ROOT . 'bin/'); 
?> 
PHP: header.bin.php
1
2
3
<?php 
  require_once(WEB_INC . 'main.classes.php'); 
?> 
Nu gaat het bij de eerste pagina helemaal goed(index.php) en worden de constants netjes ingevoerd en het plaatje wordt ook netjes geopend. Maar als ik een volgende required pagina opvraag (header.bin.php) wordt er gezegd "Use of undefined constant WEB_INC - assumed 'WEB_INC'".

En als ik met get_defined_constants() op de pagina (header.bin.php) alles opvraag komen daar dus niet mijn voorgedefineerde variablen te staan?

Wie kan mij helpen en heeft er wel wat verstand of ervaring met de define() functie??

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Je include wel constants.php in header.bin.php?

Developer Accused Of Unreadable Code Refuses To Comment


  • user109731
  • Registratie: Maart 2004
  • Niet online
Komt dat niet omdat WEB_BIN en WEB_INC gedefinieerd zijn als url? Daardoor worden ze volgens mij eerst door de webserver geparst, en het resultaat geinclude. Dit is extra overhead en doet waarschijnlijk niet wat je wilt, het is dus handiger om een pad t.o.v. je filesystem te kiezen :)

edit: kijk eens naar $_SERVER['DOCUMENT_ROOT'], $_SERVER['PHP_SELF'], etc.

[ Voor 11% gewijzigd door user109731 op 21-05-2007 11:35 ]


  • mithras
  • Registratie: Maart 2003
  • Niet online
JanDM schreef op maandag 21 mei 2007 @ 11:32:
Komt dat niet omdat je WEB_BIN en WEB_INC gedefinieerd zijn als url? Daardoor worden ze volgens mij eerst door de webserver geparst, en het resultaat geinclude. Dit is extra overhead en doet waarschijnlijk niet wat je wilt, het is dus handiger om een pad t.o.v. je filesystem te kiezen :)
Dat klopt: je roept nu de pagina http://[server_name.tld]/concept/bin/header.bin.php op, terwijl je waarschijnlijk de pagina /home/user_name/public_html/concept/bin/header.bin.php wil opvragen :)

Ik zou dus naast een constante WWW_ROOT ook een LOCAL_ROOT oid definiëren en vanuit die constant require'n en includen :)

[ Voor 11% gewijzigd door mithras op 21-05-2007 11:37 ]


  • StevieNL
  • Registratie: April 2006
  • Laatst online: 11-08-2023
Yep dat was hem :D

Thx voor de hulp/advies

PHP: constants.php
1
2
3
4
5
6
7
8
9
10
11
<?php 
  if (!defined('WEB_ROOT')){ 
    define('WEB_ROOT', current(pathinfo(__FILE__)) . '/'); 
  } 
  if (!defined('WWW_ROOT')){ 
    define('WWW_ROOT', 'http://' . $_SERVER['SERVER_NAME'] . '/concept/'); 
  } 
  define('WEB_IMG'      , WWW_ROOT . 'img/'); 
  define('WEB_INC'      , WEB_ROOT . 'inc/'); 
  define('WEB_BIN'      , WEB_ROOT . 'bin/'); 
?>