2009-07-28 10 views
2

Ich habe Verzeichnisse, die Klammern in den Namen enthalten. d. H. "Dir_123 [[email protected]]"Mit glob(), um Verzeichnisse mit Klammern in ihren Namen zu finden

Innerhalb dieser Verzeichnisse befinden sich .tif-Dateien.

Ich zähle die TIF-Dateien. Auf meinem Mac habe ich das mit MAMP und es hat gut funktioniert:

$anz = count(glob(str_replace("[", "\[", "dir_123[[email protected]]/*.tif"))); 

auf meinem Windows-Rechner läuft XAMPP wird es nicht wegen dieser Klammern arbeiten:

$anz = count(glob(str_replace("[", "\[", "dir_123[[email protected]]\\*.tif"))); 

Wie kann ich meinen XAMPP Server erhalten diese Verzeichnisse zu lesen?

+0

Können Sie auch in eckigen Klammern in Dateinamen in Windows haben? –

+0

@ Joe Freeman: ja du kannst .. @max: was ist das errormsg oder Ergebnis? –

+0

globe() gibt ein emty Array zurück, daher $ anz == 0 – Max

Antwort

1

Haben Sie versucht, alle Sonderzeichen zu entkommen?

Ex.

$dir = "dir_123[[email protected]]"; 

$from = array('[',']'); 
$to = array('\[','\]'); 

$anz = count(glob(str_replace($from,$to,$dir . "\\*.tif"))); 

Dies funktioniert für mich auf Ubuntu.

Wenn das nicht funktioniert, können Sie tun:

function countTif($dir) { 
    $ret = 0; 
    $scan = scandir($dir); 
    foreach($scan as $cur) { 
     $ret += ((substr($cur,-4) == ".tif")?1:0); 
    } 
    return $ret; 
} 

Und wenn Sie rekursive Zählen benötigen:

function countTif($dir) { 
    $ret = 0; 
    $scan = scandir($dir); 
    foreach($scan as $cur) { 
     if(is_dir("$dir/$cur") and !in_array($cur,array('.','..'))) { 
      $ret += countTif("$dir/$cur"); 
     } else { 
      $ret += ((substr($cur,-4) == ".tif")?1:0); 
     } 
    } 
    return $ret; 
} 

wurde diese Funktionen getestet und arbeitete auf meinem Ubuntu 9.04 Computer mit PHP 5.2. 6-3ubuntu4.1

Hoffe es funktioniert für Sie!

// Linus Unnebäck

+0

Danke für Ihre Vorschläge, Linus Unnebäck! Ich bin sicher, sie hatten auch gearbeitet! – Max

0

Ich löste es durch diesen Code verwenden stattdessen:

$dir = scandir("\\\\server\\dir"); 
foreach ($dir as $key=>$row) 
    if (end(explode(".", $row)) != "tif") 
     unset($dir[$key]); 
$anz = count($dir); 
+0

Ihre doppelten Anführungszeichen sind unausgeglichen, mein Freund. –

+1

was bedeutet unausgewogen? – Max

1

Besuch http://unixhelp.ed.ac.uk/CGI/man-cgi?glob+7 für Platzhalter für glob Verständnis().

So richtig Entkommen ist:

$pattern = "dir_123[[email protected]]/*.tif"; 
if (strpos($pattern, '[') !== false || strpos($pattern, ']') !== false) 
{ 
    $placeholder = uniqid(); 
    $replaces = array($placeholder.'[', $placeholder.']',); 
    $pattern = str_replace(array('[', ']',), $replaces, $pattern); 
    $pattern = str_replace($replaces, array('[[]', '[]]',), $pattern); 
} 
$anz = count(glob($pattern));