سؤال

I've been working with a handy php script, which scans my site and spits out links to all the pages it finds. The problem is, it's also scanning my 'includes' folder, which contains all my .inc.php files.

Obviously I'd rather it ignore this folder when scanning the site, but for the life of me I can't see how to edit the script to tell it to do so.

The script is:

<?php 
// starting directory. Dot means current directory
$basedir = ".";

// function to count depth of directory 
function getdepth($fn){
return (($p = strpos($fn, "/")) === false) ? 0 : (1 + getdepth(substr($fn, $p+1)));
}

// function to print a line of html for the indented hyperlink
function printlink($fn){
  $indent = getdepth($fn); // get indent value
  echo "<li class=\"$indent\"><a href=\"$fn\">"; //print url
$handle = fopen($fn, "r"); //open web page file
$filestr = fread($handle, 1024); //read top part of html
fclose($handle); //clos web page file
if (preg_match("/<title>.+<\/title>/i",$filestr,$title)) { //get page title
    echo substr($title[0], 7, strpos($title[0], '/')-8); //print title
} else {
    echo "No title";
}
  echo "</a></li><br>\n"; //finish html
}

// main function that scans the directory tree for web pages 
function listdir($basedir){
if ($handle = @opendir($basedir)) { 
    while (false !== ($fn = readdir($handle))){ 
        if ($fn != '.' && $fn != '..'){ // ignore these
            $dir = $basedir."/".$fn; 
            if (is_dir($dir)){ 
                listdir($dir); // recursive call to this function
            } else { //only consider .html etc. files
                if (preg_match("/[^.\/].+\.(htm|html|php)$/",$dir,$fname)) {
                   printlink($fname[0]); //generate the html code
                }
                            } 
        } 
    } 
    closedir($handle); 
    } 
} 
// function call 
listdir($basedir); //this line starts the ball rolling
?>

Now I can see where the script is told to ignore certain files, and I've tried appending:

&& $dir != 'includes'

...to it in numerous places, but my php knowledge is simply too shaky to know exactly how to integrate that code into the script.

If anyone can help, then you'd be saving me an awfully large headache. Cheers.

هل كانت مفيدة؟

المحلول

Add it this line:

if ($fn != '.' && $fn != '..'){ // ignore these

so it's

if ($fn != '.' && $fn != '..' && $fn != 'includes'){ // ignore these

نصائح أخرى

Your path needs to be absolute. Add it at the top of listdir

function listdir($basedir){
    if($basedir == '/path/to/includes') {
         return;
    } [...]

This also makes sure that only one includes folder will be ignored.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top