| 
	
 | 
 Posted by Logos on 01/02/08 17:21 
On Dec 17 2007, 5:27 am, Jerry Stuckle <jstuck...@attglobal.net> 
wrote: 
> Royan wrote: 
> > Thanks Steve, thats a great idea, i've especially liked that part :) 
> >>> $relativePath     = strlen($parsedUri) - strlen($relativeUri) - 1; 
> 
> > Unfortunately this approach works great only if you can modify PHP.ini 
> > but when you are on virtual hosting, the only way you can modify 
> > settings in PHP.ini is by calling ini_set() function which has to be 
> > invoced from somewhere. And in my case this "somewhere" is global.inc 
> > This file is meant to keep all global stuff so it has to be included 
> > into each and every file in my project, but this is the original 
> > problem -- i can'tincludeit. Seems to be a vicious circle. 
> > The only solution i can think of right now is to use the absolute path 
> > for "global.inc" in each call to require_once. Thus i can put your 
> > code that calculates relative path in "global.inc" and use it across 
> > all other files. 
> 
> > 2BKDotCom 
> >>> logger.inc doesn't need toincludeglobal.inc as long as global.inc 
> >>> has been included before logger.inc is included.. 
> 
> > It appears I've made a mistake in my original post. In fact you don't 
> > have toinclude"global.inc" into foo.php, the error would persist. If 
> > you wish I can send you test files that replicate the problem 
> 
> > On Dec 17, 2:30 am, "Steve" <no....@example.com> wrote: 
> >> "Royan" <romayan...@gmail.com> wrote in message 
> 
> >>news:8769e733-17fe-4083-865c-ccd496707023@e25g2000prg.googlegroups.com... 
> 
> >>> Ok the problem is quite hard to explain, but i'll try to keep it as 
> >>> simple as i can. Imagine I have the following structure of my files 
> >>> and folders: 
> >>> /root/global.inc 
> >>>      |__/files/foo.php 
> >>>      |__/utils 
> >>>                 |__/logs/logger.inc 
> >>> When I run foo.php I get the following error: 
> >>> ========== 
> >>> Fatal error: require_once() [function.require]: Failed opening 
> >>> required '../../global.inc' (include_path='.;E:\www\root\') in E:\www 
> >>> \root\utils\logs\logger.inc on line 3 
> >>> ========== 
> >>> That error occurs because 
> >>> 1) "global.inc" is included ("required") into "logger.inc" and 
> >>> "foo.php" 
> >>> 2) "logger.inc" is included into "foo.php" 
> >>> See, foo.php includes its file as  "../global.inc" and logger.inc 
> >>> "../../global.inc" (note relative path differs) 
> >>> So if you now try to run "foo.php" the require_once from "logger.inc" 
> >>> would start looking for "global.inc" relatively /root/files which is 
> >>> wrong. 
> >>> My question is... how do I make PHPincludefiles relative to their 
> >>> location not their current "include" directory? 
> >> i know what you mean. there are other solutions but this one was a quick fix 
> >> for me and avoids some other setup/config difference on various systems. 
> >> anyway, i use the following code. if you put it into a file called 
> >> relative.path.php, save the file in your php.ini include_path. from then on 
> >> in all of your scripts, all you have to do is this: 
> 
> >> <? 
> >> require_once 'relative.path.php'; 
> >> require_once $relativePath . 'global.inc'; 
> >> ?> 
> 
> >> put that in logger.inc and foo.php and nothing blows up. here's the code for 
> >> relative.path.php: 
> 
> >> <? 
> >> $parsedUri        = dirname($_SERVER['PHP_SELF']); 
> >> $parsedUri       .= substr($parsedUri, -1) != '/' ? '/' : ''; 
> >> $relativeUri      = str_replace('/', '', $parsedUri); 
> >> $relativePath     = strlen($parsedUri) - strlen($relativeUri) - 1; 
> >> if ($relativePath < 0){ $relativePath = 0; } 
> >> $relativePath     = str_repeat('../', $relativePath); 
> >> if (!$relativePath){ $relativePath = './'; } 
> >> ?> 
> 
> >> hth. 
> 
> Royan, 
> 
> BKdotcom has the right answer.  Use $_SERVER['DOCUMENT_ROOT'] to get to 
> the root directory of your site, then refer to everything form there. 
> 
> It works on all sites, and requires no modification the php.ini file. 
> And the beauty of it is, if you have a different location for the root 
> directory on your development site, the code still works in both places. 
> 
> -- 
> ================== 
> Remove the "x" from my email address 
> Jerry Stuckle 
> JDS Computer Training Corp. 
> jstuck...@attglobal.net 
> ================== 
 
FYI, $_SERVER['DOCUMENT_ROOT'] does NOT work on IIS, at least not with 
PHP 5.
 
[Back to original message] 
 |