Mit PHP Ordner durchsuchen und Dateien anzeigen

wie sieht den dein $_POST['search_term'] aus?

Also wenn ich's mit print_r($_POST,true) ausgebe kommt nix.

PHP:
<table width="343" border="0">
  <tr>
    <td width="184" height="31">&nbsp;</td>
    <td width="149">&nbsp;</td>
  </tr>
  <tr>
    <form action="suche.php" method="post">
      <td height="23"><label for="search_term">
        <input name="search_term" type="text" id="search_term" size="40" />
      </label></td>
      <td><input type="submit" name="button" id="button" value="Suchen" /></td>
    </form>
  </tr>
</table>

<?php 

$dir = 'O:\\Holz\\Masslisten';
$search = $_POST['search_term'];

//Alle Dateien in ein 2-Dimensionalen Array schreiben
$items = getDirContent($dir);
//Alle Dateien mit einem bestimmten Namen ausfiltern und in $result zurückgeben
$result = array();
foreach($items as $item){
    if($item['name'] == $search){
        $result[] = $item['path'];   
    }    
}
//Ausgabe:
var_dump($result);
 
 
/**
 * Rekursive Funktion um alle Dateien eines Verzeichnises zu katalogisieren
 * @param String    $dir zu durchsuchendes Verzeichniss
 * @return Array<Array<String>> 
 * @example Return-Value: array('name'=>'test.txt', 'path'=>'C:temp/test.txt')
 */
function getDirContent($dir){
    $items = array();
    if (is_dir($dir)) {
        foreach(scandir($dir) as $file){
            $path = createPath($dir, $file);
            if(is_dir($path) && $file!='.' && $file!='..'){
                $items = array_merge($items, getDirContent($path));
            }elseif(is_file($path)){
                $items[] = array('name' => $file, 'path' => $path);
            } 
        }            
    }
    return $items;
}
 
/**
 * Aus meiner Funktionsbibliothek
 * PHP] createPath: http://wiki.yaslaw.info/wikka/PhpCreatePath
 *
 * mpl           by ERB software
 * @author       stefan.erb(at)erb-software.com
 */
 
/**
 * @param   Strings   zusammenzusetzende Elemente
 * @return  String
 * @example
 *      $path = createPath("C:\\temp\\", "test.txt");
 *      $path = createPath("C:", "temp", "test.txt")
 */
function createPath(){
    $parts = func_get_args();
    array_walk($parts, 'removeLastSeparator');
    return str_replace("\\", "/", implode("/", $parts));    
}
 
/**
 * Hilfsfunktion um die nachgestelltenn / und \ von Pfadelementen zu entfernen
 * Wird von createPath() verwendet
 * @param $part
 */
function removeLastSeparator(&$part){
    $part = preg_replace('/[\/\\\]*$/', '', $part);
}
 
?>

Hab das gesamte, abgeänderte Script angehängt, mir ist kein Fehler aufgefallen. Jetzt rufe ich nur noch die suche.php auf und benutze nicht mehr die lästigen index.php?p=blabla links.
 
Das Formular sieht gut aus und funktioniert bei mir einwandfrei.
Du gibst aber im Suchformular schon den ganzen Dateinamen (Gross/Kleinschreibung beachten, Endung nicht vergessen) ein? Ansonsten müsstest die die folgende Zeile auf deine Bedürfnisse anpassen
PHP:
    if($item['name'] == $search){
 
Hm, ich gebe nur den Dateinamen an. Der Dateiname besteht nur aus Zahlen. die Endung muss ich noch dazuhängen.

//EDIT

Auch mit dem vollständigem Namen funktionierts bei mir nicht. Mach ich irgendwas falsch?
 
Zuletzt bearbeitet:
Zeig uns nochmals ein var_dump auf $_POST['search_term'].
Und dann mach nach dem Funktionsaufruf getDirContent() noch ein var_dump auf $items und vergleiche die zwei Werte
$item ist ein 2-Dimensionaler Array. Darin findest du unter anderem alle gefunden Dateinamen.
 
Hier die var_dumps.

var_dump getDirConten tarray(0) { }
var_dump NULL
var_dump search string(9) "58552.txt"
var_dump dir string(18) "O:/Holz/Masslisten"
var_dump result array(0) { }
var_dump search_term string(9) "58552.txt"
var_dump items array(0) { }
var_dump item NULL

Irgendwas haut da ned ganz hin hab ich so das Gefühl.
 
Zuletzt bearbeitet:
*bong*
PHP:
$dir = 'O:\\Holz\\Masslisten';
Du musst dich entscheiden. Den String in " setzen, dann musst du die \ escapen. Oder aber in '. Dann musst du nix escapen.
PHP:
//entweder
$dir = "O:\\Holz\\Masslisten";
//oder
$dir = 'O:\Holz\Masslisten';

Ich persönlich zeihe die einfachen ' wo immer möglich den Doppelten vor, weil:
- Man muss weniger escapen
- PHP parst den String nicht und man spart also Performance.
 
Habs geändert, leider funktionierts trotzdem nicht.

Hier die var_dumps der geänderten Version
PHP:
var_dump getDirContent array(0) { }
var_dump NULL
var_dump search string(9) "58552.txt"
var_dump dir string(18) "O:\Holz\Masslisten"
var_dump result array(0) { }
var_dump search_term string(9) "58552.txt"
var_dump item sarray(0) { }
var_dump item NULL

Bei getDirContent übergibt er mir nicht den Pfad. Liegts vielleicht daran, das wir überall $dir verwenden?
 
Der Pfad ist richtig? Im Ersten Beitrag schriebst du etwas von P:\, nicht von O:\
So wie es ausshieht, wird O:/Holz/Masslisten nicht als Pfad erkannt.
 
Auf P kann ich noch nicht zugreifen, weil der Server noch nicht freigegeben ist. Der Pfad im Explorer ist O:\Holz\Masslisten. Der Pfad ist Existent, ich speichere die ganze Zeit schon Masslisten darin ab.

Ich habs jetzt mit dem Netzwerkpfad vom Server versucht, jetzt funktionierts wie geschmiert.

PHP:
var_dump getDirContentarray(2) { [0]=> array(2) { ["name"]=> string(9) "58552.txt" ["path"]=> string(49) "//KEP-SBS09/abteilungen/Holz/Masslisten/58552.txt" } [1]=> array(2) { ["name"]=> string(9) "58552.txt" ["path"]=> string(61) "//KEP-SBS09/abteilungen/Holz/Masslisten/ahorn/22 mm/58552.txt" } }
var_dump 58552.txt string(9) "58552.txt"
var_dump search string(9) "58552.txt"
var_dump dir string(39) "\\KEP-SBS09\abteilungen\Holz\Masslisten"
var_dump result array(2) { [0]=> string(49) "//KEP-SBS09/abteilungen/Holz/Masslisten/58552.txt" [1]=> string(61) "//KEP-SBS09/abteilungen/Holz/Masslisten/ahorn/22 mm/58552.txt" }
var_dump search_term string(9) "58552.txt"
var_dump items array(2) { [0]=> array(2) { ["name"]=> string(9) "58552.txt" ["path"]=> string(49) "//KEP-SBS09/abteilungen/Holz/Masslisten/58552.txt" } [1]=> array(2) { ["name"]=> string(9) "58552.txt" ["path"]=> string(61) "//KEP-SBS09/abteilungen/Holz/Masslisten/ahorn/22 mm/58552.txt" } }
var_dump item array(2) { ["name"]=> string(9) "58552.txt" ["path"]=> string(61) "//KEP-SBS09/abteilungen/Holz/Masslisten/ahorn/22 mm/58552.txt" }

Nur noch die Ausgaben bearbeiten und fertig ist. Danke erstmal für deine Hilfe.
 
So da bin ich auch schon wieder.

Irgendwie pack ich bei der Ausgabe etwas falsch an.

PHP:
echo("<table style=\"width:100%;\" border=\"0\">");
echo("<tr>");
echo("<td>Position</td>");
echo("<td>Partienummer</td>");
echo("<td>Link</td>");
echo(" </tr>");
echo(" <tr>");
//Alle Dateien in ein 2-Dimensionalen Array schreiben
$items = getDirContent($dira);
//Alle Dateien mit einem bestimmten Namen ausfiltern und in $result zurückgeben
$result = array();
foreach($items as $item){
    if($item['name'] == $search){
        $result[] = $item['path'];   
    }    
}

//Ausgabe:
if($result > 0){
echo("<td></td>");
echo("<td>".$_POST['search_term']."</td>");
echo("<td><a href=".$item['path'].$item['name'].">".$item['name']."</a></td>");
echo(" </tr>");
echo(" </table>");
}

Anstatt den Link richtig zu generieren, krieg ich nur einen Verweis auf http://kep-sbs09/abteilungen/Holz/Masslisten/Esche wo eigentlich http://kep-sbs09/abteilungen/Holz/Masslisten/Esche Braun/40 mm/61681.pdf stehen sollte.
 
Zurück