Hello,
Ich frage mich nur, warum PHP, was mit "apt-get install" auf dem Debian installiert wurde und in der Version 5.2.0 noch nicht sooo alt ist, mit diesen Voreinstellungen kommt.
Wieso sollte es das nicht? Sessions sind nun ein mal temporäre Daten und normalerweise bootet man ja einen Server eher selten neu.
Weil PHP den angegebenen Pfad nicht selbst erzeugt, wenn er nicht vorhanden ist.
/tmp/sessions/others steht im session.save_path drin.
Nach dem Neustart ist aber nur noch
/tmp
vorhanden.
Da fällt PHP dann auf die Schnauze.
;; session.save_path = "N;/path"
; session.save_path = "/tmp/sessions/others"
session.save_path = "/sessions/others"
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
; You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
; use subdirectories for session storage
Den Pfad, der im Session-Save-Path genannt wird, legt es nicht automatisch an.
-----------------------------------
http://de2.php.net/manual/de/ref.session.php#ini.session.save-path
session.save_path string
session.save_path definiert das Argument, das an die Speicherprozedur übergeben wird. Wenn Sie die standardmäßige files Prozedur wählen, ist das der Pfad, unter dem die Dateien erzeugt werden. Grundeinstellung /tmp. Siehe auch session_save_path().
Für diese Anweisung gibt es ein optionales Argument N, das die Anzahl der Verzeichnisebenen bestimmt, über die Ihre Session-Dateien verteilt werden. Wird sie zum Beispiel auf '5;/tmp' gesetzt, kann das das Anlegen einer Session-Datei und Speicherstelle wie /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If bewirken. Um N verwenden zu können, müssen Sie alle diese Verzeichnisse vorher anlegen. In ext/session gibt es für diesen Zweck ein kleines Shell-Script namens mod_files.sh. Beachten Sie, dass die automatische 'Müllentsorgung' (garbage collection) nicht durchgeführt wird, wenn N verwendet wird und größer 0 ist (für weitere Informationen siehe eine Kopie der php.ini). Achten Sie bei der Verwendung von N außerdem darauf, dass Sie session.save_path zwischen Anführungsstriche setzen, weil der Trenner (;) in der php.ini auch für Kommentare benutzt wird.
Warnung
Wenn Sie ein Verzeichnis gewählt haben, für das jeder Leserechte hat, wie das z.B. bei /tmp (Grundeinstellung) der Fall ist, könnten andere Serverbenutzer mit Hilfe der Dateiliste dieses Verzeichnisses Ihre Sessions entführen.
Anmerkung: Vor PHP 4.3.6 mussten Benutzer von Windows diese Variable ändern, um die Session-Funktionen von PHP nutzen zu können. Es muss ein gültiger Pfad, z.B. c:/temp, angegeben werden.
-----------------------------------
PHP-Sessions gehören folglich für jeden Virt Host in ein eigenes Verzeichnis, dass nach Erzeugung dem Webserver als Owner übertragen wird. Die Rechte sind auf rwx --- --- zu setzen, da Sessions i.d.R. nicht datengesichert werden müssen.
Anderenfalls ist der Datensicherungsgruppe Lese- und Scanrecht (rx) zu gewähren.
Dies alles geschieht (oft) automatisiert bei der Einrichtung eines Virt Host.
Auch open_basedir ist dann entsprechend zu ergänzen.
Der eigentliche Mangel liegt meiner Meinung nach da bei PHP.
Vielleicht habe ich ja auch etwas übersehen.
drwxrwxrwt 5 root root 144 2007-11-02 18:35 tmp
Aber in tmp dürfen, wie man sieht, alle schreiben.
Wenn PHP also versucht hätte, hier einen kompletten Pfad anzulegen, dann hätte das auch geklappt.
Und nun speziell an den Schisser mit der vollen Hose:
Wenn ich in das Startscript des Servers hineinschauen will und dies anpassen möchte, dann wahrscheinlich eher, um das Anlegen der benötigten Pfade NACH DEM LÖSCHEN nachzubessern, und nicht eine sinnvolle Sache, wie das Aufräumen von /tmp-Dateien zu unterbinden. Aber Nachdenken ist scheinbar nicht Deine Stärke, nur Nachtragen...
Frage mich aber, wie ich das dann mit den Virt-Host-Einrichtungen harmonisieren soll.
Die beste Lösung wäre also, PHP an dieser Stelle zu "reparieren".
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
