Jaka jest domyślna lokalizacja plików sesji podczas instalacji Apache / PHP w systemie Ubuntu 10.10?
Jaka jest domyślna lokalizacja plików sesji podczas instalacji Apache / PHP w systemie Ubuntu 10.10?
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:
Nowym domyślnym parametrem save_path w nadchodzącym wydaniu (sic) będzie pusty ciąg, który spowoduje sondowanie katalogu tymczasowego.
Możesz użyć, sys_get_temp_dir
aby zwrócić ścieżkę katalogu używaną dla plików tymczasowych
Aby znaleźć ścieżkę zapisu bieżącej sesji, możesz użyć
Zapoznaj się z tą odpowiedzią, aby dowiedzieć się, jaka jest ścieżka tymczasowa, gdy ta funkcja zwraca pusty ciąg.
php.ini
pliki, php_info()
powiedzą ci, który z nich jest używany podczas bieżącej ewaluacji i locate php.ini
pomogą ci je znaleźć
Najpierw sprawdź wartość session.save_path
uż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_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).
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 dana php.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ńcuch
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.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:
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
Ponieważ PHP 7.3 jest wersją działającą w tym przykładzie, użyłbyś jej do php.ini
:
$ grep "session.save_path" /etc/php/7.3/apache2/php.ini
;session.save_path = "/var/lib/php/sessions"
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 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 grep
poprawnie php.ini
wyświetlić jego wartość domyślną.
EDYCJA: Per @aesede komentarz -> Dodano php -i
. Dzięki
php -i
w CLI, aby uzyskać odpowiednik phpinfo ().
Oprócz tego inną popularną lokalizacją domyślną /tmp/
jest/var/lib/php5/
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_path
jest pusta. Korzystanie z PHP 5.5.4.
Ż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
Wierzę, że jest w / tmp /. Sprawdź jednak swoją funkcję phpinfo, powinna gdzieś tam być session.save_path.
/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 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.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.
<?php phpinfo() ?>
i poszukajsession.save_path
.