Re: The wonderful non-intuitive php include statement



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).

.



Relevant Pages

  • Re: using xml to save/open project data
    ... http://www.TransProCalc.org - Free translation project mgmt software ... set filename tk_getOpenfile ... Exec'ing the script you run it as a separate process, your script won't be able to access its vars. ... generating the xml file is easy enough. ...
    (comp.lang.tcl)
  • using xml to save/open project data
    ... Now, I've made a program, a translation project management tool, ... set filename tk_getOpenfile ... to run the script to reset the variables to reopen the project. ... I've been told that generating an xml file is the best way to go about ...
    (comp.lang.tcl)
  • Re: WSH and XML Parser
    ... Once you pass that hurdle it is routine selectNodes or selectSingleNode. ... an xml file there is a fat chance that you will never learn how to read one. ... For those who manage to set their server shares via script, ... > I would like to map a set of network drives in which the data fro the ...
    (microsoft.public.scripting.wsh)
  • RE: Problem with LWP::UserAgent
    ... have an xml file that contains a list of URLs. ... hash and pass them as a parameter into the function that does LWP get. ... > assume your script is named net.pl, you can involve the debugger with: ...
    (perl.beginners)