[nycphp-talk] Search of directories and files on my web server
Aaron Fischer
agfische at email.smith.edu
Thu Aug 16 10:17:10 EDT 2007
Greetings,
I am working on a little script that will start at a specified
directory on my web server and then proceed to look through all files
and sub-folders for an instance of text located in a file. (This is
a follow-up of sorts to a previous post of mine from a week or two ago.)
I got the code to work fine for searching through one directory.
However, my thought was that in order to drill down through an
undefined number of sub-folders I would need to implement a recursive
function. The recursive "depth first" search function I made is not
working as expected and so far I haven't been able to figure out what
or how I need to tweak it.
I'm completely squeezed for time at work so I'll continue to bang
away at it but I thought I would post it here in the hopes that some
of our rockets scientists can show me the error of my ways. I'm
guessing this will be a rather simple problem for some folks on the
list.
So here goes. Listed below are my algorithm and code. I'm looking
forward to finding out where I'm going wrong. =)
My algorithm:
1) Set the directory that the script will start in.
2) Open that directory and read all files and folders in that directory.
3) While each item is being read, check it. If the item is a
directory, call the recursive search in order to drill down further.
If the item is a file, open the file and search for the text string
that I am trying to locate.
My code (with comments):
<?php
$path='/home/usr/account';
search($path);
function search($path)
{
$dir=opendir($path);
// browse all files and folders in the current directory
while (false !== ($item=readdir($dir))) {
// if the item is a directory, drill down using a recursive call to
the search function
if (is_dir($item) && $item !='.' && $item!='..') {
search($path . '/' . $item);
}
if (is_file($item)) {
$file=file($item);
$lines=count($file);
for ($i=0; $i<$lines; $i++) {
if (strstr(($file[$i]), 'text to search for')) {
echo 'Search string found on line ' . $i . ' in file ' . $path .
'/' . $item . '<br />';
}
}
}
}
closedir($dir);
}
?>
Cheers,
-Aaron
More information about the talk
mailing list