Re: Re: Working directory of PHP pages?
| From: | Clancy | Date: | Thu, 12 Mar 2009 05:47:22 +0000 |
| Subject: | Re: Re: Working directory of PHP pages? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-289914@lists.php.net to get a copy of this message | ||
On Wed, 11 Mar 2009 13:03:19 -0500, haliphax@gmail.com (haliphax) wrote:
>On Wed, Mar 11, 2009 at 12:44 PM, Shawn McKenzie <nospam@mckenzies.net> wrote:
>> Clancy wrote:
>>> It is my understanding that when you open a page the PHP server looks for index.php in
>>> the
>>> site root directory, and loads it. As a result the working directory of the page will
>>> be
>>> the root directory of the site. I have always worked on this assumption, and it has
>>> always been correct. On the other hand Stewart thinks that I cannot rely this, and am
>>> likely to get into trouble as a result.
>>>
>>> Are there any systems in which my assumption will not be correct?
>>>
>>
>> In many frameworks this assumption is not correct. I am using the
>> default CakePHP layout as an example.
>>
>> Depending on your terminology, your DocumentRoot is /var/www/ and in
>> this case is also the filesystem path of your site's root dir, however
>> the sites root dir in a URL is /.
>>
>> Consider the CakePHP structure:
>>
>> /var/www/
>> .htaccess
>> index.php
>> /var/www/webroot
>> index.php
>>
>> If you browse to http://example.com/ (in most cases), one
>> of 2 things
>> happens:
>>
>> 1. The webserver opens the /var/www/.htaccess and according to the
>> rewrite rules there it rewrites to /var/www/webroot/. So any getcwd()
>> would be /var/www/webroot/
>>
>> 2. If not using modrewrite, the web server looks for index.html and then
>> index.php in /var/www/ which has a require for webroot/index.php. So
>> any getcwd() would be /var/www/.
>>
>> Consequently, CakePHP and the other frameworks that I've seen use
>> basename() and dirname() in conjunction with __FILE__ to define the
>> paths/relative dirs within the app.
>
>Come to think of it, this may very well be true for all MVC frameworks
>(unless the models, views, and controllers are all in the same
>directory as the launch script). I can at least vouch for the fact
>that CodeIgniter, like CakePHP, will fudge your directory estimation
>if you're expecting getcwd() to be right.
Something Stewart said the other day made me realise that there was a fundamental error in
the way I was thinking about this question. I had been thinking that opendir (.) opened
the root directory, and that paths such as Joe/Nurg.com were relative to the root
directory, but I now realise that they are relative to the current directory, whatever
that might be. (Yes; I should have known better, but there is an awful swamp of burnt out
brain cells at the bottom of my brain.)
So the question I should have asked was "When a web page is loaded, can I rely on the CWD
being the directory containing index.php (or whichever file is actually loaded)?"
Thank you all for your assistance.