Macs in Media

WordPress-Probleme beim Bilder-Upload in Mediathek

Nachdem ich bereits über längere Zeit keine Bilder und sonstige Medien in WordPress hochgeladen habe, stellte ich heute fest, dass es zu einer dauerhaften Fehlermeldung kommt, die mich auf falsche Zugriffsrechte hinweist:

Unable to create directory /pfad/zu/wordpress/wp-content/uploads/2009/07. Is its parent directory writable by the server?

Folgende Schritte kann man versuchen, wenn WordPress den Upload-Dienst verweigert, ansonsten aber anstandslos funktioniert:

  1. Benutzerrechte der „wp-content“ und „wp-content/uploads“ Ordner überprüfen. Hat man seine Installation verschoben oder von einem anderen Server migriert, so kann es sein, dass die Rechte beim FTP-Server, nicht aber beim WWW-Server liegen. Unter Ubuntu sollten Benutzer und Gruppe in einer Standardinstallation „www-data“ sein. Hierbei muss man darauf achten, dass auch alle Unterordner dieselben Rechte besitzen. Am einfachsten funktioniert das Ändern der Rechte im Terminal mit dem Befehl „sudo chown -R www-data:www-data wp-content“. Sollte man keinen Shell-Zugriff haben, so kann man diesen Schritt auch komfortabel mit FTP-Clients, wie Transmit, lösen.
  2. Zugriffsrechte sind ein weiteres häufiges Problem, welches verhindert, dass Bilder und anderen Medien hochgeladen werden können. An vielen Stellen wird empfohlen die Zugriffsrechte aller Unterordner auf 777 zu setzen, so dass die Dateien durch die ganze Welt veränderbar sind. Hat man die Benutzerrechte im vorherigen Schritt korrekt gesetzt, so sollten normale Zugriffsrechte von 755 reichen. Dies bedeutet, dass lediglich der Besitzer Dateien verändern kann, während die Gruppe und der Rest der Welt nur Lese-Zugriff haben. Auch dieser Schritt ist am einfachsten per Shell-Zugriff zu erledigen („find . -type d -exec chmod 755 {} \;“)
  3. Wenn die beiden oberen Schritte nicht funktionieren, so ist man zuerst ratlos. Normalerweise sollten Uploads funktionieren, wenn Ordner und Dateien durch die gesamte Welt beschreibbar sind. Richtig?

    Leider nur teilweise. WordPress arbeitet mit PHP und dieser unterstützt einen so genannten Safe Mode. Dieser verhindert zum Beispiel, dass ein Skript, welches unter dem Benutzer „claudia“ läuft, Dateien in einem Ordner erstellen kann, der dem Benutzer „web-server“ gehört. Eine relativ einfache Lösung ist es die Benutzerrechte der gesamten WordPress-Installation auf den WWW-Server-Benutzer zu setzen. Auch dies kann man mit dem Befehl „sudo chown -R www-data:www-data wp-installation“ machen, nur eben auf den kompletten WordPress-Ordner und nicht nur auf „uploads“.

Sollten diese Tipps nicht funktionieren und der Medienupload immer noch kläglich scheitern, so kann man die Einstellung „Uploads in folgendem Ordner speichern“ in „Einstellungen -> Verschiedenes“ überprüfen, die bei neueren WordPress-Installationen im Normalfall „wp-content/uploads“ lauten sollte (Slashes sollten beachtet werden). Eine weitere Möglichkeit ist die Änderung der Einstellungen von „mod_security.