WordPress Patch: Plugin Installation mit open_basedir
WordPress 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)
Auch wenn ich (noch) kein Problem damit hab, auf jeden Fall sehr nützlich!
Dankeschön,
Schönen Abend noch
Asmodiel
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…
> 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.
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
Getestet?
> Getestet?
Nein, das werde ich mir die Woche aber nochmals ansehen. 😉
also ich bin ja ganz derselben meinung
In 2.8 wurde die Datei aktualisiert, aber der Fehler nicht behoben.
Ein neues Update hat’s behoben.
> 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 […]
Ja, das hab ich.