Odd PHP question

Kurt Granroth plug-discuss at granroth.org
Mon Jan 16 13:35:54 MST 2006


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



More information about the PLUG-discuss mailing list