2012-05-08 459 views
7

我想知道是否有人能夠幫助我。從服務器刪除圖像文件

我把放在一起的this頁面允許用戶以圖庫格式查看他們上傳的圖像。

我現在想要爲每張圖片添加刪除功能。我創建了它後面的按鈕和Javascript,但我真的不確定如何將「按鈕單擊」與文件的實際物理刪除鏈接起來。

圖像沒有存儲在數據庫中,但在我的服務器上的兩個文件夾位置,在以下結構:

UploadedFiles/username/locationid/imagename

UploadedFiles/username/locationid/Thumbnails/imagename

我是比較新的PHP現在我已經達到了我的知識範圍,但肯定願意學習。從我讀過的文檔中,我認爲我正確地說unlink方法是正確的命令?

但是我發現真的很難告訴代碼以找到匹配當前usernamelocationid其中,然後刪除匹配$source名變量,該文件usernamelocationid文件夾中的文件夾。

我只是想知道是否有人可以提供一些指導,請告訴我如何去做這件事。

許多的感謝和親切的問候

回答

4

如果您可以通過用戶名,locationid,和你的腳本imagename變量,你可以刪除這些文件使用unlink()

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; 

unlink($path . $imagename); 
unlink($path . 'Thumbnails/' . $imagename); 

因爲你正在與之交互的文件系統,你需要確定並清理變量(防止有人使用../../../到達文件系統中不需要的部分)。

$username = str_replace(array('..', '/', '\\', ':'), '', $username); 
$imagename = str_replace(array('..', '/', '\\', ':'), '', $imagename); 
$locationid= str_replace(array('..', '/', '\\', ':'), '', $locationid); 
+1

您可能還需要確保你解脫。在文件名中的字符,否則你可以像「../../../public/index.php」 –

+1

+1,有趣的是我們認爲一樣我只是在編輯:) –

+1

我不知道它是否沒有提及,所以我會提到:你的代碼應該是結構化的,以便在$ path =和unlink之前運行可變清理行)線。 –

0

顯然你的javascript(客戶端)將不得不調用一個URL(服務器端)來刪除用戶選擇的圖片。我建議,現在你靜態地做(如果以後你想要更動態的東西,步驟轉變成一個相當小的AJAX

所以作爲設置風帆媒體說,你將不得不通過用戶名和位置ID當你點擊刪除按鈕時,你的服務器就是這樣的,一種方法是:

當你在HTML/javascript中呈現你的畫廊時,對於每張圖片,你在它下面會有一個包含所需信息的提交按鈕,只需從您的服務器調用刪除腳本即可。可以執行的表單示例爲:

<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> 
     <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> 
     <input type="hidden" name="locationId" value="locationOfThePicture" /> 
     <input type="submit" value="delete"/> 
    </form> 

This表單會將所需的值存儲在隱藏字段中,這些字段不會顯示在網頁上,但在按下提交按鈕時仍會發送到服務器。

(對於小故事,這裏使用的方法是GET,因爲AFAIK HTML不支持DELETE方法(在我們的例子中這會適用))。

GET方法將調用腳本「your.server.org/deleteImage.php」。在這個腳本中,您將擁有所有需要的信息(username/locationId),通過使用$ _GET ['username']和$ _GET ['locationId']變量來刪除圖像。然後,正如你所提到的,你將需要使用unlink方法來實際從服務器上刪除文件。

最後一次完成後,您需要重定向php腳本,以便在刪除圖像後再次顯示圖庫(例如)。這可以通過調用腳本來完成,如果你有某種模板引擎,或者調用php的「header」函數。

我希望這個流程是你的預期,我希望我一直有幫助。

問候,

+0

嗨@bear腳,非常感謝您花時間解釋這一切,非常感謝。正如我在原來的文章中所說的,我對這個真的很新,所以我可能需要一些時間來消化您提供的技術細節。所以我稍後可能會有一些問題。親切的問候 – IRHM

+1

沒問題。把你的時間,享受PHP,當然也沒有愚蠢的問題。如果你不能在php.net(這是一個很好的PHP聖經)或谷歌上找到直接的答案,隨時問。 BR,Bear –

+0

非常感謝@bear腳,這很有趣我只是看着php.net。親切的問候 – IRHM