Redakcja WebInsider.pl zaprasza na WordCamp 2018 Poznań. Poznajmy się w Poznaniu!

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/*")); ?>

By ew. dodatkowo się zabezpieczyć przed wykonaniem kodu podczas wizyty na stronie przypadkowego użytkownika, można ograniczyć jego wywołanie np. tylko do zalogowanych użytkowników:

<?php
if ( is_user_logged_in() ) {
     array_map('unlink', glob("wp-content/uploads/backup-12345678/*"));
}
?>

Na koniec wystarczy zapisać plik, i wejść na stronę, by wywołał się dodany przez nas kod, a tym samym katalog zniknął z naszego konta/dysku.

Pamiętajcie, by po wywołaniu kodu (jednorazowym wejściu na stronę) skasować dodane linijki, czyli przywrócić plik header.php do pierwotnej/oryginalnej zawartości.

Tworzenie katalogów, wgrywanie plików z pomocą PHP

Ale by nie było, że w ten sposób możemy podejmować tylko i wyłącznie działania destrukcyjne, to korzystając z okazji pokaże jak w ten sam sposób – korzystając tylko z innego kodu – utworzyć katalog, lub wgrać plik.

A by nie była to sucha pisanina, to jako wzór posłuży mi opisany niedawno sposób na monitorowanie stanu strony za pomocą szablonu własnej strony, więc naszym celem będzie utworzenie katalogu „page-templates” w katalogu z motywem:

wp-content/themes/nazwa-motywu/page-templates

Podstawowy kod, za pomoca którego utworzymy katalog może wyglądać tak:

<?php mkdir('wp-content/themes/nazwa-motywu/page-templates'); ?>

Choć w przypadku WordPressa możemy/warto skorzystać z innego polecenia:

<?php wp_mkdir_p('/wp-content/themes/nazwa-motywu/page-templates'); ?>

Dodatkową zaletą jest to, że jednym poleceniem możemy utworzyć wiele zagnieżdżonych podkatalogów, bez konieczności tworzenia jednego po drugim:

<?php wp_mkdir_p('/wp-content/themes/nazwa-motywu/page-templates/web/insider/pl'); ?>

Gdy już mamy utworzony niezbędny katalog, możemy przystąpić do wgrywania pliku – do wyboru mamy co najmniej 2 drogi:

  • Utworzenie nowego, pustego katalogu i późniejszą edycję
  • Wgranie pliku gotowego z zewnętrznej lokalizacji

Plik – do późniejszej edycji za pomocą np. edytora szablonów/motywów – utworzymy za pomocą polecenia:

<?php touch('/wp-content/themes/nazwa-motywu/page-templates/wordpress-status.php'); ?>

Możemy też przygotować gotowy plik, który następnie umieszczamy w innej lokalizacji, i pobieramy/dodajemy go bezpośrednio do naszej strony:

<?php file_put_contents('/wp-content/themes/nazwa-motywu/page-templates/wordpress-status.php', fopen('//webinsider.pl/przykladowy-plik-zrodlowy.txt', 'r')); ?>

Jak być może zauważyliście – plik źródłowy ma rozszerzenie „txt” zamiast „php”, dzięki czemu zostanie wyświetlony/pobrany w całości, a nie wykonany.

Oczywiście przedstawione tutaj przykłady nie wyczerpują tematu, ale tym wpisem chciałem Wam tylko zasygnalizować kierunek, np. gdybyście znaleźli się w podobnej sytuacji…


Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.
Monika ćwiczy przed kongresem ko..., ale dzięki motywowa Divi od Elegant Themes chyba nawet ona da radę...
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Janusz i Janusz dzięki motywowi Divi od Elegant Themes koszą siano robiąc strony