2012-05-08 43 views
7

Tôi tự hỏi liệu có ai đó có thể giúp tôi không.Xóa tệp hình ảnh từ máy chủ

Tôi đã đặt cùng nhau this trang cho phép người dùng xem hình ảnh đã tải lên của họ ở định dạng thư viện.

Tôi hiện đang muốn thêm chức năng xóa cho từng hình ảnh. Tôi đã tạo ra các nút và Javascript đằng sau nó, nhưng tôi thực sự không chắc chắn làm thế nào để liên kết 'nút bấm' với việc xóa thực tế vật lý của tập tin.

Các hình ảnh không được lưu trữ trong cơ sở dữ liệu nhưng là tại hai địa điểm thư mục trên máy chủ của tôi, trong cấu trúc sau:

UploadedFiles/username/locationid/imagename

UploadedFiles/username/locationid/Thumbnails/imagename

Tôi tương đối mới để PHP và bây giờ tôi đã đạt đến giới hạn kiến ​​thức của mình, nhưng chắc chắn sẵn sàng học hỏi. Từ tài liệu tôi đã đọc Tôi nghĩ rằng tôi là chính xác trong nói rằng các phương pháp unlink là lệnh chính xác để sử dụng?

Nhưng những gì tôi đang tìm kiếm thực sự khó khăn là nói mã để tìm các thư mục với usernamelocationid thư mục mà phù hợp với hiện tại usernamelocationid và sau đó xóa các tập tin mà phù hợp với biến $source tên.

Tôi chỉ tự hỏi liệu có ai đó có thể cung cấp một số hướng dẫn hay không, về cách tôi có thể thực hiện việc này.

Rất cám ơn và Trân trọng

Trả lời

4

Nếu bạn có thể vượt qua tên người dùng, locationid, và các biến imagename để kịch bản của bạn, bạn có thể xóa các tập tin sử dụng unlink():

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

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

Bởi vì bạn đang tương tác với bạn hệ thống tệp, bạn sẽ muốn chắc chắn và khử trùng các biến (ngăn người khác sử dụng ../../../ để truy cập các phần không mong muốn trong hệ thống tệp của bạn).

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

bạn cũng có thể muốn chắc chắn rằng bạn thoát .. ký tự trong tên tập tin nếu không bạn có thể một cái gì đó như "../../../public/index.php" –

+1

+1, buồn cười chúng tôi nghĩ rằng tôi chỉ chỉnh sửa :) –

+1

Tôi không biết nếu nó đi mà không nhắc đến, vì vậy tôi sẽ đề cập đến: mã của bạn nên được cấu trúc để dòng biến khử trùng chạy trước $ path = và unlink () dòng. –

0

Rõ ràng javascript của bạn (phía máy khách) sẽ phải gọi URL (phía máy chủ) để xóa ảnh mà người dùng đã chọn. Tôi đề xuất rằng bây giờ bạn làm điều đó một cách tĩnh lặng (nếu sau này bạn muốn chuyển sang một thứ gì đó năng động hơn, thì bước chuyển thành ajax khá nhỏ.

Vì vậy, như Set Sail Media đã nói, bạn sẽ phải chuyển tên người dùng và locationID với máy chủ của bạn khi nhấp vào nút xóa. Một cách để thực hiện điều đó là:

Khi hiển thị thư viện của bạn trong HTML/javascript, mỗi bức ảnh sẽ chứa thông tin cần thiết và nút gửi chỉ cần gọi tập lệnh xóa từ máy chủ của bạn. Ví dụ về biểu mẫu mà bạn có thể làm là:

<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> 

Điều này biểu mẫu sẽ lưu trữ giá trị cần thiết trong các trường ẩn sẽ không được hiển thị trên trang web nhưng sẽ vẫn được gửi đến máy chủ khi nhấn nút gửi.

(đối với câu chuyện nhỏ, phương pháp được sử dụng ở đây là GET vì AFAIK HTML không hỗ trợ phương thức DELETE (có thể phù hợp với trường hợp của chúng tôi)).

Phương thức GET sẽ gọi tập lệnh "your.server.org/deleteImage.php". Trong tập lệnh này, bạn sẽ có tất cả thông tin bạn cần (username/locationId) để xóa hình ảnh bằng cách sử dụng biến $ _GET ['username'] và $ _GET ['locationId']. Sau đó, như bạn đã đề cập, bạn sẽ cần sử dụng phương thức hủy liên kết để thực sự xóa tệp khỏi máy chủ.

Cuối cùng khi việc này được thực hiện, bạn cần chuyển hướng tập lệnh php để sau khi xóa hình ảnh, bạn sẽ hiển thị lại thư viện (ví dụ). Điều này có thể được thực hiện bằng cách gọi một kịch bản nếu bạn có một số loại công cụ mẫu, hoặc bằng cách gọi chức năng "tiêu đề" của php.

Tôi hy vọng luồng này là những gì bạn mong đợi và tôi hy vọng tôi đã hữu ích.

regards,

Gấu

+0

Xin chào @ chân, cảm ơn bạn rất nhiều vì đã dành thời gian để giải thích tất cả điều này, nó được đánh giá cao. Như tôi đã nói trong bài viết ban đầu của tôi, tôi thực sự rất mới mẻ với điều này, vì vậy nó chỉ có thể đưa tôi đôi khi để tiêu hóa các chi tiết kỹ thuật bạn đã cung cấp. Vì vậy, tôi có thể có một số câu hỏi sau này một chút. Trân trọng – IRHM

+1

Không sao cả. Hãy dành thời gian của bạn, tận hưởng PHP và tất nhiên không có câu hỏi ngu ngốc như vậy. Nếu bạn không thể tìm thấy câu trả lời thẳng trên php.net (đó là một kinh thánh php khá hay) hoặc trên Google, vui lòng hỏi. BR, Bear –

+0

Cảm ơn rất nhiều @ chân, thật buồn cười khi tôi chỉ xem php.net. Trân trọng – IRHM

Các vấn đề liên quan