Z linii poleceń po prostu wykonaj php -r 'echo session_save_path (), "\ n";'
Richard Ayotte
Lokalizacja jest ustawiona, a nie „domyślna” w systemie Ubuntu 10.10. Czysta kompilacja PHP może ci to dać, ale nie pod żadnymi wersjami Debian / Ubuntu, z których korzystałem. Pytanie orig dotyczy Ubuntu 10.10. Po prostu wyszukaj to w wierszu poleceń na ostatni komentarz (lub moją odpowiedź), ponieważ lokalizacja może różnić się od 'default' / blank / tmp w zależności od używanej dystrybucji Linuksa ..
bshea
4
Ostrzeżenie!! Myślę, że uruchomienie php -r 'echo session_save_path (), "\ n";' jak wspomniano powyżej, użyje innego pliku php.ini (być może /etc/php/7.0/cli/php.ini zamiast /etc/php/7.0/apache2/php.ini) i dlatego może mieć inną wartość „ session.save_path "
Magmatic
@Magmatic ma rację, są DWA php.inipliki, php_info()powiedzą ci, który z nich jest używany podczas bieżącej ewaluacji i locate php.inipomogą ci je znaleźć
Jonathan
Uwaga (zgodnie z 2 ostatnimi komentarzami): Korzystanie z wersji CLI PHP (wiersz poleceń) może dać różne wyniki w zależności od dystrybucji i kompilacji. Najważniejsze jest to, że NIE jest to wersja Apache. (Chociaż pliki INI mogą być identyczne, jeśli chodzi o ścieżki sesji). Lepiej zajrzeć do odpowiedniego pliku PHP.INI Apache w / grep.
bshea
69
Najpierw sprawdź wartość session.save_pathużycia ini_get('session.save_path')lub phpinfo(). Jeśli to nie jest puste, pokaże, gdzie są zapisane pliki sesji. W wielu scenariuszach jest domyślnie pusty, w takim przypadku przeczytaj:
Na maszynach Ubuntu lub Debian, jeśli session.save_pathnie jest ustawione, pliki sesji są zapisywane w formacie /var/lib/php5.
W systemach RHEL i CentOS, jeśli session.save_pathnie jest ustawione, pliki sesji będą zapisywane w formacie/var/lib/php/session
Myślę, że jeśli kompilujesz PHP ze źródła, to gdy session.save_pathnie jest ustawione, pliki sesji będą zapisywane w /tmp(chociaż sam tego nie testowałem).
Używam Ubuntu 12.04.5 LTS iz jakiegoś powodu (nic nie zmieniłem php.ini) moje sesje są nieaktualne/var/lib/php5/sessions
Felipe
"Nie ustawiony"? Jest ustawiony - ale zakomentowany w php.ini. Nie oznacza to, że nie ma wartości lub nie jest „ustawione”. Z linii poleceń po prostu wykonaj: php -i | grep session.save_pathścieżkę zapisu sesji dla CLI (i prawdopodobnie Apache). Ponadto dana php.ininormalnie pokaże `` domyślną '' ścieżkę - jest po prostu zakomentowana.
bshea
I tak: jeśli nic nie zostało wkompilowane jako ścieżka domyślna (nie dotyczy to większości dystrybucji), zostanie użyty pusty element (domyślnie kompilacja). Który następnie użyje obszaru tymczasowego systemu (normalnie /tmp) jako wartości rezerwowej / domyślnej. Proszę odnieść się do php.net/manual/en/…
bshea
@bshea, przez „nie ustawiono”, miałam na myśli ustawiony na pusty ciąg
Rich
DOMYŚLNIE Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Komentarz nie oznacza, że mam na myśli tylko „nieustawione”. Mieści się on oczywiście do czegoś innego niż BLANK (/ tmp) .. i nie jest pustym / null łańcuch
bshea
16
Jeśli nie masz pewności co do skompilowanego domyślnego dla session.save_path, spójrz na odpowiedni plik php.ini.
Zwykle spowoduje to wyświetlenie zakomentowanej wartości domyślnej.
Stare / nowe php.inilokalizacje Ubuntu / Debian :
Starsze php5 z Apache: /etc/php5/apache2/php.ini
Starsze php5 z NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ z Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ z NGINX + FPM - /etc/php/*/fpm/php.ini*
* /*/= bieżące wersje PHP zainstalowane w systemie.
Wersja „cli” (wiersz poleceń) ma php.inizwykle te same wartości domyślne, co wersje Apache2 / FPM (przynajmniej jeśli chodzi o session.save_path). Możesz również użyć podobnego polecenia, aby wyświetlić na stronie internetowej aktualne ustawienia modułu PHP serwera WWW i użyć wget / curl do pobrania informacji. Istnieje wiele postów dotyczących phpinfo()wykorzystania w tym zakresie. Ale szybciej jest po prostu użyć interfejsu PHP lub greppoprawnie php.iniwyświetlić jego wartość domyślną.
EDYCJA: Per @aesede komentarz -> Dodano php -i. Dzięki
Dlaczego plik / var / lib / php5 / nigdy nie jest zapisywalny i wymaga chmodding / chowning. Czy PHP nie powinno ustawiać lokalizacji sesji, która jest domyślnie zapisywalna?
CMCDragonkai
2
Wyobrażam sobie, że na współdzielonych hostach inni ludzie nie mogą próbować przechwytywać sesji ludzi. To znaczy napisz do sesji, mówiąc „nazwa użytkownika: admin” i ustawiając dowolny identyfikator sesji, a następnie ustawiając PHPSESSID na to. Bardzo łatwo byłoby uzyskać dostęp do czegoś takiego jak Drupal lub Wordpress na współdzielonym środowisku hosta. (Po prostu zalogujesz się jako konto administratora)
Mattisdada
4
Miałem ten sam problem ze znalezieniem prawidłowej ścieżki dla sesji na komputerze Mac. W sumie dowiedziałem się, że CLI PHP ma inny katalog tymczasowy niż moduł Apache: używany jest Apache /var/tmp, podczas gdy CLI używa czegoś podobnego /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Ale obie strony sys_get_temp_dir()dały mi właściwą ścieżkę, gdy session.save_pathjest pusta. Korzystanie z PHP 5.5.4.
Chociaż dokumentacja PHP mówi, że "/ tmp" jest domyślnym, wszystkie dystrybucje Linuksa, których próbowałem, nie umieszczają plików sesji /tmp- czy znasz jakieś, które to robią? Czy tak jest, jeśli budujesz PHP ze źródła? Gdy „session.save_path” jest pusta, może być trudno ustalić, gdzie znajdują się pliki (stąd to pytanie, jak podejrzewam)
Rich
0
Jedyną pewną opcją znalezienia bieżącej session.save_pathwartości jest zawsze sprawdzenie phpinfo()dokładnie w środowisku, w którym chcesz znaleźć katalog przechowywania sesji.
Przyczyna: mogą się zmienić różne rzeczy session.save_path, albo przez nadpisanie php.iniwartości, albo ustawienie jej w czasie wykonywania za pomocą ini_set('session.save_path','/path/to/folder');. Na przykład panele zarządzania serwerem WWW, takie jak ISPConfig, Plesk itp., Często dostosowują to, aby nadać każdej witrynie własny katalog z plikami sesji.
<?php phpinfo() ?>
i poszukajsession.save_path
.Odpowiedzi:
Wartością domyślną
session.save_path
jest to,""
które będzie oceniane w katalogu tymczasowym twojego systemu. Zobacz ten komentarz na https://bugs.php.net/bug.php?id=26757 stwierdzający:Możesz użyć,
sys_get_temp_dir
aby zwrócić ścieżkę katalogu używaną dla plików tymczasowychAby znaleźć ścieżkę zapisu bieżącej sesji, możesz użyć
session_save_path()
- Pobierz i / lub ustaw ścieżkę zapisu bieżącej sesjiZapoznaj się z tą odpowiedzią, aby dowiedzieć się, jaka jest ścieżka tymczasowa, gdy ta funkcja zwraca pusty ciąg.
źródło
php.ini
pliki,php_info()
powiedzą ci, który z nich jest używany podczas bieżącej ewaluacji ilocate php.ini
pomogą ci je znaleźćNajpierw sprawdź wartość
session.save_path
użyciaini_get('session.save_path')
lubphpinfo()
. Jeśli to nie jest puste, pokaże, gdzie są zapisane pliki sesji. W wielu scenariuszach jest domyślnie pusty, w takim przypadku przeczytaj:Na maszynach Ubuntu lub Debian, jeśli
session.save_path
nie jest ustawione, pliki sesji są zapisywane w formacie/var/lib/php5
.W systemach RHEL i CentOS, jeśli
session.save_path
nie jest ustawione, pliki sesji będą zapisywane w formacie/var/lib/php/session
Myślę, że jeśli kompilujesz PHP ze źródła, to gdy
session.save_path
nie jest ustawione, pliki sesji będą zapisywane w/tmp
(chociaż sam tego nie testowałem).źródło
php.ini
) moje sesje są nieaktualne/var/lib/php5/sessions
php -i | grep session.save_path
ścieżkę zapisu sesji dla CLI (i prawdopodobnie Apache). Ponadto danaphp.ini
normalnie pokaże `` domyślną '' ścieżkę - jest po prostu zakomentowana./tmp
) jako wartości rezerwowej / domyślnej. Proszę odnieść się do php.net/manual/en/…/etc/php/7.0/*/php.ini
->;session.save_path = "/var/lib/php/sessions"
- Komentarz nie oznacza, że mam na myśli tylko „nieustawione”. Mieści się on oczywiście do czegoś innego niż BLANK (/ tmp) .. i nie jest pustym / null łańcuchJeśli nie masz pewności co do skompilowanego domyślnego dla
session.save_path
, spójrz na odpowiedni plikphp.ini
.Zwykle spowoduje to wyświetlenie zakomentowanej wartości domyślnej.
Stare / nowe
php.ini
lokalizacje Ubuntu / Debian :Starsze php5 z Apache:
/etc/php5/apache2/php.ini
Starsze php5 z NGINX + FPM:
/etc/php5/fpm/php.ini
Ubuntu 16+ z Apache:
/etc/php/*/apache2/php.ini
*Ubuntu 16+ z NGINX + FPM -
/etc/php/*/fpm/php.ini
**
/*/
= bieżące wersje PHP zainstalowane w systemie.Aby wyświetlić wersję PHP używaną w Apache:
Ponieważ PHP 7.3 jest wersją działającą w tym przykładzie, użyłbyś jej do
php.ini
:Lub połączona jednowarstwowa:
$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
Wynik:
;session.save_path = "/var/lib/php/sessions"
Lub użyj samego PHP do pobrania wartości za pomocą środowiska "cli" (zobacz UWAGA poniżej):
$ php -r 'echo session_save_path() . "\n";' /var/lib/php/sessions $
Będą też działać:
php -i | grep session.save_path php -r 'echo phpinfo();' | grep session.save_path
UWAGA:
Wersja „cli” (wiersz poleceń) ma
php.ini
zwykle te same wartości domyślne, co wersje Apache2 / FPM (przynajmniej jeśli chodzi osession.save_path
). Możesz również użyć podobnego polecenia, aby wyświetlić na stronie internetowej aktualne ustawienia modułu PHP serwera WWW i użyć wget / curl do pobrania informacji. Istnieje wiele postów dotyczącychphpinfo()
wykorzystania w tym zakresie. Ale szybciej jest po prostu użyć interfejsu PHP lubgrep
poprawniephp.ini
wyświetlić jego wartość domyślną.EDYCJA: Per @aesede komentarz -> Dodano
php -i
. Dziękiźródło
php -i
w CLI, aby uzyskać odpowiednik phpinfo ().Oprócz tego inną popularną lokalizacją domyślną
/tmp/
jest/var/lib/php5/
źródło
Miałem ten sam problem ze znalezieniem prawidłowej ścieżki dla sesji na komputerze Mac. W sumie dowiedziałem się, że CLI PHP ma inny katalog tymczasowy niż moduł Apache: używany jest Apache
/var/tmp
, podczas gdy CLI używa czegoś podobnego/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
. Ale obie stronysys_get_temp_dir()
dały mi właściwą ścieżkę, gdysession.save_path
jest pusta. Korzystanie z PHP 5.5.4.źródło
Żadne z powyższych nie działało dla mnie przy użyciu repozytorium IUS dla CentOS 7 z PHP 7.2:
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
Jednak sesje nie zostały zapisane w
/tmp
folderze, ale w/var/lib/php/mod_php/session/
folderze:ls /var/lib/php/mod_php/session/ > sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703 > sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
źródło
Wierzę, że jest w / tmp /. Sprawdź jednak swoją funkcję phpinfo, powinna gdzieś tam być session.save_path.
źródło
/tmp
- czy znasz jakieś, które to robią? Czy tak jest, jeśli budujesz PHP ze źródła? Gdy „session.save_path” jest pusta, może być trudno ustalić, gdzie znajdują się pliki (stąd to pytanie, jak podejrzewam)Jedyną pewną opcją znalezienia bieżącej
session.save_path
wartości jest zawsze sprawdzeniephpinfo()
dokładnie w środowisku, w którym chcesz znaleźć katalog przechowywania sesji.Przyczyna: mogą się zmienić różne rzeczy
session.save_path
, albo przez nadpisaniephp.ini
wartości, albo ustawienie jej w czasie wykonywania za pomocąini_set('session.save_path','/path/to/folder');
. Na przykład panele zarządzania serwerem WWW, takie jak ISPConfig, Plesk itp., Często dostosowują to, aby nadać każdej witrynie własny katalog z plikami sesji.źródło