---
title: "Söka i kataloger..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/43212-söka-i-kataloger"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Hubert"
published: "2002-05-06T22:13:07.000Z"
updated: "2002-05-06T23:52:02.000Z"
replies: 16
views: 378
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/43212-söka-i-kataloger"
---

# Söka i kataloger...

## #1 — Hubert, 2002-05-06T22:13Z

Jag skulle vilja ha ett trevligt litet script där man kan söka i flera kataloger. 
Jag har försökt med lite olika gerjer, men får det inte att funka. Jag har lyckats skrivat ut alla filer i en katalog på skärmen. Men jag får det itne att funka med flera, och inte heller att söka. 

Här är lite kod jag använt: 

```
<?php 
if ($handle = opendir("/home/mp3")) { 
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") { 
            echo "$file\n<br>"; 
        } 
    } 
    closedir($handle); 
} 
?>
```

Mvh Hubert

Permalänk: https://www.webforum.nu/p/43212

## #2 — SPiN, 2002-05-06T22:21Z

Så här skulle jag ha gjort, med en liten rekursiv funktion:

```
function PrintDirs ( $directory ) {
     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $cur . "\\" );
          }
          if ( is_file ( $directory . $cur ) ) {
               echo $cur . " är en fil i " . $directory . "<br />";
          }
     }

     closedir ( $reader );
}
```

Så här anropar du den:

```
PrintDirs ( "C:\\Windows\\" );
```

Vill du söka i de filerna som ligger i katalogen får du öppna dem i if-satsen med is_file (), och söka.

Permalänk: https://www.webforum.nu/p/667070

## #3 — Hubert, 2002-05-06T22:30Z

funkar inte för mig, nåt speciellt man ska göra. typ $cur och $directory har väl inte så mycket till värde, eller? du kanske kan förklara lite för mig, jag är ju trots allt en liten noob.

Permalänk: https://www.webforum.nu/p/667079

## #4 — SPiN, 2002-05-06T22:34Z

Hm, såg att jag hade missat att skicka med $directory vid rekurseringen... Så här bör den se ut:

```
function PrintDirs ( $directory ) {
     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur . "\\" );
          }
          if ( is_file ( $directory . $cur ) ) {
               echo $cur . " är en fil i " . $directory . "<br />";
          }
     }

     closedir ( $reader );
}
```

Jag öppnar först en mapp-hanterare som pekar mot den angivna sökvägen. Om sökvägen är en mapp, skickas den till funktionen på nytt - rekursering. Om sökvägen är en fil så skrivs filnamnet ut och var den ligger. Nyckelfunktionerna är is_dir () och is_file (). :)

Permalänk: https://www.webforum.nu/p/667083

## #5 — Hubert, 2002-05-06T22:45Z

glärg, jag får det inte att funka, jag gör så här:

```
<?
$directory = "/home/mp3";

function PrintDirs ( $directory ) {
     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur . "\\" );
          }
          if ( is_file ( $directory . $cur ) ) {
               echo $cur . " är en fil i " . $directory . "<br />";
          }
     }

     closedir ( $reader );
}

?>
```

 

jag måste vara helt pucko... men är man nybörjare så år man. :OO

Permalänk: https://www.webforum.nu/p/667089

## #6 — SPiN, 2002-05-06T22:47Z

Vad händer då? Får du ett felmeddelande eller något?

Prova med att sätta variabeln till:
$directory = "C:\\\\Sökväg\\\\home\\\\mp3\\\\";

Permalänk: https://www.webforum.nu/p/667092

## #7 — Hubert, 2002-05-06T22:50Z

inget felmeddelande, jag har en linux server, och sökvägen är /home/mp3. men det funkar inte, det skriver bara inte ut något.
du kan ju testa att gå in på <http://forssen.pointclark.net/fil.php> .

Permalänk: https://www.webforum.nu/p/667098

## #8 — Hubert, 2002-05-06T22:51Z

koden ser ut så här nu:

\<?
$directory = "\\home\\mp3";

function PrintDirs ( $directory ) {
     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur . "\\\\" );
          }
          if ( is_file ( $directory . $cur ) ) {
               echo $cur . " är en fil i " . $directory . "\<br /\>";
          }
     }

     closedir ( $reader );
}

?\>

Permalänk: https://www.webforum.nu/p/667100

## #9 — SPiN, 2002-05-06T23:00Z

Försök med det här då:

```
function PrintDirs ( $directory ) {
     if ( substr ( $directory, -1 ) != '/' ) {
          $directory .= "/";
     }

     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur );
          }
          else {
               echo $cur . " är en fil i " . $directory . "<br />";
          }
     }

     closedir ( $reader );
}
```

Anropa:

```
PrintDirs ( "/home/mp3" );
```

Permalänk: https://www.webforum.nu/p/667112

## #10 — Hubert, 2002-05-06T23:09Z

nu fick jag felmeddelande:

Warning: OpenDir: Too many open files (errno 24) in /var/www/html/fil.php on line 15

Warning: Supplied argument is not a valid Directory resource in /var/www/html/fil.php on line 17

Warning: Supplied argument is not a valid Directory resource in /var/www/html/fil.php on line 26

Warning: OpenDir: Too many open files (errno 24) in /var/www/html/fil.php on line 15

Warning: Supplied argument is not a valid Directory resource in /var/www/html/fil.php on line 17

Warning: Supplied argument is not a valid Directory resource in /var/www/html/fil.php on line 26
ölstugan som inte finns.mp3 är en fil i /home/mp3/./././././././././././././././././(den skriver ut svin många ./, det blev 51000 tecken först när jag skulle skriva detta inlägg) osv. osv.

kod:

\<?
PrintDirs ( "/home/mp3" );

function PrintDirs ( $directory ) {
     if ( substr ( $directory, -1 ) != '/' ) {
          $directory .= "/";
     }

     $reader = opendir ( $directory );

     while ( $cur = readdir ( $reader ) ) {
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur );
          }
          else {
               echo $cur . " är en fil i " . $directory . "\<br /\>";
          }
     }

     closedir ( $reader );
}

?\>

Permalänk: https://www.webforum.nu/p/667123

## #11 — Hubert, 2002-05-06T23:12Z

men alltså, kan man inte typ göra så att den läser alla filer i en eller flera kataloger, och sen så lagrar den det på nåt sätt, och sen kan man använda det lagrade till att söka i och då visar den det som den matchar sökordet med? liksom man ska kunna söka efter en fil. jag läste nåt om att man kunde läsa en katalog till en array, kan man göra nåt på det viset?

Permalänk: https://www.webforum.nu/p/667131

## #12 — SPiN, 2002-05-06T23:15Z

Humma...

```
function PrintDirs ( $directory ) {
     if ( substr ( $directory, -1 ) != '/' ) {
          $directory .= "/";
     }

     $reader = opendir ( $directory );

     while ( ( $cur = readdir ( $reader ) ) !== false ) {
          if ( $cur == "." || $cur == ".." ) {
               continue;
          }
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur );
          }
          else {
               echo $cur . " är en fil i " . $directory . "<br />";
          }
     }

     closedir ( $reader );
}
```

Permalänk: https://www.webforum.nu/p/667136

## #13 — SPiN, 2002-05-06T23:16Z

Jäpp, istället för raden echo i else-blocket kan du lägga in allt i en array om du känner för det. :)

Permalänk: https://www.webforum.nu/p/667138

## #14 — Hubert, 2002-05-06T23:17Z

nu funkar det, men kan man göra nån sök funktion på det här? för skriva ut alla filer har funkat innan, nästan. men det hade vart bra om man kan fixa en sök funktion. tack för all hjälp.

Permalänk: https://www.webforum.nu/p/667141

## #15 — SPiN, 2002-05-06T23:27Z

Javisst kan du göra en sökfunktion. Vill du söka **i** filerna, eller på deras filnamn? Här är ett enkelt sätt för att söka på filnamnet:

```
function PrintDirs ( $directory, &$arrResult ) {
     if ( substr ( $directory, -1 ) != '/' ) {
          $directory .= "/";
     }

     $reader = opendir ( $directory );

     while ( ( $cur = readdir ( $reader ) ) !== false ) {
          if ( $cur == "." || $cur == ".." ) {
               continue;
          }
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur, $arrResult );
          }
          else {
               $arrResult[] = $directory . $cur;
          }
     }

     closedir ( $reader );
}

function SearchFiles ( $searchString, &$arrFiles ) {
     $arrResult[] = "Sökning för " . $searchString . ". Följande hittades:";

     for ( $i = 0; $i < count ( $arrFiles ); $i++ ) {
           if ( !stristr ( $arrFiles[ $i ], $searchString ) ) {
                $arrResult = $arrFiles[ $i ];
           }
     }

     return $arrResult;
}

PrintDirs ( "/home/mp3", $arrFoundFiles );
$arrResult = SearchFiles ( "söksträng", $arrFoundFiles );

while ( $curResult = array_shift ( $arrResult ) ) {
     echo $curResult . "<br />";
}
?>
```

Permalänk: https://www.webforum.nu/p/667148

## #16 — Hubert, 2002-05-06T23:39Z

nu blev det lite fel:

Warning: Missing argument 2 for printdirs() in /var/www/html/fil.php on line 15

Warning: Missing argument 2 for searchfiles() in /var/www/html/fil.php on line 37

Warning: The argument needs to be an array in /var/www/html/fil.php on line 52

Här är koden:

```
<form name="form1" method="post" action="">
  <input type="searchString" name="textfield">
  <br>
  <input type="submit" name="Skicka" value="Skicka">
</form>
<?
PrintDirs ( "/home/mp3" );
SearchFiles ( $searchString );

function PrintDirs ( $directory, &$arrResult ) {
     if ( substr ( $directory, -1 ) != '/' ) {
          $directory .= "/";
     }

     $reader = opendir ( $directory );

     while ( ( $cur = readdir ( $reader ) ) !== false ) {
          if ( $cur == "." || $cur == ".." ) {
               continue;
          }
          if ( is_dir ( $directory . $cur ) ) {
               PrintDirs ( $directory . $cur, $arrResult );
          }
          else {
               $arrResult[] = $directory . $cur;
          }
     }

     closedir ( $reader );
}

function SearchFiles ( $searchString, &$arrFiles ) {
     $arrResult[] = "Sökning för " . $searchString . ". Följande hittades:";

     for ( $i = 0; $i < count ( $arrFiles ); $i++ ) {
           if ( !stristr ( $arrFiles[ $i ], $searchString ) ) {
                $arrResult = $arrFiles[ $i ];
           }
     }

     return $arrResult;
}

PrintDirs ( "/home/mp3", $arrFoundFiles );
$arrResult = SearchFiles ( "söksträng", $arrFoundFiles );

while ( $curResult = array_shift ( $arrResult ) ) {
     echo $curResult . "<br />";
}

?>
```

Permalänk: https://www.webforum.nu/p/667153

## #17 — SPiN, 2002-05-06T23:52Z

Om du lägger till:
$arrFoundFiles = array ();
ovanför:
PrintDirs ( "/home/mp3", $arrFoundFiles ); ? Återkommer i morgon, är fruktansvärt trött just nu...

Permalänk: https://www.webforum.nu/p/667157

---

Tråden på webben: https://www.webforum.nu/amne/php/43212-söka-i-kataloger
