2009-07-28 95 views
2

我有名稱中包含括號的目錄。 即「dir_123 [[email protected]]」使用glob()查找名稱中帶括號的目錄

在那個dirs中有.tif文件。

我只是在計算Tif文件。在我的Mac我這樣做,有甲基苯丙胺和它的工作很大:

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

在我的Windows機器上運行XAMPP它不會因爲支架的工作:

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

我怎樣才能讓我的XAMPP服務器閱讀這些目錄?

+0

你甚至能方括號在Windows文件名? – 2009-07-28 10:13:38

+0

@ Joe Freeman:是的,你可以...... @max:什麼是errormsg或結果? – 2009-07-28 11:43:42

+0

globe()返回一個emty數組,因此$ anz == 0 – Max 2009-07-31 10:18:10

回答

1

你試過逃脫所有特殊字符嗎?

Ex。

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

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

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

這對我在Ubuntu上適用。

如果不工作,你可以這樣做:

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

如果你需要遞歸計數:

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; 
} 

此功能進行了測試,並與PHP 5.2我的Ubuntu 9.04的計算機上工作。 6-3ubuntu4.1

希望它適用於亞!

//萊納斯Unnebäck

+0

thx您的建議,LinusUnnebäck! 我相信,他們也一起工作! – Max 2009-07-31 10:23:15

0

我解決它通過使用此代碼來代替:

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

你的雙引號不平衡,我的朋友。 – 2009-07-31 10:23:54

+1

什麼意思與不平衡? – Max 2009-08-02 10:04:49

1

訪問http://unixhelp.ed.ac.uk/CGI/man-cgi?glob+7瞭解爲水珠通配符()。

所以,正確的轉義:

$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));