2013-03-18 28 views
22
$prefix = 'something_prefix'; 
unlink($prefix.'.*'); 

mã ở trên không hoạt động, nhưng tôi thấy một số mã như thế này dưới đây chỉ hoạt động tốtXóa các file trong đó có các tiền tố cùng

unlink('*.jpg'); 

tại sao? Tôi tự hỏi là điều này sẽ làm việc?

unlink('*.*'); 

cách xóa tệp bắt đầu bằng cùng một chuỗi? như thế này

same123.jpg 
sametoo.png 
samexxx.gif 

tất cả bắt đầu bằng chuỗi "giống nhau" nhưng kết thúc bằng phần mở rộng khác, cách thực hiện?

Tôi đã đọc một cách rẻ tiền để thực hiện việc này, nhưng tôi tự hỏi liệu có giải pháp nào tốt hơn không?

Trả lời

47

Hãy thử mã này:

$mask = 'your_prefix_*.*'; 
array_map('unlink', glob($mask)); 

tái bút: glob() yêu cầu PHP 4.3.0+

+1

cảm ơn bạn đã trả lời, chào giá u một ngày tốt lành – castiel

+0

Xin chào Shivan, bạn có thể làm rõ điều này cho tôi không? Điều này có nghĩa là vấn đề là 'unlink()' chấp nhận một tệp _name_, chứ không phải là một tệp _pattern_ (và do đó 'glob()' là bắt buộc để tìm tất cả các tệp _names_ dựa trên _pattern_)? Điều đó tất cả đều có ý nghĩa, nhưng sau đó tại sao 'unlink (' *. Jpg ') của OP, 'ví dụ làm việc OK nếu các mẫu không được chấp nhận để' unlink() '? – Sepster

+0

'glob()' sẽ liệt kê tất cả tên tập tin dựa trên '$ mask'. Bởi 'array_map()', hàm 'unlink' sẽ nạp một lần cho mỗi tên tập tin được liệt kê bởi' glob() '. – Raptor

21

Bạn có thể sử dụng glob cho việc này. Một cái gì đó như thế này (không thử nghiệm):

foreach (glob("something_prefix*.*") as $filename) { 
    unlink($filename); 
} 
+0

cảm ơn u, glob hoạt động như một nét duyên dáng – castiel

+0

+1. Tôi thấy điều này dễ đọc hơn mẫu 'array_map' được đề xuất bởi @ShivanRaptor (và không thích sử dụng hàm' array_map' cho các hàm bắt buộc). – Sepster

+1

@catiel, câu trả lời của Shivan Raptor ngắn hơn. – sectus

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