2012-09-03 14 views
5

Pracuję nad skryptem php, w którym chcę usunąć niektóre pliki z danego folderu za pomocą symbolu wieloznacznego (*).
Znalazłem kilka działających przykładów, takich jak this one, gdzie są używane funkcje unlink() i glob().Usuwanie plików przy użyciu symboli wieloznacznych - exec vs unlink

Teraz zastanawiałem się, czy można również usunąć pliki za pomocą funkcji exec i polecenia, takie jak rm -f /path/to/folder/_prefix_*?
Czy są podejmowane jakiekolwiek zagrożenia bezpieczeństwa?
A jeśli jest w porządku, czy byłoby lepiej pod względem wydajności?

EDYCJA: Tak więc, od pierwszych odpowiedzi widzę, że rzeczywiście, przy użyciu exec może być dopuszczalne rozwiązanie.
Co z problemami z wydajnością? Czy jest jakaś szansa, że ​​opcja exec może być lepsza (szybsza/mniej wymagająca) niż technika glob/unlink?

góry dziękuję

+1

rm byłoby w porządku, kwestie bezpieczeństwa zależą od tego, kto może uruchomić skrypt. –

Odpowiedz

8

Ponieważ nie ma szans na dane dostarczone przez użytkownika mają być wstrzykiwane, nie ma problemu dotyczącego zabezpieczeń w użyciu exec nad glob/unlink. Jednak użycie glob/unlink pozwala na zdefiniowanie wyjątków:

foreach(glob("delete/*") as $f) { 
    if($f == "delete/notme.txt") continue; 
    unlink($f); 
} 

I exec jest często wyłączony na wspólnych serwerach tak glob/unlink jest bardziej mobilny. Jeśli masz dedykowaną konfigurację i nie masz zamiaru rezygnować, nie musisz się o to martwić.

+0

Dzięki za odpowiedź Kolink. Jestem na posiadanym serwerze, a exec jest włączony i działa poprawnie. Czy sądzisz, że może to mieć wpływ na wydajność przy użyciu jednej techniki nad drugą? – CrisDeBlonde

+0

Wyobrażam sobie, że 'exec' jest szybszy, ale' glob/unlink' pozwala skryptowi zawsze dokładnie wiedzieć, co się dzieje - jest to przydatne w aplikacjach konsolowych bardziej niż w Internecie, ale możesz także uzyskać raport o błędach dla każdego pliku lub wyświetl listę usuniętych plików ... –

1

Obie opcje mogą być w porządku. Jeśli jednak nie kontrolujesz własnego serwera lub hosta współdzielonego, polecenie exec nie będzie dostępne.

Aby być po stronie oszczędzania, użyj globu i odłącz.

Powiązane problemy