Jak naprawić błąd "Upload folder is not writable" w WordPress

Spis treści

Wprowadzenie – Problem z uprawnieniami uploadu

Błąd "Upload folder is not writable" to jeden z najczęstszych problemów, z jakimi spotykają się użytkownicy WordPressa. Ten komunikat pojawia się, gdy próbujesz przesłać pliki do mediów, instalować motywy lub wtyczki, a system nie może zapisać danych w odpowiednim folderze.

Problem ten jest szczególnie frustrujący, ponieważ uniemożliwia podstawowe funkcje zarządzania stroną. Bez możliwości przesyłania plików nie możesz dodawać obrazów do wpisów, instalować nowych rozszerzeń ani aktualizować istniejących komponentów.

W tym przewodniku przeprowadzę Cię przez kompleksowy proces diagnozowania i naprawiania problemów z uprawnieniami folderu uploadu w WordPress. Nauczysz się identyfikować przyczyny problemu i stosować odpowiednie rozwiązania dla różnych środowisk hostingowych.

Sprawdzanie uprawnień folderu wp-content

Pierwszym krokiem w diagnozowaniu problemu jest sprawdzenie aktualnych uprawnień folderu wp-content i jego podfolderów.

Lokalizacja folderów upload

W WordPressie pliki multimedialne są domyślnie przechowywane w:

  • Podstawowa lokalizacja: /wp-content/uploads/
  • Struktura roczna: /wp-content/uploads/2025/01/ (dla stycznia 2025)
  • Niestandardowa lokalizacja: zdefiniowana w Ustawienia → Multimedia

Sprawdzanie uprawnień przez panel hostingowy

Większość paneli hostingowych oferuje menedżer plików z możliwością sprawdzania uprawnień:

  1. Zaloguj się do panelu hostingowego (cPanel, DirectAdmin, Plesk)
  2. Otwórz menedżer plików
  3. Nawiguj do folderu wp-content/uploads
  4. Kliknij prawym przyciskiem i wybierz "Uprawnienia" lub "Permissions"
  5. Sprawdź wartości numeryczne (powinny być 755 dla folderów)

Sprawdzanie uprawnień przez FTP

Jeśli masz dostęp FTP, możesz sprawdzić uprawnienia za pomocą klienta FTP:

  1. Połącz się z serwerem przez klienta FTP (np. FileZilla)
  2. Znajdź folder wp-content/uploads
  3. Kliknij prawym przyciskiem myszy na folderze
  4. Wybierz "Uprawnienia pliku" lub "File permissions"
  5. Sprawdź wartości uprawnień

Prawidłowe uprawnienia dla WordPress

  • Folder: 755 (rwx r-x r-x)
  • Pliki: 644 (rw- r-- r--)
  • Wp-config.php: 600 (rw- --- ---)

Jeśli interesuje Cię szersze spojrzenie na bezpieczeństwo plików w WordPress, polecam przeczytać artykuł: Jak zabezpieczyć katalog uploads przed wykonywaniem plików PHP, gdzie znajdziesz więcej szczegółów na temat zabezpieczania folderu mediów przed różnymi zagrożeniami.

Naprawa uprawnień przez FTP/SSH

Gdy zidentyfikujesz nieprawidłowe uprawnienia, możesz je naprawić na kilka sposobów.

Metoda 1: Poprawa uprawnień przez FTP

Krok 1: Zmień uprawnienia folderu uploads

  1. Połącz się z serwerem przez FTP
  2. Znajdź folder wp-content/uploads
  3. Kliknij prawym przyciskiem i wybierz "Uprawnienia"
  4. Wpisz 755 w polu wartości numerycznej
  5. Zaznacz "Zastosuj do podkatalogów"
  6. Kliknij "OK"

Krok 2: Zmień uprawnienia plików

  1. Wejdź do folderu uploads
  2. Zaznacz wszystkie pliki
  3. Kliknij prawym przyciskiem i wybierz "Uprawnienia"
  4. Wpisz 644 w polu wartości numerycznej
  5. Kliknij "OK"

Metoda 2: Poprawa uprawnień przez SSH

Krok 1: Połącz się z serwerem

Użyj klienta SSH, aby połączyć się z serwerem:

  • ssh użytkownik@twojadomena.com
  • Podaj hasło gdy zostaniesz o to poproszony

Krok 2: Zmień uprawnienia folderów

Użyj polecenia find, aby zmienić uprawnienia wszystkich folderów:

  • find /sciezka/do/wordpress/wp-content/uploads -type d -exec chmod 755 {} \;

Krok 3: Zmień uprawnienia plików

Zmień uprawnienia wszystkich plików w folderze uploads:

  • find /sciezka/do/wordpress/wp-content/uploads -type f -exec chmod 644 {} \;

Metoda 3: Użycie wtyczki WordPress

Wtyczki do zarządzania uprawnieniami:

  • File Manager: pozwala zarządzać plikami i uprawnieniami z panelu WordPress
  • WP File Manager: zaawansowany menedżer plików z opcją zmiany uprawnień
  • File Permissions: specjalistyczna wtyczka do naprawy uprawnień

Zalety i wady tego podejścia:

  • Zalety: wygodny interfejs, nie wymaga dostępu FTP/SSH
  • Wady: wymaga działającego WordPressa, może nie działać przy poważnych problemach z uprawnieniami

Konfiguracja serwera Apache/Nginx

Czasami problem leży nie w uprawnieniach plików, ale w konfiguracji serwera WWW.

Problemy z serwerem Apache

Sprawdzenie użytkownika serwera WWW

Aby sprawdzić, jaki użytkownik uruchamia serwer Apache:

  • ps aux | grep apache2 (dla Apache na Linux)
  • ps aux | grep httpd (dla Apache na niektórych systemach)

Konfiguracja .htaccess

Dodaj do pliku .htaccess w głównym folderze WordPress:

  • Options -Indexes
  • DirectoryIndex index.php index.html

Ustawienia wirtualnego hosta

W pliku konfiguracyjnym Apache upewnij się, że:

  • Użytkownik i grupa serwera mają odpowiednie uprawnienia
  • AllowOverride jest ustawione na All dla folderu WordPress
  • Require all granted jest skonfigurowane poprawnie

Problemy z serwerem Nginx

Sprawdzenie użytkownika serwera WWW

Aby sprawdzić, jaki użytkownik uruchamia serwer Nginx:

  • ps aux | grep nginx
  • cat /etc/nginx/nginx.conf | grep user

Konfiguracja Nginx

W pliku konfiguracyjnym Nginx upewnij się, że:

  • Użytkownik serwera ma dostęp do folderów WordPress
  • client_max_body_size jest wystarczająco duży
  • fastcgi_param SCRIPT_FILENAME jest poprawnie ustawiony

Przykładowa konfiguracja Nginx dla WordPress

W sekcji serwera dodaj:

  • client_max_body_size 64M
  • location / { try_files $uri $uri/ /index.php?$args; }
  • location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; }

Problemy z właścicielem plików

Nawet z prawidłowymi uprawnieniami, problem może leżeć w nieprawidłowym właścicielu plików.

Identyfikacja problemu z właścicielem

Sprawdzanie właściciela plików

Aby sprawdzić, kto jest właścicielem plików:

  • ls -la /sciezka/do/wordpress/wp-content/uploads
  • Wynik pokaże użytkownika i grupę w formacie: użytkownik grupa

Porównanie z użytkownikiem serwera WWW

Upewnij się, że właściciel plików jest taki sam jak użytkownik serwera WWW:

  • ps aux | grep apache2 lub ps aux | grep nginx
  • Porównaj nazwy użytkowników

Naprawa problemu z właścicielem

Zmiana właściciela przez SSH

Aby zmienić właściciela wszystkich plików WordPress:

  • chown -R użytkownik_serwera:grupa_serwera /sciezka/do/wordpress
  • Przykład: chown -R www-data:www-data /var/www/html

Zmiana tylko folderu uploads

Jeśli problem dotyczy tylko uploadów:

  • chown -R użytkownik_serwera:grupa_serwera /sciezka/do/wordpress/wp-content/uploads

Unikanie problemów w przyszłości

Konfiguracja użytkownika FTP

Upewnij się, że użytkownik FTP ma taką samą nazwę jak użytkownik serwera WWW:

  • Stwórz użytkownika FTP z nazwą www-data lub apache
  • Dodaj go do odpowiedniej grupy

Używanie WP-CLI

WP-CLI automatycznie używa właściwego użytkownika:

  • wp plugin install nazwa-wtyczki
  • wp theme install nazwa-motywu

Konfiguracja PHP safe_mode i open_basedir

Niektóre konfiguracje PHP mogą blokować możliwość zapisu plików na serwerze.

Problem z safe_mode

Czym jest safe_mode?

Safe_mode to przestarzała funkcja bezpieczeństwa PHP, która:

  • Ogranicza dostęp do plików tylko do właściciela skryptu
  • Blokuje operacje na plikach między różnymi użytkownikami
  • Została usunięta w PHP 5.4.0

Sprawdzanie czy safe_mode jest włączony

Utwórz plik phpinfo.php z zawartością:

  • phpinfo();

Szukaj wartości "safe_mode" na wygenerowanej stronie.

Wyłączanie safe_mode

Jeśli safe_mode jest włączony (na starych wersjach PHP):

  • Dodaj do pliku .htaccess: php_flag safe_mode off
  • Lub zmień w pliku php.ini: safe_mode = Off

Problem z open_basedir

Czym jest open_basedir?

Open_basedir ogranicza dostęp PHP tylko do określonych folderów:

  • Zapobiega dostępowi do plików poza wyznaczonymi katalogami
  • Może blokować dostęp do folderu uploads
  • Jest nadal używany jako funkcja bezpieczeństwa

Sprawdzanie konfiguracji open_basedir

W pliku phpinfo.php szukaj wartości "open_basedir":

  • Pokaże listę dozwolonych folderów
  • Sprawdź czy folder uploads jest na liście

Zmiana konfiguracji open_basedir

Aby dodać folder uploads do dozwolonych lokalizacji:

  • W pliku php.ini dodaj: open_basedir = "/sciezka/do/wordpress/:/tmp/"
  • Restartuj serwer WWW po zmianie

Inne ograniczenia PHP

Limit rozmiaru pliku

Sprawdź i zwiększ limity w php.ini:

  • upload_max_filesize = 64M
  • post_max_size = 64M

Limit czasu wykonywania

Duże pliki mogą wymagać więcej czasu:

  • max_execution_time = 300
  • max_input_time = 300

Sprawdzanie wolnego miejsca na dysku

Czasami błąd "Upload folder is not writable" jest spowodowany brakiem wolnego miejsca na dysku.

Sprawdzanie wolnego miejsca

Przez panel hostingowy

Większość paneli hostingowych pokazuje zużycie dysku:

  1. Zaloguj się do panelu hostingowego
  2. Szukaj sekcji "Użycie dysku" lub "Disk Usage"
  3. Sprawdź dostępne wolne miejsce

Przez SSH

Użyj poleceń systemowych do sprawdzenia miejsca:

  • df -h (pokazuje zużycie dysku w czytelnym formacie)
  • du -sh /sciezka/do/wordpress (pokazuje rozmiar folderu WordPress)
  • du -sh /sciezka/do/wordpress/wp-content/uploads (pokazuje rozmiar uploadów)

Przez skrypt PHP

Utwórz plik check_space.php:

  • echo "Wolne miejsce: " . disk_free_space("/") . " bajtów";
  • echo "Całkowite miejsce: " . disk_total_space("/") . " bajtów";

Zarządzanie miejscem na dysku

Czyszczenie folderu uploads

Zidentyfikuj i usuń niepotrzebne pliki:

  • Duże obrazy, które nie są używane
  • Kopie zapasowe plików
  • Stare pliki tymczasowe

Optymalizacja obrazów

Zmniejsz rozmiar obrazów:

  • Użyj wtyczek do kompresji obrazów
  • Generuj mniejsze wersje miniaturek
  • Usuwaj oryginalne obrazy po optymalizacji

Przenoszenie mediów na zewnętrzny serwer

Rozważ użycie zewnętrznego przechowywania:

  • Amazon S3 z wtyczką WP Offload Media
  • Cloudinary z wtyczką Cloudinary
  • Inne usługi CDN dla mediów

Monitorowanie zużycia dysku

Ustawienie alertów

Skonfiguruj monitorowanie zużycia:

  • Alerty przy 80% zużycia dysku
  • Sprawdzanie rozmiaru folderu uploads
  • Monitorowanie dużych plików

Automatyczne czyszczenie

Użyj wtyczek do automatyzacji:

  • Media Cleaner do usuwania nieużywanych mediów
  • WP-Sweep do czyszczenia bazy danych
  • Wp-Cron do regularnego czyszczenia

Problemy z SELinux i bezpieczeństwem

Na niektórych systemach Linux, SELinux może blokować zapis do folderów mimo prawidłowych uprawnień.

Czym jest SELinux?

Podstawy SELinux

SELinux (Security-Enhanced Linux) to:

  • Moduł bezpieczeństwa jądra Linux
  • Kontroluje dostęp do zasobów systemowych
  • Działa niezależnie od standardowych uprawnień Unix
  • Domyślnie włączony w CentOS, RHEL, Fedora

Konteksty bezpieczeństwa

SELinux używa kontekstów zamiast uprawnień:

  • user:role:type:level
  • Najważniejszy to type (np. httpd_sys_content_t)
  • Każdy plik i proces ma przypisany kontekst

Sprawdzanie statusu SELinux

Sprawdzenie czy SELinux jest włączony

Użyj poleceń:

  • sestatus (pokazuje status SELinux)
  • getenforce (pokazuje tryb enforcement)

Sprawdzenie kontekstów folderu uploads

Aby sprawdzić kontekst bezpieczeństwa:

  • ls -Z /sciezka/do/wordpress/wp-content/uploads
  • Wynik pokaże konteksty SELinux

Logi SELinux

Sprawdź logi w poszukiwaniu blokad:

  • tail -f /var/log/audit/audit.log
  • grep "denied" /var/log/audit/audit.log
  • ausearch -m avc -ts recent

Naprawa problemów z SELinux

Zmiana kontekstu folderu uploads

Ustaw odpowiedni kontekst dla folderu uploads:

  • semanage fcontext -a -t httpd_sys_rw_content_t "/sciezka/do/wordpress/wp-content/uploads(/.*)?"
  • restorecon -Rv /sciezka/do/wordpress/wp-content/uploads

Włączenie zapisu dla Apache

Pozwól Apache na zapis w folderze uploads:

  • setsebool -P httpd_can_network_connect 1
  • setsebool -P httpd_can_sendmail 1

Tymczasowe wyłączenie SELinux

Tylko do testowania (niezalecane na produkcji):

  • setenforce 0 (tymczasowo wyłącza enforcement)
  • setenforce 1 (włącza z powrotem)

Inne problemy z bezpieczeństwem

AppArmor

Na Ubuntu/Debian może być włączony AppArmor:

  • sudo aa-status (sprawdza status)
  • sudo apparmor_status (alternatywne polecenie)

Firewall i mod_security

Reguły bezpieczeństwa mogą blokować upload:

  • Sprawdź logi mod_security
  • Wyłącz tymczasowo do testowania
  • Dostosuj reguły do potrzeb WordPress

Testowanie uploadu po naprawie

Po wprowadzeniu zmian w konfiguracji, ważne jest przetestowanie, czy problem został rozwiązany.

Podstawowe testy uploadu

Test przez panel WordPress

  1. Zaloguj się do panelu administracyjnego WordPress
  2. Przejdź do Media → Dodaj nowe
  3. Prześlij mały plik testowy (poniżej 1MB)
  4. Sprawdź czy plik został poprawnie przesłany

Test przez edytor wpisów

  1. Utwórz nowy wpis lub edytuj istniejący
  2. Kliknij "Dodaj obrazek" lub "Dodaj medię"
  3. Prześlij plik bezpośrednio do edytora
  4. Sprawdź czy obrazek pojawił się w treści

Test instalacji wtyczki

  1. Przejdź do Wtyczki → Dodaj nową
  2. Wyszukaj prostą wtyczkę
  3. Kliknij "Zainstaluj teraz"
  4. Sprawdź czy instalacja przebiegła pomyślnie

Zaawansowane testy

Test różnych typów plików

Przetestuj różne formaty plików:

  • Obrazy: JPG, PNG, GIF, WebP
  • Dokumenty: PDF, DOC, TXT
  • Archiwa: ZIP, RAR
  • Wideo: MP4, AVI (jeśli dozwolone)

Test różnych rozmiarów plików

Sprawdź limity rozmiaru:

  • Małe pliki (poniżej 100KB)
  • Średnie pliki (1-5MB)
  • Duże pliki (powyżej 10MB)
  • Maksymalny dozwolony rozmiar

Test uploadu przez API

Jeśli używasz aplikacji zewnętrznych:

  • Test przez REST API WordPress
  • Test przez XML-RPC (jeśli włączony)
  • Test przez aplikacje mobilne

Monitorowanie po naprawie

Logowanie operacji uploadu

Włącz logowanie do śledzenia problemów:

  • Dodaj logowanie do functions.php
  • Użyj wtyczki do logowania operacji
  • Monitoruj logi serwera WWW

Alerty o błędach

Skonfiguruj powiadomienia o problemach:

  • Alerty email o nieudanych uploadach
  • Monitorowanie logów błędów
  • Sprawdzanie stanu folderu uploads

Podsumowanie – Zapobieganie problemom z uploadem

Naprawa błędu "Upload folder is not writable" to jedno, ale zapobieganie problemom w przyszłości jest równie ważne.

Regularne kontrole i konserwacja

Monitorowanie uprawnień

  • Regularnie sprawdzaj uprawnienia folderów
  • Używaj skryptów do automatycznej weryfikacji
  • Ustaw alerty o zmianach uprawnień

Monitorowanie miejsca na dysku

  • Sprawdzaj wolne miejsce co tydzień
  • Ustaw alerty przy 80% zużycia
  • Regularnie czyść niepotrzebne pliki

Backupy i testy przywracania

  • Twórz regularne kopie zapasowe
  • Testuj przywracanie na środowisku testowym
  • Weryfikuj uprawnienia po przywracaniu

Dobre praktyki konfiguracyjne

Bezpieczna konfiguracja serwera

  • Używaj dedykowanego użytkownika dla WordPress
  • Stosuj zasadę najmniejszych uprawnień
  • Regularnie aktualizuj oprogramowanie serwera

Optymalizacja WordPress

  • Używaj ograniczonej liczby wtyczek
  • Regularnie czyść bazę danych
  • Optymalizuj obrazy przed uploadem

Planowanie awaryjne

  • Miej przygotowane procedury awaryjne
  • Przechowuj kontakty do wsparcia technicznego
  • Dokumentuj konfigurację systemu

Narzędzia i zasoby

Wtyczki do monitorowania

  • Health Check & Troubleshooting: diagnostyka WordPress
  • File Monitor: monitorowanie zmian w plikach
  • Activity Log: logowanie operacji w WordPress

Narzędzia serwerowe

  • Monit: monitorowanie zasobów serwera
  • Nagios: zaawansowane monitorowanie
  • Zabbix: kompleksowe monitorowanie infrastruktury

Kiedy szukać pomocy

Wsparcie techniczne

Skontaktuj się z pomocą techniczną gdy:

  • Próbowałeś wszystkich powyższych rozwiązań
  • Problem dotyczy wielu stron na serwerze
  • Podejrzewasz problemy z konfiguracją serwera

Eksperci WordPress

Rozważ zatrudnienie specjalisty gdy:

  • Strona generuje przychody i nie może być niedostępna
  • Nie masz pewności co do technicznych zmian
  • Problem powtarza się regularnie

Pamiętaj, że błąd "Upload folder is not writable" może mieć wiele przyczyn, ale systematyczne podejście i cierpliwość zazwyczaj prowadzą do rozwiązania problemu. Z tą wiedzą będziesz w stanie diagnozować i naprawiać problemy z uploadem w przyszłości.

Potrzebujesz profesjonalnej pomocy z problemami z uprawnieniami lub konfiguracją serwera WordPress? Chętnie pomożemy Ci szybko rozwiązać problemy z uploadem i zabezpieczyć stronę przed przyszłymi awariami. Skontaktuj się z nami, aby uzyskać profesjonalne wsparcie techniczne.