Reply to Re: The wonderful non-intuitive php include statement

Your name:

Reply:


Posted by Rik Wasmus on 09/02/07 19:59

On Thu, 30 Aug 2007 05:13:37 +0200, <Morlaath@gmail.com> wrote:

> Ok .. I have some classes set up to do some database queries and what
> not. The database configuration is an XML file. Now I need to include
> this class in a few pages, in different directories. Here is an
> example of the class.
>
> class foo {
> private $xml;
>
> function foo() {
> $this->xml =3D simplexml_load_file('config/dbconfig.xml);
> }
>
> public function dbStuff() {
> //do some db stuff
> }
>
> etc......
> }
>
>
> I am using apache which has php set up as a module. This class (which
> resides 2 directories deep e.g htdocs/classes/foo) works fine in
> main.php which resides in htdocs. But if I include this class in
> another php file which is in a different directory .... say htdocs/
> forums I get this type of error:
>
> Warning: simplexml_load_file() [function.simplexml-load-file]: I/O
> warning : failed to load external entity "config/dbconfig.xml"
>
> I tried using set_include_path(), which I could not get to work right,=



set_include_path(get_include_path() . PATH_SEPARATOR . =

$_SERVER['DOCUMENT_ROOT']);

> and I also tried to set 'include_path' in php.ini which also did not
> work. PHP include seems to work very non-intuitive which is driving me=

> nuts. They really need to implement this a little better. I really
> don't see why the simplexml_load_file works in htdocs/classes/foo and
> not htdocs/forums.

Well, it's how you look at it. Being aware of what the current working =

directory is, or applying mechanisms so you don't have to is something t=
o =

learn. You are the one in control, and certainly with all kinds of files=
=

scattered about the place with possibly the same names I'd really hate f=
or =

PHP to 'guess' what I want. Important to remember is that the current =

working directory normally is the path of the script that got started by=
=

the request, and will NOT change in other included files. So a request =

that goes to http://www.example.com/index.php will havbe your =

'..../htdocs' as CWD for the while script (including includes :) ) for t=
he =

rest of the request, a request to http://www.example.com/foo/bar.php wil=
l =

have '..../htdocs/foo' as CWD. Use echo getcwd(); to understand more =

clearly what your scripts are doing.

That being said, for simple projects I'd normally use either something =

like this (for relative to root):

$this->xml =3D =

simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/config/dbconfig.xml);

or this (for relative to file):

$this->xml =3D simplexml_load_file(dirname(__FILE__).'/config/dbconfig.x=
ml);
-- =

Rik Wasmus

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация