Re: Opendir on site root directory?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> >> >> I want to index the files on a website recursively. The program will
>> run
>> >> in
>> >> >> the site root
>> >> >> directory, which GETCWD reports as D:/Websites/Website_1.  I can open
>> >> any
>> >> >> file in the root
>> >> >> directory simply using its file name; Joe.dat, for example, and I can
>> >> >> opendir for any
>> >> >> subdirectory; eg
>> >> >>
>> >> >>        opendir(Subdirectory_1);
>> >> >>
>> >> >> but opendir () does not seem to work, and the only way I can find to
>> >> open
>> >> >> the root
>> >> >> directory is to give its full path; eg
>> >> >>
>> >> >>        opendir (D:/Websites/Website_1);
>> >> >>
>> >> >> I have got the program working by using the full path to open the
>> root
>> >> >> directory, and then
>> >> >> using relative paths to open the subdirectories and individual files,
>> >> but
>> >> >> this seems
>> >> >> rather a kludge, and I am wondering if there is a way to open the
>> root
>> >> >> directory without
>> >> >> specifying an absolute path?
>> >> >
>> >> >
>> >> >The current working directory cannot be trusted to be "right". The best
>> >> >option is to use dirname(__FILE__) and add '/..' as many times as
>> needed
>> >> to
>> >> >get from the current file to the document root you're after.
>> >>
>> >> It has always worked for me.  But then I never change directory. But
>> both
>> >> give a hardware
>> >> dependent answer;
>> >>
>> >> echo '<p>Current directory is '.__FILE__.', CWD is '.getcwd().'</p>';
>> gives
>> >>
>> >> Current directory is D:\Websites\Corybas\Cydaldev\Dev\Testbed_2.php, CWD
>> is
>> >> D:\Websites\Corybas.
>> >
>> >
>> >Not sure what you mean by a hardware-dependent answer. The current working
>> >directory for any given script is determined by the web server and so it
>> >cannot be assumed to be the location of the current script.
>> >dirname(__FILE__) will give you the directory the current script is in.
>>
>> I agree that 'hardware dependent' was not the right word, but what I meant
>> was that if I
>> am running the local version of my program getcwd() will return
>> 'D:\Websites\Corybas',
>> where as if I am running the remote version it will return
>> 'home/Corybasftp/www'.
>
>
> This should be irrelevant in your code, something you can achieve using
> dirname(__FILE__).
>
> My webpage is always launched by loading index.php from the root directory,
>> and I don't
>> think I ever change the working directory, so although the code actually
>> being executed at
>> any given time is usually in a subdirectory, getcwd() will reliably return
>> the (system
>> dependent) long definition of the root directory.
>
>
> Either I'm not explaining this well enough or you're just not getting it.
> Ignore the current working directory - it's not reliable. If every page is
> created by a single script then the solution is to define a constant at the
> top of that script that gives you the directory that script is in....
>
> define('ROOT_DIR', dirname(__FILE__));
>
> Then when you need to refer to another file in your directory structure you
> do so relative to the location of index.php. So if you have a directory
> named arse in the same folder as index.php you'd refer to that like so...
>
> ROOT_DIR.'/arse'
>
> If that's not clear maybe this will help:
> http://dev.stut.net/php/dirname.php
>
>>Based on that the following should work in your particular situation, but
>
>>rather than just using this I encourage you to understand why it works...
>> >opendir(dirname(__FILE__).'/../Cydaldev');
>>
>> Looking into this I did find that 'opendir('Albums/../');', where 'Albums'
>> can be any
>> subdirectory I know to be present, will reliably open the root directory.
>
>
> You clearly haven't looked into this at all since you're still not using
> dirname(__FILE__), and if this email complete with the example script above
> doesn't get the point across I give up. Have you even looked up dirname in
> the manual? http://php.net/dirname
>
> As a result of what seems to me to be an oversight in the design of
>> opendir(), in that
>> opendir(Fred) and opendir(Fred/Nurg) will open the appropriate sub
>> directories but
>> opendir() will not open the root directory, I can readily index all the
>> subdirectories by
>> giving their relative paths, but I have to resort to a kludge to index the
>> root directory,
>> and another kludge to eliminate this kludge from the index.
>
>
> As in the example script I've posted above you can refer to the current
> working directory with a single period (.), but this is still relying on the
> current working directory being what you expect it to be.
>
>
>> If, as it seems, I have to accept this it is fairly immaterial which kludge
>> I actually
>> use.
>
>
> There is no need to use a "kludge". I encourage you to read my replies
> carefully if you're still not getting it.
>
> -Stuart
>
> --
> http://stut.net/
>

Hi Clancy,

I think you want to traverse all files in a directory and its sub directories.

Here is a link to scandir() a php function for reading files and sub
directories of the target directory in your case the root web folder.
It has examples and explanations on how it works.
http://www.php.net/manual/en/function.scandir.php

Virgil
http://www.jampmark.com

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux