PDA

View Full Version : php access shallower folder trouble




gammamonk
Feb 2, 2007, 09:22 AM
Hey everybody--

I'm trying to use php to access files in a shallower path on my webserver, and I can't get it going. To clarify:

from:
www.website.edu/computing/faq/1747/index.php

I need to access: /computing/footer.php

When I do,
if(file_exists("/computing/footer.php");
it doesn't work.

I can do:
if(file_exists("http://website.edu/computing/faq/1747/index.php");
but that's insane, and the footer breaks when I actually use it.



jeremy.king
Feb 2, 2007, 09:55 AM
Hey everybody--

I'm trying to use php to access files in a shallower path on my webserver, and I can't get it going. To clarify:

from:
www.website.edu/computing/faq/1747/index.php

I need to access: /computing/footer.php

When I do,
if(file_exists("/computing/footer.php");
it doesn't work.

I can do:
if(file_exists("http://website.edu/computing/faq/1747/index.php");
but that's insane, and the footer breaks when I actually use it.

file_exists uses an OS file system path, not an absolute URL like path. In other words, the file that is served at http://website.edu/computing/footer.php will not be found on the filesystem at /computing/footer.php

That said, you have two options. Use a fully qualified file path - the path will really be based on your webserver configuration - OR simply use a relative path

In your example, if you are trying to access it on http://website.edu/computing/faq/1747/index.php then you could use

file_exists("../../footer.php")

Relative paths are easier and should you move your site to another server or directory, they will still work (for the most part)!

Hope that makes sense and Good Luck

gammamonk
Feb 2, 2007, 10:11 AM
Ok cool--

so I did:

<?php if(file_exists("../../../COMPUTING/footer.php")) require("../../../COMPUTING/footer.php") ?>

And that worked. -- But I'd love to make it more solid. I need to have the exact number of "../" in there for it to work. I can't just do ../../../../../ until the cows come home, as I tried that and it didn't work. I wish I could just get to the root of the webserver and then go.

jeremy.king
Feb 2, 2007, 10:21 AM
Ok cool--

so I did:

<?php if(file_exists("../../../COMPUTING/footer.php")) require("../../../COMPUTING/footer.php") ?>

And that worked. -- But I'd love to make it more solid. I need to have the exact number of "../" in there for it to work. I can't just do ../../../../../ until the cows come home, as I tried that and it didn't work. I wish I could just get to the root of the webserver and then go.

Technically, you could add the Computing folder location to the include_path (http://us2.php.net/manual/en/ini.core.php#ini.include-path) of your php.ini, but my guess is you don't have control of this file.

If you really want, find out the file path of the Computing Folder on the server and store that as a constant in a constants file, then you can always use the constant to build the path you want, but the caveat is that to include the constants file, you still need a full path or relative file path.

Relative paths aren't that bad. Also, if you use include() instead of require(), it will generate a warning but continue processing, where require() will generate a FATAL error. This means you don't necessarily need the file_exists() check, because most web servers don't show warnings (again a php.ini setting)