Re: This weird behavior is killing

From: Date: Fri, 18 Jun 2004 08:47:39 +0000
Subject: Re: This weird behavior is killing
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-188539@lists.php.net to get a copy of this message
"Daniel Silva" <neus@netvisao.pt> wrote in message news:20040618003108.27700.qmail@pb1.pair.com... > Php.Net wrote: > > The way PHP handles includes is very weird, for example: > > > > - create a folder, name it f ex "includes" > > - create 2 sub-folders, call them level1 and level2 > > - now lets create a file, "includes.php" > > > > includes.php > > ---------------------------------------------- > > > > <? > > echo "testing"; > > ?> > > > > ---------------------------------------------- > > > > - now create 3 dummy files, name them dummy.php and distribute > > them through each folder, in each dummy.php include "includes.php" > > > > <? > > include_once ( 'includes.php' ); > > ?> > > > > <? > > include_once ( '../includes.php' ); > > ?> > > > > <? > > include_once ( '../../includes.php' ); > > ?> > > > > - now in the dummy.php on the last level, include the dummy.php > > from the level below > > > > <? > > include_once ( '../../includes.php' ); > > include_once ( '../dummy.php' ); > > ?> > > > > - now try to run dummy.php from the last level ( the one with 2 includes > > ), what do you get ? a nice message error stating > > > > Warning: main() [function.include]: Failed opening '' for inclusion > > (include_path='.;C:\php5\pear') in > > D:\shared\www\includes\level1\dummy.php on line 2 > > > > it's like php processes the first include relative path, goes down the > > file system tree, stays there and then caches the path, because it > > doesn't reset to the including script path, it just stays there ... > > > > this is very fustrating when you must/want to include one or more files > > in every script, and you have several folders and sub-levels. > > > > there are several workarounds, like out them in a common folder, and add > > it to the include_path either directly in php.ini or using ini_set(), > > but that would be a real pain in the arse ... > > > > solutions ? > > > > regards, > > idss > > Before anyone asks me, yes, the behaviour is the same even with the use > of include_once ou require_once =) The only workaround I see is using a full system path. You could define it in a config file as a constant: define('DIR_INCLUDE', '/path/to/your/file/'); Then use it in your scripts: include_once DIR_INCLUDE . 'file.php'; include_once DIR_INCLUDE . 'file2.php'; HTH, Torsten Roehr

« previous php.general (#188539) next »