TMPDIR und WP_TEMP_DIR meist überflüssig

  • Hallo,

    in verschiedenen Forumsbeiträgen wird vorgeschlagen, mit Hilfe der Umgebungsvariablen TMPDIR und der Konstanten WP_TEMP_DIR in der wp-config.php den Pfad auf ein Verzeichnis für temporäre Dateien einzustellen. Beispielsweise mit folgenden Anweisungen:

    PHP
    putenv('TMPDIR='. ABSPATH .'tmp');
    define('WP_TEMP_DIR', ABSPATH . 'tmp');

    Zumindest ab WordPress 3.0 sind diese Zeilen meist überflüssig.


    Dies liegt daran, dass der Webhoster in der Regel in der php.ini bereits den Pfad auf ein geeignetes Verzeichnis konfiguriert hat. Ob dies der Fall ist, lässt sich mit Hilfe einer kleinen PHP-Datei, in der die Funktion phpinfo() aufgerufen wird, überprüfen:

    PHP
    <?php
    echo phpinfo();
    ?>

    In der angezeigten Info im Abschnitt "PHP Credits - Configuration - PHP Core", Spalte "Local Value" wird der Inhalt der zuständigen Konfigurationsvariablen "upload_tmp_dir" angezeigt.

    Bei der Suche nach einem Verzeichnis für temporäre Dateien fragt WordPress nun genau diese Konfigurationsvariable ab. Nur wenn das nicht erfolgreich ist, wird die Umgebungsvariable TMPDIR abgefragt:

    Im Fall der Konstanten WP_TEMP_DIR erfolgt die Abfrage von "upload_tmp_dir" erst dann, wenn WP_TEMP_DIR nicht definiert ist

    Die Funktion "trailingslashit" ergänzt übrigens bei Bedarf einen am Ende des Pfades fehlenden Slash "/".

    Gruß,
    upscho

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hi,

    okay, soweit klar! Wurde aber in der php.ini die Variable "upload_tmp_dir" nicht gesetzt, also keine Angabe, macht es den dann nicht doch Sinn die beiden WP Konstanzen in der wp-config.php, auch bei WP 3.0.1, explizit zu definieren...!?!?

    Gruß blog_micky

    Respice post te, hominem te esse memento! (Sueton „Iulius“ 51)

    Einmal editiert, zuletzt von blog_micky (27. September 2010 um 09:13)

  • Es ist schon erstaunlich, wieviel Halbwahrheiten und Falschinformationen hier verbreitet werden! Wenn man sich die Datei der 1. Fundstelle im o.g. Eingangsbeitrag von Dateinamen her auch nur ansieht, dann stellt man fest, daß dies nur in für die Differenzanzeige für Post Revisionen in .../text/Diff.php gemacht wird. Dies ist eine 3rd party library und nur zu WordPress hinzugefügt. Gewartet wird das Diff Tool aber in einem anderen Projekt.

    Die 2. Fundstelle ist die von WorkPress selbst und diese bevorzugt den Wert der Konstanten WP_TEMP_DIR, wenn er denn gesetzt ist. Ansonsten wird ermittelt, wo sich das Temp Directory befindet.

    Im Normalfall ist das von Server voreingestellte Temp Directory ein geshartes Directory über alle Domains dieses Servers. Also landen temporär erstmal alle Uploads aller Kunden auf diesem Server in diesem Verzeichnis. Man kann sich sehr einfach dieses Verzeichnis komplett auflisten lassen und alle Dateien ansehen, die andere hochladen, wenn die Scripte zum Hochladen die Dateien nicht wieder ihren Müll beräumen.
    Aus diesem Grund kann man seinen eigenen Temp Pfad setzen, um Dateien auch nur im eigenen Domainbereich zu behalten, es ist kein sinnloses Unterfangen deswegen sondern hat auch was mit Sicherheit zu tun.

    Wichtig: Wenn man das Verzeichnis aktiv durch die Konstante setzt, muß man allerdings auch gewährleisten, daß WordPress dort hin schreiben kann und die passenden Rechte gesetzt sind.

    Ich persönlich bevorzuge meinen eigenen Temp Pfad, denn ersten kann ich dadurch sehr leicht sehen, ob Scripte "rumschweinen" und temporäre Dateien nicht beräumen und zweitens ich hab die hochgeladenen Dateien nur in meinem Domainspace und gebe die nicht für alle Kunden "temporär frei".

  • Die Aussage, dass das vom Webhoster voreingestellte Tmp-Verzeichnis "im Normalfall" von mehreren Usern benutzt wird, halte ich für ein Gerücht. Aber vielleicht handelt es sich bei meinem Webhoster (Host Europe) ja um einen Glücksfall, denn dort hat jeder User definitiv ein nur von ihm benutztes Tmp-Verzeichnis (http://faq.hosteurope.de/index.php?cpid=15034). Eine Pfadangabe, die wie bei Host Europe die Benutzerkennung enthält, sollte allerdings auch bei anderen Webhostern ein Indikator dafür sein, dass man ein "privates" Tmp-Verzeichnis nutzen kann.

    Welche Rolle spielt es eigentlich, dass die Datei "diff.php" "nur zu WordPress hinzugefügt" ist? Wie man leicht durch eine Textsuche über alle in der WordPress-ZIP-Datei enthaltenen Dateien herausfinden kann, ist die genannte Stelle in "diff.php" die einzige, an der die Umgebungsvariable TMPDIR abgefragt wird. In den zu WordPress gehörenden Dateien wird sie gar nicht verwendet…

    Natürlich kann jeder soviel Konstanten oder Umgebungsvariablen in der wp-config.php definieren, wie er es für notwendig hält. Ich möchte mich allerdings mehr mit den Inhalten des Blogs und weniger mit seiner Konfiguration beschäftigen. Daher versuche ich, die Anpassungen in der Datei wp-config.php auf ein Minimum zu beschränken. Im Fall des Tmp-Verzeichnisses überlasse ich die Suche gerne WordPress, denn es besitzt durchaus - wie gezeigt - hierfür geeignete Mechanismen.

  • Hi codestyling,

    ich frage vorsichtshalber noch einmal nach! Ich würde es gerne so bevorzugen wie von Dir "vorgeschlagen" und die TMP-Dateien gezielt alle auf meinen Webspace leiten...

    Also um das zu erreichen leite ich jetzt mit

    [COLOR=#000000][COLOR=#0000BB]putenv[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'TMPDIR='[/COLOR][COLOR=#007700]. [/COLOR][COLOR=#0000BB]ABSPATH [/COLOR][COLOR=#007700].[/COLOR][COLOR=#DD0000]'tmp'[/COLOR][COLOR=#007700]);
    [/COLOR][COLOR=#0000BB]define[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'WP_TEMP_DIR'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]ABSPATH [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#DD0000]'tmp'[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]

    als Eintrag in der wp-config.php alles auf ein zuvor angelegtes, beschreibbares tmp Verzeichnis im Root um...?!?!

    Ist das jetzt so richtig oder habe ich was falsch verstanden...???

    Gruß blog_micky

    Respice post te, hominem te esse memento! (Sueton „Iulius“ 51)


  • Ich würde es gerne so bevorzugen wie von Dir "vorgeschlagen" und die TMP-Dateien gezielt alle auf meinen Webspace leiten...

    Also um das zu erreichen leite ich jetzt mit

    [COLOR=#000000][COLOR=#0000bb]putenv[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'TMPDIR='[/COLOR][COLOR=#007700]. [/COLOR][COLOR=#0000bb]ABSPATH [/COLOR][COLOR=#007700].[/COLOR][COLOR=#dd0000]'tmp'[/COLOR][COLOR=#007700]);
    [/COLOR][COLOR=#0000bb]define[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'WP_TEMP_DIR'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]ABSPATH [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#dd0000]'tmp'[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]

    Vorsicht: das Verzeichnis sollte nicht über eine URL im Browser erreichbar sein!

    http://exmaple.org/tmp/deine_sicherheitslücke.php

    Lege das temp-Verzeichnis ausserhalb von deinem Documenten Root an, so, dass dein WebServer erst garnicht auf die Idee kommen kann - die Datei auszuliefern oder gar auszuführen.

    Des weiteren ist es aus meiner sicht sinnvoller, wenn man dies PHP überlässt ...

    Z.B, wenn PHP als Apachemodul läuft

    Code
    <Virtualhost>
    php_admin_value open_basedir /home/user
    php_admin_value upload_tmp_dir /home/user/tmp
    php_admin_value session.save_path /home/user/tmp
    </Virtualhost>

    Wenn man die notwenigen Rechte nicht hat - einfach den Provider um die entsprechende Konfiguration bitten.

    PHP Konfiguration im Handbuch
    http://de2.php.net/manual/de/ini.…ct.file-uploads

    Dateiuploads und wie er funktioniert
    http://de2.php.net/manual/de/features.file-upload.php

    cu

    ralf

    Mit offenen Augen träumen

  • Hallo r23...

    okay das stimmt, inzwischen habe ich das auch erkannt und außerhalb dieses Forums ebenfalls noch einmal diskutiert...

    Ich habe nun außerhalb des Rootverzeichnisses auf meinem Server einen tmp-Ordner angelegt... In meinem Webpaket kann ich eigenständig die php.ini konfigurieren bzw. Änderungen oder Erweiterungen anlegen...

    Bisher ist die Variable "upload_tmp_dir"bei mir nicht gesetzt... Wenn ich sie jetzt setzen möchte, was muss ich den dann konkret dazu in der php.ini eingeben; Also das der tmp-Ordner außerhalb des Root grundsätzlich genutzt wird...?

    Gruß blog_micky

    Respice post te, hominem te esse memento! (Sueton „Iulius“ 51)

  • Hi,

    okay, noch eine kleine Nachinfo: Ich habe jetzt per "upload_tmp_dir = /home/www/tmp/" in der php.ini den gesamten Temp-Kram nun direkt auf einen Ordner in meinem System umgeleitet und kann bisher keine Nachteile dadurch feststellen, außer dass der Ordner nicht regelmässig komplett geleert wird, es bleiben irgendwie immer Dateien zurück, die WP hinterlässt... Muss da noch mal schauen woran das liegen könnte!

    Gruß blog_micky

    Respice post te, hominem te esse memento! (Sueton „Iulius“ 51)

  • Ich bekomme folgenden Fehlercode:

    Und die dazugehörende Install.php

    Lösungsvorschläge ?

    Die install.php ist teil einer modifizierten WP Installation , die von Rockettheme um genau zu sein. Daher befindet sie sich im WP-Content Ordner was ja Sinn zu macen scheint.

  • Und was war an dieser Antwort (vor allen Dingen am 2. Teil) so missverständlich? Wenn der Hoster die Funktionen deaktiviert hat, dann kannst Du hier noch 50 Threads zu ein und der selben Problematik aufmachen. Da kann Dir dann nur der Hoster helfen! Zumal ich nicht nachvollziehen kann, warum Du Dein Problem gerade in diesem Thread nochmal unterbringst!?

    Einmal editiert, zuletzt von mfitzen (15. Oktober 2010 um 16:38)

  • Es hatte wenig mit dem Hoster zu tun.

    Das Problem ist gelöst siehe: http://www.thatsgaming.de

    Der config.php haben die Zeilen:

    putenv('TMPDIR=/var/www/web418/phptmp'); define('WP_TEMP_DIR', '/var/www/web418/phptmp');

    gefehlt.

    War das soo schwer ?

    Mein Gott. Das ist mein 2. Beitrag zum Thema und somit auch der letzte.

  • Okay sorry, dann lag ich falsch. Passiert mir hin und wieder schonmal. Und ja, scheinbar war es schwer (zumindest für mich), denn ansonsten hätte ich die richtige Lösung schon längst genannt.

  • Hat ja schlussendlich noch ein gutes Ende gefunden.

    Vileicht sollte man das irgendwie aufführen, ist ja jezt nicht soo leicht darauf zu kommen.

    Vorallem die, die ihren Host bei Alfahosting haben " der zwar ein stets SEHR gutes angebot bietet" was WP anbelangt aber nicht sehr freundlich ist.

    Die sind da eher Joomla! getrimmt.

    Mit freundlichen Grüßen
    loller7 aka. NerooLive :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!