|
Posted by Leif Gregory on 03/04/05 21:47
Hello Richard,
Friday, March 4, 2005, 11:41:29 AM, you wrote:
R> http://php.net/set_include_path
Ok... Maybe I should put all this together in one e-mail so that all
the issues can be looked at...
The problem:
Finding a reliable method to include files, keeping in mind the
following:
1. The site could be moved to a completely new host which could be of
a different OS, and/or web server software, and could either be the
one and only site on that host (dedicated server), or could be a
virtual host (shared server).
2. The site could remain on the same host but is required to move to a
new path. i.e. from htdocs/mysite to htdocs/mynewsite
3. The web host may or may not allow the use of .htaccess (Some Sambar
configurations for example).
4. The method used would not affect any other virtual hosts. Meaning,
the method used must be independent for each virtual host.
5. The method used would not utilize a folder where other virtual
hosts could gain access to the included file (php.ini
include_path).
6. The method (and this is the important one IMHO) would not require
editing "x" number of pages in a site to change some static path
that was set on each page.
7. The method used would not require a dedicated "include" file in
every single folder of the site that could be included because it's
in the same folder as the page needing it, because those would all
have to be edited to fix the path if condition 1 or 2 was met.
Previously proposed solutions:
1. PHP.ini include_path
This affects all virtual hosts and would require administrative
overhead to prevent the owners of each virtual host from gaining
access to other virtual host's include files. I suppose you could
set it to something like: include_path="/php/includes" and have a
separate subfolder under that for each virtual host. But since that
folder is outside the web folder, there would have to be some
mechanism (additional FTP account) for each person to gain access
to their own include folder to add/edit/delete files in that
folder. Then if the site is moved and they aren't using an
include_path, you have to fix all your pages.
2. set_include_path
This means if your site moves, you must edit "x" number of pages in
the site to correct the path.
3. An include file in every directory to set the include path.
You'd have to edit "x" number of these files to correct the path if
the site moves. This would be much less work than the previous
item, but it could be a lot of work on very big sites where you
don't have shell accounts to do some scripted find/replace with.
4. Use the full URL to the file in the include statement.
See item 2.
5. $_SERVER["DOCUMENT_ROOT"] and $_SERVER['PATH_TRANSLATED']
Not always available or incorrect see
mid:1778675148.20050303102623@kwikin.com
I may have missed some things, and if I've misunderstood how something
should work, then please let me know. I'm just looking for a more or
less foolproof method which doesn't require fixing code if the site is
moved. The closest I can come to it is the function I wrote but is a
pain because you have to put it in every page where you need an
included file. Granted, you only have to do it once, and then you're
done and a site move wont affect it, but it's still kludgy if you ask
me.
*******************
<?php
function dynRoot()
{
$levels = substr_count($_SERVER['PHP_SELF'],"/");
for ($i=0; $i < $levels - 1; $i++)
{
$relativeDir .= "../";
}
return $relativeDir;
}
?>
*******************
and then calling it as such:
include(dynRoot() . 'includes/db_connect.php');
I've had to move client sites between Sambar, Apache, IIS and Windows,
Linux. Most times I've had to go in and fix include paths because one
of the above solutions were originally used and wasn't viable on the
new host.
Thanks.
--
Leif (TB lists moderator and fellow end user).
Using The Bat! 3.0.2.3 Rush under Windows XP 5.1
Build 2600 Service Pack 2 on a Pentium 4 2GHz with 512MB
[Back to original message]
|