Яке розташування файлів сеансів за замовчуванням під час встановлення Apache / PHP на Ubuntu 10.10?
Яке розташування файлів сеансів за замовчуванням під час встановлення Apache / PHP на Ubuntu 10.10?
Відповіді:
За замовчуванням session.save_path
встановлено значення, ""
яке буде оцінювати тимчасовий каталог вашої системи. Перегляньте цей коментар на https://bugs.php.net/bug.php?id=26757 із зазначенням:
Новим за замовчуванням для save_path у наступних версіях (sic) буде порожній рядок, що спричинить зондування тимчасового каталогу.
Ви можете використовувати sys_get_temp_dir
для повернення шляху до каталогу, який використовується для тимчасових файлів
Щоб знайти поточний шлях збереження сеансу, ви можете використовувати
Зверніться до цієї відповіді, щоб дізнатись, яким є тимчасовий шлях, коли ця функція повертає порожній рядок.
php.ini
файли, php_info()
вони скажуть вам, який із них використовується під час поточного огляду, і locate php.ini
допоможуть вам їх знайти
Спочатку перевірте значення session.save_path
використання ini_get('session.save_path')
або phpinfo()
. Якщо це значення не є порожнім, воно покаже, де зберігаються файли сеансу. У багатьох сценаріях він порожній за замовчуванням, і в цьому випадку читайте далі:
На машинах Ubuntu або Debian, якщо session.save_path
це не встановлено, файли сеансів зберігаються в /var/lib/php5
.
На системах RHEL та CentOS, якщо session.save_path
не встановлено, файли сеансів будуть збережені в/var/lib/php/session
Я думаю, що якщо ви компілюєте PHP із вихідного коду, тоді, коли session.save_path
це не встановлено, файли сеансів будуть збережені в /tmp
(хоча я сам це не тестував).
php.ini
) мої сеанси не працюють/var/lib/php5/sessions
php -i | grep session.save_path
для шляху збереження сеансу CLI (і, можливо, Apache). Крім того, дані php.ini
зазвичай відображатимуть шлях за замовчуванням - його просто закоментували.
/tmp
) як його резервне значення / значення за замовчуванням. Будь ласка, зверніться до php.net/manual/en/…
/etc/php/7.0/*/php.ini
-> ;session.save_path = "/var/lib/php/sessions"
- Коментар не означає "не встановлено" - це все, що я мав на увазі. Для нього, очевидно, встановлено щось інше, ніж "порожній" (/ tmp) .. і НЕ є порожнім / нульовим рядком
Якщо ви не впевнені у складеному типовому для session.save_path
, перегляньте відповідний php.ini
.
Зазвичай, це буде відображати прокоментоване значення за замовчуванням.
Старе / нове php.ini
розташування Ubuntu / Debian :
Старіші php5 з Apache: /etc/php5/apache2/php.ini
Старіші php5 з NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ з Apache: /etc/php/*/apache2/php.ini
*
Ubuntu 16+ з NGINX + FPM - /etc/php/*/fpm/php.ini
*
* /*/
= поточна версія (и) PHP, встановлена в системі.
Щоб показати версію PHP, що використовується в Apache:
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
Оскільки для цього прикладу запущена версія PHP 7.3, ви б використовували її для php.ini
:
$ grep "session.save_path" /etc/php/7.3/apache2/php.ini
;session.save_path = "/var/lib/php/sessions"
Або комбінований однокласний:
$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
Результат:
;session.save_path = "/var/lib/php/sessions"
Або використовуйте сам PHP, щоб захопити значення за допомогою середовища "cli" (див. ПРИМІТКУ нижче):
$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$
Вони також будуть працювати:
php -i | grep session.save_path
php -r 'echo phpinfo();' | grep session.save_path
ПРИМІТКА:
Версія 'cli' (командного рядка) php.ini
зазвичай має ті самі значення за замовчуванням, що і версії Apache2 / FPM (принаймні, наскільки session.save_path
). Ви також можете скористатися подібною командою для відображення поточних налаштувань модуля PHP веб-сервера на веб-сторінці та використання wget / curl для отримання інформації. Є багато публікацій щодо phpinfo()
використання в цьому відношенні. Але швидше просто використовувати інтерфейс PHP або grep
правильно вказати йогоphp.ini
вказав значення за замовчуванням.
РЕДАГУВАТИ: За коментарем @aesede -> Додано php -i
. Дякую
php -i
в CLI, щоб отримати еквівалент phpinfo ().
Окрім іншого, типовим місцем розташування /tmp/
є/var/lib/php5/
У мене були однакові проблеми з пошуком правильного шляху до сеансів на Mac. Загалом, я з'ясував, що CLI PHP має інший тимчасовий каталог, ніж модуль Apache: використовується Apache /var/tmp
, тоді як CLI використовує щось на зразок /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
. Але в обох напрямках, sys_get_temp_dir()
я отримав правильний шлях, коли session.save_path
порожньо. Використання PHP 5.5.4.
Жодне з перерахованого не працювало для мене, використовуючи репозиторій IUS для CentOS 7 з 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
Однак сеанси зберігались не в /tmp
папці, а в /var/lib/php/mod_php/session/
папці:
ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
Я вірю в його / tmp /. Хоча перевірте свою функцію phpinfo, вона повинна там писати session.save_path.
/tmp
- чи знаєте ви щось таке? Це так, якщо ви будуєте PHP з джерела? Коли "session.save_path" порожній, може бути складно зрозуміти, куди йдуть файли (отже, це питання, я підозрюю)
Єдиний надійний варіант, щоб знайти поточне session.save_path
значення, - це завжди перевіритиphpinfo()
саме те середовище, де ви хочете дізнатися каталог зберігання сеансів.
Причина: можуть змінюватися всілякі речі session.save_path
, або замінюючи php.ini
значення, або встановлюючи його під час виконання за допомогою ini_set('session.save_path','/path/to/folder');
. Наприклад, панелі управління веб-серверами, такі як ISPConfig, Plesk тощо, часто адаптують це, щоб надати кожному веб-сайту власний каталог із файлами сеансів.
<?php phpinfo() ?>
і шукайтеsession.save_path
.