Re: The wonderful non-intuitive php include statement
- From: Richard Levasseur <richardlev@xxxxxxxxx>
- Date: Thu, 30 Aug 2007 16:32:08 -0000
On Aug 29, 9:14 pm, Morla...@xxxxxxxxx wrote:
On Aug 29, 11:06 pm, Morla...@xxxxxxxxx wrote:
On Aug 29, 11:00 pm, Geoff Muldoon <geoff.muld...@xxxxxxxxxxxxxx>
wrote:
In article <1188443617.322132.135...@xxxxxxxxxxxxxxxxxxxxxxxxxxx>,
says...
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 = simplexml_load_file('config/dbconfig.xml);
So the call by the simplexml_load_file function is to a file which is
addressed using a relative rather than absolute (starting with a / on *nix
or C: on windoze) file path.
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.
It's finding it as htdocs/config/dbconfig.xml.
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"
Because it's NOT finding it as htdocs/forum/config/dbconfig.xml. Why, coz
it ain't there!
I tried using set_include_path(), which I could not get to work right,
and I also tried to set 'include_path' in php.ini which also did not
work.
Because include_path is used by the include() function, not by the
simplexml_load_file() function?
PHP include seems to work very non-intuitive which is driving me
nuts.
It's simply following standard file system rules.
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.
Find out what your $_SERVER['DOCUMENT_ROOT'] is - use a simple echo
statement if you need to, or read up about phpinfo() - it's likely it
will be /<maybe_something>/htdocs or C:\\<maybe_something>\htdocs by the
sound of it.
The change the call in your function to:
simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/config/dbconfig.xml);
or whatever absolute path you can use to properly locate the file.
Geoff M
I forgot to write the fact that I was also having a problem with
'include()' for instance including a file with an include, which was
causing a similar problem. I am guessing I could also use
$_SERVER['DOCUMENT_ROOT'] for this as well, to use an absolute path
instead of relative.
Seems to be working .... thx ;)
just fyi: relative paths are relative to the executing script, similar
to the command line.
($ is the shell prompt)
/home/richardlev $ php myscript # paths are relative to /home/
richardlev
/home/richardlev $ php subdir/myscript $ paths are relative to /home/
richardlev
/home/richardlev/subdir $ php myscript # paths are relative to /home/
richardlev/subdir
in the context of apache and the web, the 'present working directory'
would be the path to the script, eg document root + url path
it can be a bit counter intuitive if you've been running everything
from the same directory and all the includes just seem to 'work'
if you want a file relative to the source file (eg, DbConfig.class
reads dbconfig.xml in the same dir), use the __FILE__ constant to
figure out the correct path.
finally, it would probably be best to pass down the config file path
from the controlling script, or establish some sort of application
root that it uses as a base path (using docroot is fine if you won't
have another instance in a subdirectory somewhere).
.
- References:
- The wonderful non-intuitive php include statement
- From: Morlaath
- Re: The wonderful non-intuitive php include statement
- From: Geoff Muldoon
- Re: The wonderful non-intuitive php include statement
- From: Morlaath
- Re: The wonderful non-intuitive php include statement
- From: Morlaath
- The wonderful non-intuitive php include statement
- Prev by Date: Re: PHPMailer AltBody variable
- Next by Date: DIY enterprise information portal
- Previous by thread: Re: The wonderful non-intuitive php include statement
- Next by thread: PHP script just stops for no reason
- Index(es):
Relevant Pages
|