Odd PHP question

John Seth johnseth at phoenixwing.com
Mon Jan 16 20:20:17 MST 2006


Yes, the only place that "DocumentRoot" is allowed by Apache to be 
specified is within the global perspective, or within the <VirtualHost> 
directive's.  (http://httpd.apache.org/).  Global variables like 
PHP_SELF and DOCUMENT_ROOT are taken directly from the server environment.

I'm not really sure what to suggest here that would work for you, 
though, as a matter of minor opinion I'd suggest finding a host that 
doesn't make you mess with .htaccess files for subdomains. Most hosts I 
know of, have some sort of web based control panel using Webmin, CPanel, 
Plesk or a custom made one.

You might be able to create an include file you can include() into any 
files you use, which would have your own 'document root' variable of 
sorts ($DOC_ROOT = $_SERVER['DOCUMENT_ROOT']."/subdir/";) and/or modify 
the output of PHP_SELF ($DOC_SELF = $_SERVER['PHP_SELF']; 
trim("something", $DOCSELF);)  I'm basically pulling at straws though.  
If you are interested in modifying PHP variables and code, I'd suggest 
looking at PHP's website and/or other forums or mailing lists better 
suited to PHP.

Hope that helps some...

  - Tony




Kurt Granroth wrote:
> The more I research this, the more it looks like I would have to reset 
> the DocumentRoot dynamically... and so far, that doesn't seem 
> possible.  I've tried the following all of the following directives in 
> my .htaccess file (one at a time):
>
> php_value doc_root /var/www/domain.com/sub
> php_value user_dir domain.com/sub
> DocumentRoot /var/www/domain.com/sub
> <Directory /var/www/domain.com/sub>
>   DocumentRoot /var/www/domain.com/sub
> </Directory>
> <Location />
>   DocumentRoot /var/www/domain.com/sub
> </Location>
> <IfModule mod_userdir.c>
>   UserDir domain.com/sub
> </IfModule>
>
> The PHP ones are ignored.  All the rest give Internal Server errors.  
> It seems that PHP used to allow setting doc_root and user_dir in 
> .htaccess but that was a bug and was fixed years ago.  Alas.
>
> It's looking like the only way to set the DocumentRoot or UserDir is 
> to do so in the system level httpd.conf.  Am I missing anything, here?
>
> On Jan 15, 2006, at 8:07 PM, John Seth wrote:
>
>> If I am writing my own code correctly, $_SERVER['PHP_SELF'] should 
>> return the full path of the script and filename from the document 
>> root of the website.  If your host has your subdomain set up right, 
>> you should be able to issue: "echo 
>> $_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']" in a php script and 
>> have it return the complete path of the file via the filesystem... 
>> take out the "DOCUMENT_ROOT" and you should be left with the path the 
>> webserver uses to the script.  The above  example is what I use to 
>> include files not in the same directory, minus the php_self obviously.
>>
>>   However, in cases where I submit a form back onto itself I use 
>> $_SERVER['PHP_SELF'] all the time.  Hence my questioning if you know 
>> what the server is using for DOCUMENT_ROOT.  If it thinks the 
>> document root is "/var/www/domain.com/" and the PHP_SELF refers to 
>> "/sub/form.php", then php_self will not return what you expect, nor 
>> want it to.
>>
>>   I would suggest taking a look at: 
>> http://us3.php.net/reserved.variables  for more help.
>>
>> Hope that helps,
>>
>>
>>    Tony
>>
>>
>>
>>
>> Kurt Granroth wrote:
>>> Actually, I should have specified that the PHP scripts are all 3rd 
>>> party ones.  If they are scripts that I wrote, then there are always 
>>> ways around it.  But the 3rd party ones invariably do 'dirname' on 
>>> PHP_SELF (or something very similar).  That's why I want to know a 
>>> way around that at a higher-level.  Maybe some php.ini setting or 
>>> somesuch.
>>>
>>> On Jan 15, 2006, at 5:07 PM, alex at crackpot.org wrote:
>>>
>>>> Try a test script like this : 'var_dump($_SERVER);'.  This will 
>>>> show you all the
>>>> variables provided by the web server (like DOCUMENT_ROOT, PHP_SELF, 
>>>> etc.)  There
>>>> may be one which has what you want.  Maybe PATH_TRANSLATED?
>>>>
>>>> alex
>>>>
>>>> Quoting Kurt Granroth <plug-discuss at granroth.org>:
>>>>
>>>>> This isn't directly Linux related but since I know there are a lot of
>>>>> PHP folks on this list, I thought I'd ask here.
>>>>>
>>>>> I have multiple domain and multiple subdomain support with my web
>>>>> hosting enabled mostly by using mod_rewrite.  The end result is that
>>>>> I can define my domains and subdomains by just creating the proper
>>>>> directory structure.
>>>>>
>>>>> For instance, say I have "sub.domain.com", "other.domain.com", and
>>>>> "cool.com".  I would simply create following directory structure:
>>>>>
>>>>> $DOCUMENT_ROOT/domain.com/sub/
>>>>> $DOCUMENT_ROOT/domain.com/other/
>>>>> $DOCUMENT_ROOT/cool.com/
>>>>>
>>>>> So far, so good.  That all works just as expected.  Now say, though,
>>>>> that I have a PHP file 'index.php' in the directory 'domain.com/sub'
>>>>> that looks like so:
>>>>>
>>>>> <?php echo $_SERVER["PHP_SELF"] ?>
>>>>>
>>>>> I then execute the script using "http://sub.domain.com/index.php".
>>>>> The result:
>>>>>
>>>>> /domain.com/sub/index.php
>>>>>
>>>>> This is technically accurate... but not at all what I want.  Why?
>>>>> Because typically, PHP code uses the dirname() of this to find other
>>>>> relative scripts.  If you do that, though, then the constructed URL
>>>>> will look like so:
>>>>>
>>>>> http://sub.domain.com/domain.com/sub/someother.php
>>>>>
>>>>> instead of
>>>>>
>>>>> http://sub.domain.com/someother.php
>>>>>
>>>>> So it seems that I somehow have to "fool" PHP into thinking that
>>>>> PHP_SELF (and SCRIPT_NAME and SCRIPT_FILENAME) is "/index.php"
>>>>> instead of "/domain.com/sub/index.php"
>>>>>
>>>>> Is that even possible?  If so, how.  If not, is there any way around
>>>>> this at all?
>>>>>
>>>>> Thanks!
>>>>> Kurt
>>>>> ---------------------------------------------------
>>>>> PLUG-discuss mailing list - PLUG-discuss at lists.plug.phoenix.az.us
>>>>> To subscribe, unsubscribe, or to change  you mail settings:
>>>>> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------
>>>> PLUG-discuss mailing list - PLUG-discuss at lists.plug.phoenix.az.us
>>>> To subscribe, unsubscribe, or to change  you mail settings:
>>>> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>>>>
>>>>
>>>
>>> ---------------------------------------------------
>>> PLUG-discuss mailing list - PLUG-discuss at lists.plug.phoenix.az.us
>>> To subscribe, unsubscribe, or to change  you mail settings:
>>> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>> ---------------------------------------------------
>> PLUG-discuss mailing list - PLUG-discuss at lists.plug.phoenix.az.us
>> To subscribe, unsubscribe, or to change  you mail settings:
>> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>
> ---------------------------------------------------
> PLUG-discuss mailing list - PLUG-discuss at lists.plug.phoenix.az.us
> To subscribe, unsubscribe, or to change  you mail settings:
> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.plug.phoenix.az.us/pipermail/plug-discuss/attachments/20060116/6ce7b819/attachment-0001.htm


More information about the PLUG-discuss mailing list