Kilka dni temu zwrócił się do mnie z zapytaniem jeden z czytelników, czy mógłbym pomóc przy stronie opartej o platformę WordPress – zadanie z pozoru banalne, bo trzeba skasować jeden katalog z zawartością, oraz utworzyć nowy, i wgrać do niego odpowiedni plik.

Ale był też haczyk – brak dostępu do systemu plików. Zarówno przez protokół FTP czy SCP, jak i przez jakikolwiek menedżer plików w formie webowej…

Zarządzanie plikami bezpośrednio z WordPressa

Pech chciał, że z dotychczasowym administratorem strony (i zarządzający kontem hostingowym) kontakt się – tak jakby – urwał kilka dni temu (nie, prawdopodobnie to nie ten sam administrator co w 2be/Adweb ;-)), a na koncie hostingowym coś poszło nie tak, i…

W każdym razie trzeba było skasować jeden katalog – powiedzmy, że był to katalog:

wp-content/uploads/backup-12345678/

A w nim potencjalnie kilka giga tymczasowych plików…

W normalnej sytuacji zalogowałbym się do serwera po FTP/SCP, i najzwyczajniej w świcie skasował stwarzający problemy katalog, w raz z całą zawartością – w tym przypadku nie było takiej możliwości, nie było też szans na szybkie uzyskanie loginu i hasła do panelu zarządzani kontem.

Kasowanie plików i katalogów za pomocą PHP

Na szczęście czytelnik posiadał login i hasło do panelu zarządzania WordPressem, i miał wystarczające uprawnienia by możliwe było zmodyfikowanie plików szablonu/motywu (a już np. zarządzanie wtyczkami miał wycięte/zablokowane), i właśnie ten element postanowiłem wykorzystać.

Tak więc szybko przeszedłem do edytora plików związanych z wybranym/aktywnym motywem:

  • Ustawienia > Wygląd > Edytor

Moim celem w takich przypadkach zazwyczaj jest plik header.php, gdyż kod w nim umieszczony wywoływany jest przy każdym wczytaniu strony, a więc wykona się bez większych kombinacji.

I tak na samym końcu postanowiłem dodać linijkę, dzięki której wybrany katalog zostanie skasowany wraz z zawartością:

<?php array_map('unlink', glob("wp-content/uploads/backup-12345678 var click_object = {"ajax_url":"https:\/\/webinsider.pl\/wp-admin\/admin-ajax.php"};