2017-01-16 57 views
1

有無論如何檢查文件,在我的情況下是一個圖像文件,是否在htaccess後面?檢查文件是否在htaccess

我想回顯出一個圖像src的路徑,在某些情況下該文件將在htaccess所需的身份驗證後面。在這種情況下,我希望它什麼都不顯示。現在,它顯示登錄名/密碼提示符,因爲我正在引用該映像。

樣品:

文件夾2的背後是需要認證

$folders = ['folder1','folder2']; 

foreach($folders as $folder){ 

    if(is_readable($folder.'/thumb.png')) 
     echo "<img src='{$folder}/thumb.png' />"; 
    else 
     echo 'img not found'; 

} 

我試圖is_readable和file_exists,似乎都仍然存在,提示。

編輯:htaccess文件

AuthType Basic 
AuthUserFile /home/.../.htpasswd 
AuthName "Please Log In" 
require valid-user 
+0

你能顯示你的htaccess代碼嗎? –

+0

只是從那些您不想檢查的文件夾中刪除身份驗證 –

+0

hm無論如何,如果您嘗試從受保護的文件夾加載圖像,它只會顯示任何內容,並且您將在控制檯中顯示401,否則 – Sebas

回答

4

使用類似的捲曲,你可以發送HTTP請求,看到了請求代碼。如果顯示401或403,則表示未經授權。否則,沒關係。

更新:只要使用get_headers()方法就可以了。數組中的第一項將是響應代碼,您可以按照上面所述處理該代碼。

+1

原理是合理的,但'get_headers()'可能更簡單:http://php.net/manual/en/function.get-headers.php - HTTP響應頭是返回數組中的第一項。 – CD001

+0

這聽起來很不錯,但我同意CD0001,結束了get_headers()解決方案,然後只是檢查404和401錯誤。桑德斯的迴應也可以。謝謝大家。 –

1

可以讀取.htaccess文件,並尋找需要的話,或者做一些聰明取決於你如何.htaccess文件可能會有所不同:

事情是這樣的:

if(strpos(file_get_contents($folder."/.htaccess"), "require") === false) 
{ 
    // show image 
} 

當然你將要緩存每個文件夾的輸出。