Der neue Standardwert für save_path in der kommenden Veröffentlichung (sic) ist die leere Zeichenfolge, wodurch das temporäre Verzeichnis überprüft wird.
Und von der Kommandozeile aus machen Sie einfach php -r 'echo session_save_path (), "\ n";'
Richard Ayotte
Der Speicherort ist unter Ubuntu 10.10 festgelegt und nicht "Standard". Ein sauberer Build von PHP kann Ihnen dies geben, aber nicht unter Debian / Ubuntu-Builds, die ich verwendet habe. Die ursprüngliche Frage bezieht sich auf Ubuntu 10.10. Schauen Sie einfach in der Befehlszeile nach dem letzten Kommentar (oder meiner Antwort) nach, da der Speicherort je nach verwendeter Linux-Distribution von 'default' / blank / tmp abweichen kann.
bshea
4
Warnung!! Ich denke, php -r 'echo session_save_path (), "\ n";' Wie oben erwähnt, wird eine andere php.ini-Datei verwendet (möglicherweise /etc/php/7.0/cli/php.ini anstelle von /etc/php/7.0/apache2/php.ini) und daher möglicherweise einen anderen Wert von " session.save_path "
Magmatisch
@Magmatic ist korrekt, es gibt ZWEI php.iniDateien, die php_info()Ihnen sagen, welche während der aktuellen Evaluierung verwendet wird, und locate php.iniIhnen helfen, sie zu finden
Jonathan
Bitte beachten Sie (gemäß den letzten 2 Kommentaren): Die Verwendung der CLI-PHP-Version (Befehlszeile) kann je nach Distribution und Kompilierung zu unterschiedlichen Ergebnissen führen. Die Hauptsache ist, dass es NICHT die Apache-Version ist. (Obwohl die INI-Dateien in Bezug auf Sitzungspfade identisch sein können). Besser in / grep richtig Apache PHP.INI suchen.
bshea
69
Überprüfen Sie zunächst den Wert session.save_pathmit ini_get('session.save_path')oder phpinfo(). Wenn dies nicht leer ist, wird angezeigt, wo die Sitzungsdateien gespeichert sind. In vielen Szenarien ist es standardmäßig leer. In diesem Fall lesen Sie weiter:
Wenn dies auf Ubuntu- oder Debian-Computern session.save_pathnicht festgelegt ist, werden die Sitzungsdateien in gespeichert /var/lib/php5.
Wenn dies auf RHEL- und CentOS-Systemen session.save_pathnicht festgelegt ist, werden Sitzungsdateien in gespeichert/var/lib/php/session
Ich denke, wenn Sie PHP aus dem Quellcode kompilieren session.save_path, werden Sitzungsdateien gespeichert , wenn dies nicht festgelegt ist /tmp(ich habe dies jedoch nicht selbst getestet).
Ich verwende Ubuntu 12.04.5 LTS und aus irgendeinem Grund (ich habe nichts geändert php.ini) sind meine Sitzungen unter/var/lib/php5/sessions
Felipe
"Nicht eingestellt"? Es ist gesetzt - aber in php.ini auskommentiert. Dies bedeutet nicht, dass es keinen Wert hat oder nicht 'gesetzt' ist. Führen Sie in der Befehlszeile einfach Folgendes aus: php -i | grep session.save_pathFür den Speicherpfad für CLI-Sitzungen (und wahrscheinlich für Apache). Außerdem zeigt ein gegebener php.iniPfad normalerweise den 'Standard'-Pfad an - er ist nur auskommentiert.
bshea
Und ja: Wenn nichts als Standardpfad kompiliert wurde (was bei den meisten Distributionen nicht der Fall ist), wird ein Leerzeichen verwendet (Standard kompilieren). Welches würde dann den Systemtemperaturbereich (normalerweise /tmp) als Fallback / Standardwert verwenden. Bitte beziehen Sie sich auf php.net/manual/en/…
bshea
@bshea, mit "nicht gesetzt" meinte ich auf die leere Zeichenfolge gesetzt
Rich
STANDARD Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Ein Kommentar bedeutet nicht, dass 'nicht gesetzt' alles ist, was ich meine. Es ist offensichtlich auf etwas anderes als 'leer' (/ tmp) gesetzt .. und ist KEINE leere / null Zeichenfolge
bshea
16
Wenn Sie sich nicht sicher sind, welche Standardeinstellung für kompiliert wurde session.save_path, sehen Sie sich die entsprechenden Informationen an php.ini.
Normalerweise wird hier der auskommentierte Standardwert angezeigt.
Ubuntu / Debian alte / neue php.iniStandorte:
Älteres PHP5 mit Apache: /etc/php5/apache2/php.ini
Älteres PHP5 mit NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ mit Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ mit NGINX + FPM - /etc/php/*/fpm/php.ini*
* /*/= die aktuell auf dem System installierten PHP-Versionen.
So zeigen Sie die unter Apache verwendete PHP-Version an :
Die 'cli'-Version (Befehlszeilenversion) von hat php.ininormalerweise die gleichen Standardwerte wie die Apache2 / FPM-Versionen (zumindest bis zur session.save_path). Sie können auch einen ähnlichen Befehl verwenden, um die aktuellen PHP-Moduleinstellungen des Webservers auf einer Webseite wiederzugeben und die Informationen mit wget / curl abzurufen. Es gibt viele Beiträge zur phpinfo()Verwendung in dieser Hinsicht. Es ist jedoch schneller, nur die PHP-Schnittstelle zu verwenden oder den Standardwert grepkorrekt php.inianzuzeigen.
BEARBEITEN: Per @ aesede Kommentar -> Hinzugefügt php -i. Vielen Dank
Wie kommt es, dass / var / lib / php5 / niemals beschreibbar ist und chmodding / chowning erfordert? Sollte PHP nicht den Sitzungsort festlegen, der standardmäßig beschreibbar ist?
CMCDragonkai
2
Ich stelle mir vor, dass es auf gemeinsam genutzten Hosts so ist, dass andere Leute nicht versuchen können, die Sitzungen der Leute zu entführen. Das heißt, schreiben Sie in die Sitzung mit dem Namen "Benutzername: admin", legen Sie eine beliebige Sitzungs-ID fest und setzen Sie dann PHPSESSID darauf. Es wäre sehr einfach, auf etwas wie Drupal oder Wordpress in einer gemeinsam genutzten Host-Umgebung zuzugreifen. (Es würde Sie nur als Administratorkonto anmelden)
Mattisdada
4
Ich hatte die gleichen Probleme, den richtigen Pfad für Sitzungen auf einem Mac zu finden. Alles in allem fand ich heraus, dass die CLI PHP ein anderes temporäres Verzeichnis als das Apache-Modul hat: Apache verwendet /var/tmp, während CLI so etwas verwendet /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Aber in beide Richtungen sys_get_temp_dir()habe ich den richtigen Weg gefunden, wenn er session.save_pathleer ist. Verwenden von PHP 5.5.4.
Obwohl in den PHP-Dokumenten angegeben ist, dass "/ tmp" die Standardeinstellung ist, legen alle Linux-Distributionen, die ich ausprobiert habe, die Sitzungsdateien nicht ab /tmp- kennen Sie welche? Ist das der Fall, wenn Sie PHP aus dem Quellcode erstellen? Wenn der "session.save_path" leer ist, kann es schwierig sein herauszufinden, wohin die Dateien gehen (daher diese Frage, vermute ich)
Rich
0
Die einzige todsichere Option, um den aktuellen session.save_pathWert zu ermitteln, besteht darin, phpinfo()genau in der Umgebung zu suchen, in der Sie das Sitzungsspeicherverzeichnis ermitteln möchten.
Grund: Es kann alle möglichen Dinge geben, die sich ändern session.save_path, entweder durch Überschreiben des php.iniWerts oder durch Festlegen zur Laufzeit mit ini_set('session.save_path','/path/to/folder');. Beispielsweise passen Webserver-Verwaltungsbereiche wie ISPConfig, Plesk usw. dies häufig an, um jeder Website ein eigenes Verzeichnis mit Sitzungsdateien zuzuweisen.
<?php phpinfo() ?>
und suche nach demsession.save_path
.Antworten:
Der Standardwert
session.save_path
ist festgelegt,""
der im temporären Verzeichnis Ihres Systems ausgewertet wird. Siehe diesen Kommentar unter https://bugs.php.net/bug.php?id=26757 mit folgenden Angaben:Sie können
sys_get_temp_dir
den Verzeichnispfad zurückgeben, der für temporäre Dateien verwendet wirdUm den aktuellen Sitzungsspeicherpfad zu finden , können Sie verwenden
session_save_path()
- Den aktuellen Sitzungsspeicherpfad abrufen und / oder festlegenIn dieser Antwort erfahren Sie, wie der temporäre Pfad lautet, wenn diese Funktion eine leere Zeichenfolge zurückgibt.
quelle
php.ini
Dateien, diephp_info()
Ihnen sagen, welche während der aktuellen Evaluierung verwendet wird, undlocate php.ini
Ihnen helfen, sie zu findenÜberprüfen Sie zunächst den Wert
session.save_path
mitini_get('session.save_path')
oderphpinfo()
. Wenn dies nicht leer ist, wird angezeigt, wo die Sitzungsdateien gespeichert sind. In vielen Szenarien ist es standardmäßig leer. In diesem Fall lesen Sie weiter:Wenn dies auf Ubuntu- oder Debian-Computern
session.save_path
nicht festgelegt ist, werden die Sitzungsdateien in gespeichert/var/lib/php5
.Wenn dies auf RHEL- und CentOS-Systemen
session.save_path
nicht festgelegt ist, werden Sitzungsdateien in gespeichert/var/lib/php/session
Ich denke, wenn Sie PHP aus dem Quellcode kompilieren
session.save_path
, werden Sitzungsdateien gespeichert , wenn dies nicht festgelegt ist/tmp
(ich habe dies jedoch nicht selbst getestet).quelle
php.ini
) sind meine Sitzungen unter/var/lib/php5/sessions
php -i | grep session.save_path
Für den Speicherpfad für CLI-Sitzungen (und wahrscheinlich für Apache). Außerdem zeigt ein gegebenerphp.ini
Pfad normalerweise den 'Standard'-Pfad an - er ist nur auskommentiert./tmp
) als Fallback / Standardwert verwenden. Bitte beziehen Sie sich auf php.net/manual/en/…/etc/php/7.0/*/php.ini
->;session.save_path = "/var/lib/php/sessions"
- Ein Kommentar bedeutet nicht, dass 'nicht gesetzt' alles ist, was ich meine. Es ist offensichtlich auf etwas anderes als 'leer' (/ tmp) gesetzt .. und ist KEINE leere / null ZeichenfolgeWenn Sie sich nicht sicher sind, welche Standardeinstellung für kompiliert wurde
session.save_path
, sehen Sie sich die entsprechenden Informationen anphp.ini
.Normalerweise wird hier der auskommentierte Standardwert angezeigt.
Ubuntu / Debian alte / neue
php.ini
Standorte:Älteres PHP5 mit Apache:
/etc/php5/apache2/php.ini
Älteres PHP5 mit NGINX + FPM:
/etc/php5/fpm/php.ini
Ubuntu 16+ mit Apache:
/etc/php/*/apache2/php.ini
*Ubuntu 16+ mit NGINX + FPM -
/etc/php/*/fpm/php.ini
**
/*/
= die aktuell auf dem System installierten PHP-Versionen.So zeigen Sie die unter Apache verwendete PHP-Version an :
Da PHP 7.3 die Version ist, die für dieses Beispiel ausgeführt wird, würden Sie diese für Folgendes verwenden
php.ini
:Oder kombinierter Einzeiler:
$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
Ergebnis:
;session.save_path = "/var/lib/php/sessions"
Oder verwenden Sie PHP selbst, um den Wert mithilfe der "cli" -Umgebung abzurufen (siehe HINWEIS unten):
$ php -r 'echo session_save_path() . "\n";' /var/lib/php/sessions $
Diese funktionieren auch:
php -i | grep session.save_path php -r 'echo phpinfo();' | grep session.save_path
HINWEIS:
Die 'cli'-Version (Befehlszeilenversion) von hat
php.ini
normalerweise die gleichen Standardwerte wie die Apache2 / FPM-Versionen (zumindest bis zursession.save_path
). Sie können auch einen ähnlichen Befehl verwenden, um die aktuellen PHP-Moduleinstellungen des Webservers auf einer Webseite wiederzugeben und die Informationen mit wget / curl abzurufen. Es gibt viele Beiträge zurphpinfo()
Verwendung in dieser Hinsicht. Es ist jedoch schneller, nur die PHP-Schnittstelle zu verwenden oder den Standardwertgrep
korrektphp.ini
anzuzeigen.BEARBEITEN: Per @ aesede Kommentar -> Hinzugefügt
php -i
. Vielen Dankquelle
php -i
zu Ihrer Information, Sie können in CLI tun , um phpinfo () Äquivalent zu erhalten.Ein weiterer gängiger Standardspeicherort
/tmp/
ist/var/lib/php5/
quelle
Ich hatte die gleichen Probleme, den richtigen Pfad für Sitzungen auf einem Mac zu finden. Alles in allem fand ich heraus, dass die CLI PHP ein anderes temporäres Verzeichnis als das Apache-Modul hat: Apache verwendet
/var/tmp
, während CLI so etwas verwendet/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
. Aber in beide Richtungensys_get_temp_dir()
habe ich den richtigen Weg gefunden, wenn ersession.save_path
leer ist. Verwenden von PHP 5.5.4.quelle
Keines der oben genannten Verfahren hat bei mir mit dem IUS-Repo für CentOS 7 mit PHP 7.2 funktioniert:
php -v > PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS ) php -r 'echo session_save_path(), "\n"; > php -r 'echo sys_get_temp_dir(), "\n";' > /tmp
Sitzungen wurden jedoch nicht im
/tmp
Ordner gespeichert , sondern im/var/lib/php/mod_php/session/
Ordner:ls /var/lib/php/mod_php/session/ > sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703 > sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
quelle
Ich glaube es ist in / tmp /. Überprüfen Sie Ihre phpinfo-Funktion, dort sollte irgendwo session.save_path stehen.
quelle
/tmp
- kennen Sie welche? Ist das der Fall, wenn Sie PHP aus dem Quellcode erstellen? Wenn der "session.save_path" leer ist, kann es schwierig sein herauszufinden, wohin die Dateien gehen (daher diese Frage, vermute ich)Die einzige todsichere Option, um den aktuellen
session.save_path
Wert zu ermitteln, besteht darin,phpinfo()
genau in der Umgebung zu suchen, in der Sie das Sitzungsspeicherverzeichnis ermitteln möchten.Grund: Es kann alle möglichen Dinge geben, die sich ändern
session.save_path
, entweder durch Überschreiben desphp.ini
Werts oder durch Festlegen zur Laufzeit mitini_set('session.save_path','/path/to/folder');
. Beispielsweise passen Webserver-Verwaltungsbereiche wie ISPConfig, Plesk usw. dies häufig an, um jeder Website ein eigenes Verzeichnis mit Sitzungsdateien zuzuweisen.quelle
Je nach Servertyp kann dies variieren. Um das Verzeichnis zu finden, suchen Sie in Ihrer php.ini-Datei nach Folgendem.
upload_tmp_dir = "c: / wamp / tmp"
Das Verzeichnis kann für Sie unterschiedlich sein.
quelle