2011-12-02 52 views
6

在Windows機器上,下面的腳本:PHP水珠()在括號目錄

<?php 

mkdir("c:\\[test]"); 
file_put_contents("c:\\[test]\\test.txt", "some content"); 
chdir("c:\\[test]"); 
echo getcwd()."\n"; 
var_dump(glob('*')); 

?> 

顯示此:

C:\[test] 
array(0) { 
} 

當這種預期:

C:\[test] 
array(1) { 
    [0]=> 
    string(8) "test.txt" 
} 

我明白glob將括號視爲特殊字符,在中找到時參數。

模式*匹配當前工作目錄中的任何文件。然而,水珠() 的行爲就好像它是與模式c:\\[test]\\*

括號,然後被解釋爲模式的一部分,而事實上,他們 是目錄的一部分運行。

glob應該治療路徑作爲模式的一部分嗎?我寧願認爲它應該使用當前目錄作爲起點,然後僅處理模式

(試圖總結):該glob功能就像它的越來越c:\\[test]\\*作爲匹配模式,並試圖要匹配c:\t\*c:\e\*,或者c:\s\*。但模式實際上是*,它不應該試圖匹配任何。

+0

我不能在Mac上覆制它,你可以檢查目錄和文件是否真的在你的窗口上正確創建? – ajreal

+2

我可以建議明顯的,不要在目錄名稱中使用[]嗎? – 2011-12-02 04:25:45

+2

@Dagon爲什麼[]不能用於目錄名稱? – xdazz

回答

4

這似乎是作爲覆蓋php.net上這個bug報告中的問題:https://bugs.php.net/bug.php?id=33047

在該線程的最後一個職位是它不是一個bug,而是從如何對待水珠括號中的問題,因爲正則表達式的一部分。我不確定我是否同意。看來你可以解決這個問題,除非你不能進入父文件夾。

如果刪除的在裏面[測試]文件夾中是第一位的,你可以通過使用一個語法像下面得到的文件清單:

chdir('..'); 
$glob = glob("[[]test[]]/*"); 

鑑於這些併發症,我會建議不使用glob函數,如果您遇到Windows計算機上的問題,並查看其他文件列表功能,如readdir

+1

這並不是真正的「結論」,它只是迄今發佈的最後一條評論,除非我錯過了某些評論是錯誤的。無論如何,它看起來像一個有效的錯誤報告,雖然它已經關閉沒有修復。 –

+1

好點,我會編輯我的帖子。 –