2016-01-20 86 views
1

當我在使用glob函數使用方括號的路徑目錄時出現問題時,Glob不起作用。如果目錄名帶有特殊字符,如方括號「[]」

// Example 1 - working 
$path = 'temp'. DIRECTORY_SEPARATOR .'dir - name'; 
$files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); 
// List all files 
echo '<pre>'; 
    print_r($files); 
echo '</pre>'; 

上面的代碼工作,但是,當目錄名稱用方括號像DIR [名]或DIR - [名]那麼它不工作。

// Example 2 - not working 
$path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; 
$files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); 
// result got empty if file on that directory 
echo '<pre>'; 
    print_r($files); 
echo '</pre>'; 

回答

3

謝謝大家。

我得到了我的查詢確切的解決方案。下面的代碼是我

$path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; 
$path = str_replace('[', '\[', $path); 
$path = str_replace(']', '\]', $path); 
$path = str_replace('\[', '[[]', $path); 
$path = str_replace('\]', '[]]', $path); 
$files = glob($path . DIRECTORY_SEPARATOR . '*.txt'); 
// List files 
echo '<pre>'; 
    print_r($files); 
echo '</pre>'; 
+0

因爲_Windows_中的'DIRECTORY_SEPARATOR'也是\。 'foo/bar/baz \ [\]/qux.txt'的例子。其他操作系統將它視爲'foo','bar','baz []','qux.txt',但_Windows_會將其視爲'foo','bar','baz','''''' ','qux.txt' –

1

[foo]具有特殊含義,它表示一個字符類(正則表達式語法)。

所以有[]意味着方括號字面上,你要逃避他們 - 用一個反斜槓之前他們。

+0

不能使用反斜線也$ path ='temp'。 DIRECTORY_SEPARATOR .'dir - [name]'; $ path = str_replace('[','\\ [',$ path); $ path = str_replace(']','\\]',$ path); – Krish

+0

這應該工作。首先嚐試使用硬編碼路徑。 – CBroe

+0

不適用於硬編碼路徑 – Krish

0

嘗試

$path = 'temp'. DIRECTORY_SEPARATOR .'dir - [name]'; 
$from = array('[',']'); 
$to = array('\[','\]'); 
$files =glob(str_replace($from,$to,$path . "\\*.txt")); 
echo '<pre>'; 
    print_r($files); 
echo '</pre>'; 
+0

這不起作用。 '\ ['和'\]'不被glob接受,但是如上所述,'[[]'和'[]]'被接受。 –

1

工作這是我用:
$path = str_replace(['[',']',"\f[","\f]"], ["\f[","\f]",'[[]','[]]'], $path);

所有一行。