>> >> >> 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