WordPress Patch: Plugin Installation mit open_basedir

wordpress1WordPress bietet ab Version 2.7 die Möglichkeit, Plugins direkt über das Admininterface zu installieren bzw. zu aktualisieren.

Leider funktioniert das Standardmäßig nicht so, wie man sich das wünscht. WordPress ignoriert jegliche PHP Konfiguration und versucht in der Standardkonfiguration seine temporären Dateien nach /tmp zu ziehen.

Darauf hat man aber in der Regel nicht immer Zugriff, zum Beispiel auf Servern auf denen Confixx läuft. Ergo erhält man den folgenden (und diverse andere) Fehler.

Warning: fileowner() [function.fileowner]: open_basedir restriction in effect. File(/tmp/1240086666) is not within the allowed path(s): (/var/www/webuser/html/:/var/www/webuser/phptmp/:/var/www/webuser/files/:/var/www/webuser/atd/) in /var/www/webuser/html/wp-admin/includes/file.php on line 628

Etwas dumm. Also habe ich auf die schnelle einmal einen kleinen Patch geschrieben, der WordPress dazu zwingt, seine temporären Dateien auch dahin zu schieben, wo es in der php.ini angegeben ist.
Ausgetauscht werden muss einmal ein kleiner Codeblock in der Datei /wp-admin/includes/file.php in der Funktion get_temp_dir():

return '/tmp/';

tauscht man mit der folgenden Zeile aus:

return ini_get('upload_tmp_dir');

Dann fügt man noch eine Kleinigkeit in der Datei /wp-config.php hinzu.

putenv('TMPDIR=' . ini_get('upload_tmp_dir'));

Anschließend funktioniert alles wie es soll, zumindest dann wenn putenv() vom Hoster erlaubt wurde.

Download
Die angepasste Datei /wp-admin/includes/file.php für WordPress 2.7.1 kann man sich auch direkt hier herunterladen und dann austauschen. Die Änderungen in der Datei wp-config.php sind trotzdem nötig.

Download filephp.gz (6,9 kb)

Kommentare (11)

Asmodiel20.04.2009 um 20:25 Uhr

Auch wenn ich (noch) kein Problem damit hab, auf jeden Fall sehr nützlich!

Dankeschön,
Schönen Abend noch

Asmodiel

Mike20.04.2009 um 21:56 Uhr

Weißt du, wie sich das beim nächsten Update verhält, wenn man den Code manuell ändert?

PS: Vor kurzem war erst der WordPress Has-Patch Marathon:
http://wordpress.org/development/2009/04/has-patch-marathon-results/
Vielleicht ist der Fehler schon behoben…

Simon20.04.2009 um 22:11 Uhr

> Weißt du, wie sich das beim nächsten Update verhält,
> wenn man den Code manuell ändert?

Entweder die Datei wird aktualisiert, und man muss das ganze erneut patchen, oder es wird nichts verändert und das ganze bleibt. Größere Probleme sind bei einer derart kleinen Änderung wohl eher nicht zu erwarten, wobei es trotzdem ein Eingriff in die Core-Files ist.

Falls gewünscht kann ich auf die schnelle auch einen Pluginartigen Patch schreiben, der sich dann einfacher wieder deaktivieren lässt. Ich liebe die WordPress API. 😀

Laut Bugtrack die letzte Änderung/der letzte Patch für die Datei file.php vor 7 Wochen (in der Funtion get_home_dir()):

http://core.trac.wordpress.org/attachment/ticket/9246/file.diff

Ansonsten konnte ich auch nichts weiter finden. Ich habe aber im Artikel einmal kurz notiert, für welche Version das ganze ist. Bei Gelegenheit werde ich dann auch ein Ticket im Bugtracker eröffnen.

Simon20.04.2009 um 22:16 Uhr

Habe doch noch etwas gefunden:

http://wordpress.org/support/topic/238738

Möglicherweiße funktioniert auch ein simples:

putenv(‚TMPDIR=‘ . ini_get(‚upload_tmp_dir‘));
define(‚WP_TEMP_DIR‘, ini_get(‚upload_tmp_dir‘));

in der Datei wp-config.php

Mike20.04.2009 um 22:35 Uhr

Getestet?

Simon20.04.2009 um 23:01 Uhr

> Getestet?

Nein, das werde ich mir die Woche aber nochmals ansehen. 😉

chilley21.04.2009 um 13:25 Uhr

also ich bin ja ganz derselben meinung

Asmodiel12.06.2009 um 12:58 Uhr

In 2.8 wurde die Datei aktualisiert, aber der Fehler nicht behoben.

Ein neues Update hat’s behoben.

Simon12.06.2009 um 14:59 Uhr

> Ein neues Update hat’s behoben.

Was heißt ein neues Update? Hast du den Patch erneut eingespielt?

[…] Bug mit open_basedir und den Plugininstallationen von dem ich vor kurzem geschrieben hatte besteht leider auch in […]

Asmodiel10.07.2009 um 23:05 Uhr

Ja, das hab ich.

Einen Kommentar hinterlassen

Du musst eingeloggt sein um einen Kommentar schreiben zu können.