2012-06-03 53 views
5

基本上它在錫說:PHP is_readable失敗,但執行opendir工作

if(is_dir($dir)) 
    echo $dir . " is a directory\n"; 

if(is_readable($dir)) 
    echo $dir . " is readable\n"; 

if($this->handle = opendir($dir)) 
    echo $dir . " opened\n"; 

返回:

\\ HTPC \電影是一個目錄

\\ HTPC \ MOVIES打開

哪個更奇怪?我可以迭代目錄中的文件,但顯然它不可讀。就像我說的我仍然可以閱讀這些文件並不重要,但是我覺得它有點奇怪。

有沒有人有任何想法?

+0

「HTPC」機器上的操作系統是什麼?它是Windows嗎? –

+0

是的,Windows 7! –

+0

我不確定,但也許是因爲Windows文件系統(FAT或NTFS)您可能有權限「列出內容」,但「閱讀」是不允許的! –

回答

3

看來這是一個權限錯誤。分配給該特定文件夾的是家庭組。家庭組實際上並未在網絡上使用。刪除家庭組並重新添加用戶組is_readable返回true。仍然奇怪opendir如何返回true,但is_readable不是。你一定會期望一些不可讀的東西在打開時失敗。

感謝您的幫助球員。

+0

有趣。 ''is_readable()''只是'stat'的一個簡單包裝,所以肯定是一些權限問題;仍然驚訝地發現這些信息可能會讓人誤解) –

0

如果你想防止進入目錄,尋找旁路遍歷檢查或類似的東西,請檢查你的安全策略。

如果繞過檢查,則可以進入acl's禁止的目錄,但是無法讀取內容。

如果你的ACL的設置和選擇仔細和正確的整棵樹,那麼你通常不需要碰這個。

+0

這種事情不適用於所有驅動器,而不僅僅是一個? –

+0

這是安全性 策略功能並且適用於整個系統。它在全球啓用或禁用,它不提供或帶走真正的安全。如果你的ACL被設置並仔細選擇了整棵樹,那麼你通常不需要觸摸它。 –