2011-11-21 64 views
0

好吧,一直在尋找遍及互聯網,甚至Stackoverflow,但我似乎無法得到以下PHP代碼工作。使用PHP在一個文件夾中顯示圖像

<div class="grid"> 
<ul class="images"> 
<?php 
//path to directory to open 
$directory = "/Media/pics/"; 
$dir_handle = @opendir($directory) or die("Unable to open folder"); 

while(false !== ($file = readdir($dir_handle))) 
{ 
    if($file != '.' && $file != '..' && $file != 'Thumbs.db') 
    { 
    echo "<li class='picture' title='Remote2'> <img src='/Media/pics/".$file."'alt='test'/></li>";      
    } 
} 
closedir($dir_handle); 
?> 

每次我嘗試查看網頁,我得到:

403禁止 - 您沒有權限訪問聯網/媒體/圖片/".$文件「。在這臺服務器上。

然而,我可以導航到「intanet/Media/pics」並查看並單擊文件夾中的所有圖像。 我不認爲這是一個權限問題,但也許是我在PHP代碼中丟失的東西。使我希望我有一個非常好的PHP編輯器,語法高亮和自動完成(目前使用Aptana Studio 3)。

感謝您的幫助!

SOLUTION:不得不做到以下幾點:1 )更改 「pictures.html」 到 「pictures.php」(福利局錯誤)

2)修復從realitive路徑 「/媒體/圖片」只是「媒體/圖片」

+0

如果服務器的響應中包含'$ file',我認爲PHP正在發送而未被處理。 – alex

回答

0

望着意見@Marc B的答案

文件中的PHP腳本沒有似乎被執行。你是否正確地命名文件?

爲了讓PHP screpts運行,您需要給該文件一個「.php」擴展名。我懷疑你可能把它命名爲「.html」?

或者是Apache的配置沒有正確設置運行「.php」文件通過PHP?

+0

看到,這就是爲什麼我喜歡StackOverflow,現在我們可能會到某個地方。我將「pictures.html」更改爲「pictures.php」,當我運行該程序時,我只在PHP代碼之前得到了處理過的HTML(基本上只看到了「PICTURE」標題和CSS的一部分)。所以我看了看源代碼,看到「無法打開文件夾」,就在我的PHP代碼所在的位置。所以現在我正在考慮對該文件夾存在某種權限問題。現在要弄清楚如何讓PHP訪問該文件夾... – Tom

+0

BINGO!事實證明,它找不到目錄,因爲它是「媒體/圖片」,而不是「/ media/pics」(我應該至少抓住那個錯誤,不能相信我過去看過!)。一旦我改變了這一點,並確保文件是「.php」而不是「.html」,它運行的很好。感謝所有幫助我解決這個問題的人,大家好! – Tom

+0

@Tom,隨時歡迎 – iWantSimpleLife

0

Unix系統通常默認限制文件讀取權限。如果您知道如何修改CHMOD,請確保PHP有權讀取該目錄。 (640應該是足夠的,如果Apache是​​他們的擁有者,如果不是,你可以嘗試更高,但對於閱讀你不應該需要高於700或750.)

2

你正在使用絕對路徑, /Media/pics/somepic.jpg。你的文件系統的根目錄中有/Media目錄嗎?那麼,/ Media文件夾是你網站文檔根目錄的一部分嗎?請記住,PHP的文件操作在文件系統級別工作,而不是在Web服務器的URL級別。 PHP可以訪問完全超出網站範圍的文件,因此直接輸出文件系統作爲src的URL可以很容易地指向遠程用戶無法訪問的文件。

+0

我檢查了我的apache_error.log(順便運行WAMP),它說: (20024)給定路徑格式錯誤或包含無效字符:無法映射GET /Media/pics/%22.$file.%22 HTTP/1.1到文件,referer:http://intranet/pictures.html 似乎沒有像Alex說的那樣處理PHP。我是新來的使用WAMP和PHP(來自asp.net)所以任何幫助我如何檢查PHP是否有權運行它所在的文件夾?順便說一句,一切都位於Web服務器上的「C:\ WAMP \ www \ Intranet」下。謝謝! – Tom

0

嘗試改變這一行:

echo "<li class='picture' title='Remote2'> <img src='/Media/pics/".$file."'alt='test'/></li>"; 

echo "<li class='picture' title='Remote2'> <img src='/Media/pics/$file' alt='test'/></li>"; 

你的錯誤是一種奇怪的,如果它處理的變量名作爲一個字符串。雙引號將使用$ file的值,所以如果它不起作用,這至少會給我們一個不同的錯誤。

編輯:另外我懷疑路徑可能會丟失一些東西,因爲已經提到過。將您的路徑與錯誤中提到的路徑進行比較,看看您是否有正確的內容。例如它應該是的/ home /網站/媒體/圖片(作爲一個例子)

+0

現在我得到「在此服務器上找不到請求的URL/Media/pics/$文件。」 編輯:Apache_error顯示:「獲取/媒體/圖片/ $文件HTTP/1.1」404 214 – Tom

相關問題